package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.custom.StyledText;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DragSource;\r
-import org.eclipse.swt.dnd.DragSourceEvent;\r
-import org.eclipse.swt.dnd.DragSourceListener;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.events.FocusAdapter;\r
-import org.eclipse.swt.events.FocusEvent;\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.layout.GridLayout;\r
+import org.eclipse.swt.graphics.Font;\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.Label;\r
-import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.swt.widgets.MenuItem;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-import org.eclipse.ui.forms.widgets.FormToolkit;\r
\r
-import com.swtdesigner.SWTResourceManager;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\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
-import eu.etaxonomy.taxeditor.view.NameEditorView;\r
-import eu.etaxonomy.taxeditor.view.NameViewer;\r
-\r
-public class NameComposite extends Composite {\r
- \r
- public static final int ACCEPTED = 0;\r
- public static final int HOMOTYPIC_SYNONYM = 1;\r
- public static final int HETEROTYPIC_SYNONYM = 2;\r
- \r
- Label relationLabel;\r
- Synonym synonym;\r
- Taxon taxon;\r
- int compositeType;\r
- NameViewer nameViewer;\r
- boolean initialized = false;\r
-\r
- /**\r
- * Temporary procedure until ability to get accepted taxon\r
- * from synonym is implemented\r
- * \r
- * @param parent\r
- * @param synonym\r
- * @param taxon\r
- */\r
- public NameComposite(Composite parent, Synonym synonym, Taxon taxon) {\r
- super(parent, SWT.NONE);\r
- \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
- createNameComposite(); \r
- }\r
- \r
- public NameComposite(Composite parent, Synonym synonym) {\r
- 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
-\r
- public NameComposite(Composite parent, Taxon taxon) {\r
- super(parent, SWT.NONE);\r
- \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
- createNameComposite();\r
- }\r
- \r
- /**\r
- * \r
- */\r
- public void createNameComposite() {\r
-\r
- Assert.isNotNull(taxon);\r
- \r
- // Graphic layout of composite\r
- GridLayout gridLayout = new GridLayout();\r
- gridLayout.verticalSpacing = 0;\r
- gridLayout.marginWidth = 5;\r
- gridLayout.marginHeight = 5;\r
- gridLayout.horizontalSpacing = 5;\r
- gridLayout.numColumns = (compositeType == ACCEPTED? 1: 2);\r
- this.setLayout(gridLayout);\r
- this.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
- this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- if (compositeType != ACCEPTED) {\r
-// relationLabel.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/heterosyn_no_bg.gif")); \r
- relationLabel = new Label(this, SWT.NONE);\r
- relationLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); \r
- relationLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- \r
- if (this.compositeType == HOMOTYPIC_SYNONYM)\r
- relationLabel.setImage(SWTResourceManager.getImage(NameComposite.class, "homosyn_no_bg.gif"));\r
-// relationLabel.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/homosyn_no_bg.gif"));\r
- else\r
- relationLabel.setImage(SWTResourceManager.getImage(NameComposite.class, "heterosyn_no_bg.gif"));\r
-// relationLabel.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/heterosyn_no_bg.gif"));\r
- }\r
- nameViewer = new NameViewer(this); \r
- nameViewer.getTextWidget().setLayoutData(\r
- new GridData(SWT.FILL, SWT.CENTER, true, false));\r
- nameViewer.getTextWidget().setFont(\r
- SWTResourceManager.getFont("Georgia", \r
- (compositeType == ACCEPTED? 12 : 10), \r
- SWT.NONE)); \r
- \r
- // Add verify listener to check for line breaks\r
- nameViewer.getTextWidget().addVerifyListener(\r
- new NameViewerVerifyListener(taxon));\r
- \r
- // Listen for changes to name\r
- nameViewer.getTextWidget().addModifyListener(new ModifyListener () {\r
- public void modifyText(ModifyEvent e) {\r
- if (initialized) {\r
- String text = ((StyledText) e.widget).getText();\r
- setName(BotanicalName.PARSED_NAME(text));\r
- }\r
- }\r
- });\r
-\r
- // Listen for focus to send this name to the property sheet\r
- nameViewer.getTextWidget().addFocusListener(new FocusAdapter () {\r
- public void focusGained(FocusEvent e) {\r
- showBorder();\r
- \r
- BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
- botSpecies.setTitleCache("Hieracium geranium Smith");\r
- botSpecies.setUninomial("Hieracium");\r
- botSpecies.setSpecificEpithet("geranium");\r
- \r
- nameEditor.setSelection((BotanicalName) getName());\r
-// sendEvent(null);\r
-// notifyListeners(SWT.Selection, new Event());\r
- // Fire \r
-// if (nameEditor != null) \r
-// nameEditor.setPropertySheetNodes(getName());\r
- }\r
- \r
- public void focusLost(FocusEvent e) {\r
- hideBorder();\r
- }\r
- \r
- });\r
- \r
- // Put name into name viewer, show error if parsed incorrectly\r
- nameViewer.getTextWidget().setText(getName().getTitleCache() == null ? "" : getName().getTitleCache());\r
- nameViewer.setShowError(getName().getHasProblem());\r
- \r
- // Put cursor at end of name viewer\r
- nameViewer.getTextWidget().setCaretOffset(\r
- nameViewer.getTextWidget().getText().length());\r
- \r
- // Set composite to initialized - any new input will now be parsed\r
- initialized = true;\r
- \r
- // Add drag functionality to synonyms only\r
- if (compositeType == ACCEPTED) return;\r
+public class NameComposite extends EditableGroupedComposite {\r
\r
- // make menu temp\r
- createTempMenu();\r
- \r
- // **************** DRAG FUNCTIONALITY **************** //\r
- Transfer[] types = new Transfer[] {TaxonTransfer.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
- dragLabel.addDragListener(dragSourceListener);\r
- }\r
- \r
- /**\r
- * Shared drag listener which destroys the NameComposite after the drag\r
- * gesture is completed.\r
- */\r
- DragSourceListener dragSourceListener = new DragSourceListener () {\r
- \r
- public void dragStart(DragSourceEvent event) {\r
- showBorder();\r
- event.doit = true;\r
- }\r
- public void dragSetData (DragSourceEvent event) {\r
- TaxonTransfer.getInstance().setTaxon(synonym);\r
- }\r
- public void dragFinished(DragSourceEvent event) {\r
- \r
- hideBorder();\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
- private NameEditorView nameEditor;\r
- private IManagedForm managedForm;\r
+ // TODO is there any reason not to get these directly from Plugin\r
+ public static final int ACCEPTED_INDENT = 0;\r
+ public static final int SYNONYM_INDENT = 15;\r
+ public static final int MISAPPLIEDNAME_INDENT = 15;\r
\r
- public void setName(TaxonNameBase name) { \r
- (compositeType == ACCEPTED? taxon : synonym).setName(name);\r
- nameViewer.setShowError(name.getHasProblem());\r
- }\r
+ public static final Font ACCEPTED_FONT = TaxEditorPlugin.getDefault().getFont(ITaxEditorConstants.ACCEPTED_TAXON_FONT);\r
+ public static final Font SYNONYM_FONT = TaxEditorPlugin.getDefault().getFont(ITaxEditorConstants.SYNONYM_FONT);\r
+ public static final Font MISAPPLIEDNAME_FONT = TaxEditorPlugin.getDefault().getFont(ITaxEditorConstants.MISAPPLIEDNAME_FONT);\r
\r
- protected void showBorder() {\r
- if (managedForm != null) {\r
- nameViewer.getTextWidget().setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
- managedForm.getToolkit().paintBordersFor(this);\r
-// this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
-// managedForm.getToolkit().paintBordersFor(this.getParent());\r
- managedForm.getForm().reflow(true);\r
- }\r
- }\r
-\r
- protected void hideBorder() {\r
- if (managedForm != null) {\r
- nameViewer.getTextWidget().setData(FormToolkit.KEY_DRAW_BORDER, null);\r
- managedForm.getToolkit().paintBordersFor(this);\r
-// this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
-// managedForm.getToolkit().paintBordersFor(this.getParent());\r
- managedForm.getForm().reflow(true);\r
- }\r
- }\r
+ public static final Image ACCEPTED_ICON = TaxEditorPlugin.getDefault().getImage(ITaxEditorConstants.ACCEPTED_TAXON_ICON);\r
+ public static final Image HOMOTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImage(ITaxEditorConstants.HOMOTYPIC_SYN_ICON);\r
+ public static final Image HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImage(ITaxEditorConstants.HOMOTYPIC_SYN_ORIGINAL_ICON);\r
+ public static final Image HETEROTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImage(ITaxEditorConstants.HETEROTYPIC_SYN_ICON);\r
+ public static final Image HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImage(ITaxEditorConstants.HETEROTYPIC_SYN_ORIGINAL_ICON);\r
+ public static final Image MISAPPLIEDNAME_ICON = TaxEditorPlugin.getDefault().getImage(ITaxEditorConstants.MISAPPLIED_NAME_ICON);\r
+ public static final Image AUTONYM_ICON = TaxEditorPlugin.getDefault().getImage(ITaxEditorConstants.AUTONYM_ICON);\r
+ public static final Image BASIONYM_ICON = TaxEditorPlugin.getDefault().getImage(ITaxEditorConstants.BASIONYM_ICON);\r
+ public static final Image MOVE = TaxEditorPlugin.getDefault().getImage(ITaxEditorConstants.MOVE_ICON);\r
\r
- public TaxonNameBase getName() {\r
- return (compositeType == ACCEPTED? taxon : synonym).getName(); \r
- }\r
-\r
- public void setNameEditorView(NameEditorView nameEditorView) {\r
- this.nameEditor = nameEditorView;\r
- this.managedForm = nameEditorView.getManagedForm();\r
+ public NameComposite(Composite parent) {\r
+ super(parent);\r
}\r
- \r
- private void createTempMenu() {\r
- final Menu menu1 = new Menu(relationLabel);\r
- relationLabel.setMenu(menu1);\r
-\r
- final MenuItem deletehieraciumFuscoatrumMenuItem = new MenuItem(menu1, SWT.NONE);\r
- deletehieraciumFuscoatrumMenuItem.setText("Delete \"Hieracium wolffii subsp. trichotranssilvanicum\" from this taxon");\r
-\r
- new MenuItem(menu1, SWT.SEPARATOR);\r
-\r
- final MenuItem moveMenuItem = new MenuItem(menu1, SWT.NONE);\r
- moveMenuItem.setText("Make \"Hieracium wolffii subsp. trichotranssilvanicum\" the accepted name of a new taxon");\r
-\r
- final MenuItem makehieraciumFuscoatrumMenuItem = new MenuItem(menu1, SWT.NONE);\r
- makehieraciumFuscoatrumMenuItem.setText("Make \"Hieracium wolffii subsp. trichotranssilvanicum\" the accepted name of this taxon");\r
-\r
- new MenuItem(menu1, SWT.SEPARATOR);\r
-\r
- final MenuItem turnhieraciumFuscoatrumMenuItem_3 = new MenuItem(menu1, SWT.NONE);\r
- turnhieraciumFuscoatrumMenuItem_3.setText("Turn \"Hieracium wolffii subsp. trichotranssilvanicum\" into a basionym");\r
-\r
- final MenuItem turnhieraciumFuscoatrumMenuItem_4 = new MenuItem(menu1, SWT.NONE);\r
- turnhieraciumFuscoatrumMenuItem_4.setText("...");\r
- }\r
-\r
- \r
}
\ No newline at end of file