]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/tooltip/TooltipParticipant.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / tooltip / TooltipParticipant.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.g2d.tooltip;\r
13 \r
14 import org.simantics.g2d.diagram.IDiagram;\r
15 import org.simantics.g2d.diagram.IDiagram.CompositionListener;\r
16 import org.simantics.g2d.element.IElement;\r
17 import org.simantics.g2d.element.handler.Clickable.PressStatus;\r
18 import org.simantics.g2d.element.handler.impl.AbstractClickable;\r
19 import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
20 import org.simantics.utils.datastructures.hints.IHintListener;\r
21 import org.simantics.utils.datastructures.hints.IHintObservable;\r
22 \r
23 /**\r
24  * Tooltip support\r
25  * \r
26  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
27  *\r
28  */\r
29 public class TooltipParticipant extends BaseTooltipParticipant implements CompositionListener {\r
30 \r
31     private final ElementHoverListener listener = new ElementHoverListener();\r
32 \r
33     public TooltipParticipant() {\r
34     }\r
35 \r
36     @Override\r
37     protected void onDiagramSet(IDiagram newValue, IDiagram oldValue) {\r
38         if (oldValue == newValue)\r
39             return;\r
40         if (oldValue != null) {\r
41             for (IElement e : oldValue.getElements()) {\r
42                 removeElement(e);\r
43             }\r
44             oldValue.removeCompositionListener(this);\r
45         }\r
46         if (newValue != null) {\r
47             for (IElement e : newValue.getElements()) {\r
48                 addElement(e);\r
49             }\r
50             newValue.addCompositionListener(this);\r
51         }\r
52     }\r
53 \r
54     @Override\r
55     public void onElementAdded(IDiagram d, IElement e) {\r
56         addElement(e);\r
57     }\r
58 \r
59     @Override\r
60     public void onElementRemoved(IDiagram d, IElement e) {\r
61         removeElement(e);\r
62     }\r
63 \r
64     private void addElement(IElement e) {\r
65         e.addKeyHintListener(AbstractClickable.PRESS_STATUS_KEY, listener);\r
66     }\r
67 \r
68     private void removeElement(IElement e) {\r
69         e.removeKeyHintListener(AbstractClickable.PRESS_STATUS_KEY, listener);\r
70     }\r
71 \r
72 \r
73 \r
74     class ElementHoverListener implements IHintListener {\r
75 \r
76         @Override\r
77         public void hintChanged(IHintObservable sender, Key key,\r
78                 Object oldValue, Object newValue) {\r
79             IElement element = (IElement)sender;\r
80             PressStatus status = (PressStatus)newValue;\r
81             if (status == PressStatus.HOVER) {\r
82                 showTooltipFor(element);\r
83             } else {\r
84                 hideTooltip();\r
85             }\r
86             //System.out.println("ttp element changed " + element + " " + status);\r
87         }\r
88 \r
89         @Override\r
90         public void hintRemoved(IHintObservable sender, Key key, Object oldValue) {\r
91 \r
92         }\r
93     }\r
94 \r
95 }\r