Removed all CDM object manipulation from drag and drop part in NameComponent and...
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / view / nameviewersupport / NameComposite.java
index 8d100785a2dd755d52b61389c1e2a2b47a947881..8ce1b865f247ea16ac2f11b472ab6a315fc34a7a 100644 (file)
@@ -1,7 +1,7 @@
 package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
 \r
-import java.util.Observable;\r
-import java.util.Observer;\r
+import java.beans.PropertyChangeListener;\r
+import java.beans.PropertyChangeSupport;\r
 \r
 import org.eclipse.core.runtime.Assert;\r
 import org.eclipse.swt.SWT;\r
@@ -33,7 +33,7 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.strategy.parser.TaxonNameParserBotanicalNameImpl;\r
 import eu.etaxonomy.taxeditor.Activator;\r
-import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
+import eu.etaxonomy.taxeditor.controller.WidgetTransfer;\r
 import eu.etaxonomy.taxeditor.view.IFavoritesDraggable;\r
 import eu.etaxonomy.taxeditor.view.NameViewer;\r
 \r
@@ -50,6 +50,9 @@ public class NameComposite extends Composite implements IFavoritesDraggable {
        NameViewer nameViewer;\r
        boolean initialized = false;\r
        Image icon;\r
+       \r
+       PropertyChangeSupport propertyChangeSupport;\r
+       private boolean draggable;\r
 \r
        /**\r
         * Temporary procedure until ability to get accepted taxon\r
@@ -91,16 +94,29 @@ public class NameComposite extends Composite implements IFavoritesDraggable {
                createNameComposite();\r
        }\r
        \r
+       public NameComposite(Composite parent, Object data, boolean draggable) {\r
+               super(parent, SWT.NONE);\r
+               \r
+               setData(data);\r
+               \r
+               this.draggable = draggable;\r
+               \r
+               propertyChangeSupport = new PropertyChangeSupport(this);\r
+               \r
+               createNameComposite();\r
+       }\r
+       \r
        /**\r
         * \r
         */\r
        public void createNameComposite() {\r
 \r
+               propertyChangeSupport = new PropertyChangeSupport(this);\r
+               \r
                Assert.isNotNull(taxon);\r
                                                \r
                this.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
                TableWrapLayout layout = new TableWrapLayout();\r
-//             layout.numColumns = (compositeType == ACCEPTED? 1: 2);\r
                layout.numColumns = 2;\r
                layout.leftMargin = (compositeType == ACCEPTED? 0: 15);\r
                this.setLayout(layout);\r
@@ -122,15 +138,6 @@ public class NameComposite extends Composite implements IFavoritesDraggable {
                }\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
@@ -145,7 +152,7 @@ public class NameComposite extends Composite implements IFavoritesDraggable {
                        @Override\r
                        public void focusLost(FocusEvent e) {}                  \r
                });\r
-               \r
+                               \r
                nameWidget.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));           \r
                nameWidget.setFont(\r
                                SWTResourceManager.getFont("Georgia", \r
@@ -171,7 +178,6 @@ public class NameComposite extends Composite implements IFavoritesDraggable {
                });\r
                                                                \r
                // Put name into name viewer, show error if parsed incorrectly\r
-//             nameWidget.setText(getName().getTitleCache() == null ? "" : getName().getTitleCache());\r
                String initText = getName().getTitleCache() == null ? "" : getName().getTitleCache();\r
 //             initText += " NameID: " + getName().getId();\r
 //             initText += ", TaxonID: " + (compositeType == ACCEPTED? taxon : synonym).getId();\r
@@ -192,14 +198,9 @@ public class NameComposite extends Composite implements IFavoritesDraggable {
                createTempMenu();\r
                \r
                // **************** DRAG FUNCTIONALITY **************** //\r
-               Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};\r
+               Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};               \r
                int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;\r
                \r
-               // Make composite draggable\r
-               DragSource dragComposite = new DragSource (this, operations);\r
-               dragComposite.setTransfer(types);\r
-               dragComposite.addDragListener(dragSourceListener);\r
-\r
                // Make relation label draggable        \r
                DragSource dragLabel = new DragSource (relationLabel, operations);\r
                dragLabel.setTransfer(types);\r
@@ -207,8 +208,8 @@ public class NameComposite extends Composite implements IFavoritesDraggable {
        }\r
 \r
        /**\r
-        * Shared drag listener which destroys the NameComposite after the drag\r
-        *  gesture is completed.\r
+        * Shared drag listener which passes the Composite as the data in\r
+        *  a drag event.\r
         */\r
        DragSourceListener dragSourceListener = new DragSourceListener () {\r
                \r
@@ -217,26 +218,10 @@ public class NameComposite extends Composite implements IFavoritesDraggable {
                        event.doit = true;\r
                }\r
                public void dragSetData (DragSourceEvent event) {\r
-                       TaxonTransfer.getInstance().setTaxon(synonym);\r
+//                     TaxonTransfer.getInstance().setTaxon(synonym);\r
+                       WidgetTransfer.getInstance().setWidget(NameComposite.this);\r
                }\r
                public void dragFinished(DragSourceEvent event) {\r
-                                                                       \r
-                       if (event.detail == DND.DROP_MOVE) {\r
-                               Composite parent = NameComposite.this.getParent();\r
-                               Composite grandParent = parent.getParent();\r
-                               \r
-                               NameComposite.this.dispose();\r
-                               \r
-                               // If this was the last child in its homo. group,\r
-                               //  drop the group from the interface \r
-                               if (parent.getChildren().length == 0)\r
-                                       parent.dispose();\r
-                               else\r
-                                       // Only used if we're dropping it on its current homo. group\r
-                                       parent.layout();\r
-                               \r
-                               grandParent.layout();\r
-                       }\r
                }\r
        };\r
        \r
@@ -277,6 +262,32 @@ public class NameComposite extends Composite implements IFavoritesDraggable {
                return nameViewer.getTextWidget();\r
        }\r
 \r
+\r
+       /** \r
+        * Override of setParent: dispose of parent if this is its last child composite\r
+        * @see org.eclipse.swt.widgets.Control#setParent(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       public boolean setParent (Composite parent) {\r
+               Composite oldParent = this.getParent();\r
+               if (super.setParent (parent)) {\r
+                       if (oldParent.getChildren().length == 0) {\r
+                               oldParent.dispose();\r
+                       }\r
+                       propertyChangeSupport.firePropertyChange("parent", oldParent, parent);\r
+                       return true;\r
+               }\r
+               return false;\r
+       }\r
+       \r
+       public void addPropertyChangeListener(String propertyName,\r
+            PropertyChangeListener listener) {\r
+               propertyChangeSupport.addPropertyChangeListener(propertyName, listener);\r
+       }\r
+\r
+       public void removePropertyChangeListener(PropertyChangeListener listener) {\r
+               propertyChangeSupport.removePropertyChangeListener(listener);\r
+       }\r
+       \r
        @Override\r
        public Image getIcon() {\r
                return icon;\r