package eu.etaxonomy.taxeditor.prototype2.view;\r
\r
import java.beans.IntrospectionException;\r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
import java.beans.PropertyDescriptor;\r
import java.lang.reflect.InvocationTargetException;\r
+import java.lang.reflect.Method;\r
import java.util.ArrayList;\r
import java.util.List;\r
\r
import org.eclipse.ui.IEditorSite;\r
import org.eclipse.ui.PartInitException;\r
import org.eclipse.ui.part.EditorPart;\r
+import org.eclipse.ui.part.WorkbenchPart;\r
\r
import com.swtdesigner.ResourceManager;\r
import com.swtdesigner.SWTResourceManager;\r
\r
import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
import eu.etaxonomy.taxeditor.prototype2.Activator;\r
import eu.etaxonomy.taxeditor.prototype2.controller.DeleteTaxonAction;\r
import eu.etaxonomy.taxeditor.prototype2.controller.OpenNameEditorAction;\r
import eu.etaxonomy.taxeditor.prototype2.view.propertysheetsupport.PropertySheetValueLabelProvider;\r
\r
public class NameEditorView extends EditorPart {\r
- \r
/**\r
* The taxon the editor is editing \r
*/\r
* The higher taxon of the taxon the editor is editing \r
*/\r
private Taxon higherTaxon = null;\r
+ /**\r
+ * The workbench part that contains this editor, \r
+ * i.e. MultiPageTaxonView \r
+ */\r
+ private WorkbenchPart parentPart = null; \r
+ /**\r
+ * Shared listener that sets dirty state to true \r
+ * when any registered property changes \r
+ */\r
+ private PropertyChangeListener taxonChangeListener = new PropertyChangeListener() {\r
+ public void propertyChange(PropertyChangeEvent arg0) {\r
+ dirtyBoy = true;\r
+ firePropertyChange(PROP_DIRTY);\r
+ }\r
+ }; \r
/**\r
* Arrays for the creation of synonyms - text and images \r
*/\r
"orthovariant_no_bg.gif",\r
"misapplied_no_bg.gif",\r
"concept_no_bg.gif"};\r
- /*\r
- * Annotation model\r
+ String [] conceptTypes = {"congruent","included in","includes","overlaps","excludes","doubtful"};\r
+ /**\r
+ * If true, show "save" prompt before closing editor \r
*/\r
- private AnnotationModel fAnnotationModel = new AnnotationModel();\r
public boolean dirtyBoy = false;\r
String clickText;\r
\r
\r
public static final String ID = "eu.etaxonomy.taxeditor.prototype2.view.nameeditorview"; //$NON-NLS-1$\r
\r
+ public NameEditorView() {\r
+ \r
+ }\r
+ public NameEditorView(WorkbenchPart parentPart) {\r
+ this.parentPart = parentPart;\r
+ }\r
/**\r
* Create contents of the editor part\r
* @param parent\r
*/\r
@Override\r
public void createPartControl(Composite parent) {\r
- \r
+ \r
parent.setLayout(new GridLayout());\r
parent.setRedraw(true);\r
\r
// toolBar.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
\r
final ToolItem itemSave = new ToolItem(toolBar, SWT.PUSH);\r
-// final CoolItem itemSave = new CoolItem(coolBar, SWT.PUSH); \r
-// itemSave.setToolTipText("Save taxon \"" + taxon.getName().getNameCache() + "\"");\r
itemSave.setToolTipText("Save taxon");\r
itemSave.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/save_edit.gif"));\r
itemSave.addSelectionListener(new SelectionListener() {\r
public void widgetDefaultSelected(SelectionEvent e) {\r
+ dirtyBoy = false;\r
new SaveTaxonAction(taxon).run();\r
}\r
public void widgetSelected(SelectionEvent e) {\r
+ dirtyBoy = false;\r
new SaveTaxonAction(taxon).run();\r
}\r
});\r
\r
final ToolItem itemMove = new ToolItem(toolBar, SWT.DROP_DOWN);\r
-// itemMove.setToolTipText("Move taxon \"" + taxon.getName().getNameCache() + "\"");\r
itemMove.setToolTipText("Move taxon");\r
\r
final Menu menuMove = new Menu(toolBar);\r
addDropDown(itemMove, menuMove);\r
\r
- final MenuItem moveTaxonpilosellaMenuItem = new MenuItem(menuMove, SWT.NONE);\r
-// moveTaxonpilosellaMenuItem.setText("Move taxon \"" + taxon.getName().getNameCache() + "\" to another higher taxon");\r
- moveTaxonpilosellaMenuItem.setText("Move taxon to another higher taxon");\r
- moveTaxonpilosellaMenuItem.addSelectionListener(new SelectionAdapter() {\r
+ final MenuItem moveTaxonMenuItem = new MenuItem(menuMove, SWT.NONE);\r
+ moveTaxonMenuItem.setText("Move taxon to another higher taxon");\r
+ moveTaxonMenuItem.addSelectionListener(new SelectionAdapter() {\r
public void widgetSelected(final SelectionEvent e) {\r
new MoveDialogView(getSite().getShell()); \r
MoveDialogView dialog = new MoveDialogView(getSite().getShell());\r
}\r
});\r
\r
- final MenuItem turnTaxonpilosellaMenuItem = new MenuItem(menuMove, SWT.NONE);\r
- turnTaxonpilosellaMenuItem.setSelection(true);\r
-// turnTaxonpilosellaMenuItem.setText("Turn taxon \"" + taxon.getName().getNameCache() + "\" into a synonym");\r
- turnTaxonpilosellaMenuItem.setText("Turn taxon's accepted name into a synonym"); \r
- turnTaxonpilosellaMenuItem.addSelectionListener(new SelectionAdapter() {\r
+ final MenuItem taxonToSynonymMenuItem = new MenuItem(menuMove, SWT.NONE);\r
+ taxonToSynonymMenuItem.setSelection(true);\r
+ taxonToSynonymMenuItem.setText("Turn taxon's accepted name into a synonym"); \r
+ taxonToSynonymMenuItem.addSelectionListener(new SelectionAdapter() {\r
public void widgetSelected(final SelectionEvent e) {\r
new MoveDialogView(getSite().getShell()); \r
MoveDialogView dialog = new MoveDialogView(getSite().getShell());\r
itemMove.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/correction_change.gif"));\r
\r
final ToolItem itemDelete = new ToolItem(toolBar, SWT.NONE);\r
-// itemDelete.setToolTipText("Delete taxon \"" + taxon.getName().getNameCache() + "\"");\r
itemDelete.setToolTipText("Delete taxon");\r
itemDelete.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/delete_edit.gif"));\r
itemDelete.addSelectionListener(new SelectionListener() {\r
final ToolItem separator1 = new ToolItem(toolBar, SWT.SEPARATOR);\r
\r
final ToolItem itemAddRelationship = new ToolItem(toolBar, SWT.DROP_DOWN);\r
-// itemAddRelationship.setToolTipText("Add nom. or tax. relation to \"" + \r
-// taxon.getName().getNameCache() + "\"");\r
itemAddRelationship.setToolTipText("Add nom. or tax. relation to taxon"); \r
itemAddRelationship.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/rel_no_bg.gif"));\r
\r
* Create menu to add relations to the taxon\r
*/\r
final Menu menuAddRel = new Menu(toolBar);\r
-// menuAddRel.setData("x", null);\r
addDropDown(itemAddRelationship, menuAddRel);\r
\r
-// for (int i= 0; i < relTypes.length; i++) {\r
-// final MenuItem menuItem = new MenuItem(menuAddRel, SWT.NONE);\r
-// menuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/" + relImgs[i]));\r
-// menuItem.setText("Add " + relTypes[i]);\r
-// }\r
- \r
- final MenuItem testMenuItem = new MenuItem(menuAddRel, SWT.NONE);\r
- testMenuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/unknown_no_bg.gif"));\r
- testMenuItem.setText("Add synonym (type unknown)");\r
-\r
- final MenuItem addHomotypicSynonymMenuItem = new MenuItem(menuAddRel, SWT.NONE);\r
- addHomotypicSynonymMenuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/homosyn_no_bg.gif"));\r
- addHomotypicSynonymMenuItem.setText("Add homotypic synonym");\r
-\r
- final MenuItem addHeterotypicSynoynmMenuItem = new MenuItem(menuAddRel, SWT.NONE);\r
- addHeterotypicSynoynmMenuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/heterosyn_no_bg.gif"));\r
- addHeterotypicSynoynmMenuItem.setText("Add heterotypic synoynm");\r
-\r
- final MenuItem addBasionymMenuItem = new MenuItem(menuAddRel, SWT.NONE);\r
- addBasionymMenuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/basionym_no_bg.gif"));\r
- addBasionymMenuItem.setText("Add basionym");\r
-\r
- final MenuItem addReplacedSynonymMenuItem = new MenuItem(menuAddRel, SWT.NONE);\r
- addReplacedSynonymMenuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/repsyn_no_bg.gif"));\r
- addReplacedSynonymMenuItem.setText("Add replaced synonym");\r
-\r
- final MenuItem addHomonymMenuItem = new MenuItem(menuAddRel, SWT.NONE);\r
- addHomonymMenuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/homonym_no_bg.gif"));\r
- addHomonymMenuItem.setText("Add homonym");\r
-\r
- final MenuItem addOrthographicVariantMenuItem = new MenuItem(menuAddRel, SWT.NONE);\r
- addOrthographicVariantMenuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/orthovariant_no_bg.gif"));\r
- addOrthographicVariantMenuItem.setText("Add orthographic variant");\r
-\r
- final MenuItem addMisappliedNameMenuItem = new MenuItem(menuAddRel, SWT.NONE);\r
- addMisappliedNameMenuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/misapplied_no_bg.gif"));\r
- addMisappliedNameMenuItem.setText("Add misapplied name");\r
-\r
- final MenuItem addConceptRelationMenuItem_1 = new MenuItem(menuAddRel, SWT.CASCADE);\r
- addConceptRelationMenuItem_1.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/concept_no_bg.gif"));\r
- addConceptRelationMenuItem_1.setText("Add concept relation");\r
-\r
- final Menu menu = new Menu(addConceptRelationMenuItem_1);\r
- addConceptRelationMenuItem_1.setMenu(menu);\r
-\r
- final MenuItem checkboxMenuItem = new MenuItem(menu, SWT.CHECK);\r
- checkboxMenuItem.setText("congruent");\r
-\r
- final MenuItem checkboxMenuItem_1 = new MenuItem(menu, SWT.CHECK);\r
- checkboxMenuItem_1.setSelection(true);\r
- checkboxMenuItem_1.setText("included in");\r
-\r
- final MenuItem checkboxMenuItem_2 = new MenuItem(menu, SWT.CHECK);\r
- checkboxMenuItem_2.setText("includes");\r
-\r
- final MenuItem checkboxMenuItem_3 = new MenuItem(menu, SWT.CHECK);\r
- checkboxMenuItem_3.setText("overlaps");\r
-\r
- final MenuItem checkboxMenuItem_4 = new MenuItem(menu, SWT.CHECK);\r
- checkboxMenuItem_4.setText("excludes");\r
+ for (int i = 0; i < relTypes.length; i++) {\r
+ final MenuItem menuItem;\r
+ if (relTypes[i].contains("concept")) {\r
+ menuItem = new MenuItem(menuAddRel, SWT.CASCADE);\r
+ \r
+ final Menu conceptMenu = new Menu(menuItem);\r
+ menuItem.setMenu(conceptMenu);\r
+ \r
+ for (int j = 0; j < conceptTypes.length; j++) {\r
+ final MenuItem conceptMenuItem = new MenuItem(conceptMenu, SWT.CHECK);\r
+ conceptMenuItem.setText(conceptTypes[j]);\r
+ } \r
+ } else {\r
+ menuItem = new MenuItem(menuAddRel, SWT.NONE); \r
+ }\r
+ \r
+ menuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/" + relImgs[i]));\r
+ menuItem.setText("Add " + relTypes[i]);\r
+ }\r
\r
- final MenuItem checkboxMenuItem_5 = new MenuItem(menu, SWT.CHECK);\r
- checkboxMenuItem_5.setSelection(true);\r
- checkboxMenuItem_5.setText("doubtful");\r
+// SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF()\r
+// SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF()\r
+// SynonymRelationshipType.PARTIAL_SYNONYM_OF()\r
+// SynonymRelationshipType.PRO_PARTE_SYNONYM_OF()\r
+// SynonymRelationshipType.SYNONYM_OF()\r
+// NameRelationshipType.BASIONYM()\r
+// NameRelationshipType.LATER_HOMONYM() \r
\r
final ToolItem separator2 = new ToolItem(toolBar, SWT.SEPARATOR);\r
\r
});\r
}\r
final MenuItem addTaxonItem = new MenuItem(menuAdd, SWT.NONE);\r
-// addTaxonItem.setText("Add new taxon to \"" + taxon.getName().getNameCache() + "\"");\r
addTaxonItem.setText("Add new taxon to this taxon");\r
addTaxonItem.addSelectionListener(new SelectionListener() {\r
public void widgetDefaultSelected(SelectionEvent e) {\r
contentComposite.setLayout(gridLayout_2);\r
contentComposite.setRedraw(true);\r
\r
- nameComposite = new Composite(contentComposite, SWT.NONE);\r
+ nameComposite = new Composite(contentComposite, SWT.BORDER);\r
nameComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
nameComposite.setLayout(new GridLayout());\r
nameComposite.setRedraw(true);\r
\r
// clickText = "Click here to start entering accepted name or enter its individual fields in the property sheet to the right";\r
-// NameViewer acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, nameComposite);\r
+// NameViewer_ acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, nameComposite);\r
// acceptedNameViewer.setBindingContext(bindingContext);\r
// acceptedNameViewer.configure(new NameViewerConfig());\r
\r
\r
private SourceViewer createAcceptedName() {\r
\r
+// Method[] methods = BotanicalName.class.getMethods();\r
+// for (int i = 0; i < methods.length; i++) {\r
+// System.out.println("Annotations:");\r
+// for (int j = 0; i < methods[j].getAnnotations().length; j++)\r
+// System.out.println("\t" + methods[i].getAnnotations()[j]);\r
+// System.out.println("Type: " + methods[i].getReturnType().toString());\r
+// System.out.println("Name:" + methods[i].getName());\r
+// System.out.println();\r
+// }\r
+ // use annotations to find persistent methods\r
+ \r
+ \r
// PropertyDescriptor descriptor;\r
// try {\r
// descriptor = new PropertyDescriptor("genus", taxonname.getClass());\r
final SourceViewer sourceViewer = createSourceViewer(taxon.getName());\r
\r
sourceViewer.getTextWidget().setLayoutData(\r
- new GridData(SWT.FILL, SWT.CENTER, true, false, 2 , 1));\r
+ new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));\r
sourceViewer.getTextWidget().setFont(\r
SWTResourceManager.getFont("Georgia", 12, SWT.NONE)); \r
\r
sourceViewer.getTextWidget().setText("");\r
sourceViewer.getTextWidget().setFont(SWTResourceManager.getFont("Georgia", 12, SWT.NONE));\r
sourceViewer.getTextWidget().setForeground(SWTResourceManager.getColor(0, 0, 0));\r
- dirtyBoy = true;\r
- firePropertyChange(PROP_DIRTY);\r
+// dirtyBoy = true;\r
+// firePropertyChange(PROP_DIRTY);\r
}\r
}\r
public void focusLost(FocusEvent e) { \r
ctlChooseRelType.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
((Label) ctlChooseRelType).setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/unknown_no_bg.gif"));\r
ctlChooseRelType.moveBelow(precedingControl);\r
- \r
- ctlChooseRelType.addMouseListener(new MouseListener() {\r
- public void mouseDoubleClick(MouseEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
- public void mouseDown(MouseEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
- public void mouseUp(MouseEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
- });\r
\r
createRelationMenu((Label) ctlChooseRelType);\r
\r
}\r
public void focusLost(FocusEvent e) {\r
// ((StyledText) e.widget).setBackgrond((Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)));\r
- String text = ((StyledText) e.widget).getText(); \r
+ String text = ((StyledText) e.widget).getText();\r
+ \r
+ // dummy code to get squigglies for walter's screenshots\r
if (text.contains("(?)")) {\r
sourceViewer.getAnnotationModel().addAnnotation(\r
new ErrorAnnotation(1, "Could not parse name."), \r
taxon = null;\r
}\r
\r
- // get parent taxon\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("nameCache", taxonChangeListener);\r
+ taxon.addPropertyChangeListener("relationsFromThisTaxon", taxonChangeListener);\r
+ taxon.addPropertyChangeListener("relationsToThisTaxon", taxonChangeListener);\r
+ \r
setSite(site);\r
setInput(input);\r
setBindingContext(new DataBindingContext());\r
null, PropertySheetNode.EDITABLE);\r
propertySheetNodes.add(node);\r
\r
- // note: only top-level nodes are "add"-ed - otherwise, they are\r
+ // Note: only top-level nodes are "add"-ed - otherwise, they are\r
// instantiated with their parent node\r
new PropertySheetNode("Genus", BeansObservables.observeValue(botName, "uninomial"), \r
node, PropertySheetNode.EDITABLE);\r