1 //
2 // The contents of this file are subject to the Mozilla Public
3 // License Version 1.1 (the "License"); you may not use this file
4 // except in compliance with the License. You may obtain a copy of
5 // the License at http://www.mozilla.org/MPL/
6 //
7 // Software distributed under the License is distributed on an "AS
8 // IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
9 // implied. See the License for the specific language governing
10 // rights and limitations under the License.
11 //
12 // The Original Code is State Machine Compiler (SMC).
13 //
14 // The Initial Developer of the Original Code is Charles W. Rapp.
15 // Portions created by Charles W. Rapp are
16 // Copyright (C) 2000 - 2003 Charles W. Rapp.
17 // All Rights Reserved.
18 //
19 // Contributor(s):
20 //
21 // Name
22 //  TaskDialog.java
23 //
24 // Description
25 //  Dialog for creating new tasks.
26 //
27 // RCS ID
28 // $Id: TaskDialog.java,v 1.1 2005/05/28 12:49:21 cwrapp Exp $
29 //
30 // CHANGE LOG
31 // $Log: TaskDialog.java,v $
32 // Revision 1.1  2005/05/28 12:49:21  cwrapp
33 // Added Ant examples 1 - 7.
34 //
35 // Revision 1.0  2004/05/31 13:19:19  charlesr
36 // Initial revision
37 //
38 
39 package smc_ex5;
40 
41 import javax.swing.BorderFactory;
42 import javax.swing.JButton;
43 import javax.swing.JFrame;
44 import javax.swing.JLabel;
45 import javax.swing.JPanel;
46 import javax.swing.JSlider;
47 import javax.swing.JTextField;
48 import javax.swing.SwingConstants;
49 import java.awt.BorderLayout;
50 import java.awt.Component;
51 import java.awt.GridBagConstraints;
52 import java.awt.GridBagLayout;
53 import java.awt.event.ActionEvent;
54 import java.awt.event.ActionListener;
55 import java.awt.event.WindowAdapter;
56 import java.awt.event.WindowEvent;
57 import java.util.HashMap;
58 import java.util.Map;
59 
60 public final class TaskDialog
61 {
62 // Member Methods
63 
64     // Create the task creation dialog but don't display it.
65     // Leave it hidden and make it visible when it is needed.
66     // When the user quits the dialog, just hide it again.
TaskDialog()67     public TaskDialog()
68     {
69         // Create actual dialog if it has not been done already.
70         if (_isInitialized == false)
71         {
72             _isInitialized = true;
73 
74             _title = new String("Task Creation");
75             createDialog();
76         }
77     }
78 
activate()79     public void activate()
80     {
81         _frame.setVisible(true);
82         return;
83     }
84 
deactivate()85     public void deactivate()
86     {
87         resetComponents();
88         _frame.setVisible(false);
89         return;
90     }
91 
createDialog()92     private void createDialog()
93     {
94         // Create the dialog's frame.
95         _frame = new JFrame(_title);
96 
97         // Create the dialog's components (text boxes, sliders
98         // and buttons) and place them into the content pane.
99         Component contents = createComponents();
100 
101         // Add the contents to the frame.
102         _frame.getContentPane().add(contents,
103                                     BorderLayout.CENTER);
104 
105         // When this dialog is closed, simply undisplay it.
106         _frame.addWindowListener(new WindowAdapter() {
107             public void windowClosing(WindowEvent e) {
108                 deactivate();
109             }
110         });
111 
112         _frame.pack();
113 
114         // This dialog is hidden until the "Task Create..."
115         // button is clicked.
116         _frame.setVisible(false);
117 
118         return;
119     }
120 
createComponents()121     private Component createComponents()
122     {
123         JLabel label;
124 
125         // Use a text field for the task name.
126         _taskNameField = new JTextField(TaskMessages.NAME_LEN);
127         _taskNameLabel = new JLabel("Task Name: ");
128         _taskNameLabel.setLabelFor(_taskNameField);
129         _taskNameLabel.setVerticalTextPosition(SwingConstants.CENTER);
130         _taskNameLabel.setHorizontalTextPosition(SwingConstants.RIGHT);
131 
132         // Use a slider for the task runtime.
133         _taskRuntimeSlider = new JSlider(JSlider.HORIZONTAL,
134                                          10,
135                                          60,
136                                          10);
137         _taskRuntimeSlider.setMajorTickSpacing(10);
138         _taskRuntimeSlider.setMinorTickSpacing(1);
139         _taskRuntimeSlider.setPaintTicks(true);
140         _taskRuntimeSlider.setPaintLabels(true);
141         _taskRuntimeSlider.setSnapToTicks(true);
142         _taskRuntimeLabel = new JLabel("Runtime (secs.): ");
143         _taskRuntimeLabel.setLabelFor(_taskRuntimeSlider);
144         _taskRuntimeLabel.setVerticalTextPosition(SwingConstants.CENTER);
145         _taskRuntimeLabel.setHorizontalTextPosition(SwingConstants.RIGHT);
146 
147         // Use a slider for the task priority.
148         _taskPrioritySlider = new JSlider(JSlider.HORIZONTAL,
149                                           0,
150                                           10,
151                                           0);
152         _taskPrioritySlider.setMajorTickSpacing(5);
153         _taskPrioritySlider.setMinorTickSpacing(1);
154         _taskPrioritySlider.setPaintTicks(true);
155         _taskPrioritySlider.setPaintLabels(true);
156         _taskPrioritySlider.setSnapToTicks(true);
157         _taskPriorityLabel = new JLabel("Task Priority: ");
158         _taskPriorityLabel.setLabelFor(_taskPrioritySlider);
159         _taskPriorityLabel.setVerticalTextPosition(SwingConstants.CENTER);
160         _taskPriorityLabel.setHorizontalTextPosition(SwingConstants.RIGHT);
161 
162         // Create four buttons: OK, Apply, Reset and Cancel.
163         _okButton = new JButton("OK");
164         _okButton.addActionListener(new ActionListener() {
165             public void actionPerformed(ActionEvent e) {
166                 // Get the values from the components and
167                 // create a task from them.
168                 createTask(_taskNameField.getText(),
169                            _taskRuntimeSlider.getValue(),
170                            _taskPrioritySlider.getValue());
171 
172                 // Then hide this canvas.
173                 _frame.setVisible(false);
174             }
175         });
176         _okButton.setEnabled(true);
177 
178         _applyButton = new JButton("Apply");
179         _applyButton.addActionListener(new ActionListener() {
180             public void actionPerformed(ActionEvent e) {
181                 createTask(_taskNameField.getText(),
182                            _taskRuntimeSlider.getValue(),
183                            _taskPrioritySlider.getValue());
184             }
185         });
186         _applyButton.setEnabled(true);
187 
188         _resetButton = new JButton("Reset");
189         _resetButton.addActionListener(new ActionListener() {
190             public void actionPerformed(ActionEvent e) {
191                 resetComponents();
192             }
193         });
194         _resetButton.setEnabled(true);
195 
196         _cancelButton = new JButton("Cancel");
197         _cancelButton.addActionListener(new ActionListener() {
198             public void actionPerformed(ActionEvent e) {
199                 deactivate();
200             }
201         });
202 
203         // Use the gridbag layout for the dialog
204         GridBagLayout gridbag = new GridBagLayout();
205         GridBagConstraints gridConstraints =
206                 new GridBagConstraints();
207 
208         JPanel pane = new JPanel();
209         pane.setBorder(BorderFactory.createEmptyBorder(30, // top
210                                                        30, // left
211                                                        30, // bottom
212                                                        30) // right
213                        );
214         pane.setLayout(gridbag);
215 
216         // Place components into gridbag and so into the pane.
217         gridConstraints.anchor = GridBagConstraints.NORTH;
218         gridConstraints.gridx = 0;
219         gridConstraints.gridy = 0;
220         gridConstraints.gridwidth = 1;
221         gridbag.setConstraints(_taskNameLabel, gridConstraints);
222         pane.add(_taskNameLabel);
223 
224         gridConstraints.anchor = GridBagConstraints.NORTH;
225         gridConstraints.gridx = 1;
226         gridConstraints.gridy = 0;
227         gridConstraints.gridwidth = GridBagConstraints.REMAINDER;
228         gridbag.setConstraints(_taskNameField, gridConstraints);
229         pane.add(_taskNameField);
230 
231         gridConstraints.anchor = GridBagConstraints.NORTH;
232         gridConstraints.gridx = 0;
233         gridConstraints.gridy = 1;
234         gridConstraints.gridwidth = 1;
235         gridbag.setConstraints(_taskRuntimeLabel, gridConstraints);
236         pane.add(_taskRuntimeLabel);
237 
238         gridConstraints.anchor = GridBagConstraints.NORTH;
239         gridConstraints.gridx = 1;
240         gridConstraints.gridy = 1;
241         gridConstraints.gridwidth = GridBagConstraints.REMAINDER;
242         gridbag.setConstraints(_taskRuntimeSlider, gridConstraints);
243         pane.add(_taskRuntimeSlider);
244 
245         gridConstraints.anchor = GridBagConstraints.NORTH;
246         gridConstraints.gridx = 0;
247         gridConstraints.gridy = 2;
248         gridConstraints.gridwidth = 1;
249         gridbag.setConstraints(_taskPriorityLabel, gridConstraints);
250         pane.add(_taskPriorityLabel);
251 
252         gridConstraints.anchor = GridBagConstraints.NORTH;
253         gridConstraints.gridx = 1;
254         gridConstraints.gridy = 2;
255         gridConstraints.gridwidth = GridBagConstraints.REMAINDER;
256         gridbag.setConstraints(_taskPrioritySlider,
257                                gridConstraints);
258         pane.add(_taskPrioritySlider);
259 
260         gridConstraints.anchor = GridBagConstraints.SOUTH;
261         gridConstraints.gridx = 0;
262         gridConstraints.gridy = 3;
263         gridConstraints.gridwidth = 1;
264         gridbag.setConstraints(_okButton, gridConstraints);
265         pane.add(_okButton);
266 
267         gridConstraints.anchor = GridBagConstraints.SOUTH;
268         gridConstraints.gridx = 1;
269         gridConstraints.gridy = 3;
270         gridbag.setConstraints(_applyButton, gridConstraints);
271         pane.add(_applyButton);
272 
273         gridConstraints.anchor = GridBagConstraints.SOUTH;
274         gridConstraints.gridx = 2;
275         gridConstraints.gridy = 3;
276         gridbag.setConstraints(_resetButton, gridConstraints);
277         pane.add(_resetButton);
278 
279         gridConstraints.anchor = GridBagConstraints.SOUTH;
280         gridConstraints.gridx = 3;
281         gridConstraints.gridy = 3;
282         gridbag.setConstraints(_cancelButton, gridConstraints);
283         pane.add(_cancelButton);
284 
285         return(pane);
286     }
287 
createTask(String name, int runtime, int priority)288     private void createTask(String name,
289                             int runtime,
290                             int priority)
291     {
292         Map args = new HashMap();
293         TaskController control = new TaskController();
294 
295         args.put("Task Name", name);
296         args.put("Runtime", new Integer(runtime));
297         args.put("Priority", new Integer(priority));
298         control.postMessage("Task Manager",
299                             "Create Task",
300                             args);
301         return;
302     }
303 
resetComponents()304     private void resetComponents()
305     {
306         _taskNameField.setText(null);
307         _taskRuntimeSlider.setValue(10);
308         _taskPrioritySlider.setValue(0);
309 
310         return;
311     }
312 
313 // Member Data
314 
315     // There is only one dialog object. Initialize the task
316     // creation dialog only once.
317     private static boolean _isInitialized = false;
318 
319     // Dialog's GUI components.
320     JFrame _frame;
321     JTextField _taskNameField;
322     JLabel _taskNameLabel;
323     JSlider _taskRuntimeSlider;
324     JLabel _taskRuntimeLabel;
325     JSlider _taskPrioritySlider;
326     JLabel _taskPriorityLabel;
327     JButton _okButton;
328     JButton _applyButton;
329     JButton _resetButton;
330     JButton _cancelButton;
331 
332     // The dialog's frame title.
333     String _title;
334 }
335