From 46c38373850b9a239c0d7cb5c496a332b42b9173 Mon Sep 17 00:00:00 2001 From: Patric Plitzner Date: Fri, 24 Apr 2015 07:16:22 +0000 Subject: [PATCH] - Added browse button to media section which allows to choose the media from existing ones (#2385) --- .../taxeditor/ui/element/CdmFormFactory.java | 102 +++++++----------- .../AbstractEntityCollectionElement.java | 67 +++++++++--- .../ui/section/media/MediaMetaElement.java | 15 ++- 3 files changed, 105 insertions(+), 79 deletions(-) diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java index e2d81214b..59fdab650 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java @@ -2395,28 +2395,6 @@ public class CdmFormFactory extends FormToolkit { return section; } - /** - *

- * createEntityCollectionElement - *

- * - * @param removeListener - * a {@link org.eclipse.swt.events.SelectionListener} object. - * @param style - * a int. - * @param parentElement - * a - * {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection} - * object. - * @param versionableEntity - * a {@link eu.etaxonomy.cdm.model.common.IVersionableEntity} - * object. - * @param backgroundColor - * a {@link org.eclipse.swt.graphics.Color} object. - * @return a - * {@link eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement} - * object. - */ public AbstractEntityCollectionElement createEntityCollectionElement(AbstractFormSection parentElement, Object versionableEntity, SelectionListener removeListener, Color backgroundColor, int style) { AbstractEntityCollectionElement element = null; @@ -2434,7 +2412,7 @@ public class CdmFormFactory extends FormToolkit { } else if (entity instanceof Marker) { element = new MarkerElement(this, parentElement, (Marker) entity, removeListener, style); } else if (entity instanceof Media) { - element = new MediaMetaElement(this, parentElement, (Media) entity, removeListener, style); + element = new MediaMetaElement(this, parentElement, (Media) entity, removeListener, true, style); } else if (entity instanceof MediaRepresentation) { element = new MediaRepresentationElement(this, parentElement, (MediaRepresentation) entity, removeListener, style); @@ -2454,28 +2432,28 @@ public class CdmFormFactory extends FormToolkit { } else if (entity instanceof IdentifiableSource) { element = new IdentifiableSourceElement(this, parentElement, (IdentifiableSource) entity, removeListener, style); - } else if (entity instanceof DefinedTerm) { - switch(((DefinedTerm)entity).getTermType()) { - case Scope: - element = new ScopeElement(this, - parentElement, - (DefinedTerm) entity, - removeListener, - style); - break; - case Modifier: - element = new ModifierElement(this, - parentElement, - (DefinedTerm) entity, - removeListener, - style); - break; - default: - //FIXME : Actually we should through an exception here - element = null; - break; - - } + } else if (entity instanceof DefinedTerm) { + switch(((DefinedTerm)entity).getTermType()) { + case Scope: + element = new ScopeElement(this, + parentElement, + (DefinedTerm) entity, + removeListener, + style); + break; + case Modifier: + element = new ModifierElement(this, + parentElement, + (DefinedTerm) entity, + removeListener, + style); + break; + default: + //FIXME : Actually we should through an exception here + element = null; + break; + + } } else if (entity instanceof Reference) { if(parentElement instanceof SequenceReferenceCollectionDetailSection){ element = new SequenceReferenceCollectionDetailElement(this, parentElement, (Reference) entity, removeListener, style); @@ -2501,23 +2479,23 @@ public class CdmFormFactory extends FormToolkit { element = new StatisticalMeasurementValueElement(this, parentElement, (StatisticalMeasurementValue) entity, removeListener, style); } else if (entity instanceof DerivedUnit) { - switch(((DerivedUnit)entity).getRecordBasis()) { - case LivingSpecimen: - case PreservedSpecimen: - case OtherSpecimen: - element = new SpecimenCollectionDetailElement(this, - parentElement, - (DerivedUnit) entity, - removeListener, - style); - break; - default: - element = new DerivedUnitElement(this, - parentElement, - (DerivedUnit) entity, - removeListener, - style); - } + switch(((DerivedUnit)entity).getRecordBasis()) { + case LivingSpecimen: + case PreservedSpecimen: + case OtherSpecimen: + element = new SpecimenCollectionDetailElement(this, + parentElement, + (DerivedUnit) entity, + removeListener, + style); + break; + default: + element = new DerivedUnitElement(this, + parentElement, + (DerivedUnit) entity, + removeListener, + style); + } } else if (entity instanceof NamedArea) { element = new NamedAreaDetailElement(this, parentElement, (NamedArea) entity, removeListener, style); diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionElement.java index e2fcbef06..1060f986f 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionElement.java @@ -17,7 +17,9 @@ import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Layout; +import org.eclipse.swt.widgets.Listener; import org.eclipse.ui.forms.widgets.TableWrapLayout; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; @@ -52,7 +54,8 @@ public abstract class AbstractEntityCollectionElement extends private final Composite box; - private Button button_remove; + private Button btnRemove; + private Button btnChooseEntity; private Color backgroundColor; @@ -77,33 +80,33 @@ public abstract class AbstractEntityCollectionElement extends * a ENTITY object. */ public AbstractEntityCollectionElement(CdmFormFactory formFactory, - AbstractFormSection section, ENTITY entity, - SelectionListener removeListener, Color backgroundColor, int style) { + AbstractFormSection section, ENTITY entity, + SelectionListener removeListener, Color backgroundColor, int style) { + this(formFactory, section, entity, removeListener, false, backgroundColor, style); + } + public AbstractEntityCollectionElement(CdmFormFactory formFactory, + AbstractFormSection section, ENTITY entity, SelectionListener removeListener, + boolean isChoosableEntity, Color backgroundColor, int style) { super(formFactory, (ICdmFormElement) section); init(); formFactory.addPropertyChangeListener(this); - // section.getLayoutComposite().setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_CYAN)); - box = formFactory.createComposite(section.getLayoutComposite()); box.setBackgroundMode(SWT.INHERIT_DEFAULT); addControl(box); - TableWrapLayout boxLayout = LayoutConstants.LAYOUT(2, false); + TableWrapLayout boxLayout = LayoutConstants.LAYOUT(3, false); boxLayout.topMargin = 4; boxLayout.bottomMargin = 4; box.setLayout(boxLayout); box.setLayoutData(LayoutConstants.FILL_HORIZONTALLY()); - // box.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)); - container = formFactory.createComposite(box); container.setBackgroundMode(SWT.INHERIT_DEFAULT); - // container.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED)); setLayoutComposite(container); addControl(container); @@ -112,15 +115,38 @@ public abstract class AbstractEntityCollectionElement extends container.setLayout(containerLayout); container.setLayoutData(LayoutConstants.FILL_HORIZONTALLY()); + if(isChoosableEntity){ + btnChooseEntity = formFactory.createButton(box, null, SWT.PUSH); + addControl(btnChooseEntity); + btnChooseEntity.setLayoutData(LayoutConstants.RIGHT()); + btnChooseEntity.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON)); + btnChooseEntity.setToolTipText("Browse"); + btnChooseEntity.addListener(SWT.Selection, new Listener() { + + @Override + public void handleEvent(Event event) { + ENTITY entity = selectFromDialog(); + if(entity!=null){ + if(getParentElement() instanceof AbstractEntityCollectionSection){ + ((AbstractEntityCollectionSection)getParentElement()).removeElement(getEntity()); + setEntity(entity); + ((AbstractEntityCollectionSection)getParentElement()).addElement(entity); + ((AbstractEntityCollectionSection)getParentElement()).firePropertyChangeEvent(getParentElement()); + } + } + } + }); + } + if (removeListener != null) { - button_remove = formFactory.createButton(box, null, SWT.PUSH); - addControl(button_remove); - button_remove.setLayoutData(LayoutConstants.RIGHT()); - button_remove.setImage(ImageResources + btnRemove = formFactory.createButton(box, null, SWT.PUSH); + addControl(btnRemove); + btnRemove.setLayoutData(LayoutConstants.RIGHT()); + btnRemove.setImage(ImageResources .getImage(ImageResources.TRASH_ICON)); - button_remove.setToolTipText("Remove"); + btnRemove.setToolTipText("Remove"); - button_remove.addSelectionListener(removeListener); + btnRemove.addSelectionListener(removeListener); } createControls(this, style); @@ -159,6 +185,17 @@ public abstract class AbstractEntityCollectionElement extends return entity; } + /** + * Sub classes should override to provide the functionality to choose the + * entity from existing ones from the data source.
+ * Note: to enable this functionality sub classes have to set + * the corresponding flag in the super constructor + * @return an existing entity from the data source + */ + protected ENTITY selectFromDialog(){ + return null; + } + /** *

* createControls diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaMetaElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaMetaElement.java index a61bfdc81..689ba6146 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaMetaElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaMetaElement.java @@ -9,7 +9,9 @@ import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.agent.AgentBase; import eu.etaxonomy.cdm.model.common.LanguageString; import eu.etaxonomy.cdm.model.media.Media; +import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.store.CdmStore; +import eu.etaxonomy.taxeditor.ui.dialog.selection.MediaSelectionDialog; import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement; @@ -54,8 +56,8 @@ public class MediaMetaElement extends AbstractEntityCollectionElement { */ public MediaMetaElement(CdmFormFactory cdmFormFactory, AbstractFormSection formElement, Media element, - SelectionListener removeListener, int style) { - super(cdmFormFactory, formElement, element, removeListener, null, style); + SelectionListener removeListener, boolean isChoosableEntity, int style) { + super(cdmFormFactory, formElement, element, removeListener, isChoosableEntity, null, style); } /* @@ -68,6 +70,7 @@ public class MediaMetaElement extends AbstractEntityCollectionElement { /** {@inheritDoc} */ @Override public void createControls(ICdmFormElement element, int style) { + text_title = formFactory.createLanguageStringWithLabelElement(element, "Title", null, style); selection_artist = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), element, "Artist", null, EntitySelectionElement.ALL, style); text_description = formFactory.createLanguageStringWithLabelElement(element, "Description", null, 100, true, style); @@ -95,6 +98,14 @@ public class MediaMetaElement extends AbstractEntityCollectionElement { text_title.setLanguageString(title); } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement#selectFromDialog() + */ + @Override + protected Media selectFromDialog() { + return MediaSelectionDialog.select(AbstractUtility.getShell(), null, null); + } + public void toggleAdvancedMediaView(){ mediaDetailElement.toggleAdvancedMediaView(); } -- 2.34.1