Changed synonym list hover tooltip to jface standard tooltip.
authorp.ciardelli <p.ciardelli@localhost>
Thu, 26 Mar 2009 16:18:40 +0000 (16:18 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Thu, 26 Mar 2009 16:18:40 +0000 (16:18 +0000)
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeLabelProvider.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeViewer.java

index 404ab1b8ee268f8c879c59f8de365e73e39a694e..8b04a6aecd11aef513f6da8a1b210f399ef89302 100644 (file)
@@ -9,16 +9,24 @@
 \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
@@ -26,16 +34,46 @@ import eu.etaxonomy.taxeditor.model.CdmUtil;
  * @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
@@ -49,6 +87,11 @@ public class TaxonomicTreeLabelProvider extends ObservableMapLabelProvider {
                }\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
@@ -62,6 +105,39 @@ public class TaxonomicTreeLabelProvider extends ObservableMapLabelProvider {
                        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
index ea8a2ff7181840310aea598d8da13588892592c6..40cc30fe1644df64f7616c1afd202b02f89531e0 100644 (file)
@@ -23,6 +23,7 @@ import org.eclipse.jface.action.Separator;
 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
@@ -43,25 +44,14 @@ import org.eclipse.swt.dnd.DropTarget;
 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
@@ -71,7 +61,6 @@ import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;
 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
@@ -130,20 +119,9 @@ public class TaxonomicTreeViewer extends TreeViewer{
         * 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
@@ -333,13 +311,17 @@ public class TaxonomicTreeViewer extends TreeViewer{
                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
@@ -407,103 +389,6 @@ public class TaxonomicTreeViewer extends TreeViewer{
                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
@@ -542,6 +427,7 @@ public class TaxonomicTreeViewer extends TreeViewer{
                });\r
        }\r
        \r
+\r
        /**\r
         * Opens a child node for the parent taxon using the quick name singleton\r
         */\r