Fixed #1061 - Re-implement descriptive tree for image galleries
authorp.ciardelli <p.ciardelli@localhost>
Wed, 23 Sep 2009 08:03:24 +0000 (08:03 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Wed, 23 Sep 2009 08:03:24 +0000 (08:03 +0000)
19 files changed:
.gitattributes
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/AbstractDescriptionDetailsPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/CommonNameDetailsPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/DescriptionContentProvider.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/DescriptionLabelProvider.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/DescriptionMasterDetailsBlock.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/DescriptiveInformationProvider.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/DistributionDetailsPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/DistributionMapDetailsPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/LabelDetailsPage.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TextDataDetailsPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/AddImageGalleryHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageListHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteDescriptionHandler.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteImageHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DescriptionsMenuPropertyTester.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageDownInListHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageUpInListHandler.java [new file with mode: 0644]

index dac8a00a9bca7f12ec49015184a9158e7a4a9f03..f86293753dfdd8d9c78cef2a4565159ce7dbcbea 100644 (file)
@@ -743,14 +743,22 @@ taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/Dis
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/DynamicFeatureMenu.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/IDescriptiveInformationProvider.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/ImageDetailsPage.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/LabelDetailsPage.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TaxonDescriptionDetailsPage.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TaxonDescriptionFeature.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TaxonDescriptionTreeEditor.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TextDataDetailsPage.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/AddDescriptionHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/AddImageGalleryHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateDescriptionElementHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageListHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteDescriptionElementHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteDescriptionHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteImageHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DescriptionsMenuPropertyTester.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageDownInListHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageUpInListHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/CreateChildTaxonHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/EditNewTaxonHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/NextMemberHandler.java -text
index 166c4053e71bc97a900bf927aed678c6410ad109..65dd23db693c6df1ae5561d1569937d21027d042 100644 (file)
@@ -11,19 +11,18 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.events.ModifyEvent;\r
 import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.events.MouseAdapter;\r
 import org.eclipse.swt.layout.GridData;\r
 import org.eclipse.swt.layout.GridLayout;\r
 import org.eclipse.swt.layout.RowLayout;\r
+import org.eclipse.swt.widgets.Button;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Label;\r
 import org.eclipse.swt.widgets.Text;\r
 import org.eclipse.ui.forms.IDetailsPage;\r
 import org.eclipse.ui.forms.IFormPart;\r
 import org.eclipse.ui.forms.IManagedForm;\r
-import org.eclipse.ui.forms.events.HyperlinkAdapter;\r
-import org.eclipse.ui.forms.events.HyperlinkEvent;\r
 import org.eclipse.ui.forms.widgets.FormToolkit;\r
-import org.eclipse.ui.forms.widgets.Hyperlink;\r
 import org.eclipse.ui.forms.widgets.Section;\r
 import org.eclipse.ui.forms.widgets.TableWrapData;\r
 import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
@@ -49,13 +48,17 @@ abstract public class AbstractDescriptionDetailsPage implements IDetailsPage, IP
        protected Section section;\r
        protected Composite client;\r
        protected FormToolkit toolkit;\r
-       private Label citationLabel;\r
+       private Text citationText;\r
        private Label detailLabel;\r
        private Text detailText;\r
        private boolean hasCitationControls = false;\r
                \r
        private boolean citationListenersEnabled;\r
 \r
+       private Composite citationComposite;\r
+\r
+       private Button btnEdit;\r
+\r
        /* (non-Javadoc)\r
         * @see org.eclipse.ui.forms.IDetailsPage#createContents(org.eclipse.swt.widgets.Composite)\r
         */\r
@@ -67,24 +70,22 @@ abstract public class AbstractDescriptionDetailsPage implements IDetailsPage, IP
                layout.rightMargin = 2;\r
                layout.bottomMargin = 2;\r
                parent.setLayout(layout);\r
-               TableWrapData td2 = new TableWrapData(TableWrapData.FILL, TableWrapData.FILL_GRAB);\r
-               td2.grabHorizontal = true;\r
+               TableWrapData td2 = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB);\r
                parent.setLayoutData(td2);              \r
                \r
                toolkit = mform.getToolkit();\r
                section = toolkit.createSection(parent, Section.DESCRIPTION|Section.TITLE_BAR);\r
                section.marginWidth = 10;\r
-               TableWrapData td = new TableWrapData(TableWrapData.FILL, TableWrapData.FILL_GRAB);\r
+               TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB);\r
                td.maxWidth = DEFAULT_WIDTH;\r
                td.grabHorizontal = true;\r
                section.setLayoutData(td);\r
                \r
-               client = toolkit.createComposite(section);\r
-//             client = new Composite(section, SWT.BORDER);\r
+               client = toolkit.createComposite(section, SWT.NONE);\r
                GridLayout glayout = new GridLayout();\r
                glayout.marginWidth = glayout.marginHeight = 0;\r
                client.setLayout(glayout);\r
-               TableWrapData tdclient = new TableWrapData(TableWrapData.FILL, TableWrapData.FILL_GRAB);\r
+               TableWrapData tdclient = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB);\r
                client.setLayoutData(tdclient);\r
                \r
                section.setClient(client);\r
@@ -120,47 +121,33 @@ abstract public class AbstractDescriptionDetailsPage implements IDetailsPage, IP
                hasCitationControls  = true;\r
                \r
                // Citation\r
-               final Composite citationComposite = toolkit.createComposite(client);\r
+               citationComposite = toolkit.createComposite(client);\r
                GridLayout layout = new GridLayout();\r
                layout.numColumns = 3;\r
                citationComposite.setLayout(layout);\r
                GridData gd = new GridData(GridData.GRAB_HORIZONTAL\r
                 | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL\r
                 | GridData.VERTICAL_ALIGN_CENTER | GridData.FILL_HORIZONTAL);\r
-               gd.heightHint = 60;\r
         citationComposite.setLayoutData(gd);\r
         \r
