]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/profile/ButtonResult.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / profile / ButtonResult.java
1 package org.simantics.diagram.profile;
2
3 import java.awt.geom.AffineTransform;
4
5 import org.simantics.databoard.Bindings;
6 import org.simantics.databoard.annotations.Optional;
7 import org.simantics.databoard.binding.Binding;
8 import org.simantics.databoard.util.Bean;
9 import org.simantics.datatypes.literal.Vec2d;
10 import org.simantics.db.layer0.variable.Variable;
11 import org.simantics.scl.runtime.function.Function1;
12 import org.simantics.utils.datastructures.map.Tuple;
13
14 public class ButtonResult extends Tuple implements IconButtonResult {
15         
16     public static class B extends Bean implements IconButtonConfiguration {
17         private static final Binding BINDING = Bindings.getBindingUnchecked(B.class);
18         public String id;
19         public int index;
20         @Optional
21         public Vec2d offset;
22         public Vec2d size;
23         public boolean relativeTransform;
24         public ButtonMode mode;
25         public B(String id, int index, Vec2d offset, Vec2d size, boolean relativeTransform, ButtonMode mode) {
26                 super(BINDING);
27                 this.id = id;
28                 this.index = index;
29                 this.offset = offset;
30                 this.size = size;
31                 this.relativeTransform = relativeTransform;
32                 this.mode = mode;
33         }
34                 @Override
35                 public Vec2d getOffset() {
36                         return offset;
37                 }
38                 @Override
39                 public String getId() {
40                         return id;
41                 }
42                 @Override
43                 public Vec2d getSize() {
44                         return size;
45                 }
46                 @Override
47                 public int getIndex() {
48                         return index;
49                 }
50                 @Override
51                 public boolean getRelativeTransform() {
52                         return relativeTransform;
53                 }
54     }
55     public static class A extends Bean implements IconButtonState {
56         private static final Binding BINDING = Bindings.getBindingUnchecked(A.class);
57         public double value;
58         public B config;
59         public A(double value, B config) {
60                 super(BINDING);
61                 this.value = value;
62                 this.config = config;
63         }
64                 @Override
65                 public IconButtonConfiguration getConfiguration() {
66                         return config;
67                 }
68     }
69     public ButtonResult(A a, Variable property, Function1<Boolean, Boolean> pressed, AffineTransform transform) {
70         super(a, property, pressed, transform);
71     }
72     public A getA() {
73         return (A) getField(0);
74     }
75     public Variable getProperty() {
76         return (Variable) getField(1);
77     }
78     @SuppressWarnings("unchecked")
79     public Function1<Boolean, Boolean> getPressed() {
80         return (Function1<Boolean, Boolean>) getField(2);
81     }
82     public AffineTransform getParentTransform() {
83         return (AffineTransform) getField(3);
84     }
85     public ButtonResult withValue(double value) {
86         return new ButtonResult(new A(value, getA().config), getProperty(), getPressed(), getParentTransform());
87     }
88         @Override
89         public IconButtonState getState() {
90                 return getA();
91         }
92 }