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