-               citationLabel = toolkit.createLabel(citationComposite, NO_CITATION_MSG, SWT.WRAP);\r
-               citationLabel.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
+               citationText = toolkit.createText(citationComposite, "", SWT.BORDER);\r
+               citationText.setEditable(false);\r
+               citationText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
                 | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL\r
                 | GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));\r
                \r
-               Hyperlink linkEdit = toolkit.createHyperlink(citationComposite, "Edit", SWT.WRAP);\r
-               linkEdit.addHyperlinkListener(new HyperlinkAdapter() {\r
-                       /* (non-Javadoc)\r
-                        * @see org.eclipse.ui.forms.events.HyperlinkAdapter#linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent)\r
-                        */\r
-                       @Override\r
-                       public void linkActivated(HyperlinkEvent e) {\r
-                               ReferenceBase reference = FilteredReferenceSelectionDialog.selectReference(client.getShell());\r
-                               \r
-                               if (reference != null) {\r
-                                       setCitation(reference);\r
-                                       ((ReferencedEntityBase) input).setCitation(reference);\r
-                                       fireStateChanged();\r
-                               }\r
+               btnEdit = toolkit.createButton(citationComposite, "Edit ...", SWT.PUSH);\r
+               btnEdit.addMouseListener(new MouseAdapter() {\r
+                       public void mouseUp(org.eclipse.swt.events.MouseEvent e) {\r
+                               getReferenceFromDialog();\r
                        }\r
                });\r
-               linkEdit.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_END\r
+               btnEdit.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_END\r
                 | GridData.VERTICAL_ALIGN_BEGINNING ));\r
                \r
-               Hyperlink linkRemove = toolkit.createHyperlink(citationComposite, "Remove", SWT.WRAP);\r
-               linkRemove.addHyperlinkListener(new HyperlinkAdapter() {\r
-                       /* (non-Javadoc)\r
-                        * @see org.eclipse.ui.forms.events.HyperlinkAdapter#linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent)\r
-                        */\r
-                       @Override\r
-                       public void linkActivated(HyperlinkEvent e) {\r
+               Button btnRemove = toolkit.createButton(citationComposite, "Remove", SWT.PUSH);\r
+               btnRemove.addMouseListener(new MouseAdapter() {\r
+                       public void mouseUp(org.eclipse.swt.events.MouseEvent e) {                              \r
                                if (((ReferencedEntityBase) input).getCitation() == null) {\r
                                        return;\r
                                }\r
@@ -169,7 +156,7 @@ abstract public class AbstractDescriptionDetailsPage implements IDetailsPage, IP
                                fireStateChanged();\r
                        }\r
                });\r
-               linkRemove.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_END\r
+               btnRemove.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_END\r
                 | GridData.VERTICAL_ALIGN_BEGINNING ));\r
                \r
                // Citation details\r
@@ -192,8 +179,23 @@ abstract public class AbstractDescriptionDetailsPage implements IDetailsPage, IP
                        }\r
                \r
         });\r
-       }\r
+       }       \r
        \r
