From a644d73a7df42034b8216d1ef7869091fa23694d Mon Sep 17 00:00:00 2001
From: Patrick Plitzner
Date: Thu, 29 Oct 2015 07:17:22 +0100
Subject: [PATCH] Add image preview to media simple view
---
.../taxeditor/ui/element/ImageElement.java | 10 +++-
.../ui/section/media/MediaDetailElement.java | 48 +++++++++++++++++++
2 files changed, 57 insertions(+), 1 deletion(-)
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ImageElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ImageElement.java
index 92ab62f7f..698665eae 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ImageElement.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ImageElement.java
@@ -123,7 +123,7 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene
display.asyncExec(new Runnable(){
@Override
public void run() {
- if(! getLayoutComposite().isDisposed()){
+ if(! getLayoutComposite().isDisposed() && container!=null){
Event untypedEvent = new Event();
untypedEvent.widget = container;
PaintEvent event = new PaintEvent(untypedEvent);
@@ -160,6 +160,14 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene
return new Rectangle(containerBounds.x, containerBounds.y, width, height);
}
+ public void dispose(){
+ image.dispose();
+ image = null;
+ imageUri = null;
+ container.dispose();
+ container = null;
+ }
+
/** {@inheritDoc} */
@Override
public void paintControl(PaintEvent e) {
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java
index 750fc27ce..cf5abd377 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java
@@ -9,19 +9,24 @@
*/
package eu.etaxonomy.taxeditor.ui.section.media;
+import java.io.IOException;
import java.net.URI;
import java.util.List;
import java.util.Set;
+import org.apache.http.HttpException;
+
import eu.etaxonomy.cdm.model.media.Media;
import eu.etaxonomy.cdm.model.media.MediaRepresentation;
import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
import eu.etaxonomy.cdm.model.media.MediaUtils;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.ImageElement;
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
@@ -45,6 +50,15 @@ public class MediaDetailElement extends AbstractCdmDetailElement{
* Used to store the URI even if it is invalid and thus cannot be stored in CDM
*/
private String uriBuffer;
+ private ImageElement element_image;
+
+ private final Runnable postRunnable = new Runnable(){
+ @Override
+ public void run() {
+ AbstractUtility.reflowDetailsViewer();
+ AbstractUtility.reflowSupplementalViewer();
+ }
+ };
public MediaDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
super(formFactory, formElement);
@@ -75,6 +89,11 @@ public class MediaDetailElement extends AbstractCdmDetailElement{
if(uri==null){
uriBuffer=textUri.getText();
}
+ try {
+ loadImage(singleMediaRepresentationPart.getUri(), true);
+ } catch (Exception e) {
+ handleException(e);
+ }
}
}
@@ -99,6 +118,10 @@ public class MediaDetailElement extends AbstractCdmDetailElement{
if(textUri!=null){
removeElementsAndControls(textUri);
}
+ if(element_image!=null){
+ element_image.dispose();
+ element_image = null;
+ }
section_mediaRepresentation = formFactory.createMediaRepresentationSection(getConversationHolder(), parentFormElement, style);
section_mediaRepresentation.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
section_mediaRepresentation.setEntity(getEntity());
@@ -120,6 +143,13 @@ public class MediaDetailElement extends AbstractCdmDetailElement{
textUri.parseText();
}
textUri.getLayoutComposite().layout();
+
+ element_image = formFactory.createImageElement(parentFormElement, null, style);
+ try {
+ loadImage(singleMediaRepresentationPart.getUri(), false);
+ } catch (Exception e) {
+ handleException(e);
+ }
}
}
@@ -143,6 +173,24 @@ public class MediaDetailElement extends AbstractCdmDetailElement{
isAdvancedMediaView = false;
}
+ private void loadImage(URI uri, boolean updateDimensions) throws IOException, HttpException{
+ element_image.initImageUri(uri);
+ element_image.loadImage(postRunnable);
+ if(uri == null){
+ return;
+ }
+ }
+
+ private void handleException(Exception e) {
+ element_image.unloadImage(postRunnable);
+ element_image.loadImage(new Runnable(){
+ @Override
+ public void run() {
+ AbstractUtility.reflowDetailsViewer();
+ AbstractUtility.reflowSupplementalViewer();
+ }
+ });
+ }
public boolean isAdvancedMediaView() {
return isAdvancedMediaView;
}
--
2.34.1