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
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
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
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
}\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
@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
});\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
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
}\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
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
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