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
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
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
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
* 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
*/\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
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
// 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
}\r
} catch (Exception e) {\r
}\r
- } \r
+ }\r
}
\ No newline at end of file
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
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
--- /dev/null
+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
--- /dev/null
+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
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
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
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
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
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
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
(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
\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
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
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
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
\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
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
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
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
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
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
*/\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
}\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
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
\r
}\r
\r
+\r
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
}\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
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
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
int compositeType;\r
NameViewer nameViewer;\r
boolean initialized = false;\r
+ Image icon;\r
\r
/**\r
* Temporary procedure until ability to get accepted taxon\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
+ 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
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
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
\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
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
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
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
nameViewer.setShowError(name.getHasProblem());\r
}\r
\r
- \r
public TaxonNameBase getName() {\r
return (compositeType == ACCEPTED? taxon : synonym).getName(); \r
}\r
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
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
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
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
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
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
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