]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/profile/ResourceSCLTextGridStyle.java
ResourceSCLTextGridStyle for creating Resource-based monitors with SCL
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / profile / ResourceSCLTextGridStyle.java
1 package org.simantics.diagram.profile;
2
3 import java.awt.Font;
4 import java.awt.geom.AffineTransform;
5
6 import org.simantics.Simantics;
7 import org.simantics.datatypes.literal.Vec2d;
8 import org.simantics.db.ReadGraph;
9 import org.simantics.db.Resource;
10 import org.simantics.db.exception.DatabaseException;
11 import org.simantics.db.layer0.variable.Variable;
12 import org.simantics.db.layer0.variable.Variables;
13 import org.simantics.diagram.G2DUtils;
14 import org.simantics.diagram.stubs.DiagramResource;
15 import org.simantics.diagram.stubs.G2DResource;
16 import org.simantics.diagram.synchronization.graph.DiagramGraphUtil;
17 import org.simantics.scl.runtime.function.Function1;
18 import org.simantics.scl.runtime.tuple.Tuple3;
19 import org.simantics.utils.datastructures.Pair;
20
21 /**
22  * @author Antti Villberg
23  */
24 public class ResourceSCLTextGridStyle extends TextGridStyle {
25
26         final Resource style;
27         final Font font;
28
29         public ResourceSCLTextGridStyle(ReadGraph graph, Resource style) throws DatabaseException {
30                 this.style = style;
31                 G2DResource G2D = G2DResource.getInstance(graph);
32         Resource fontR = graph.getPossibleObject(style, G2D.HasFont);
33                 if(fontR != null) {
34                         font = G2DUtils.getFont(graph, fontR);
35                 } else {
36                         font = null;
37                 }
38
39         }
40
41         @Override
42         protected Font getFont() {
43                 if(font != null) return font;
44                 return super.getFont();
45         }
46
47         @Override
48         public Resource getPropertyRelation(ReadGraph graph, Resource module) {
49                 throw new Error("Fix this");
50         }
51
52         @Override
53         protected Object getIdentity(Resource entry) {
54                 return new Pair<Resource, Resource>(style, entry);
55         }
56
57         @Override
58         protected String rowId() {
59                 return getNodeName();
60         }
61
62         @Override
63         public MonitorTextGridResult calculateStyle(ReadGraph graph, Resource runtimeDiagram, Resource entry, Resource element, Variable configuration) throws DatabaseException {
64                 DiagramResource DIA = DiagramResource.getInstance(graph);
65
66                 Variable styleVariable = Variables.getVariable(graph, style);
67                 Function1<Resource,Tuple3> function = styleVariable.getPossiblePropertyValue(graph, DIA.ResourceSCLTextGridStyle_texts);
68                 Tuple3 result = Simantics.applySCLRead(graph, function, element);
69                 
70                 AffineTransform transform = DiagramGraphUtil.getAffineTransform(graph, element);
71                 Vec2d offset = DiagramGraphUtil.getOffset(graph, element);
72                 boolean enabled = !DiagramGraphUtil.getProfileMonitorsHidden(graph, element);
73                 boolean up = DiagramGraphUtil.getProfileMonitorsUp(graph, element);
74                 double spacing = DiagramGraphUtil.getProfileMonitorSpacing(graph, element);
75
76                 return new MonitorTextGridResult(rowId(), (String)result.c0, (String)result.c1, (String)result.c2, enabled, up, spacing, null, null, ElementTranslation.function(element), transform, offset);
77
78         }
79
80         @Override
81         public String getNodeName() {
82                 return "" + style.getResourceId();
83         }
84
85 }