~tapaal-contributor/tapaal/disappearing-tokens-1940098

« back to all changes in this revision

Viewing changes to src/pipe/gui/widgets/AnimationSelectmodeDialog.java

  • Committer: Kenneth Yrke Jørgensen
  • Date: 2011-04-12 09:50:16 UTC
  • mfrom: (329.1.188 tapaal-1.5)
  • Revision ID: mail@yrke.dk-20110412095016-e4hqdgab5596ja09
Merged with branch addning support for new 1.5 features

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
import java.awt.FlowLayout;
4
4
import java.awt.GridBagConstraints;
5
5
import java.awt.GridBagLayout;
6
 
import java.math.BigDecimal;
7
 
import java.text.DecimalFormat;
8
6
import java.util.ArrayList;
 
7
import java.util.List;
9
8
 
10
9
import javax.swing.BorderFactory;
11
10
import javax.swing.JButton;
13
12
import javax.swing.JLabel;
14
13
import javax.swing.JPanel;
15
14
 
16
 
import pipe.dataLayer.Arc;
17
 
import pipe.dataLayer.TAPNInhibitorArc;
18
 
import pipe.dataLayer.TAPNTransition;
19
 
import pipe.dataLayer.TimedArc;
20
 
import pipe.dataLayer.TimedPlace;
21
 
import pipe.dataLayer.Transition;
22
 
import pipe.dataLayer.TransportArc;
23
 
import pipe.dataLayer.colors.ColoredInputArc;
24
 
import pipe.dataLayer.colors.ColoredTimedPlace;
25
 
import pipe.dataLayer.colors.ColoredToken;
26
 
import pipe.dataLayer.colors.ColoredTransportArc;
27
 
import pipe.gui.CreateGui;
28
 
import pipe.gui.Pipe;
 
15
import dk.aau.cs.model.tapn.TimedInputArc;
 
16
import dk.aau.cs.model.tapn.TimedToken;
 
17
import dk.aau.cs.model.tapn.TimedTransition;
 
18
import dk.aau.cs.model.tapn.TransportArc;
29
19
 
30
 
public class AnimationSelectmodeDialog extends JPanel{
 
20
public class AnimationSelectmodeDialog extends JPanel {
31
21
 
32
22
        private static final long serialVersionUID = 7852107237344005547L;
33
23
 
34
 
        TAPNTransition firedtransition = null;
 
24
        TimedTransition transition = null;
35
25
 
36
26
        public ArrayList<JComboBox> presetPanels = new ArrayList<JComboBox>();
37
27
 
39
29
 
40
30
        private JButton okButton;
41
31
        private boolean cancelled = true;
42
 
        
43
 