+       /**\r
+        * \r
+        */\r
+       protected void getReferenceFromDialog() {\r
+\r
+//             ReferenceBase reference = ((ReferencedEntityBase) input).getCitation();\r
+               ReferenceBase reference = FilteredReferenceSelectionDialog.selectReference\r
+                                                                       (client.getShell(), ((ReferencedEntityBase) input).getCitation());\r
+               \r
+               if (reference != null) {\r
+                       setCitation(reference);\r
+                       ((ReferencedEntityBase) input).setCitation(reference);\r
+                       fireStateChanged();\r
+               }\r
+       }\r
 \r
        /**\r
         * @param detail\r
@@ -211,10 +213,11 @@ abstract public class AbstractDescriptionDetailsPage implements IDetailsPage, IP
                        text = "Citation without title cache";\r
                }\r
                text += "  ";\r
-               citationLabel.setText(text);\r
+                               \r
+               citationText.setText(text);\r
 \r
-               citationLabel.getParent().getParent().layout();\r
-               citationLabel.getParent().layout();             \r
+               citationText.getParent().getParent().layout();\r
+               citationText.getParent().layout();              \r
        }\r
 \r
        /**\r
index 4efa4380c96db3b3ac9b9299d01612e93bad8d59..e69d83963db688d87e1e708f51212bd79cb17ada 100644 (file)
@@ -154,37 +154,32 @@ public class CommonNameDetailsPage extends AbstractDescriptionDetailsPage implem
                \r
                languages = new ArrayList<Language>();\r
                languages.add(0, null);\r
+               languagesCombo.add("--- No language selected ---");\r
                \r
                int i = 0;              \r
                int index = 0;\r
                List<Language> languagesTemp = PreferencesUtil.getPreferredLanguages();\r
                Collections.sort(languagesTemp, new TermLanguageComparator<Language>());\r
                for (Language language : languagesTemp) {\r
-                                               \r
-                       if (i == 0) {\r
-                               languagesCombo.add("--- No language selected ---");\r
-                       } else {\r
-                       \r
-                               String description = language.getDescription(); \r
-                               if (description == null) {\r
-                                       logger.warn("No description for " + language + " - not added to language menu");\r
-                                       continue;\r
+                       String description = language.getDescription(); \r
+                       if (description == null) {\r
+                               logger.warn("No description for " + language + " - not added to language menu");\r
+                               continue;\r
+                       }\r
+                       languagesCombo.add(description);\r
+                       languages.add(language);\r
+\r
+                       i++;\r
+                       if (selectedLanguage != null) {\r
+                               if (selectedLanguage.equals(language)) {\r
+                                       index = i;\r
                                }\r
-                               languagesCombo.add(description);\r
-                               languages.add(language);\r
-                               \r
-                               if (selectedLanguage != null) {\r
-                                       if (selectedLanguage.equals(language)) {\r
-                                               index = i;\r
-                                       }\r
-                               } else {\r
-                                       // TODO isn't it better to put the last language at the top of the menu, not automatically select?\r
+                       } else {\r
+                               // TODO isn't it better to put the last language at the top of the menu, not automatically select?\r
 //                                     if (lastLanguage != null && lastLanguage.equals(language)) {\r
 //                                             index = i;  \r
 //                                     }\r
-                               }\r
                        }\r
-                       i++;\r
                }\r
                \r
                // Check whether language is in menu\r
index afd002bb39dc70573829e58262f0568e19a0eaa5..fcf63275c5cfa3fb835eb01271ce1146af0ae824 100644 (file)
@@ -7,6 +7,7 @@ import org.apache.log4j.Logger;
 import org.eclipse.jface.viewers.ITreeContentProvider;\r
 import org.eclipse.jface.viewers.Viewer;\r
 \r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
@@ -38,16 +39,22 @@ public class DescriptionContentProvider implements ITreeContentProvider {
                        return taxon.getDescriptions().toArray();\r
                }\r
                if (parentElement instanceof TaxonDescription) {\r
-                       return infoProvider.getDescriptionFeatures((TaxonDescription) parentElement).toArray();\r
+                       if (((TaxonDescription) parentElement).isImageGallery()) {\r
+                               return infoProvider.getDescriptionElements((TaxonDescription) parentElement, Feature.IMAGE()).toArray();\r
+                       } else {\r
+                               return infoProvider.getDescriptionFeatures((TaxonDescription) parentElement).toArray();\r
+                       }\r
                }\r
                if (parentElement instanceof TaxonDescriptionFeature){\r
                        TaxonDescriptionFeature taxonDescriptionFeature = (TaxonDescriptionFeature) parentElement;\r
                        Feature feature = taxonDescriptionFeature.getFeature();\r
                        TaxonDescription description = taxonDescriptionFeature.getDescription();\r
-                       if (feature.equals(Feature.IMAGE())) {\r
-                               return ImagesHelper.getImages(description).toArray();\r
-                       } else {\r
-                               return infoProvider.getDescriptionElements(description, feature).toArray();\r
+                       return infoProvider.getDescriptionElements(description, feature).toArray();\r
+               }\r
+               if (parentElement instanceof DescriptionElementBase) {\r
+                       DescriptionElementBase descriptionElement = (DescriptionElementBase) parentElement; \r
+                       if (descriptionElement.getInDescription().isImageGallery()) {\r
+                               return ImagesHelper.getOrderedImages(descriptionElement).toArray();\r
                        }\r
                }\r
                return NO_CHILDREN;\r
@@ -83,4 +90,4 @@ public class DescriptionContentProvider implements ITreeContentProvider {
         * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)\r
         */\r
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}\r
-}\r
+}
\ No newline at end of file
index 10ed6256c45a2e63853c00d2b2fd8036ce3f52f4..f064ed47f34e5c4921bbc47ae9829d0577763473 100644 (file)
@@ -12,6 +12,7 @@ import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.description.CommonTaxonName;\r
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 import eu.etaxonomy.cdm.model.description.Distribution;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
@@ -87,8 +88,12 @@ public class DescriptionLabelProvider extends LabelProvider implements IStyledLa
         */\r
        private String getElementText(DescriptionElementBase element) {\r
                String text = DescriptionHelper.getCache(element);\r
+               boolean isImageGallery = element.getInDescription().isImageGallery();\r
                if (text == null || text.length() == 0) {\r
-                       text = "No text provided";\r
+                       text = isImageGallery ? "No label provided" : "No text provided";\r
+               }\r
+               if (isImageGallery) {\r
+                       text = "Ordered image list: " + text;\r
                }\r
                return text;\r
        }\r
@@ -128,7 +133,7 @@ public class DescriptionLabelProvider extends LabelProvider implements IStyledLa
                if (text == null || text.length() == 0) {\r
                        text = "No label provided";\r
                }\r
-               return "Description: " + text;\r
+               return (description.isImageGallery() ? "Image Gallery: " : "Description: ") + text;\r
        }\r
 \r
        /* (non-Javadoc)\r
index 441ce7be3118edb340f92bca621a3fdacfbe9295..05187acbb08de4109ef245411151a82b0c4e8376 100644 (file)
@@ -11,13 +11,19 @@ import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TreePath;\r
 import org.eclipse.jface.viewers.TreeSelection;\r
 import org.eclipse.jface.viewers.TreeViewer;\r
+import org.eclipse.jface.viewers.Viewer;\r
 import org.eclipse.jface.viewers.ViewerComparator;\r
 import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
 import org.eclipse.swt.layout.GridData;\r
 import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Menu;\r
 import org.eclipse.swt.widgets.Tree;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.PlatformUI;\r
 import org.eclipse.ui.forms.DetailsPart;\r
 import org.eclipse.ui.forms.IDetailsPage;\r
 import org.eclipse.ui.forms.IDetailsPageProvider;\r
@@ -35,6 +41,8 @@ import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
 import eu.etaxonomy.cdm.model.media.ImageFile;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
 import eu.etaxonomy.taxeditor.model.ImagesHelper;\r
 \r
 /**\r
@@ -66,11 +74,22 @@ public class DescriptionMasterDetailsBlock extends MasterDetailsBlock {
                section.marginHeight = 5;\r
                Composite client = toolkit.createComposite(section, SWT.WRAP);\r
                GridLayout layout = new GridLayout();\r
-               layout.numColumns = 2;\r
                layout.marginWidth = 2;\r
                layout.marginHeight = 2;\r
                client.setLayout(layout);\r
-//             client.setLayoutData(new GridData());\r
+               \r
+               Button btnExpand = toolkit.createButton(client, "Show all descriptive data", SWT.PUSH);\r
+               btnExpand.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));\r
+               btnExpand.addMouseListener(new MouseAdapter() {\r
+                       /* (non-Javadoc)\r
+                        * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)\r
+                        */\r
+                       @Override\r
+                       public void mouseUp(MouseEvent e) {\r
+                               descriptionViewer.expandAll();\r
+                       }\r
+               });\r
+               \r
                Tree tree = toolkit.createTree(client, SWT.NULL);\r
                GridData gd = new GridData(GridData.FILL_BOTH);\r
                gd.heightHint = 20;\r
