Starting work on favorites area.
authorp.ciardelli <p.ciardelli@localhost>
Mon, 21 Apr 2008 11:45:25 +0000 (11:45 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Mon, 21 Apr 2008 11:45:25 +0000 (11:45 +0000)
15 files changed:
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted.gif [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted_small.gif [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Activator.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddSynonymToTaxon.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/FavoritesTableViewer.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/IFavoritesDraggable.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameListView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/TaxonomicTreeViewer.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/GroupComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/heterosyn_no_bg.gif [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/homosyn_no_bg.gif [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java

index ebef00d55c7cde0730e83be7900ffe7171bc4b38..1f613b341dc712c73e99d8b582a4ba625b3ed0a0 100644 (file)
@@ -312,6 +312,8 @@ eclipseprojects/eu.etaxonomy.taxeditor/META-INF/MANIFEST.MF -text
 eclipseprojects/eu.etaxonomy.taxeditor/build.properties -text
 eclipseprojects/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/a_no_bg.gif -text
+eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted.gif -text
+eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted_small.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/add.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/add_edit.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/add_no_bg.gif -text
@@ -392,6 +394,8 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/Botanical
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorDetailsPage.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorMasterDetailsBlock.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EmptyEditorView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/FavoritesTableViewer.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/IFavoritesDraggable.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/LeftPane.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MoveDialogView.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java -text
@@ -413,8 +417,6 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewe
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameViewerVerifyListener.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/TesterooWritableSet.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/WarningAnnotation.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/heterosyn_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/homosyn_no_bg.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CustomSortPropertySheetEntry.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetContentProvider.java -text
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted.gif b/eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted.gif
new file mode 100644 (file)
index 0000000..c41bb9c
Binary files /dev/null and b/eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted.gif differ
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted_small.gif b/eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted_small.gif
new file mode 100644 (file)
index 0000000..69aec9f
Binary files /dev/null and b/eclipseprojects/eu.etaxonomy.taxeditor/icons/accepted_small.gif differ
index 95d5967c8668d1e303d7a662ca772130d2c0b8d8..1cb9871d17da183b330a6ebad46d70f2c54094bb 100644 (file)
@@ -17,10 +17,10 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;\r
 \r
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
-import eu.etaxonomy.cdm.database.CdmDataSource;\r
 import eu.etaxonomy.cdm.database.DataSourceNotFoundException;\r
 import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
 import eu.etaxonomy.cdm.model.agent.Person;\r
+import eu.etaxonomy.cdm.model.common.IOriginalSource;\r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
@@ -43,15 +43,16 @@ public class Activator extends AbstractUIPlugin {
         * The constructor\r
         */\r
        public Activator() {\r
+       \r
                final Logger logger = Logger.getLogger(Activator.class.getName());\r
 //             logger.error("Start");\r
                \r
                boolean initDatastore = false;\r
+//             boolean initDatastore = true;\r
                if (initDatastore)\r
                        initDatastore();\r
                else {\r
                        DbSchemaValidation dbSchemaValidation = DbSchemaValidation.VALIDATE;\r
-//                     HBM2DDL hbm2dll = CdmDataSource.HBM2DDL.VALIDATE;\r
                        try {\r
                                cdmApp = CdmApplicationController.NewInstance(dbSchemaValidation);\r
                        } catch (DataSourceNotFoundException e) {\r
@@ -159,10 +160,11 @@ public class Activator extends AbstractUIPlugin {
         */\r
        private WritableList observableTaxonTreeList = null;\r
        /**\r
-        * Keeps track of which taxa have been edited\r
+        * Keeps track of which taxa have been opened for editing\r
         */\r
        private WritableList observableRecentNamesList = null;\r
-       public WritableSet observableSynonymSet = null; \r
+       public WritableSet observableSynonymSet = null;\r
+       private WritableList observableFavoritesList = null;    \r
        public WritableList getObservableTaxonTreeList() {\r
                if (observableTaxonTreeList == null) {\r
                        observableTaxonTreeList = new WritableList();\r
@@ -179,6 +181,14 @@ public class Activator extends AbstractUIPlugin {
                return observableRecentNamesList;\r
        }\r
 \r
+\r
+       public WritableList getObservableFavoritesList() {\r
+               if (observableFavoritesList  == null) {\r
+                       observableFavoritesList = new WritableList();\r
+               }\r
+               return observableFavoritesList;\r
+       }               \r
+       \r
        public WritableSet getObservableSynonymSet() {\r
                if (observableSynonymSet == null) {\r
                        observableSynonymSet = new WritableSet();\r
@@ -244,10 +254,12 @@ public class Activator extends AbstractUIPlugin {
        // Resource bundle.\r
        private ResourceBundle resourceBundle;\r
        private FormColors formColors;\r
+       public static final String ACCEPTED_TAXON = "accepted";\r
        public static final String HOMOTYPIC_SYN = "homotypic_syn";\r
        public static final String HETEROTYPIC_SYN = "heterotypic_syn";\r
        public static final String DB = "db";\r
        protected void initializeImageRegistry(ImageRegistry registry) {\r
+               registerImage(registry, ACCEPTED_TAXON, "accepted_small.gif"); //$NON-NLS-1$\r
                registerImage(registry, HOMOTYPIC_SYN, "homosyn_no_bg.gif"); //$NON-NLS-1$\r
                registerImage(registry, HETEROTYPIC_SYN, "heterosyn_no_bg.gif"); //$NON-NLS-1$\r
                registerImage(registry, DB, "db.gif"); //$NON-NLS-1$\r
@@ -263,5 +275,5 @@ public class Activator extends AbstractUIPlugin {
                        }\r
                } catch (Exception e) {\r
                }\r
-       }       \r
+       }\r
 }
\ No newline at end of file
index b2ab1ab62d924b0afa6ef0f76b7240bfb9fbd73b..a01f3026436fd455d7ee24453505467c5dd97d97 100644 (file)
@@ -3,6 +3,7 @@ package eu.etaxonomy.taxeditor.controller;
 import org.eclipse.jface.action.Action;\r
 \r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
@@ -29,22 +30,19 @@ public class ActionAddSynonymToTaxon extends Action {
                this.taxon = taxon;\r
                this.synonym = new Synonym();\r
                \r
-//             BotanicalName name = new BotanicalName(Rank.SPECIES());\r
-//             name.setTitleCache(synonymNameCache);\r
-//             this.synonym.setName(name);\r
-               \r
-               // When called on to parse several names "simultaneously", this\r
-               //  produces a strange error, namely:\r
-               //    "Paste" did not complete normally.  Please see the log for more information.\r
-               //    eu.etaxonomy.cdm.model.name.Rank.getAbbreviation()Ljava/lang/String;\r
-               // Try again w the next version of Andreas's parser \r
-               this.synonym.setName(BotanicalName.PARSED_NAME(synonymNameCache));\r
-       }       \r
+               BotanicalName name = BotanicalName.PARSED_NAME(synonymNameCache);\r
+               name.setHomotypicalGroup(new HomotypicalGroup());\r
+               this.synonym.setName(name);\r
+}      \r
 \r
        public void run() {\r
-//             taxon.addSynonym(synonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
-//             taxon.removeSynonymRelation(synonym.getSynonymRelations()[0]);\r
+//             System.out.println(taxon.getSynonyms().size());\r
+               taxon.addSynonym(synonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+//             System.out.println(taxon.getSynonyms().size());\r
                \r
+//             taxon.removeSynonymRelation(synonym.getSynonymRelations());\r
+//             taxon.re\r
+//             \r
                TesterooWritableSet.getInstance().add(synonym);\r
        }\r
 }
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/FavoritesTableViewer.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/FavoritesTableViewer.java
new file mode 100644 (file)
index 0000000..f8131e2
--- /dev/null
@@ -0,0 +1,88 @@
+package eu.etaxonomy.taxeditor.view;\r
+\r
+import org.eclipse.core.databinding.beans.BeansObservables;\r
+import org.eclipse.core.databinding.observable.map.IObservableMap;\r
+import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
+import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;\r
+import org.eclipse.jface.viewers.DoubleClickEvent;\r
+import org.eclipse.jface.viewers.IDoubleClickListener;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.dnd.DND;\r
+import org.eclipse.swt.dnd.DropTarget;\r
+import org.eclipse.swt.dnd.DropTargetAdapter;\r
+import org.eclipse.swt.dnd.DropTargetEvent;\r
+import org.eclipse.swt.dnd.Transfer;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+import eu.etaxonomy.cdm.model.common.IOriginalSource;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.Activator;\r
+import eu.etaxonomy.taxeditor.controller.ActionOpenNameEditor;\r
+import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
+\r
+public class FavoritesTableViewer extends TableViewer {\r
+\r
+       public FavoritesTableViewer(Composite parent) {\r
+               super(parent, SWT.H_SCROLL | SWT.V_SCROLL);\r
+               this.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+               \r
+               // Add content provider\r
+               ObservableListContentProvider favoritesContentProviderList = new ObservableListContentProvider();\r
+               this.setContentProvider(favoritesContentProviderList);\r
+               \r
+               // Label provider that listens for changes to name cache\r
+               IObservableMap[] rnViewerLabelProviderMaps = BeansObservables.observeMaps(favoritesContentProviderList.\r
+                               getKnownElements(), IOriginalSource.class, new String[]{"name"});\r
+               this.setLabelProvider(new ObservableMapLabelProvider(rnViewerLabelProviderMaps) {\r
+                       \r
+                       /*\r
+                        * JFace databinding syntax makes it to difficult to retrieve\r
+                        *      Taxon.getName().getNameCache, so override function that returns\r
+                        *  label\r
+                        * \r
+                        *  (non-Javadoc)\r
+                        * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnText(java.lang.Object, int)\r
+                        */\r
+                       public String getColumnText(Object element, int columnIndex) {\r
+                               return element.toString();\r
+//                             return ((Taxon) element).getName().getTitleCache();\r
+                       }                       \r
+               });\r
+               \r
+               // Listens for new taxa opened for editing\r
+               this.setInput(Activator.getDefault().getObservableFavoritesList());\r
+               \r
+               // On double click, open name editor\r
+               this.addDoubleClickListener(new IDoubleClickListener(){\r
+\r
+                       public void doubleClick(DoubleClickEvent event) {\r
+                               Object element = ((StructuredSelection)event.getSelection()).getFirstElement();\r
+                               if (element instanceof Taxon) {\r
+                                       new ActionOpenNameEditor((Taxon) element).run();\r
+                               }\r
+                       }\r
+               });\r
+               \r
+               // Drop functionality\r
+               Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};\r
+               int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
+//             int operations = DND.DROP_COPY;\r
+               DropTarget target = new DropTarget(this.getControl(), operations);\r
+               target.setTransfer(types);\r
+               target.addDropListener(new DropTargetAdapter() {\r
+                       \r
+                       public void dragEnter(DropTargetEvent event) {\r
+                               System.out.println("hello");\r
+                       }\r
+                       \r
+                       public void drop(DropTargetEvent event) {\r
+                               \r
+                               // Add event to favorites list          \r
+                               Activator.getDefault().getObservableFavoritesList().add(event.data);\r
+                       }\r
+               });\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/IFavoritesDraggable.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/IFavoritesDraggable.java
new file mode 100644 (file)
index 0000000..93b6e7d
--- /dev/null
@@ -0,0 +1,9 @@
+package eu.etaxonomy.taxeditor.view;\r
+\r
+import org.eclipse.swt.graphics.Image;\r
+\r
+public interface IFavoritesDraggable {\r
+       public Image getIcon();\r
+       public String getLabel();\r
+       public Object getObject();\r
+}\r
index e657625f8fb280e11c980a41d96f46c6cc079e79..a1f2138f7eaeb8aa7e386959f06a6ed496de6850 100644 (file)
@@ -1,7 +1,9 @@
 package eu.etaxonomy.taxeditor.view;\r
 \r
 import org.eclipse.core.databinding.observable.set.ISetChangeListener;\r
+import org.eclipse.core.databinding.observable.set.ObservableSet;\r
 import org.eclipse.core.databinding.observable.set.SetChangeEvent;\r
+import org.eclipse.core.databinding.observable.set.WritableSet;\r
 import org.eclipse.core.runtime.IAdaptable;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.core.runtime.ListenerList;\r
@@ -16,10 +18,6 @@ import org.eclipse.swt.dnd.DropTarget;
 import org.eclipse.swt.dnd.DropTargetAdapter;\r
 import org.eclipse.swt.dnd.DropTargetEvent;\r
 import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.events.DragDetectEvent;\r
-import org.eclipse.swt.events.DragDetectListener;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
 import org.eclipse.swt.widgets.Event;\r
@@ -37,8 +35,7 @@ import org.eclipse.ui.views.properties.IPropertySheetPage;
 import org.eclipse.ui.views.properties.PropertySheetPage;\r
 \r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.NonViralName;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
@@ -83,10 +80,6 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                        taxon = null;\r
                }\r
                \r
-               // Get parent taxon\r
-//             if (taxon.getTaxonomicParent() != null)\r
-//                             higherTaxon = taxon.getTaxonomicParent();\r
-               \r
                // Register listeners for any change in accepted name or set of relations\r
 //             taxon.getName().addPropertyChangeListener("titleCache", taxonChangeListener);\r
 //             taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
@@ -157,32 +150,71 @@ public class NameEditorView extends EditorPart implements IAdaptable {
        public void createPartControl(final Composite composite) {\r
                                \r
                // We use a ManagedForm to make drawing and removal of borders easier\r
-               this.managedForm = new ManagedForm(composite);\r
-               this.toolkit = managedForm.getToolkit();\r
-               this.scrolledForm = managedForm.getForm();\r
-               this.parent = scrolledForm.getBody();\r
-               \r
-//             parent = composite;\r
+               managedForm = new ManagedForm(composite);\r
+               toolkit = managedForm.getToolkit();\r
+               scrolledForm = managedForm.getForm();\r
+               parent = scrolledForm.getBody();\r
+               parent.setLayout(new TableWrapLayout());\r
                                \r
-               this.parent.setLayout(new TableWrapLayout());\r
+               parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
                                \r
-               parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));             \r
-               parent.setRedraw(true);\r
-                       \r
-               createHomotypicalGroup(taxon);\r
+               // Create a homotypic group for the accepted taxon\r
+               GroupComposite homotypicComposite = createGroupComposite(taxon.getHomotypicGroup());\r
+               \r
+               // Add accepted taxon to the group\r
+               createNameComposite(taxon, homotypicComposite);\r
+               \r
+//             // Add any homotypic synonyms to the group\r
+//             List<Synonym> homotypicSynonyms = taxon.getHomotypicGroup().\r
+//                             getSynonymsInGroup(taxon.getSec());\r
+//             for (Synonym synonym : homotypicSynonyms) {\r
+//                     createNameComposite(synonym, homotypicComposite);\r
+//             }\r
+//\r
+//             // Create composites for any heterotypic groups\r
+//             List<HomotypicalGroup> heterotypicGroups = taxon.getHeterotypicSynonymyGroups();\r
+//             for (HomotypicalGroup heterotypicGroup : heterotypicGroups) {\r
+//                     GroupComposite heterotypicComposite = createGroupComposite(heterotypicGroup);\r
+//                     \r
+//                     // Add any homotypic synonyms to the group\r
+//                     List<Synonym> heterotypicSynonyms = heterotypicGroup.\r
+//                                     getSynonymsInGroup(taxon.getSec());\r
+//                     for (Synonym synonym : heterotypicSynonyms) {\r
+//                             createNameComposite(synonym, heterotypicComposite);                             \r
+//                     }\r
+//             }\r
                \r
                // TODO replace this with real set of taxon's synonyms\r
+               // 1) Observe all synonyms\r
                TesterooWritableSet.getInstance().addSetChangeListener\r
                (new ISetChangeListener() {\r
                        public void handleSetChange(SetChangeEvent event) {\r
                                for ( Object addition: event.diff.getAdditions()) {\r
+                                       Synonym synonym = null;\r
                                        if (addition instanceof Synonym)\r
-                                               createHomotypicalGroup((Synonym) addition);\r
+                                               synonym = (Synonym) addition;\r
+                                               HomotypicalGroup emptyHomotypicalGroup = new HomotypicalGroup();\r
+                                               synonym.getName().setHomotypicalGroup(emptyHomotypicalGroup);\r
+                                               GroupComposite groupComposite = createGroupComposite(emptyHomotypicalGroup);\r
+                                               createNameComposite(synonym, groupComposite);\r
                                }\r
                                parent.layout();\r
-//                             NameEditorView.this.managedForm.getForm().reflow(true);\r
                        }\r
                });\r
+                               \r
+//             taxon.addPropertyChangeListener(new PropertyChangeListener() {\r
+//                     @Override\r
+//                     public void propertyChange(PropertyChangeEvent evt) {\r
+//                             System.out.println("changing");\r
+//                     }       \r
+//             });\r
+//             taxon.addPropertyChangeListener("synonyms", new PropertyChangeListener() {\r
+//\r
+//                     @Override\r
+//                     public void propertyChange(PropertyChangeEvent evt) {\r
+//                             System.out.println("new syn");\r
+//                     }       \r
+//             });\r
                \r
                // Listen for names being dragged outside of existing homotypic groups -\r
                //  user wants to create a new group\r
@@ -192,51 +224,67 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                target.setTransfer(types);\r
                target.addDropListener(new DropTargetAdapter() {\r
                        \r
+                       // TODO Replace with ActionAddSynonymToTaxon?\r
                        public void drop(DropTargetEvent event) {\r
                                Synonym synonym = (Synonym) event.data;\r
-                               createHomotypicalGroup(synonym);\r
+                               HomotypicalGroup emptyHomotypicalGroup = new HomotypicalGroup();\r
+                               synonym.getName().setHomotypicalGroup(emptyHomotypicalGroup);\r
+                               GroupComposite groupComposite = createGroupComposite(emptyHomotypicalGroup);\r
+                               createNameComposite(synonym, groupComposite);\r
                        }               \r
                });\r
        }\r
 \r
-       private void createHomotypicalGroup(TaxonBase taxonBase) {\r
-               GroupComposite homoGroupComposite = new GroupComposite(parent, toolkit);\r
-               homoGroupComposite.setTaxon(taxon);\r
+       private GroupComposite createGroupComposite(HomotypicalGroup homotypicalGroup) {\r
+               GroupComposite groupComposite = new GroupComposite(parent, homotypicalGroup);\r
+               \r
+               // Put newly created interface element onto managed form\r
+               toolkit.adapt(groupComposite);          \r
+               \r
+               groupComposite.addListener(SWT.FocusIn, new DrawBorderListener(parent));\r
+               groupComposite.addListener(SWT.FocusOut, new DrawBorderListener(parent));\r
+                               \r
+               scrolledForm.reflow(true); // check whether this is necessary\r
                \r
+               return groupComposite;\r
+       }\r
+       \r
+       private void createNameComposite(TaxonBase taxonBase, GroupComposite groupComposite) {\r
                NameComposite nameComposite;\r
                if (taxonBase instanceof Taxon)\r
-                       nameComposite = new NameComposite(homoGroupComposite, (Taxon) taxonBase);\r
+                       nameComposite = new NameComposite(groupComposite, (Taxon) taxonBase);\r
                else\r
-                       nameComposite = new NameComposite(homoGroupComposite, (Synonym) taxonBase, taxon);\r
-\r
+                       nameComposite = new NameComposite(groupComposite, (Synonym) taxonBase, taxon);\r
+               \r
                // Put newly created interface elements onto managed form\r
-               toolkit.adapt(homoGroupComposite);\r
                toolkit.adapt(nameComposite);\r
-               toolkit.adapt(nameComposite.getTextWidget());           \r
+               toolkit.adapt(nameComposite.getTextWidget());\r
                \r
-               homoGroupComposite.addListener(SWT.FocusIn, new SelectionAndDrawBorderListener(parent));\r
-               homoGroupComposite.addListener(SWT.FocusOut, new SelectionAndDrawBorderListener(parent));\r
-               nameComposite.getTextWidget().addListener(SWT.FocusIn, new SelectionAndDrawBorderListener(nameComposite));\r
-               nameComposite.getTextWidget().addListener(SWT.FocusOut, new SelectionAndDrawBorderListener(nameComposite));\r
+               // Add listeners for drawing borders\r
+               nameComposite.getTextWidget().addListener(SWT.FocusIn, new DrawBorderListener(nameComposite));\r
+               nameComposite.getTextWidget().addListener(SWT.FocusOut, new DrawBorderListener(nameComposite));\r
+\r
+               // Add listener for sending selection to property sheet         \r
                nameComposite.getTextWidget().addListener(SWT.Selection, new Listener() {\r
                        @Override\r
                        public void handleEvent(Event event) {\r
                                setSelection((BotanicalName) event.data);\r
                        }\r
                });\r
+               \r
                // Redraw form with every change in case text area has, for instance, word wrapped\r
                nameComposite.getTextWidget().addListener(SWT.Modify, new Listener() {\r
                        @Override\r
                        public void handleEvent(Event event) {\r
-                               scrolledForm.reflow(false);\r
+                               scrolledForm.reflow(false); // TODO This don't appear to do shit\r
                        }\r
                });\r
-                               \r
+\r
                scrolledForm.reflow(true); // check whether this is necessary\r
                \r
                nameComposite.getTextWidget().setFocus();\r
        }\r
-               \r
+       \r
        @Override\r
        public void setFocus() {\r
                // TODO Auto-generated method stub\r
@@ -268,11 +316,11 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                                (new StructuredSelection(new BotanicalNamePropertySource(name)));;\r
        }\r
        \r
-       class SelectionAndDrawBorderListener implements Listener {\r
+       class DrawBorderListener implements Listener {\r
 \r
                private Composite parent;\r
 \r
-               SelectionAndDrawBorderListener(Composite parent) {\r
+               DrawBorderListener(Composite parent) {\r
                        super();\r
                        this.parent = parent;\r
                }\r
@@ -282,8 +330,8 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                        \r
                        // To cut down on flickering, only draw border as necessary\r
                        String border = (event.type == SWT.FocusIn ? FormToolkit.TEXT_BORDER : null);\r
-                       if (event.widget.getData(FormToolkit.KEY_DRAW_BORDER).equals(border)) \r
-                               return;\r
+//                     if (event.widget.getData(FormToolkit.KEY_DRAW_BORDER).equals(border)) \r
+//                             return;\r
                        \r
                        event.widget.setData(FormToolkit.KEY_DRAW_BORDER, border);\r
                        toolkit.paintBordersFor(parent);\r
index 43d575f4e488936969998997e86e3320eb6deade..51411173abdd4ad282c2923c319e73312261326f 100644 (file)
@@ -20,8 +20,6 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Menu;\r
 import org.eclipse.swt.widgets.MenuItem;\r
 import org.eclipse.swt.widgets.Text;\r
-import org.eclipse.ui.forms.widgets.FormToolkit;\r
-import org.eclipse.ui.forms.widgets.ScrolledForm;\r
 import org.eclipse.ui.part.ViewPart;\r
 \r
 import com.swtdesigner.ResourceManager;\r
@@ -49,9 +47,6 @@ public class NameListView extends ViewPart {
        private ExpandItem favoritesExpandItem;\r
        private TableViewer recentNamesViewer;  \r
        public static final String ID = "eu.etaxonomy.taxeditor.view.namelistview"; //$NON-NLS-1$\r
-\r
-       private FormToolkit toolkit;\r
-       private ScrolledForm form;\r
        \r
        private TreeViewer treeViewer;\r
        \r
@@ -116,11 +111,6 @@ public class NameListView extends ViewPart {
                lblDataSource.setAlignment(SWT.CENTER);\r
                lblDataSource.setText("  mssql://128.14.101.12:80/europlusmed");\r
 \r
-//             toolkit = new FormToolkit(parent.getDisplay());\r
-//             form = toolkit.createScrolledForm(top);\r
-////           form.setText(Messages.getString("FormView.title")); //$NON-NLS-1$\r
-//             form.setText("FormView.title"); //$NON-NLS-1$\r
-//             \r
                createExpandBar();\r
                top.setLayout(gridLayout);\r
                top.setTabList(new Control[] {composite, expandBar});\r
@@ -213,10 +203,6 @@ public class NameListView extends ViewPart {
 \r
                final Button searchButton = new Button(searchComposite, SWT.NONE);\r
                searchButton.setText("Search");\r
-\r
-//             Image image = FileArrangerImages.getImageRegistry().get(\r
-//                             IFileArrangerImages.IMG_FTP);\r
-//             ftpExpandItem.setImage(image);\r
        }       \r
 \r
        private void createFavoritesComposite() {\r
@@ -232,8 +218,8 @@ public class NameListView extends ViewPart {
                favoritesLabel.setText("Drag favorite elements into this area for easy access later.");\r
                \r
                favoritesExpandItem.setControl(favoritesComposite);\r
-\r
-//             recentNamesViewer = new RecentNamesTableViewer(recentNamesComposite);\r
+               \r
+               new FavoritesTableViewer(favoritesComposite);\r
        }\r
        \r
        private void createActions() {\r
index efb3ba686286122317eba9cdbd51a20e5540be86..0f3d752262a863a876a97e584b2c330e6f46f015 100644 (file)
@@ -21,7 +21,6 @@ import org.eclipse.swt.dnd.DragSourceListener;
 import org.eclipse.swt.dnd.DropTarget;\r
 import org.eclipse.swt.dnd.DropTargetAdapter;\r
 import org.eclipse.swt.dnd.DropTargetEvent;\r
-import org.eclipse.swt.dnd.TextTransfer;\r
 import org.eclipse.swt.dnd.Transfer;\r
 import org.eclipse.swt.events.MenuAdapter;\r
 import org.eclipse.swt.events.MenuEvent;\r
@@ -31,7 +30,6 @@ import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;\r
 import org.eclipse.swt.graphics.Rectangle;\r
 import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.GridData;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
 import org.eclipse.swt.widgets.Event;\r
@@ -45,7 +43,6 @@ import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.swt.widgets.Tree;\r
 import org.eclipse.swt.widgets.TreeItem;\r
 import org.eclipse.ui.PlatformUI;\r
-import org.eclipse.ui.forms.widgets.TableWrapData;\r
 \r
 import com.swtdesigner.ResourceManager;\r
 \r
@@ -57,6 +54,7 @@ import eu.etaxonomy.taxeditor.controller.ActionOpenNameEditor;
 import eu.etaxonomy.taxeditor.controller.ActionOpenNewChildNameEditor;\r
 import eu.etaxonomy.taxeditor.controller.ActionRemoveTaxonFromTree;\r
 import eu.etaxonomy.taxeditor.controller.ActionSaveTaxon;\r
+import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
 import eu.etaxonomy.taxeditor.model.NameTreeContentProvider;\r
 /**\r
  * Taxon tree viewer which responds to events within individual taxa.\r
@@ -117,7 +115,8 @@ public class TaxonomicTreeViewer extends TreeViewer {
         */\r
        private void createDragAndDrop() {\r
                final Tree tree = this.getTree();\r
-               Transfer[] types = new Transfer[] {TextTransfer.getInstance()};\r
+//             Transfer[] types = new Transfer[] {TextTransfer.getInstance()};\r
+               Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};\r
                int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;\r
                \r
                final DragSource source = new DragSource (tree, operations);\r
@@ -134,7 +133,10 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                }\r
                        }\r
                        public void dragSetData (DragSourceEvent event) {\r
-                               event.data = dragSourceItem[0].getText();\r
+//                             event.data = dragSourceItem[0].getText();\r
+//                             System.out.println("1 " + event.data.toString());\r
+//                             System.out.println("2 " + dragSourceItem[0].getData().toString());\r
+                               TaxonTransfer.getInstance().setTaxon((Taxon)dragSourceItem[0].getData());\r
                        }\r
                        public void dragFinished(DragSourceEvent event) {\r
                                if (event.detail == DND.DROP_MOVE)\r
@@ -470,7 +472,7 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                                label.setBackground (Display.getCurrent().getSystemColor (SWT.COLOR_INFO_BACKGROUND));\r
                                                label.setData ("_TABLEITEM", item);\r
 //                                             label.setText (item.getText ());\r
-                                               label.setText ("Joe mama");\r
+//                                             label.setText ("Joe mama");\r
                                                label.addListener (SWT.MouseExit, labelListener);\r
                                                label.addListener (SWT.MouseDown, labelListener);\r
                                                Point size = tip.computeSize (SWT.DEFAULT, SWT.DEFAULT);\r
@@ -486,3 +488,4 @@ public class TaxonomicTreeViewer extends TreeViewer {
        \r
 }\r
 \r
+\r
index 9aa77b849469d36826b06a8a5981ab7a1ccfd188..071a71eb9682d5621488b8191e1972b1d05b09b6 100644 (file)
@@ -8,29 +8,23 @@ import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.Transfer;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.ui.forms.widgets.FormToolkit;\r
 import org.eclipse.ui.forms.widgets.TableWrapData;\r
 import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
 \r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
 \r
 public class GroupComposite extends Composite {\r
        \r
-       Taxon taxon;\r
        HomotypicalGroup homotypicalGroup;\r
        boolean acceptedGroup;\r
        \r
-       public void setTaxon(Taxon taxon) {\r
-               this.taxon = taxon;\r
-       }\r
-       \r
-       public GroupComposite(Composite parent, final FormToolkit toolkit) {\r
+       public GroupComposite(Composite parent, HomotypicalGroup homotypicalGroup) {\r
                super(parent, SWT.NONE);\r
-               \r
-//             this.toolkit = toolkit;\r
+                               \r
+               this.homotypicalGroup = homotypicalGroup;\r
                \r
                // Graphic layout of composite\r
                this.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
@@ -53,31 +47,22 @@ public class GroupComposite extends Composite {
                        }\r
                        \r
                        public void drop(DropTargetEvent event) {\r
-                               Synonym synonym = (Synonym) event.data; \r
                                \r
-                               // Get the GroupComposite onto which the synonym is being dropped\r
-                               GroupComposite dropTargetComposite = \r
-                                       (GroupComposite) ((DropTarget) \r
-                                                       event.getSource()).getControl();\r
+                               TaxonNameBase synonymName = ((Synonym) event.data).getName();\r
+                               HomotypicalGroup homotypicalGroup = GroupComposite.this.getHomotypicalGroup();\r
                                \r
-                               NameComposite nameComposite = new NameComposite(\r
-                                               dropTargetComposite, synonym, taxon);                           \r
+                               // Abort drop if name is being dropped onto group to which it already belongs\r
+                               if (synonymName.getHomotypicalGroup().equals(homotypicalGroup)) {\r
+                                       event.detail = DND.DROP_NONE;\r
+                                       return;\r
+                               }\r
+\r
+                               // Associate synonym with group - listeners will take care of the rest  \r
+                               synonymName.setHomotypicalGroup(homotypicalGroup);              \r
                        }\r
                });\r
        }\r
        public HomotypicalGroup getHomotypicalGroup() {\r
                return homotypicalGroup;\r
        }\r
-\r
-       public void setHomotypicalGroup(HomotypicalGroup homotypicalGroup) {\r
-               this.homotypicalGroup = homotypicalGroup;\r
-       }\r
-       \r
-       public boolean isAcceptedGroup() {\r
-               return acceptedGroup;\r
-       }\r
-       \r
-       public void setAcceptedGroup(boolean acceptedGroup) {\r
-               this.acceptedGroup = acceptedGroup;\r
-       }\r
 }\r
index a69f37f9127ab0ffa03cacfcb076ca2a5bbf6b59..ce19cb57722be7036c2ee87fdcf91c2e96caa667 100644 (file)
@@ -12,6 +12,7 @@ import org.eclipse.swt.events.FocusEvent;
 import org.eclipse.swt.events.FocusListener;\r
 import org.eclipse.swt.events.ModifyEvent;\r
 import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.graphics.Image;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
 import org.eclipse.swt.widgets.Event;\r
@@ -29,9 +30,10 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.Activator;\r
 import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
+import eu.etaxonomy.taxeditor.view.IFavoritesDraggable;\r
 import eu.etaxonomy.taxeditor.view.NameViewer;\r
 \r
-public class NameComposite extends Composite {\r
+public class NameComposite extends Composite implements IFavoritesDraggable {\r
        \r
        public static final int ACCEPTED = 0;\r
        public static final int HOMOTYPIC_SYNONYM = 1;\r
@@ -43,6 +45,7 @@ public class NameComposite extends Composite {
        int compositeType;\r
        NameViewer nameViewer;\r
        boolean initialized = false;\r
+       Image icon;\r
 \r
        /**\r
         * Temporary procedure until ability to get accepted taxon\r
@@ -57,23 +60,12 @@ public class NameComposite extends Composite {
                \r
                this.taxon = taxon;\r
                this.synonym = synonym;\r
-\r
-               // Either initialize group composite, \r
-               //  or assume its homotypic group\r
-               if (parent instanceof GroupComposite) {\r
-                       \r
-                       if (((GroupComposite) parent).isAcceptedGroup())\r
-                               this.compositeType = HOMOTYPIC_SYNONYM;\r
-                       else\r
-                               this.compositeType = HETEROTYPIC_SYNONYM;                       \r
-                       \r
-                       if (((GroupComposite) parent).getHomotypicalGroup() == null) \r
-                               ((GroupComposite) parent).setHomotypicalGroup(\r
-                                               synonym.getName().getHomotypicalGroup());\r
-                       else\r
-                               synonym.getName().setHomotypicalGroup(\r
-                                               ((GroupComposite) parent).getHomotypicalGroup());\r
-               }               \r
+                               \r
+               if (synonym.getName().getHomotypicalGroup().equals(taxon.getName().getHomotypicalGroup())) {\r
+                       this.compositeType = HOMOTYPIC_SYNONYM;\r
+               } else {\r
+                       this.compositeType = HETEROTYPIC_SYNONYM;                       \r
+               }\r
                \r
                createNameComposite();          \r
        }\r
@@ -82,24 +74,6 @@ public class NameComposite extends Composite {
                super(parent, SWT.NONE);\r
                 \r
                this.synonym = synonym;\r
-//             this.taxon = (Taxon) synonym.getAcceptedTaxa().toArray()[0];\r
-\r
-               // Either initialize group composite, \r
-               //  or assume its homotypic group\r
-               if (parent instanceof GroupComposite) {\r
-                       \r
-                       if (((GroupComposite) parent).isAcceptedGroup())\r
-                               this.compositeType = HOMOTYPIC_SYNONYM;\r
-                       else\r
-                               this.compositeType = HETEROTYPIC_SYNONYM;\r
-                       \r
-                       if (((GroupComposite) parent).getHomotypicalGroup() == null) \r
-                               ((GroupComposite) parent).setHomotypicalGroup(\r
-                                               synonym.getName().getHomotypicalGroup());\r
-                       else\r
-                               synonym.getName().setHomotypicalGroup(\r
-                                               ((GroupComposite) parent).getHomotypicalGroup());\r
-               }                               \r
                \r
                createNameComposite();\r
        }\r
@@ -109,15 +83,7 @@ public class NameComposite extends Composite {
                                \r
                this.taxon = taxon;\r
                this.compositeType = ACCEPTED;\r
-               \r
-               // Initialize homotypic group component\r
-               if (parent instanceof GroupComposite) {\r
-                                               \r
-                       ((GroupComposite) parent).setHomotypicalGroup(\r
-                                       taxon.getName().getHomotypicalGroup());\r
-                       ((GroupComposite) parent).setAcceptedGroup(true);\r
-               }\r
-                       \r
+                                       \r
                createNameComposite();\r
        }\r
        \r
@@ -130,19 +96,37 @@ public class NameComposite extends Composite {
                                                \r
                this.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
                TableWrapLayout layout = new TableWrapLayout();\r
-               layout.numColumns = (compositeType == ACCEPTED? 1: 2);\r
+//             layout.numColumns = (compositeType == ACCEPTED? 1: 2);\r
+               layout.numColumns = 2;\r
+               layout.leftMargin = (compositeType == ACCEPTED? 0: 15);\r
                this.setLayout(layout);\r
                \r
                this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
-               if (compositeType != ACCEPTED) {        \r
-                       relationLabel = new Label(this, SWT.NONE);                                      \r
-                       relationLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
-                       \r
-                       if (this.compositeType == HOMOTYPIC_SYNONYM)\r
-                               relationLabel.setImage(Activator.getDefault().getImageRegistry().get(Activator.HOMOTYPIC_SYN));\r
-                       else\r
-                               relationLabel.setImage(Activator.getDefault().getImageRegistry().get(Activator.HETEROTYPIC_SYN));\r
+               \r
+               relationLabel = new Label(this, SWT.NONE);                                      \r
+               relationLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+               relationLabel.setLayoutData(new TableWrapData(TableWrapData.CENTER, TableWrapData.MIDDLE));\r
+               switch (compositeType) {\r
+               case ACCEPTED:\r
+                       this.icon = Activator.getDefault().getImageRegistry().get(Activator.ACCEPTED_TAXON);\r
+                       break;\r
+               case HOMOTYPIC_SYNONYM:\r
+                       this.icon = Activator.getDefault().getImageRegistry().get(Activator.HOMOTYPIC_SYN);\r
+                       break;\r
+               default:\r
+                       this.icon = Activator.getDefault().getImageRegistry().get(Activator.HETEROTYPIC_SYN);                   \r
                }\r
+               relationLabel.setImage(this.icon);\r
+               \r
+               //              if (compositeType != ACCEPTED) {        \r
+//                     relationLabel = new Label(this, SWT.NONE);                                      \r
+//                     relationLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+//                     \r
+//                     if (this.compositeType == HOMOTYPIC_SYNONYM)\r
+//                             relationLabel.setImage(Activator.getDefault().getImageRegistry().get(Activator.HOMOTYPIC_SYN));\r
+//                     else\r
+//                             relationLabel.setImage(Activator.getDefault().getImageRegistry().get(Activator.HETEROTYPIC_SYN));\r
+//             }\r
                nameViewer = new NameViewer(this);      \r
                StyledText nameWidget = nameViewer.getTextWidget();\r
                \r
@@ -173,6 +157,7 @@ public class NameComposite extends Composite {
                        public void modifyText(ModifyEvent e) {\r
                                if (initialized) {\r
                                        String text = ((StyledText) e.widget).getText();\r
+//                                     TaxonNameParserBotanicalNameImpl.NEW_INSTANCE().parseFullName(nameToBeFilled, fullName, rank)\r
                                        setName(BotanicalName.PARSED_NAME(text));\r
                                        notifyListeners(SWT.Modify, null);\r
                                }\r
@@ -218,7 +203,6 @@ public class NameComposite extends Composite {
        DragSourceListener dragSourceListener = new DragSourceListener () {\r
                \r
                public void dragStart(DragSourceEvent event) {\r
-//                     getTextWidget().notifyListeners(SWT.FocusIn, null);\r
                        getTextWidget().setFocus();\r
                        event.doit = true;\r
                }\r
@@ -226,9 +210,7 @@ public class NameComposite extends Composite {
                        TaxonTransfer.getInstance().setTaxon(synonym);\r
                }\r
                public void dragFinished(DragSourceEvent event) {\r
-                                               \r
-//                     getTextWidget().notifyListeners(SWT.FocusOut, null);\r
-                       \r
+                                                                       \r
                        if (event.detail == DND.DROP_MOVE) {\r
                                Composite parent = NameComposite.this.getParent();\r
                                Composite grandParent = parent.getParent();\r
@@ -253,7 +235,6 @@ public class NameComposite extends Composite {
                nameViewer.setShowError(name.getHasProblem());\r
        }\r
        \r
-       \r
        public TaxonNameBase getName() {\r
                return (compositeType == ACCEPTED? taxon : synonym).getName();                          \r
        }\r
@@ -285,4 +266,19 @@ public class NameComposite extends Composite {
        public StyledText getTextWidget() {\r
                return nameViewer.getTextWidget();\r
        }\r
+\r
+       @Override\r
+       public Image getIcon() {\r
+               return icon;\r
+       }\r
+\r
+       @Override\r
+       public String getLabel() {\r
+               return (compositeType == ACCEPTED? taxon : synonym).getName().getTitleCache();\r
+       }\r
+\r
+       @Override\r
+       public Object getObject() {\r
+               return (compositeType == ACCEPTED? taxon : synonym);\r
+       }\r
 }
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/heterosyn_no_bg.gif b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/heterosyn_no_bg.gif
deleted file mode 100644 (file)
index 02a6d38..0000000
Binary files a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/heterosyn_no_bg.gif and /dev/null differ
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/homosyn_no_bg.gif b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/homosyn_no_bg.gif
deleted file mode 100644 (file)
index 19575f7..0000000
Binary files a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/homosyn_no_bg.gif and /dev/null differ
index c1a42f365b42765fd763e221e4640b60489e04e3..dde9000111bcba5af7cffb19177eac2c691a2221 100644 (file)
@@ -1,5 +1,7 @@
 package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
 \r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
 import java.util.Vector;\r
 \r
 import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;\r
@@ -74,6 +76,24 @@ public class BotanicalNamePropertySource implements IPropertySource {
                        descriptors.addElement(\r
                                        new TextPropertyDescriptor(P_ID_SPECIESEP, P_SPECIESEP));\r
        }\r
+\r
+       private PropertyChangeListener taxonChangeListener = new PropertyChangeListener() {\r
+               public void propertyChange(PropertyChangeEvent arg0) {\r
+                       \r
+               }\r
+       };      \r
+       \r
+       private void addPropertyChangeListener(String id) {\r
+               if (id.equals(P_ID_TITLECACHE)) {\r
+                       this.botanicalName.addPropertyChangeListener("titleCache", new PropertyChangeListener() {\r
+\r
+                               @Override\r
+                               public void propertyChange(PropertyChangeEvent evt) {\r
+                                       System.out.println(evt.getPropertyName());\r
+                               }\r
+                       });\r
+               }\r
+       }\r
        \r
        public BotanicalNamePropertySource(BotanicalName botanicalName) {\r
                this(botanicalName, null, new String[] {P_ID_PARSED, P_ID_RANK, P_ID_TITLECACHE});\r
@@ -83,10 +103,13 @@ public class BotanicalNamePropertySource implements IPropertySource {
                        String parentid, String[] keys) {\r
                this.botanicalName = botanicalName;\r
                this.parentid = parentid;\r
-               for (String key : keys)\r
+               for (String key : keys) {\r
                        addDescriptor(key);\r
+                       addPropertyChangeListener(key);\r
+               }\r
+               botanicalName.addPropertyChangeListener("specificEpithet", taxonChangeListener);\r
        }\r
-       \r
+\r
        @Override\r
        public Object getEditableValue() {\r
                return this;\r
@@ -104,7 +127,6 @@ public class BotanicalNamePropertySource implements IPropertySource {
                        return botanicalName.getHasProblem() == true ? "problem" : "parsed" ;\r
                if (id.equals(P_ID_RANK)) {\r
                if (this.botanicalName.getRank() == null) return 0;\r
-//             String rank = this.botanicalName.getRank().getLabel();\r
                Rank rank = this.botanicalName.getRank();\r
                for (int i = 0; i < ranks.length; i++) {\r
                        if (ranks[i] == null) continue;\r
@@ -118,12 +140,26 @@ public class BotanicalNamePropertySource implements IPropertySource {
                                P_ID_TITLECACHE,\r
                                new String[] {P_ID_UNINOMIAL, P_ID_SPECIESEP});\r
                if (id.equals(P_ID_UNINOMIAL))\r
-                       return botanicalName.getGenusOrUninomial();\r
+                       return subEmptyForNull(botanicalName.getGenusOrUninomial());\r
         if (id.equals(P_ID_SPECIESEP))\r
-                       return botanicalName.getSpecificEpithet();\r
+                       return subEmptyForNull(botanicalName.getSpecificEpithet());\r
         return null;\r
        }\r
 \r
+       /**\r
+        * If the value of a TextPropertyDescriptor is initialized with NULL,\r
+        *  the user can't edit it; such values need to be set to "". \r
+        *  Hence this function.\r
+        *  \r
+        * @param string\r
+        * @return\r
+        */\r
+       private String subEmptyForNull(String string) {\r
+               if (string == null)\r
+                       return "";\r
+               return string;\r
+       }\r
+       \r
        @Override\r
        public boolean isPropertySet(Object id) {\r
                return false;\r
@@ -133,7 +169,16 @@ public class BotanicalNamePropertySource implements IPropertySource {
        public void resetPropertyValue(Object id) {}\r
 \r
        @Override\r
-       public void setPropertyValue(Object id, Object value) {}\r
+       public void setPropertyValue(Object id, Object value) {\r
+               if (id.equals(P_ID_RANK)) {\r
+                       int index = ((Integer) value).intValue();\r
+                       botanicalName.setRank(ranks[index]);\r
+        }\r
+               if (id.equals(P_ID_UNINOMIAL))\r
+                       botanicalName.setGenusOrUninomial((String) value);\r
+        if (id.equals(P_ID_SPECIESEP))\r
+                       botanicalName.setSpecificEpithet((String) value);\r
+       }\r
 \r
        /** \r
         * Any node with children must override {@link java.lang.Object#toString()} \r