1 package org.simantics.browsing.ui.model.tooltips;
\r
3 import java.util.Map;
\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
20 public class DescriptionTooltipRule implements TooltipRule {
\r
22 public static final DescriptionTooltipRule INSTANCE = new DescriptionTooltipRule();
\r
24 public DescriptionTooltipRule() {
\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
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
39 String toolTipContent = (String) auxiliary.get("content");
\r
40 text.setText(toolTipContent);
\r
42 GC gc = new GC(text);
\r
43 FontMetrics fm = gc.getFontMetrics();
\r
44 int width = toolTipContent.length() * fm.getAverageCharWidth();
\r
46 GridData gridData = new GridData();
\r
48 gridData.widthHint = width;
\r
50 gridData.widthHint = 500;
\r
52 text.setLayoutData(gridData);
\r
58 public boolean isCompatible(Class<?> contentType) {
\r
59 return (contentType == Resource.class || contentType == Variable.class);
\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
71 } else if (input instanceof Resource) {
\r
72 Resource res = (Resource) input;
\r
74 Layer0 L0 = Layer0.getInstance(graph);
\r
75 String description = graph.getPossibleRelatedValue2(res, L0.HasDescription);
\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
86 auxiliary.put("content", content);
\r