import java.util.Map;\r
\r
import org.simantics.browsing.ui.BuiltinKeys.LabelerKey;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.simantics.Simantics;\r
import org.simantics.browsing.ui.NodeContext;\r
import org.simantics.browsing.ui.PrimitiveQueryUpdater;\r
import org.simantics.browsing.ui.graph.impl.contribution.LabelerContributionImpl;\r
import org.simantics.browsing.ui.model.browsecontexts.BrowseContext;\r
+import org.simantics.browsing.ui.model.tooltips.TooltipContribution;\r
import org.simantics.db.ReadGraph;\r
import org.simantics.db.UndoContext;\r
+import org.simantics.db.common.request.UniqueRead;\r
+import org.simantics.db.common.utils.RequestUtil;\r
import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.ui.SimanticsUI;\r
\r
public class EvaluatorLabeler extends LabelerContributionImpl {\r
\r
final BrowseContext browseContext;\r
final boolean useNodeBrowseContexts;\r
\r
+ private TooltipContribution currentTooltipContribution;\r
+ \r
public EvaluatorLabeler(PrimitiveQueryUpdater updater, NodeContext context,\r
LabelerKey key,\r
BrowseContext browseContext, boolean useNodeBrowseContexts) {\r
return "EvaluatorLabeler[" + browseContext + "] " + context;\r
}\r
\r
+ \r
+ @Override\r
+ public boolean shouldCreateToolTip(Event event, NodeContext context) {\r
+ try {\r
+ currentTooltipContribution = RequestUtil.trySyncRequest(\r
+ Simantics.getSession(),\r
+ SimanticsUI.UI_THREAD_REQUEST_START_TIMEOUT,\r
+ SimanticsUI.UI_THREAD_REQUEST_EXECUTION_TIMEOUT,\r
+ null,\r
+ new UniqueRead<TooltipContribution>() {\r
+ @Override\r
+ public TooltipContribution perform(ReadGraph graph) throws DatabaseException {\r
+ return BrowseContext.get(graph,context,browseContext,useNodeBrowseContexts).shouldCreateToolTip(graph, event, context);\r
+ }\r
+ });\r
+ if (currentTooltipContribution != null)\r
+ return true;\r
+ } catch (DatabaseException | InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
+ return false;\r
+ }\r
+ \r
+ @Override\r
+ public Composite createToolTipContentArea(Event event, Composite parent, NodeContext nodeContext) {\r
+ return (Composite) currentTooltipContribution.getTooltip(event, parent, nodeContext);\r
+ }\r
\r
}\r