\r
package eu.etaxonomy.taxeditor.navigation;\r
\r
+import java.util.Set;\r
+\r
import org.apache.log4j.Logger;\r
import org.eclipse.core.databinding.beans.BeansObservables;\r
+import org.eclipse.core.databinding.observable.map.IMapChangeListener;\r
+import org.eclipse.core.databinding.observable.map.IObservableMap;\r
+import org.eclipse.core.databinding.observable.map.MapChangeEvent;\r
import org.eclipse.core.databinding.observable.set.IObservableSet;\r
-import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;\r
+import org.eclipse.jface.viewers.ColumnLabelProvider;\r
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;\r
import org.eclipse.swt.graphics.Image;\r
\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.editor.name.IterableSynonymyList;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
/**\r
* @created 29.05.2008\r
* @version 1.0\r
*/\r
-public class TaxonomicTreeLabelProvider extends ObservableMapLabelProvider {\r
+public class TaxonomicTreeLabelProvider extends ColumnLabelProvider {\r
private static final Logger logger = Logger\r
.getLogger(TaxonomicTreeLabelProvider.class);\r
\r
+ private final IObservableMap[] attributeMaps;\r
+\r
+ private IMapChangeListener mapChangeListener = new IMapChangeListener() {\r
+ public void handleMapChange(MapChangeEvent event) {\r
+ Set affectedElements = event.diff.getChangedKeys();\r
+ LabelProviderChangedEvent newEvent = new LabelProviderChangedEvent(\r
+ TaxonomicTreeLabelProvider.this, affectedElements\r
+ .toArray());\r
+ fireLabelProviderChanged(newEvent);\r
+ }\r
+ };\r
+\r
+ \r
public TaxonomicTreeLabelProvider(IObservableSet observableTaxonSet) {\r
- super(BeansObservables.observeMaps(\r
+ this(BeansObservables.observeMaps(\r
observableTaxonSet, \r
Taxon.class, new String[]{"name"}));\r
}\r
\r
+ /**\r
+ * @param attributeMap\r
+ */\r
+ public TaxonomicTreeLabelProvider(IObservableMap attributeMap) {\r
+ this(new IObservableMap[] { attributeMap });\r
+ }\r
+\r
+ /**\r
+ * @param attributeMaps\r
+ */\r
+ public TaxonomicTreeLabelProvider(IObservableMap[] attributeMaps) {\r
+ System.arraycopy(attributeMaps, 0, this.attributeMaps = attributeMaps, 0, attributeMaps.length);\r
+ for (int i = 0; i < attributeMaps.length; i++) {\r
+ attributeMaps[i].addMapChangeListener(mapChangeListener);\r
+ }\r
+ }\r
+ \r
/** \r
* \r
* @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnImage(java.lang.Object, int)\r
}\r
return null;\r
}\r
+ \r
+ public String getText(Object element) {\r
+ return getColumnText(element, 0);\r
+ }\r
+ \r
/**\r
* JFace databinding syntax makes it to difficult to retrieve\r
* Taxon.getName().getNameCache, so override function that returns\r
return CdmUtil.getDisplayName((Taxon) element); \r
}\r
return "";\r
- } \r
+ } \r
\r
+ public String getToolTipText(Object element) {\r
+ if (element instanceof Taxon) {\r
+ return getSynonymyListDisplay((Taxon) element);\r
+ }\r
+ return null;\r
+ }\r
+ \r
+ public void dispose() {\r
+ for (int i = 0; i < attributeMaps.length; i++) {\r
+ attributeMaps[i].removeMapChangeListener(mapChangeListener);\r
+ }\r
+ super.dispose();\r
+ }\r
+ \r
+ /**\r
+ * @param taxon \r
+ * @return\r
+ */\r
+ private String getSynonymyListDisplay(Taxon taxon) {\r
+ IterableSynonymyList synonymyList = new IterableSynonymyList(\r
+ taxon);\r
+ String synonymyListDisplay = CdmUtil\r
+ .getDisplayName(taxon);\r
+ \r
+ for (TaxonBase synonymOrMisName : synonymyList) {\r
+ TaxonNameBase name = synonymOrMisName.getName();\r
+ if (name != null) {\r
+ synonymyListDisplay += "\n "\r
+ + CdmUtil.getDisplayName(name);\r
+ }\r
+ }\r
+ return synonymyListDisplay;\r
+ }\r
}\r
import org.eclipse.jface.dialogs.MessageDialog;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
import org.eclipse.jface.viewers.CellEditor;\r
+import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;\r
import org.eclipse.jface.viewers.DoubleClickEvent;\r
import org.eclipse.jface.viewers.ICellEditorListener;\r
import org.eclipse.jface.viewers.ICellModifier;\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.graphics.Point;\r
-import org.eclipse.swt.graphics.Rectangle;\r
-import org.eclipse.swt.layout.FillLayout;\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.Item;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Listener;\r
import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.swt.widgets.Shell;\r
import org.eclipse.swt.widgets.Tree;\r
import org.eclipse.swt.widgets.TreeItem;\r
\r
import eu.etaxonomy.cdm.model.name.NonViralName;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.actions.TaxonTransfer;\r
import eu.etaxonomy.taxeditor.controller.EditorController;\r
import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
-import eu.etaxonomy.taxeditor.editor.name.IterableSynonymyList;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
import eu.etaxonomy.taxeditor.model.ICdmTaxonSetListener;\r
* individual tree items out-of-the-box, so tipListener below builds one\r
*/\r
private void createToolTips() {\r
- Tree tree = this.getTree();\r
-\r
- // Disable native tooltip\r
- tree.setToolTipText("");\r
-\r
-// ColumnViewerToolTipSupport toolTip = \r
-// new ColumnViewerToolTipSupport(this, ToolTip.RECREATE, false);\r
- \r
- tree.addListener(SWT.Dispose, tipListener);\r
- tree.addListener(SWT.KeyDown, tipListener);\r
- tree.addListener(SWT.MouseMove, tipListener);\r
- tree.addListener(SWT.MouseHover, tipListener);\r
+ ColumnViewerToolTipSupport.enableFor(this);\r
}\r
-\r
+ \r
void createDragAndDrop() {\r
final Tree tree = this.getTree();\r
Transfer[] types = new Transfer[] { TaxonTransfer.getInstance() };\r
setLabelProvider(new TaxonomicTreeLabelProvider(\r
observableTaxonSet));\r
\r
+// setLabelProvider(new TaxonomicTreeLabelProvider2(\r
+// observableTaxonSet));\r
+ \r
+\r
// TaxonTreeList added to every time a node is opened with its\r
// children, or when a new taxon is added\r
setInput(CdmSessionDataRepository.getDefault().getRootTaxa());\r
\r
// Sort according to "getColumnText" above, i.e. by NameCache\r
setComparator(new ViewerComparator());\r
- \r
+ \r
// Listen for changes to taxa in session data repository\r
CdmSessionDataRepository.getDefault().\r
addTaxonSetListener(new ICdmTaxonSetListener() {\r
this.setSelection(new StructuredSelection(taxon), true);\r
this.reveal(taxon);\r
}\r
-\r
- // Implement a "fake" tooltip\r
- final Listener labelListener = new Listener() {\r
- public void handleEvent(Event event) {\r
- Label label = (Label) event.widget;\r
- Shell shell = label.getShell();\r
- switch (event.type) {\r
- case SWT.MouseDown:\r
- Event e = new Event();\r
- e.item = (TreeItem) label.getData("_TREEITEM");\r
- // Assuming table is single select, set the selection as if\r
- // the mouse down event went through to the table\r
- // Tree tree = TaxonomicTreeViewer.this.getTree();\r
- Tree tree = getTree();\r
- tree.setSelection(new TreeItem[] { (TreeItem) e.item });\r
- tree.notifyListeners(SWT.Selection, e);\r
- shell.dispose();\r
- tree.setFocus();\r
- break;\r
- case SWT.MouseExit:\r
- shell.dispose();\r
- break;\r
- }\r
- }\r
- };\r
-\r
- Listener tipListener = new Listener() {\r
- Shell tip = null;\r
- Label label = null;\r
-\r
- public void handleEvent(Event event) {\r
- switch (event.type) {\r
- case SWT.Dispose:\r
- case SWT.KeyDown:\r
- case SWT.MouseMove: {\r
- if (tip == null)\r
- break;\r
- tip.dispose();\r
- tip = null;\r
- label = null;\r
- break;\r
- }\r
- case SWT.MouseHover: {\r
- \r
- // TODO make disappear on ESC\r
- \r
- // Item item = TaxonomicTreeViewer.this.getItemAt(new\r
- // Point(event.x, event.y));\r
- Item item = getItemAt(new Point(event.x, event.y));\r
- if (item != null) {\r
- if (tip != null && !tip.isDisposed())\r
- tip.dispose();\r
- tip = new Shell(Display.getCurrent(), SWT.ON_TOP\r
- | SWT.NO_FOCUS | SWT.TOOL);\r
- tip.setBackground(Display.getCurrent().getSystemColor(\r
- SWT.COLOR_INFO_BACKGROUND));\r
- FillLayout layout = new FillLayout();\r
- layout.marginWidth = 2;\r
- tip.setLayout(layout);\r
- label = new Label(tip, SWT.NONE);\r
- label.setForeground(Display.getCurrent().getSystemColor(\r
- SWT.COLOR_INFO_FOREGROUND));\r
- label.setBackground(Display.getCurrent().getSystemColor(\r
- SWT.COLOR_INFO_BACKGROUND));\r
- label.setData("_TABLEITEM", item);\r
- label.setText(item.getText());\r
- if (item.getData() instanceof Taxon) {\r
- Taxon taxon = (Taxon) item.getData();\r
- IterableSynonymyList synonymyList = new IterableSynonymyList(\r
- taxon);\r
- String synonymyListDisplay = CdmUtil\r
- .getDisplayName(taxon);\r
- \r
- for (TaxonBase synonymOrMisName : synonymyList) {\r
- TaxonNameBase name = synonymOrMisName.getName();\r
- if (name != null) {\r
- synonymyListDisplay += "\n "\r
- + CdmUtil.getDisplayName(name);\r
- }\r
- }\r
- label.setText(synonymyListDisplay);\r
- }\r
- // label.setText ("");\r
- label.addListener(SWT.MouseExit, labelListener);\r
- label.addListener(SWT.MouseDown, labelListener);\r
- Point size = tip.computeSize(SWT.DEFAULT, SWT.DEFAULT);\r
- Rectangle rect = ((TreeItem) item).getBounds(0);\r
- Point pt = getTree().toDisplay(rect.x, rect.y);\r
- \r
- // Move tip 100px to the right so as not to interfere w clicking\r
- tip.setBounds(pt.x+100, pt.y, size.x, size.y);\r
- tip.setVisible(true);\r
- }\r
- }\r
- }\r
- }\r
- };\r
\r
public void createMenu() {\r
final MenuManager menuManager = new MenuManager();\r
});\r
}\r
\r
+\r
/**\r
* Opens a child node for the parent taxon using the quick name singleton\r
*/\r