@@ -82,7 +101,6 @@ public class DescriptionMasterDetailsBlock extends MasterDetailsBlock {
                managedForm.addPart(spart);\r
                                \r
                descriptionViewer = new TreeViewer(tree);\r
-               \r
                descriptionViewer.addSelectionChangedListener(new ISelectionChangedListener() {\r
                        private ISelection lastSelection;\r
 \r
@@ -101,12 +119,22 @@ public class DescriptionMasterDetailsBlock extends MasterDetailsBlock {
                        }\r
                });\r
 \r
-//             descriptionViewer.setAutoExpandLevel(TreeViewer.ALL_LEVELS);\r
                descriptionViewer.setAutoExpandLevel(2); // Show descriptions and features\r
                descriptionViewer.setContentProvider(new DescriptionContentProvider(descriptiveInformationProvider));\r
                descriptionViewer.setLabelProvider(new DescriptionLabelProvider());\r
                descriptionViewer.setInput(page.getEditor().getEditorInput());\r
-               descriptionViewer.setComparator(new ViewerComparator());\r
+               descriptionViewer.setComparator(new ViewerComparator() {\r
+                       /* (non-Javadoc)\r
+                        * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)\r
+                        */\r
+                       @Override\r
+                       public int compare(Viewer viewer, Object e1, Object e2) {\r
+                               if (e1 instanceof ImageFile && e2 instanceof ImageFile) {\r
+                                       return 0;\r
+                               }\r
+                               return super.compare(viewer, e1, e2);\r
+                       }\r
+               });\r
                                \r
                // Set tree as page's selection provider\r
                page.getSite().setSelectionProvider(descriptionViewer);\r
@@ -127,10 +155,6 @@ public class DescriptionMasterDetailsBlock extends MasterDetailsBlock {
         * @see org.eclipse.ui.forms.MasterDetailsBlock#registerPages(org.eclipse.ui.forms.DetailsPart)\r
         */\r
        protected void registerPages(DetailsPart detailsPart) {\r
-               detailsPart.registerPage(TaxonDescription.class, new TaxonDescriptionDetailsPage());\r
-               detailsPart.registerPage(CommonTaxonName.class, new CommonNameDetailsPage());\r
-               detailsPart.registerPage(Distribution.class, new DistributionDetailsPage());\r
-               detailsPart.registerPage(TextData.class, new TextDataDetailsPage());\r
                detailsPart.registerPage(ImageFile.class, new ImageDetailsPage());\r
                detailsPart.setPageProvider(new PageProvider());\r
        }\r
@@ -141,45 +165,85 @@ public class DescriptionMasterDetailsBlock extends MasterDetailsBlock {
        public synchronized void refreshTree(Object revealObject) {             \r
                descriptionViewer.refresh(true);\r
                \r
+               Object[] segments = null;\r
                if (revealObject instanceof DescriptionElementBase) {\r
                        DescriptionElementBase element = (DescriptionElementBase) revealObject;\r
-                       Object[] segments = new Object[3];\r
-                       segments[0] = element.getInDescription();\r
-                       segments[1] = element.getFeature();\r
-                       \r
                        TaxonDescriptionFeature tdf = descriptiveInformationProvider.getDescriptionFeature(element);\r
+                       \r
+                       segments = new Object[3];\r
+                       segments[0] = element.getInDescription();\r
                        segments[1] = tdf;\r
+                       segments[2] = element;\r
+               }\r
+               if (revealObject instanceof ImageFile) {\r
+                       ImageFile image = (ImageFile) revealObject;\r
+                       DescriptionElementBase element = ImagesHelper.findImageElement(image, getTaxon());\r
                        \r
-                       if (tdf.getFeature().equals(Feature.IMAGE())) {\r
-                               segments[2] = ImagesHelper.getImage(element);\r
-                       } else {\r
-                               segments[2] = element;\r
-                       }                               \r
-                       TreePath treePath = new TreePath(segments);\r
-                       descriptionViewer.setSelection(new TreeSelection(treePath), true);\r
+                       segments = new Object[3];\r
+                       segments[0] = element.getInDescription();\r
+                       segments[1] = element;\r
+                       segments[2] = image;                    \r
                }\r
-               \r
                if (revealObject instanceof TaxonDescription) {\r
                        TaxonDescription description = (TaxonDescription) revealObject;\r
-                       Object[] segments = new Object[] {(TaxonDescription) revealObject};\r
+                       segments = new Object[] {(TaxonDescription) revealObject};      \r
+               }\r
+               if (segments != null) {\r
                        TreePath treePath = new TreePath(segments);\r
-                       descriptionViewer.setSelection(new TreeSelection(treePath), true);      \r
+                       descriptionViewer.setSelection(new TreeSelection(treePath), true);                      \r
                }\r
        }\r
        \r
+       /**\r
+        * @return\r
+        */\r
+       private Taxon getTaxon() {\r
+               IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();\r
+               if (editor != null && editor.getEditorInput() instanceof TaxonEditorInput) {\r
+                       return ((TaxonEditorInput) editor.getEditorInput()).getTaxon();\r
+               }\r
+               return null;\r
+       }\r
+\r
        /**\r
         * @author p.ciardelli\r
         */\r
        class PageProvider implements IDetailsPageProvider {\r
 \r
+               private final static String IMAGE_GALLERY_ELEMENT = "isImageGalleryElement";\r
+               private final static String IMAGE_GALLERY_DESCRIPTION = "isImageGalleryDescription";\r
+\r
                /* (non-Javadoc)\r
                 * @see org.eclipse.ui.forms.IDetailsPageProvider#getPage(java.lang.Object)\r
                 */\r
                public IDetailsPage getPage(Object key) {\r
-                       // TODO Fix bug #941\r
+                       \r
+                       // Descriptions\r
+                       if (IMAGE_GALLERY_DESCRIPTION.equals(key)) {\r
+                               return new LabelDetailsPage("Image Gallery Details", "Edit image gallery's label:");\r
+                       }\r
+                       if (TaxonDescription.class.equals(key)) {\r
+                               return new LabelDetailsPage("Description Details", "Edit description's label:");\r
+                       }\r
+                       \r
+                       // Features\r
                        if (Feature.DISTRIBUTION().equals(key)) {\r
                                return new DistributionMapDetailsPage();\r
                        }\r
+                       \r
+                       // Description elements\r
+                       if (IMAGE_GALLERY_ELEMENT.equals(key)) {\r
+                               return new LabelDetailsPage("Image List Details", "Edit ordered image list's label:");\r
+                       }\r
+                       if (CommonTaxonName.class.equals(key)) {\r
+                               return new CommonNameDetailsPage();\r
+                       }\r
+                       if (Distribution.class.equals(key)) {\r
+                               return new DistributionDetailsPage();\r
+                       }\r
+                       if (TextData.class.equals(key)) {\r
+                               return new TextDataDetailsPage();\r
+                       }                       \r
                        return null;\r
                }\r
 \r
@@ -187,11 +251,27 @@ public class DescriptionMasterDetailsBlock extends MasterDetailsBlock {
                 * @see org.eclipse.ui.forms.IDetailsPageProvider#getPageKey(java.lang.Object)\r
                 */\r
                public Object getPageKey(Object object) {\r
+                       \r
+                       // Descriptions\r
+                       if (object instanceof TaxonDescription) {\r
+                               if (((TaxonDescription) object).isImageGallery()) {\r
+                                       return IMAGE_GALLERY_DESCRIPTION;\r
+                               }\r
+                       }\r
+                       \r
+                       // Features\r
                        if (object instanceof TaxonDescriptionFeature) {\r
                                return ((TaxonDescriptionFeature) object).getFeature();\r
                        }\r
-                       return null;\r
+                       \r
+                       // Description elements\r
+                       if (object instanceof DescriptionElementBase) {\r
+                               TaxonDescription description = (TaxonDescription) ((DescriptionElementBase) object).getInDescription();\r
+                               if (description != null && description.isImageGallery()) {\r
+                                       return IMAGE_GALLERY_ELEMENT;\r
+                               }\r
+                       }\r
+                       return object.getClass();\r
                }\r
        }\r
-}\r
\ No newline at end of file
+}
\ No newline at end of file
index f8d8eb6fbb6f6d0e1c5edb2cf8efb31a5039f253..794ca81e1c5f0d26fd78070492bf51ec141f0656 100644 (file)
@@ -69,11 +69,15 @@ public class DescriptiveInformationProvider implements
                \r
                // Check whether any features need to be removed, i.e. their elements were deleted\r
                Set<Feature> keys = featureCache.keySet();\r
+               HashSet<Feature> removeFeatures = new HashSet<Feature>();\r
                for (Feature feature : keys) {\r
                        if (!featuresTemp.contains(feature)) {\r
-                               featureCache.remove(feature);\r
+                               removeFeatures.add(feature);\r
                        }\r
                }\r
+               for (Feature feature : removeFeatures) {\r
+                       featureCache.remove(feature);\r
+               }\r
                \r
                return new ArrayList<TaxonDescriptionFeature>(featureCache.values());\r
        }\r
index 5437ccd011c81c7998d303050050c260d244a05b..8b5b561958564d7747444d4ca178cacfeefeb7b3 100644 (file)
@@ -356,7 +356,7 @@ public class DistributionDetailsPage extends AbstractDescriptionDetailsPage {
                for (PresenceAbsenceTermBase<?> term : getStatusTerms()) {\r
                        if (term == null) {\r
                        } else {\r
-                               statusCombo.add(term.getLabel(CdmStore.getDefaultLanguage()));          \r
+                               statusCombo.add(term.getLabel());               \r
                                if (this.selectedStatus != null && this.selectedStatus.equals(term)) {\r
                                        selectedIndex = i;\r
                                }\r
index c3fef68ed779008aefe80559f179e524b2b932b0..16ea7a64e3015455bd8d18d4f660dfdb6a3ff10a 100644 (file)
@@ -4,26 +4,28 @@
 package eu.etaxonomy.taxeditor.editor.descriptiontree;\r
 \r
 import java.awt.Color;\r
-import java.lang.reflect.InvocationTargetException;\r
+import java.util.HashSet;\r
 import java.util.Map;\r
+import java.util.Set;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.operation.IRunnableWithProgress;\r
 import org.eclipse.jface.viewers.ISelection;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.browser.Browser;\r
 import org.eclipse.swt.events.ControlEvent;\r
 import org.eclipse.swt.events.ControlListener;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
 import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.widgets.Button;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.ui.IWorkbench;\r
-import org.eclipse.ui.PlatformUI;\r
 import org.eclipse.ui.forms.IFormPart;\r
-import org.eclipse.ui.progress.IProgressService;\r
 \r
+import eu.etaxonomy.cdm.ext.EditGeoServiceUtilities;\r
 import eu.etaxonomy.cdm.ext.IEditGeoService;\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Distribution;\r
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
@@ -90,6 +92,15 @@ public class DistributionMapDetailsPage extends AbstractDescriptionDetailsPage {
 //                     }\r
 //             });\r
                \r
+//             // Create "Refresh Map" button\r
+//             final Button refreshButton = mform.getToolkit().createButton(client, "Refresh Map", SWT.PUSH);\r
+//             refreshButton.setLayoutData(new GridData());\r
+//             refreshButton.addMouseListener(new MouseAdapter() {\r
+//                     public void mouseUp(MouseEvent e) {\r
+//                             loadMap();\r
+//                     }\r
+//             });     \r
+               \r
                parent.addControlListener(new ControlListener(){\r
                        public void controlMoved(ControlEvent e) {\r
                                // do nothing\r
@@ -120,13 +131,26 @@ public class DistributionMapDetailsPage extends AbstractDescriptionDetailsPage {
                int height = 0; \r
                String bbox = "-180,-90,180,90"; \r
                String backLayer = null;\r
-               \r
-               String parameter = geoService.getEditGeoServiceUrlParameterString(description, \r
-                               presenceAbsenceTermColors, width, height, bbox, backLayer);\r
+\r
+               String parameter = EditGeoServiceUtilities.getEditGeoServiceUrlParameterString(getDistributions(),\r
+                               presenceAbsenceTermColors, 0, 0, null, "tdwg4");\r
                \r
                return url + "?" + parameter + "&bbox=-180,-90,180,90&ms=400";\r
        }\r
 \r
+       /**\r
+        * @return\r
+        */\r
+       private Set<Distribution> getDistributions() {\r
+               HashSet<Distribution> distributions = new HashSet<Distribution>();\r
+               for (DescriptionElementBase element : description.getElements()) {\r
+                       if (element instanceof Distribution) {\r
+                               distributions.add((Distribution) element);\r
+                       }\r
+               }\r
+               return distributions;\r
+       }\r
+\r
        /**\r
         * @return\r
         */\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/LabelDetailsPage.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/LabelDetailsPage.java
new file mode 100644 (file)
index 0000000..112b963
--- /dev/null
@@ -0,0 +1,95 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.ui.forms.IFormPart;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
+\r
+/**\r
+ * Edit the label for a TaxonDescription, or for a DescriptionElementBase whose cache is used\r
+ * as a label, e.g. a DescriptionElementBase which contains an image list.\r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class LabelDetailsPage extends AbstractDescriptionDetailsPage implements ModifyListener{\r
+       \r
+       private Text text;\r
+       private String sectionHeader;\r
+       private String description;\r
+       \r
+       public LabelDetailsPage(String sectionHeader, String description) {\r
+               this.sectionHeader = sectionHeader; \r
+               this.description = description;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)\r
+        */\r
+       public void modifyText(ModifyEvent e) {\r
+               saveLabel();\r
+               fireStateChanged();\r
+       }       \r
+       \r
+       /**\r
+        * \r
+        */\r
+       private void saveLabel() {\r
+               if (input instanceof TaxonDescription) {\r
+                       ((TaxonDescription) input).setTitleCache(text.getText());\r
+               }\r
+               if (input instanceof DescriptionElementBase) {\r
+                       DescriptionHelper.setCache((DescriptionElementBase) input, text.getText());\r
+               }\r
+       }\r
+       \r
+       private String getLabel() {\r
+               if (input instanceof TaxonDescription) {\r
+                       return ((TaxonDescription) input).getTitleCache();\r
+               }\r
+               if (input instanceof DescriptionElementBase) {\r
+                       return DescriptionHelper.getCache((DescriptionElementBase) input);\r
+               }\r
+               return "";\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.editor.descriptionnew.AbstractDescriptionDetailsPage#createContents(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       public void createContents(Composite parent) {\r
+               super.createContents(parent);\r
+\r
+               section.setText(sectionHeader); //$NON-NLS-1$\r
+               createLabel(description, client, parent);\r
+               text = new Text(client, SWT.BORDER | SWT.MULTI);\r
+               \r
+               GridData gd = new GridData();   \r
+               gd.horizontalAlignment = SWT.FILL;\r
+               gd.grabExcessHorizontalSpace = true;\r
+\r
+               gd.heightHint = 100;\r
+               text.setLayoutData(gd);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.editor.descriptionnew.AbstractDescriptionDetailsPage#selectionChanged(org.eclipse.ui.forms.IFormPart, org.eclipse.jface.viewers.ISelection)\r
+        */\r
+       @Override\r
+       public void selectionChanged(IFormPart part, ISelection selection) {\r
+               super.selectionChanged(part, selection);\r
+               text.removeModifyListener(this);\r
+               text.setText(getLabel());\r
+               text.addModifyListener(this);\r
+       }\r
+}
\ No newline at end of file
index 0b964281db50528e4192fe93f51bea68ed6b38af..80f83ba31472fb3c4e5703cdd1e8b7b56f58dd7d 100644 (file)
@@ -43,9 +43,6 @@ public class TextDataDetailsPage extends AbstractDescriptionDetailsPage implemen
                \r
                text = new Text(client, SWT.BORDER | SWT.MULTI | SWT.WRAP);\r
                \r
-//             GridData gd = new GridData(GridData.GRAB_HORIZONTAL\r
-//              | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL\r
-//              | GridData.VERTICAL_ALIGN_CENTER);\r
                GridData gd = new GridData();   \r
                gd.horizontalAlignment = SWT.FILL;\r
                gd.grabExcessHorizontalSpace = true;\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/AddImageGalleryHandler.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/AddImageGalleryHandler.java
new file mode 100644 (file)
index 0000000..4d074f2
--- /dev/null
@@ -0,0 +1,54 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operations.CreateTaxonDescriptionOperation;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class AddImageGalleryHandler extends AbstractHandler {\r
+       private static final Logger logger = Logger.getLogger(AddImageGalleryHandler.class);\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+        */\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+               IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+               if (editor instanceof FormEditor) {\r
+                       editor = ((FormEditor) editor).getActiveEditor();\r
+               }\r
+               IEditorInput input = editor.getEditorInput();\r
+               if (input instanceof TaxonEditorInput) {\r
+                       Taxon taxon = ((TaxonEditorInput) input).getTaxon();    \r
+                       IUndoableOperation operation;\r
+                       try {\r
+                               // TODO use undo context specific to editor\r
+                               operation = new CreateTaxonDescriptionOperation(event.getCommand().getName(), \r
+                                               EditorUtil.getUndoContext(), taxon, (IPostOperationEnabled) editor, true);\r
+                               EditorUtil.executeOperation(operation);\r
+                       } catch (NotDefinedException e) {\r
+                               logger.warn("Command name not set");\r
+                       }\r
+               } \r
+               return null;\r
+       }\r
+\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageHandler.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageHandler.java
new file mode 100644 (file)
index 0000000..c89b976
--- /dev/null
@@ -0,0 +1,77 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operations.AddImageToDescriptionElementOperation;\r
+import eu.etaxonomy.taxeditor.operations.CreateDescriptionElementOperation;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class CreateImageHandler extends AbstractHandler {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(CreateImageHandler.class);\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+        */\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+               IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+               if (editor instanceof FormEditor) {\r
+                       editor = ((FormEditor) editor).getActiveEditor();\r
+               }\r
+               IEditorInput input = editor.getEditorInput();\r
+               if (input instanceof TaxonEditorInput) {\r
+                       Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+                       \r
+                       ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+                       if (selection instanceof TreeSelection) {\r
+                               TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+                               \r
+                               int count = paths[0].getSegmentCount();\r
+                               DescriptionElementBase element = null;\r
+                               for (int i = 0; i < count; i++ ) {\r
+                                       if (paths[0].getSegment(i) instanceof DescriptionElementBase) {\r
+                                               element = (DescriptionElementBase) paths[0].getSegment(i);\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               \r
+                               IUndoableOperation operation = null;\r
+                               try {\r
+                                       // TODO use undo context specific to editor\r
+                                       operation = new AddImageToDescriptionElementOperation(event.getCommand().getName(), \r
+                                                       EditorUtil.getUndoContext(), taxon, element, (IPostOperationEnabled) editor);\r
+                                       EditorUtil.executeOperation(operation);\r
+                               } catch (NotDefinedException e) {\r
+                                       logger.warn("Command name not set");\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageListHandler.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageListHandler.java
new file mode 100644 (file)
index 0000000..06d32a7
--- /dev/null
@@ -0,0 +1,69 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operations.CreateDescriptionElementOperation;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class CreateImageListHandler extends AbstractHandler {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(CreateImageListHandler.class);\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+        */\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+               IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+               if (editor instanceof FormEditor) {\r
+                       editor = ((FormEditor) editor).getActiveEditor();\r
+               }\r
+               IEditorInput input = editor.getEditorInput();\r
+               if (input instanceof TaxonEditorInput) {\r
+                       Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+                       \r
+                       ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+                       if (selection instanceof TreeSelection) {\r
+                               TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+                               TaxonDescription description = (TaxonDescription) (paths[0]).getFirstSegment();\r
+                       \r
+                               Feature feature = Feature.IMAGE();\r
+                               \r
+                               IUndoableOperation operation = null;\r
+                               try {\r
+                                       // TODO use undo context specific to editor\r
+                                       operation = new CreateDescriptionElementOperation(event.getCommand().getName(), \r
+                                                       EditorUtil.getUndoContext(), taxon, description, feature, (IPostOperationEnabled) editor);\r
+                                       EditorUtil.executeOperation(operation);\r
+                               } catch (NotDefinedException e) {\r
+                                       logger.warn("Command name not set");\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+}\r
index dbb8c614d8c53a84b655464999938189dd09019b..662f84699672805060d4fe2d2200f25205212318 100644 (file)
@@ -39,9 +39,6 @@ public class DeleteDescriptionHandler extends AbstractHandler {
         * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
         */\r
        public Object execute(ExecutionEvent event) throws ExecutionException {\r
-               ISelection activeSelection = HandlerUtil.getActiveMenuSelection(event);\r
-               ISelection currentSelection = HandlerUtil.getCurrentSelection(event);\r
-               \r
                \r
                IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
                if (editor instanceof FormEditor) {\r
@@ -55,9 +52,7 @@ public class DeleteDescriptionHandler extends AbstractHandler {
                        if (selection instanceof TreeSelection) {\r
                                TreePath[] paths = ((TreeSelection) selection).getPaths();\r
                                TaxonDescription description = (TaxonDescription) (paths[0]).getFirstSegment();\r
-                       \r
-                               Feature feature = (Feature) ((Event)event.getTrigger()).data;\r
-                               \r
+                                                       \r
                                IUndoableOperation operation;\r
                                try {\r
                                        // TODO use undo context specific to editor\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteImageHandler.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteImageHandler.java
new file mode 100644 (file)
index 0000000..298c595
--- /dev/null
@@ -0,0 +1,76 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.operations.RemoveImageFromDescriptionElementOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class DeleteImageHandler extends AbstractHandler {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(DeleteImageHandler.class);\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+        */\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+               IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+               if (editor instanceof FormEditor) {\r
+                       editor = ((FormEditor) editor).getActiveEditor();\r
+               }\r
+               IEditorInput input = editor.getEditorInput();\r
+               if (input instanceof TaxonEditorInput) {\r
+                       Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+                       \r
+                       ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+                       if (selection instanceof TreeSelection) {\r
+                               TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+                               \r
+                               int count = paths[0].getSegmentCount();\r
+                               DescriptionElementBase element = null;\r
+                               for (int i = 0; i < count; i++ ) {\r
+                                       if (paths[0].getSegment(i) instanceof DescriptionElementBase) {\r
+                                               element = (DescriptionElementBase) paths[0].getSegment(i);\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               ImageFile image = (ImageFile) paths[0].getLastSegment();\r
+                               \r
+                               IUndoableOperation operation = null;\r
+                               try {\r
+                                       // TODO use undo context specific to editor\r
+                                       operation = new RemoveImageFromDescriptionElementOperation(event.getCommand().getName(), \r
+                                                       EditorUtil.getUndoContext(), taxon, image, element, (IPostOperationEnabled) editor);\r
+                                       EditorUtil.executeOperation(operation);\r
+                               } catch (NotDefinedException e) {\r
+                                       logger.warn("Command name not set");\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DescriptionsMenuPropertyTester.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DescriptionsMenuPropertyTester.java
new file mode 100644 (file)
index 0000000..0836535
--- /dev/null
@@ -0,0 +1,111 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.eclipse.core.expressions.PropertyTester;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class DescriptionsMenuPropertyTester extends PropertyTester {\r
+\r
+       private List segments;\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)\r
+        */\r
+       public boolean test(Object receiver, String property, Object[] args,\r
+                       Object expectedValue) {\r
+               \r
+               segments = getSegments((TreeSelection) receiver);\r
+               \r
+               if ("isInImageGallery".equals(property)) {\r
+                       return isInImageGallery();\r
+               }\r
+               \r
+               if ("isInImageList".equals(property)) {\r
+                       return isInImageGallery() && isInDescriptionElement();\r
+               }\r
+               \r
+               if ("isImage".equals(property)) {\r
+                       return isImage();\r
+               }\r
+               \r
+               if ("isInDescription".equals(property)) {\r
+                       return isInDescription();\r
+               }\r
+               \r
+               if ("isNonImageElement".equals(property)) {\r
+                       return isInDescription() && isInDescriptionElement();\r
+               }\r
+               \r
+               return false;\r
+       }\r
+       \r
+       /**\r
+        * @param receiver\r
+        * @return\r
+        */\r
+       private List getSegments(TreeSelection selection) {\r
+               List list = new ArrayList();\r
+               TreePath segmentsPath = selection.getPaths()[0];\r
+               for (int i = 0; i < segmentsPath.getSegmentCount(); i++) {\r
+                       list.add(segmentsPath.getSegment(i));\r
+               }\r
+               return list;\r
+       }\r
+\r
+       /**\r
+        * @return\r
+        */\r
+       private boolean isInDescription() {\r
+               for (Object o : segments) {\r
+                       if (o instanceof TaxonDescription) {\r
+                               return !((TaxonDescription) o).isImageGallery();\r
+                       }\r
+               }\r
+               return false;\r
+       }\r
+\r
+       /**\r
+        * @return\r
+        */\r
+       private boolean isImage() {\r
+               for (Object o : segments) {\r
+                       if (o instanceof ImageFile) {\r
+                               return true;\r
+                       }\r
+               }\r
+               return false;\r
+       }\r
+\r
+       private boolean isInImageGallery() {\r
+               for (Object o : segments) {\r
+                       if (o instanceof TaxonDescription) {\r
+                               return ((TaxonDescription) o).isImageGallery();\r
+                       }\r
+               }\r
+               return false;\r
+       }\r
+\r
+       private boolean isInDescriptionElement() {\r
+               for (Object o : segments) {\r
+                       if (o instanceof DescriptionElementBase) {\r
+                               return true;\r
+                       }\r
+               }\r
+               return false;           \r
+       }\r
+       \r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageDownInListHandler.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageDownInListHandler.java
new file mode 100644 (file)
index 0000000..6264169
--- /dev/null
@@ -0,0 +1,83 @@
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.model.ImagesHelper;\r
+import eu.etaxonomy.taxeditor.operations.AddImageToDescriptionElementOperation;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.operations.MoveImageInListOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 11.08.2009\r
+ * @version 1.0\r
+ */\r
+public class MoveImageDownInListHandler extends AbstractHandler {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(CreateDescriptionElementHandler.class);\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+        */\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+               \r
+               IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+               if (editor instanceof FormEditor) {\r
+                       editor = ((FormEditor) editor).getActiveEditor();\r
+               }\r
+               IEditorInput input = editor.getEditorInput();\r
+               if (input instanceof TaxonEditorInput) {\r
+                       Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+                       \r
+                       ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+                       if (selection instanceof TreeSelection) {\r
+                               TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+                               int count = paths[0].getSegmentCount();\r
+                               DescriptionElementBase element = null;\r
+                               for (int i = 0; i < count; i++ ) {\r
+                                       if (paths[0].getSegment(i) instanceof DescriptionElementBase) {\r
+                                               element = (DescriptionElementBase) paths[0].getSegment(i);\r
+                                               break;\r
+                                       }\r
+                               }                               \r
+                               ImageFile image = (ImageFile) paths[0].getLastSegment();\r
+                               IUndoableOperation operation = null;\r
+                               try {\r
+                                       // TODO use undo context specific to editor\r
+                                       operation = new MoveImageInListOperation(event.getCommand().getName(), \r
+                                                       EditorUtil.getUndoContext(), taxon, element, image, ImagesHelper.DOWN, (IPostOperationEnabled) editor);\r
+                                       EditorUtil.executeOperation(operation);\r
+                               } catch (NotDefinedException e) {\r
+                                       logger.warn("Command name not set");\r
+                               }\r
+                       }\r
+               } \r
+               return null;\r
+       }\r
+\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageUpInListHandler.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageUpInListHandler.java
new file mode 100644 (file)
index 0000000..e6cb669
--- /dev/null
@@ -0,0 +1,82 @@
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.model.ImagesHelper;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.operations.MoveImageInListOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 11.08.2009\r
+ * @version 1.0\r
+ */\r
+public class MoveImageUpInListHandler extends AbstractHandler {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(CreateDescriptionElementHandler.class);\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+        */\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+               \r
+               IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+               if (editor instanceof FormEditor) {\r
+                       editor = ((FormEditor) editor).getActiveEditor();\r
+               }\r
+               IEditorInput input = editor.getEditorInput();\r
+               if (input instanceof TaxonEditorInput) {\r
+                       Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+                       \r
+                       ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+                       if (selection instanceof TreeSelection) {\r
+                               TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+                               int count = paths[0].getSegmentCount();\r
+                               DescriptionElementBase element = null;\r
+                               for (int i = 0; i < count; i++ ) {\r
+                                       if (paths[0].getSegment(i) instanceof DescriptionElementBase) {\r
+                                               element = (DescriptionElementBase) paths[0].getSegment(i);\r
+                                               break;\r
+                                       }\r
+                               }                               \r
+                               ImageFile image = (ImageFile) paths[0].getLastSegment();\r
+                               IUndoableOperation operation = null;\r
+                               try {\r
+                                       // TODO use undo context specific to editor\r
+                                       operation = new MoveImageInListOperation(event.getCommand().getName(), \r
+                                                       EditorUtil.getUndoContext(), taxon, element, image, ImagesHelper.UP, (IPostOperationEnabled) editor);\r
+                                       EditorUtil.executeOperation(operation);\r
+                               } catch (NotDefinedException e) {\r
+                                       logger.warn("Command name not set");\r
+                               }\r
+                       }\r
+               } \r
+               return null;\r
+       }\r
+\r
+}\r