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