        public boolean cancelled(){
 
32
 
 
33
        public boolean cancelled() {
44
34
                return cancelled;
45
35
        }
46
 
        
47
 
        public AnimationSelectmodeDialog(Transition t){
48
36
 
 
37
        public AnimationSelectmodeDialog(TimedTransition transition) {
49
38
                setLayout(new GridBagLayout());
50
 
 
 
39
                
51
40
                GridBagConstraints c = new GridBagConstraints();
52
41
                c.fill = GridBagConstraints.HORIZONTAL;
53
 
                c.weightx = 0.5;
 
42
                //c.weightx = 0.5;
54
43
                c.gridx = 0;
55
44
                c.gridy = 0;
56
45
 
57
 
 
58
 
                firedtransition = (TAPNTransition)t; // XXX - unsafe cast (ok by contract)
 
46
                this.transition = transition;
59
47
 
60
48
                namePanel = new JPanel(new FlowLayout());
61
 
                namePanel.add(new JLabel("Select tokens to Fire in Transition " + t.getName()));
62
 
 
 
49
                namePanel.add(new JLabel("<html>Select tokens to fire transition <b>" + transition.name() + "</b></html>"));
63
50
 
64
51
                add(namePanel, c);
65
52
 
66
 
 
67
 
 
68
 
                //Start adding the stuff
69
 
                JPanel presetPanelContainer;
70
 
                presetPanelContainer = new JPanel(new FlowLayout());
71
 
 
72
 
 
 
53
                // Start adding the stuff
 
54
                JPanel presetPanelContainer = new JPanel(new FlowLayout());
73
55
                c.gridx = 0;
74
56
                c.gridy = 1;
75
57
 
76
58
                add(presetPanelContainer, c);
77
59
 
78
 
 
79
 
                for (Arc a : t.getPreset()){
80
 
                        if(!(a instanceof TAPNInhibitorArc)){
81
 
                                JPanel presetPanel = createDropDownForArc(a);
82
 
                                presetPanelContainer.add(presetPanel);
 
60
                if(transition.isShared()){
 
61
                        for(TimedTransition trans : transition.sharedTransition().transitions()){
 
62
                                createDropDownsForTransition(trans, presetPanelContainer);
83
63
                        }
84
 
 
 
64
                }else{
 
65
                        createDropDownsForTransition(transition, presetPanelContainer);
85
66
                }
86
 
 
87
67
                c.gridx = 0;
88
68
                c.gridy = 2;
89
 
                //OK
 
69
                // OK
90
70
                okButton = new javax.swing.JButton();
91
71
 
92
72
                okButton.setText("OK");
96
76
                okButton.addActionListener(new java.awt.event.ActionListener() {
97
77
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
98
78
                                cancelled = false;
99
 
                                exit(); 
 
79
                                exit();
100
80
                        }
101
81
                });
102
82
 
103
 
 
104
 
                add(okButton,c);
105
 
        }
106
 
        private JPanel createDropDownForArc(Arc a) {
107
 
                JPanel presetPanel;
108
 
                presetPanel = new JPanel(new FlowLayout());
109
 
 
110
 
                //For each place in the preset create a box for selecting tokens
111
 
 
112
 
                presetPanel.setBorder(BorderFactory.createTitledBorder("Place " + a.getSource().getName()));
113
 
                presetPanel.add(new JLabel("Select token from Place " + a.getSource().getName()));
114
 
 
115
 
                if(!CreateGui.getModel().isUsingColors()){
116
 
                        ArrayList<String> eligableToken = null;
117
 
 
118
 
                        DecimalFormat df = new DecimalFormat();
119
 
                        df.setMaximumFractionDigits(Pipe.AGE_DECIMAL_PRECISION);
120
 
                        df.setMinimumFractionDigits(1);
121
 
                        if (a instanceof TransportArc){
122
 
                                eligableToken= new ArrayList<String>();
123
 
                                TimedPlace p = (TimedPlace)a.getSource();
124
 
 
125
 
                                ArrayList<BigDecimal> tokensOfPlace = p.getTokens();                                    
126
 
 
127
 
                                TimedPlace targetPlace = (TimedPlace)((TransportArc)a).getConnectedTo().getTarget();
128
 
 
129
 
                                for (int i=0; i< tokensOfPlace.size(); i++){
130
 
                                        if ( ((TimedArc)a).satisfiesGuard(tokensOfPlace.get(i)) && targetPlace.satisfiesInvariant(tokensOfPlace.get(i))) {
131
 
                                                eligableToken.add(df.format(tokensOfPlace.get(i)));
132
 
                                        }
133
 
                                }       
134
 
 
135
 
                        }else if (a instanceof TimedArc){
136
 
                                eligableToken = new ArrayList<String>();
137
 
                                //int indexOfOldestEligebleToken = 0;
138
 
 
139
 
                                TimedPlace p = (TimedPlace)a.getSource();
140
 
 
141
 
                                ArrayList<BigDecimal> tokensOfPlace = p.getTokens();                                               
142
 
                                for (int i=0; i< tokensOfPlace.size(); i++){
143
 
                                        if ( ((TimedArc)a).satisfiesGuard(tokensOfPlace.get(i))){
144
 
                                                eligableToken.add(df.format(tokensOfPlace.get(i)));
145
 
                                        }
146
 
                                }                                                  
147
 
                        }
148
 
 
149
 
                        JComboBox selectTokenBox = new JComboBox(eligableToken.toArray());
150
 
                        selectTokenBox.setSelectedIndex(0);
151
 
 
152
 
                        presetPanel.add(selectTokenBox);
153
 
                        presetPanels.add(selectTokenBox);
154
 
                }else{
155
 
                        ColoredTimedPlace place = (ColoredTimedPlace)a.getSource();
156
 
                        
157
 
                        ArrayList<ColoredToken> eligibleTokens = new ArrayList<ColoredToken>();
158
 
                        
159
 
                        if(a instanceof ColoredTransportArc){
160
 
                                ColoredTransportArc cta = (ColoredTransportArc)a;
161
 
                                
162
 
                                for(ColoredToken token : place.getColoredTokens()){
163
 
                                        if(cta.satisfiesGuard(token) 
164
 
                                                        && cta.satisfiesTargetInvariant(token)){
165
 
                                                eligibleTokens.add(token);
166
 
                                        }
167
 
                                }
168
 
                        }else if(a instanceof ColoredInputArc){
169
 
                                ColoredInputArc cia = (ColoredInputArc)a;
170
 
                                
171
 
                                for(ColoredToken token : place.getColoredTokens()){
172
 
                                        if(cia.satisfiesGuard(token)){
173
 
                                                eligibleTokens.add(token);
174
 
                                        }
175
 
                                }
176
 
                        }
177
 
                        
178
 
                        JComboBox selectTokenBox = new JComboBox(eligibleTokens.toArray());
179
 
                        selectTokenBox.setSelectedIndex(0);
180
 
 
181
 
                        presetPanel.add(selectTokenBox);
182
 
                        presetPanels.add(selectTokenBox);
183
 
                }
 
83
                add(okButton, c);
 
84
        }
 
85
 
 
86
        private void createDropDownsForTransition(TimedTransition transition, JPanel presetPanelContainer) {
 
87
                for (TimedInputArc arc : transition.getInputArcs()) {
 
88
                        JPanel tokenPanel = createDropDownForArc(arc.source().toString(), arc.getElligibleTokens());
 
89
                        presetPanelContainer.add(tokenPanel);
 
90
                }
 
91
                
 
92
                for (TransportArc arc : transition.getTransportArcsGoingThrough()) {
 
93
                        JPanel tokenPanel = createDropDownForArc(arc.source().toString(), arc.getElligibleTokens());
 
94
                        presetPanelContainer.add(tokenPanel);
 
95
                }
 
96
        }
 
97
 
 
98
        private JPanel createDropDownForArc(String placeName, List<TimedToken> elligibleTokens) {
 
99
                JPanel presetPanel = new JPanel(new FlowLayout());
 
100
 
 
101
                // For each place in the preset create a box for selecting tokens
 
102
 
 
103
                presetPanel.setBorder(BorderFactory.createTitledBorder("Place " + placeName));
 
104
                presetPanel.add(new JLabel("Select token"));
 
105
                
 
106
                JComboBox selectTokenBox = new JComboBox(elligibleTokens.toArray());
 
107
                selectTokenBox.setSelectedIndex(0);
 
108
 
 
109
                presetPanel.add(selectTokenBox);
 
110
                presetPanels.add(selectTokenBox);
184
111
                return presetPanel;
185
112
        }
186
 
        private void exit(){
187
 
                this.getRootPane().getParent().setVisible(false); 
 
113
 
 
114
        private void exit() {
 
115
                this.getRootPane().getParent().setVisible(false);
 
116
        }
 
117
 
 
118
        public List<TimedToken> getTokens() {
 
119
                if(cancelled) return null;
 
120
                
 
121
                List<TimedToken> tokens = new ArrayList<TimedToken>();
 
122
                for(JComboBox box : presetPanels){
 
123
                        tokens.add((TimedToken)box.getSelectedItem());
 
124
                }
 
125
                
 
126
                return tokens;
188
127
        }
189
128
 
190
129
}