]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/tooltips/DescriptionTooltipRule.java
Merge "Testing SonarQube with Simantics Platform SDK"
[simantics/platform.git] / bundles / org.simantics.browsing.ui.model / src / org / simantics / browsing / ui / model / tooltips / DescriptionTooltipRule.java
1 package org.simantics.browsing.ui.model.tooltips;\r
2 \r
3 import java.util.Map;\r
4 \r
5 import org.eclipse.swt.SWT;\r
6 import org.eclipse.swt.graphics.FontMetrics;\r
7 import org.eclipse.swt.graphics.GC;\r
8 import org.eclipse.swt.layout.GridData;\r
9 import org.eclipse.swt.layout.GridLayout;\r
10 import org.eclipse.swt.widgets.Composite;\r
11 import org.eclipse.swt.widgets.Text;\r
12 import org.simantics.browsing.ui.BuiltinKeys;\r
13 import org.simantics.browsing.ui.NodeContext;\r
14 import org.simantics.db.ReadGraph;\r
15 import org.simantics.db.Resource;\r
16 import org.simantics.db.exception.DatabaseException;\r
17 import org.simantics.db.layer0.variable.Variable;\r
18 import org.simantics.layer0.Layer0;\r
19 \r
20 public class DescriptionTooltipRule implements TooltipRule {\r
21     \r
22     public static final DescriptionTooltipRule INSTANCE = new DescriptionTooltipRule();\r
23     \r
24     public DescriptionTooltipRule() {\r
25     }\r
26 \r
27     @Override\r
28     public Object createTooltip(Object event, Object parentComponent, NodeContext context, Map<Object, Object> auxiliary) {\r
29         Composite parent = (Composite)parentComponent;\r
30         Composite composite = new Composite(parent, SWT.NONE);\r
31         //ScrolledComposite composite = new ScrolledComposite(parent, SWT.NONE);\r
32         \r
33         composite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));\r
34         GridLayout layout = new GridLayout(1, false);\r
35         composite.setLayout(layout);\r
36         Text text = new Text(composite, SWT.NONE | SWT.READ_ONLY | SWT.WRAP);\r
37         text.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));\r
38         \r
39         String toolTipContent = (String) auxiliary.get("content");\r
40         text.setText(toolTipContent);\r
41         \r
42         GC gc = new GC(text);\r
43         FontMetrics fm = gc.getFontMetrics();\r
44         int width = toolTipContent.length() * fm.getAverageCharWidth();\r
45         gc.dispose();\r
46         GridData gridData = new GridData();\r
47         if (width < 500)\r
48             gridData.widthHint = width;\r
49         else\r
50             gridData.widthHint = 500;\r
51         \r
52         text.setLayoutData(gridData);\r
53         \r
54         return composite;\r
55     }\r
56 \r
57     @Override\r
58     public boolean isCompatible(Class<?> contentType) {\r
59         return (contentType == Resource.class || contentType == Variable.class);\r
60     }\r
61     \r
62     private static String getToolTipContent(ReadGraph graph, NodeContext nodeContext) throws DatabaseException {\r
63         Object input = nodeContext.getConstant(BuiltinKeys.INPUT);\r
64         String content = null;\r
65         if (input instanceof Variable) {\r
66             Variable var = (Variable) input;\r
67             Resource res = var.getPredicateResource(graph);\r
68             Layer0 L0 = Layer0.getInstance(graph);\r
69             String description = graph.getPossibleRelatedValue2(res, L0.HasDescription);\r
70             return description;\r
71         } else if (input instanceof Resource) {\r
72             Resource res = (Resource) input;\r
73 \r
74             Layer0 L0 = Layer0.getInstance(graph);\r
75             String description = graph.getPossibleRelatedValue2(res, L0.HasDescription);\r
76             return description;\r
77         }\r
78         return content;\r
79     }\r
80 \r
81     @Override\r
82     public boolean shouldCreateToolTip(ReadGraph graph  , NodeContext context, Map<Object, Object> auxiliary) throws DatabaseException {\r
83         String content = getToolTipContent(graph, context);\r
84         if (content == null || content.isEmpty())\r
85             return false;\r
86         auxiliary.put("content", content);\r
87         return true;\r
88     }\r
89 \r
90 }\r