]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/EvaluatorLabeler.java
Sync git svn branch with SVN repository r33144.
[simantics/platform.git] / bundles / org.simantics.browsing.ui.graph.impl / src / org / simantics / browsing / ui / graph / impl / EvaluatorLabeler.java
1 package org.simantics.browsing.ui.graph.impl;\r
2 \r
3 import java.util.Map;\r
4 \r
5 import org.simantics.browsing.ui.BuiltinKeys.LabelerKey;\r
6 import org.eclipse.swt.widgets.Composite;\r
7 import org.eclipse.swt.widgets.Event;\r
8 import org.simantics.Simantics;\r
9 import org.simantics.browsing.ui.NodeContext;\r
10 import org.simantics.browsing.ui.PrimitiveQueryUpdater;\r
11 import org.simantics.browsing.ui.graph.impl.contribution.LabelerContributionImpl;\r
12 import org.simantics.browsing.ui.model.browsecontexts.BrowseContext;\r
13 import org.simantics.browsing.ui.model.tooltips.TooltipContribution;\r
14 import org.simantics.db.ReadGraph;\r
15 import org.simantics.db.UndoContext;\r
16 import org.simantics.db.common.request.UniqueRead;\r
17 import org.simantics.db.common.utils.RequestUtil;\r
18 import org.simantics.db.exception.DatabaseException;\r
19 import org.simantics.ui.SimanticsUI;\r
20 \r
21 public class EvaluatorLabeler extends LabelerContributionImpl {\r
22         \r
23         final BrowseContext browseContext;\r
24         final boolean useNodeBrowseContexts;\r
25         \r
26     private TooltipContribution currentTooltipContribution;\r
27         \r
28     public EvaluatorLabeler(PrimitiveQueryUpdater updater, NodeContext context,\r
29                         LabelerKey key,\r
30                         BrowseContext browseContext, boolean useNodeBrowseContexts) {\r
31                 super(updater, context, key);\r
32                 this.browseContext = browseContext;\r
33                 this.useNodeBrowseContexts = useNodeBrowseContexts;\r
34         }\r
35 \r
36         @Override\r
37     public Map<String, String> labels(\r
38             ReadGraph graph,\r
39             NodeContext context)\r
40             throws DatabaseException {\r
41         boolean oldSynchronous = graph.setSynchronous(false); \r
42         try {\r
43                 return BrowseContext.get(graph,context,browseContext,useNodeBrowseContexts).getLabel(graph, context);\r
44         } finally {\r
45                 graph.setSynchronous(oldSynchronous);\r
46         }\r
47     }\r
48 \r
49     @Override\r
50     public int category(ReadGraph graph,\r
51             NodeContext context)\r
52     throws DatabaseException {\r
53         return 0;\r
54     }\r
55     \r
56     public Modifier \r
57     getModifier(ReadGraph graph, UndoContext undoContext, \r
58             NodeContext context, String columnKey) throws DatabaseException {\r
59         return BrowseContext.get(graph,context,browseContext,useNodeBrowseContexts).getModifier(graph, context, columnKey);\r
60     }\r
61     \r
62     public String toString() {\r
63         return "EvaluatorLabeler[" + browseContext + "] " + context;\r
64     }\r
65     \r
66     \r
67     @Override\r
68     public boolean shouldCreateToolTip(Event event, NodeContext context) {\r
69         try {\r
70             currentTooltipContribution = RequestUtil.trySyncRequest(\r
71                     Simantics.getSession(),\r
72                     SimanticsUI.UI_THREAD_REQUEST_START_TIMEOUT,\r
73                     SimanticsUI.UI_THREAD_REQUEST_EXECUTION_TIMEOUT,\r
74                     null,\r
75                     new UniqueRead<TooltipContribution>() {\r
76                 @Override\r
77                 public TooltipContribution perform(ReadGraph graph) throws DatabaseException {\r
78                     return BrowseContext.get(graph,context,browseContext,useNodeBrowseContexts).shouldCreateToolTip(graph, event, context);\r
79                 }\r
80             });\r
81             if (currentTooltipContribution != null)\r
82                 return true;\r
83         } catch (DatabaseException | InterruptedException e) {\r
84             e.printStackTrace();\r
85         }\r
86         return false;\r
87     }\r
88     \r
89     @Override\r
90     public Composite createToolTipContentArea(Event event, Composite parent, NodeContext nodeContext) {\r
91         return (Composite) currentTooltipContribution.getTooltip(event, parent, nodeContext);\r
92     }\r
93 \r
94 }\r