]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
Add Data Validations for SPD editor.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPcdDefs.java
CommitLineData
a13899c5 1/** @file\r
2 Java class SpdPcdDefs is GUI for create PCD definition elements of spd file.\r
3 \r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12**/\r
13package org.tianocore.frameworkwizard.packaging.ui;\r
14\r
15import java.awt.Dimension;\r
a13899c5 16import java.awt.event.ActionEvent;\r
a13899c5 17import java.awt.event.ComponentEvent;\r
18\r
a13899c5 19import javax.swing.DefaultCellEditor;\r
20import javax.swing.JFrame;\r
21import javax.swing.JOptionPane;\r
22import javax.swing.JPanel;\r
a13899c5 23import javax.swing.JLabel;\r
24import javax.swing.JTextField;\r
25import javax.swing.JComboBox;\r
26import javax.swing.JButton;\r
27import javax.swing.ListSelectionModel;\r
28\r
29import javax.swing.event.InternalFrameAdapter;\r
30import javax.swing.event.InternalFrameEvent;\r
31import javax.swing.event.ListSelectionEvent;\r
32import javax.swing.event.ListSelectionListener;\r
33import javax.swing.event.TableModelEvent;\r
34import javax.swing.event.TableModelListener;\r
35import javax.swing.table.DefaultTableModel;\r
36import javax.swing.table.TableColumn;\r
37import javax.swing.table.TableModel;\r
38\r
39import org.tianocore.PackageSurfaceAreaDocument;\r
a13899c5 40\r
ce73a791 41import org.tianocore.frameworkwizard.common.DataValidation;\r
a13899c5 42import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
43import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
44import javax.swing.JScrollPane;\r
45import javax.swing.JTable;\r
46import javax.swing.JCheckBox;\r
47import org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList;\r
ce73a791 48import org.tianocore.frameworkwizard.platform.ui.ListEditor;\r
49\r
a13899c5 50import java.awt.Rectangle;\r
51import java.util.Vector;\r
52\r
53/**\r
54 GUI for create PCD definition elements of spd file\r
55 \r
56 @since PackageEditor 1.0\r
57**/\r
58public class SpdPcdDefs extends IInternalFrame implements TableModelListener{\r
59\r
0b5e1cc3 60 /**\r
61 * \r
62 */\r
63 private static final long serialVersionUID = 1L;\r
64\r
a13899c5 65 static JFrame frame;\r
66 \r
67 private JPanel jContentPane = null; \r
68\r
69 private JLabel jLabelItemType = null;\r
70\r
71 private JLabel jLabelC_Name = null;\r
72\r
73 private JTextField jTextFieldC_Name = null;\r
74\r
75 private JLabel jLabelToken = null;\r
76\r
77 private JTextField jTextFieldToken = null;\r
78\r
79 private JLabel jLabelDataType = null;\r
80\r
81 private JButton jButtonOk = null;\r
82\r
83 private JButton jButtonCancel = null;\r
84\r
85 private JComboBox jComboBoxDataType = null;\r
86\r
87 private SpdFileContents sfc = null;\r
88\r
89 private StarLabel jStarLabel2 = null;\r
90\r
91 private StarLabel jStarLabel3 = null;\r
92\r
93 private StarLabel jStarLabel4 = null;\r
94\r
95 private StarLabel jStarLabel = null;\r
96\r
97 private StarLabel jStarLabel1 = null;\r
98\r
99 private JLabel jLabelTokenSpace = null;\r
100\r
101 private JTextField jTextFieldTsGuid = null;\r
102\r
103 private JLabel jLabelVarVal = null;\r
104\r
105 private JTextField jTextField = null;\r
106\r
107 private JLabel jLabelDefVal = null;\r
108\r
109 private JTextField jTextFieldDefaultValue = null;\r
110\r
111 private JButton jButtonAdd = null;\r
112 \r
113 private CheckboxTableModel model = null;\r
114\r
115 private JButton jButtonRemove = null;\r
116\r
117 private JButton jButtonClearAll = null;\r
118\r
a13899c5 119 private JScrollPane jScrollPane = null;\r
120\r
121 private JTable jTable = null;\r
122 \r
123 private JScrollPane topScrollPane = null; // @jve:decl-index=0:visual-constraint="390,10"\r
124 \r
125 private int selectedRow = -1;\r
126\r
127 private StarLabel starLabel = null;\r
128\r
129 private JCheckBox jCheckBox = null;\r
130\r
131 private JCheckBox jCheckBox1 = null;\r
132\r
133 private JCheckBox jCheckBox2 = null;\r
134\r
135 private JCheckBox jCheckBox3 = null;\r
136\r
137 private JCheckBox jCheckBox4 = null;\r
138\r
139 private JScrollPane jScrollPane1 = null;\r
140\r
141 private ICheckBoxList iCheckBoxList = null;\r
142\r
143 private JScrollPane jScrollPane2 = null;\r
144\r
145 private ICheckBoxList iCheckBoxList1 = null;\r
146\r
147 private JLabel jLabel = null;\r
148\r
149 private JLabel jLabel1 = null;\r
150\r
151 /**\r
152 This method initializes this\r
153 \r
154 **/\r
155 private void initialize() {\r
156 this.setTitle("PCD Definition");\r
157 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
158\r
159 }\r
160\r
161 /**\r
162 This method initializes jTextFieldC_Name \r
163 \r
164 @return javax.swing.JTextField \r
165 **/\r
166 private JTextField getJTextFieldC_Name() {\r
167 if (jTextFieldC_Name == null) {\r
168 jTextFieldC_Name = new JTextField();\r
169 jTextFieldC_Name.setBounds(new java.awt.Rectangle(156,9,317,20));\r
170 jTextFieldC_Name.setPreferredSize(new java.awt.Dimension(315,20));\r
171 }\r
172 return jTextFieldC_Name;\r
173 }\r
174\r
175 /**\r
176 This method initializes jTextFieldToken \r
177 \r
178 @return javax.swing.JTextField \r
179 **/\r
180 private JTextField getJTextFieldToken() {\r
181 if (jTextFieldToken == null) {\r
182 jTextFieldToken = new JTextField();\r
183 jTextFieldToken.setBounds(new java.awt.Rectangle(156,33,317,20));\r
184 jTextFieldToken.setPreferredSize(new java.awt.Dimension(315,20));\r
185 }\r
186 return jTextFieldToken;\r
187 }\r
188\r
189 /**\r
190 This method initializes jButtonOk \r
191 \r
192 @return javax.swing.JButton \r
193 **/\r
194 private JButton getJButtonOk() {\r
195 if (jButtonOk == null) {\r
196 jButtonOk = new JButton();\r
197 jButtonOk.setText("OK");\r
198 jButtonOk.setBounds(new java.awt.Rectangle(279,276,90,20));\r
199 jButtonOk.setVisible(false);\r
200 jButtonOk.addActionListener(this);\r
201 }\r
202 return jButtonOk;\r
203 }\r
204\r
205 /**\r
206 This method initializes jButtonCancel \r
207 \r
208 @return javax.swing.JButton \r
209 **/\r
210 private JButton getJButtonCancel() {\r
211 if (jButtonCancel == null) {\r
212 jButtonCancel = new JButton();\r
213 jButtonCancel.setText("Cancel");\r
214 jButtonCancel.setBounds(new java.awt.Rectangle(389,276,82,20));\r
215 jButtonCancel.setVisible(false);\r
216 jButtonCancel.addActionListener(this);\r
217 }\r
218 return jButtonCancel;\r
219 }\r
220\r
221 /**\r
222 This method initializes jComboBoxDataType \r
223 \r
224 @return javax.swing.JComboBox \r
225 **/\r
226 private JComboBox getJComboBoxDataType() {\r
227 if (jComboBoxDataType == null) {\r
228 jComboBoxDataType = new JComboBox();\r
229 jComboBoxDataType.setBounds(new java.awt.Rectangle(156,84,110,20));\r
230 }\r
231 return jComboBoxDataType;\r
232 }\r
233\r
234 /**\r
235 This is the default constructor\r
236 **/\r
237 public SpdPcdDefs() {\r
238 super();\r
239 init();\r
240 initialize();\r
241 \r
242 }\r
243\r
244 public SpdPcdDefs(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa) {\r
245 this();\r
246 sfc = new SpdFileContents(inPsa);\r
247 init(sfc);\r
248 }\r
249 /**\r
250 This method initializes this\r
251 \r
252 @return void\r
253 **/\r
254 private void init() {\r
255 this.setSize(500, 650);\r
256 this.setContentPane(getJContentPane());\r
257 this.addInternalFrameListener(new InternalFrameAdapter(){\r
258 public void internalFrameDeactivated(InternalFrameEvent e){\r
259 if (jTable.isEditing()) {\r
260 jTable.getCellEditor().stopCellEditing();\r
261 }\r
262 }\r
263 });\r
264 initFrame();\r
265 this.setVisible(true);\r
266 }\r
267\r
268 private void init(SpdFileContents sfc){\r
269 if (sfc.getSpdPcdDefinitionCount() == 0) {\r
270 return ;\r
271 }\r
272 String[][] saa = new String[sfc.getSpdPcdDefinitionCount()][8];\r
273 String[][] usage = new String[sfc.getSpdPcdDefinitionCount()][5];\r
274 Object[] rowData = new Object[13];\r
275 sfc.getSpdPcdDefinitions(saa, usage);\r
276 int i = 0;\r
277 while (i < saa.length) {\r
278 \r
279 for (int k = 0; k < 6; ++k) {\r
280 rowData[k] = saa[i][k];\r
281 }\r
282 for (int m = 7; m < 11; ++m) {\r
283 rowData[m] = new Boolean("false");\r
284 }\r
285 int j = 0;\r
286 while (j < 5) {\r
287 if (usage[i][j] == null || usage[i][j].length()==0){\r
288 ++j;\r
289 continue;\r
290 }\r
291 if (usage[i][j].equals("FEATURE_FLAG")){\r
292 rowData[6] = new Boolean("true");\r
293 }\r
294 if (usage[i][j].equals("FIXED_AT_BUILD")){\r
295 rowData[7] = new Boolean("true");\r
296 }\r
297 if (usage[i][j].equals("PATCHABLE_IN_MODULE")){\r
298 rowData[8] = new Boolean("true");\r
299 }\r
300 if (usage[i][j].equals("DYNAMIC")){\r
301 rowData[9] = new Boolean("true");\r
302 }\r
303 if (usage[i][j].equals("DYNAMIC_EX")){\r
304 rowData[10] = new Boolean("true");\r
305 }\r
306 \r
307 ++j;\r
308 }\r
309 \r
310 rowData[11] = saa[i][6];\r
311 rowData[12] = saa[i][7];\r
312 \r
313 model.addRow(rowData);\r
314 \r
315 i++;\r
316 }\r
317 \r
318 \r
319 \r
320 }\r
321 \r
322 private JScrollPane getJContentPane(){\r
323 if (topScrollPane == null){\r
324 topScrollPane = new JScrollPane();\r
325 topScrollPane.setSize(new java.awt.Dimension(482,451));\r
326 topScrollPane.setViewportView(getJContentPane1());\r
327 }\r
328 return topScrollPane;\r
329 }\r
330 private JPanel getJContentPane1() {\r
331 if (jContentPane == null) { \r
332 \r
333 jLabel1 = new JLabel();\r
334 jLabel1.setBounds(new java.awt.Rectangle(241,192,89,16));\r
335 jLabel1.setText("Supported Arch");\r
336 jLabel1.setEnabled(true);\r
337 jLabel = new JLabel();\r
338 jLabel.setBounds(new java.awt.Rectangle(15,193,103,16));\r
339 jLabel.setText("Supported Module");\r
340 jLabel.setEnabled(true);\r
341 starLabel = new StarLabel();\r
342 starLabel.setBounds(new java.awt.Rectangle(2,134,10,20));\r
343 jLabelDefVal = new JLabel();\r
344 jLabelDefVal.setBounds(new java.awt.Rectangle(277,84,80,20));\r
345 jLabelDefVal.setText("Default Value");\r
346 jLabelVarVal = new JLabel();\r
347 jLabelVarVal.setBounds(new java.awt.Rectangle(11,133,84,20));\r
348 jLabelVarVal.setText("Valid Usage");\r
349 jLabelC_Name = new JLabel();\r
350 jLabelC_Name.setText("C_Name");\r
351 jLabelC_Name.setBounds(new java.awt.Rectangle(11,9,140,20));\r
352 jLabelTokenSpace = new JLabel();\r
353 jLabelTokenSpace.setBounds(new java.awt.Rectangle(11,58,140,20));\r
354 jLabelTokenSpace.setText("Token Space");\r
355 jLabelDataType = new JLabel();\r
356 jLabelDataType.setText("Data Type");\r
357 jLabelDataType.setBounds(new java.awt.Rectangle(11,83,140,20));\r
358 jLabelToken = new JLabel();\r
359 jLabelToken.setText("Token");\r
360 jLabelToken.setBounds(new java.awt.Rectangle(11,33,140,20));\r
361 jLabelItemType = new JLabel();\r
362 jLabelItemType.setText("Help Text");\r
363 jLabelItemType.setBounds(new java.awt.Rectangle(11,108,140,20));\r
364 \r
365 \r
366 jContentPane = new JPanel();\r
367 jContentPane.setLayout(null);\r
368 jContentPane.setPreferredSize(new java.awt.Dimension(479,375));\r
369 \r
370 jContentPane.add(jLabelItemType, null);\r
371 jContentPane.add(jLabelC_Name, null);\r
372 jContentPane.add(jLabelTokenSpace, null);\r
373 jContentPane.add(getJTextFieldTsGuid(), null);\r
374 jContentPane.add(jLabelVarVal, null);\r
375 jContentPane.add(getJTextFieldC_Name(), null);\r
376 jContentPane.add(jLabelToken, null);\r
377 jContentPane.add(getJTextFieldToken(), null);\r
378 jContentPane.add(jLabelDataType, null);\r
379 jContentPane.add(getJButtonOk(), null);\r
380 jContentPane.add(getJButtonCancel(), null);\r
381 jContentPane.add(getJComboBoxDataType(), null);\r
382 \r
383 jStarLabel = new StarLabel();\r
384 jStarLabel1 = new StarLabel();\r
385 jStarLabel1.setBounds(new java.awt.Rectangle(2,8,10,20));\r
386 jStarLabel2 = new StarLabel();\r
387 jStarLabel3 = new StarLabel();\r
388 jStarLabel4 = new StarLabel();\r
389 jStarLabel.setLocation(new java.awt.Point(2,84));\r
390 jStarLabel4.setLocation(new java.awt.Point(2, 109));\r
391 jStarLabel2.setLocation(new java.awt.Point(2,33));\r
392 jStarLabel3.setLocation(new java.awt.Point(2, 58));\r
393 jStarLabel3.setSize(new java.awt.Dimension(8,20));\r
394 jContentPane.add(jStarLabel2, null);\r
395 jContentPane.add(jStarLabel3, null);\r
396 jContentPane.add(jStarLabel, null);\r
397 jContentPane.add(jStarLabel1, null);\r
398 jContentPane.add(jStarLabel4, null);\r
399 jContentPane.add(getJTextField(), null);\r
400 jContentPane.add(jLabelDefVal, null);\r
401 jContentPane.add(getJTextFieldDefaultValue(), null);\r
402 jContentPane.add(getJButtonAdd(), null);\r
403 jContentPane.add(getJButtonRemove(), null);\r
404 jContentPane.add(getJButtonClearAll(), null);\r
a13899c5 405 jContentPane.add(getJScrollPane(), null);\r
406 jContentPane.add(starLabel, null);\r
407 jContentPane.add(getJCheckBox(), null);\r
408 jContentPane.add(getJCheckBox1(), null);\r
409 jContentPane.add(getJCheckBox2(), null);\r
410 jContentPane.add(getJCheckBox3(), null);\r
411 jContentPane.add(getJCheckBox4(), null);\r
412 jContentPane.add(getJScrollPane1(), null);\r
413 jContentPane.add(getJScrollPane2(), null);\r
414 jContentPane.add(jLabel, null);\r
415 jContentPane.add(jLabel1, null);\r
416 }\r
417 return jContentPane;\r
418 }\r
419\r
420 /**\r
421 This method initializes comboboxes \r
422 jContentPane.add(jLabelTokenSpace, null);\r
423 \r
424 **/\r
425 private void initFrame() {\r
426\r
427 jComboBoxDataType.addItem("UINT8");\r
428 jComboBoxDataType.addItem("UINT16");\r
429 jComboBoxDataType.addItem("UINT32");\r
430 jComboBoxDataType.addItem("UINT64");\r
431 jComboBoxDataType.addItem("VOID*");\r
432 jComboBoxDataType.addItem("BOOLEAN");\r
433 jComboBoxDataType.setSelectedIndex(0);\r
434 }\r
435\r
436 public void actionPerformed(ActionEvent arg0) {\r
437 \r
438 if (arg0.getSource() == jButtonOk) {\r
439 this.save();\r
440 this.dispose();\r
a13899c5 441 }\r
442 if (arg0.getSource() == jButtonCancel) {\r
443 this.dispose();\r
444 }\r
445\r
446 if (arg0.getSource() == jButtonAdd) {\r
447 //ToDo: check before add\r
ce73a791 448 boolean[] b = {jCheckBox.isSelected(), jCheckBox1.isSelected(), jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected()};\r
449 if (!checkValidUsage(b)) {\r
a13899c5 450 return;\r
451 }\r
a13899c5 452 String archList = vectorToString(iCheckBoxList.getAllCheckedItemsString());\r
453 if (archList.length() == 0) {\r
454 archList = null;\r
455 }\r
456 String modTypeList = vectorToString(iCheckBoxList1.getAllCheckedItemsString());\r
457 if (modTypeList.length() == 0) {\r
458 modTypeList = null;\r
459 }\r
460 Object[] row = {jTextFieldC_Name.getText(), jTextFieldToken.getText(),\r
461 jTextFieldTsGuid.getText(), jComboBoxDataType.getSelectedItem(), \r
462 jTextFieldDefaultValue.getText(), jTextField.getText(),\r
463 jCheckBox.isSelected(), jCheckBox1.isSelected(),\r
464 jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected(),\r
465 archList, modTypeList};\r
ce73a791 466 if (!dataValidation(row)) {\r
467 return;\r
468 }\r
a13899c5 469 model.addRow(row);\r
470 \r
471 String usage = getValidUsage(jCheckBox.isSelected(), jCheckBox1.isSelected(), jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected());\r
472 if (usage.length() == 0) {\r
473 usage = null;\r
474 }\r
475 sfc.genSpdPcdDefinitions(row[0]+"", row[1]+"", row[3]+"", usage, row[2]+"", row[4]+"", row[5]+"", archList, modTypeList);\r
476 }\r
477 //\r
478 // remove selected line\r
479 //\r
480 if (arg0.getSource() == jButtonRemove) {\r
481 if (jTable.isEditing()){\r
482 jTable.getCellEditor().stopCellEditing();\r
483 }\r
484 int rowSelected = selectedRow;\r
485 if (rowSelected >= 0) {\r
486 model.removeRow(rowSelected);\r
487 sfc.removeSpdPcdDefinition(rowSelected);\r
488 }\r
489 }\r
490\r
491 if (arg0.getSource() == jButtonClearAll) {\r
492 if (model.getRowCount() == 0) {\r
493 return;\r
494 }\r
495 model.setRowCount(0);\r
496 sfc.removeSpdPcdDefinition();\r
497 }\r
498 \r
a13899c5 499 }\r
500\r
501 protected void save() {\r
502 \r
503 }\r
504\r
505 /**\r
506 * This method initializes jTextFieldTsGuid \r
507 * \r
508 * @return javax.swing.JTextField \r
509 */\r
510 private JTextField getJTextFieldTsGuid() {\r
511 if (jTextFieldTsGuid == null) {\r
512 jTextFieldTsGuid = new JTextField();\r
ce73a791 513 jTextFieldTsGuid.setPreferredSize(new java.awt.Dimension(315,20));\r
514 jTextFieldTsGuid.setSize(new java.awt.Dimension(317,20));\r
515 jTextFieldTsGuid.setLocation(new java.awt.Point(156,58));\r
a13899c5 516 }\r
517 return jTextFieldTsGuid;\r
518 }\r
519\r
520 /**\r
521 * This method initializes jTextField \r
522 * \r
523 * @return javax.swing.JTextField \r
524 */\r
525 private JTextField getJTextField() {\r
526 if (jTextField == null) {\r
527 jTextField = new JTextField();\r
528 jTextField.setBounds(new java.awt.Rectangle(156,108,317,20));\r
529 jTextField.setPreferredSize(new java.awt.Dimension(315,20));\r
530 }\r
531 return jTextField;\r
532 }\r
533\r
534 /**\r
535 * This method initializes jTextFieldDefaultValue \r
536 * \r
537 * @return javax.swing.JTextField \r
538 */\r
539 private JTextField getJTextFieldDefaultValue() {\r
540 if (jTextFieldDefaultValue == null) {\r
541 jTextFieldDefaultValue = new JTextField();\r
542 jTextFieldDefaultValue.setBounds(new java.awt.Rectangle(368,84,105,20));\r
543 jTextFieldDefaultValue.setPreferredSize(new java.awt.Dimension(104,20));\r
544 }\r
545 return jTextFieldDefaultValue;\r
546 }\r
547\r
548 /**\r
549 * This method initializes jButtonAdd \r
550 * \r
551 * @return javax.swing.JButton \r
552 */\r
553 private JButton getJButtonAdd() {\r
554 if (jButtonAdd == null) {\r
555 jButtonAdd = new JButton();\r
556 jButtonAdd.setBounds(new java.awt.Rectangle(195,277,71,20));\r
557 jButtonAdd.setPreferredSize(new java.awt.Dimension(70,20));\r
558 jButtonAdd.setText("Add");\r
559 jButtonAdd.addActionListener(this);\r
560 }\r
561 return jButtonAdd; \r
562 \r
563 } \r
564 \r
565 /**\r
566 * This method initializes jButtonRemove \r
567 * \r
568 * @return javax.swing.JButton \r
569 */\r
570 private JButton getJButtonRemove() {\r
571 if (jButtonRemove == null) {\r
572 jButtonRemove = new JButton();\r
573 jButtonRemove.setBounds(new java.awt.Rectangle(278,277,81,20));\r
574 jButtonRemove.setPreferredSize(new java.awt.Dimension(70,20));\r
575 jButtonRemove.setText("Delete");\r
576 jButtonRemove.addActionListener(this);\r
577 }\r
578 return jButtonRemove;\r
579 }\r
580\r
581 /**\r
582 * This method initializes jButtonClearAll \r
583 * \r
584 * @return javax.swing.JButton \r
585 */\r
586 private JButton getJButtonClearAll() {\r
587 if (jButtonClearAll == null) {\r
588 jButtonClearAll = new JButton();\r
589 jButtonClearAll.setBounds(new java.awt.Rectangle(382,277,90,20));\r
590 jButtonClearAll.setPreferredSize(new java.awt.Dimension(81,20));\r
591 jButtonClearAll.setText("Clear All");\r
592 jButtonClearAll.addActionListener(this);\r
593 }\r
594 return jButtonClearAll;\r
595 }\r
596\r
a13899c5 597 public void componentResized(ComponentEvent arg0) {\r
598 int intPreferredWidth = 500;\r
599 \r
600 resizeComponentWidth(this.jTextFieldC_Name, this.getWidth(), intPreferredWidth);\r
601 resizeComponentWidth(this.jTextFieldToken, this.getWidth(), intPreferredWidth);\r
602 resizeComponentWidth(this.jTextFieldTsGuid, this.getWidth(), intPreferredWidth);\r
603 resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);\r
604 resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);\r
605 resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth);\r
606 \r
a13899c5 607 resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);\r
608// relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
609// relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
610// relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
a13899c5 611 }\r
612\r
613 /**\r
614 * This method initializes jScrollPane \r
615 * \r
616 * @return javax.swing.JScrollPane \r
617 */\r
618 private JScrollPane getJScrollPane() {\r
619 if (jScrollPane == null) {\r
620 jScrollPane = new JScrollPane();\r
621 jScrollPane.setBounds(new java.awt.Rectangle(5,301,1473,137));\r
622 jScrollPane.setViewportView(getJTable());\r
623 }\r
624 return jScrollPane;\r
625 }\r
626\r
627 /**\r
628 * This method initializes jTable \r
629 * \r
630 * @return javax.swing.JTable \r
631 */\r
632 private JTable getJTable() {\r
633 if (jTable == null) {\r
634 model = new CheckboxTableModel();\r
635 jTable = new JTable(model);\r
ce73a791 636 jTable.setRowHeight(20);\r
a13899c5 637 jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);\r
638 jTable.setSize(new Dimension(1000, 300));\r
639 \r
640 model.addColumn("C_Name");\r
641 model.addColumn("Token");\r
642 model.addColumn("TokenSpace");\r
643 model.addColumn("DatumType");\r
644 model.addColumn("DefaultValue");\r
645 model.addColumn("HelpText");\r
646 \r
647 model.addColumn("FeatureFlag");\r
648 model.addColumn("FixedAtBuild");\r
649 model.addColumn("PatchableInModule");\r
650 model.addColumn("Dynamic");\r
651 model.addColumn("DynamicEx");\r
652 model.addColumn("SupportedArch");\r
653 model.addColumn("SupportedModule");\r
a13899c5 654 \r
655 //ToDo: add a valid usage editor\r
656 \r
657 JComboBox jComboBoxDataType = new JComboBox();\r
658 jComboBoxDataType.addItem("UINT8");\r
659 jComboBoxDataType.addItem("UINT16");\r
660 jComboBoxDataType.addItem("UINT32");\r
661 jComboBoxDataType.addItem("UINT64");\r
662 jComboBoxDataType.addItem("VOID*");\r
663 jComboBoxDataType.addItem("BOOLEAN");\r
664 TableColumn dataTypeColumn = jTable.getColumnModel().getColumn(3);\r
665 dataTypeColumn.setCellEditor(new DefaultCellEditor(jComboBoxDataType));\r
666\r
ce73a791 667 Vector<String> vArch = new Vector<String>();\r
668 vArch.add("IA32");\r
669 vArch.add("X64");\r
670 vArch.add("IPF");\r
671 vArch.add("EBC");\r
672 vArch.add("ARM");\r
673 vArch.add("PPC");\r
674 jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch));\r
675 \r
676 Vector<String> vModule = new Vector<String>();\r
677 vModule.add("BASE");\r
678 vModule.add("SEC");\r
679 vModule.add("PEI_CORE");\r
680 vModule.add("PEIM");\r
681 vModule.add("DXE_CORE");\r
682 vModule.add("DXE_DRIVER");\r
683 vModule.add("DXE_RUNTIME_DRIVER");\r
684 vModule.add("DXE_SAL_DRIVER");\r
685 vModule.add("DXE_SMM_DRIVER");\r
686 vModule.add("UEFI_DRIVER");\r
687 vModule.add("UEFI_APPLICATION");\r
688 vModule.add("USER_DEFINED");\r
689 jTable.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule));\r
690 \r
a13899c5 691 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
692 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
693 public void valueChanged(ListSelectionEvent e) {\r
694 if (e.getValueIsAdjusting()){\r
695 return;\r
696 }\r
697 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
698 if (lsm.isSelectionEmpty()) {\r
699 return;\r
700 }\r
701 else{\r
702 selectedRow = lsm.getMinSelectionIndex();\r
703 }\r
704 }\r
705 });\r
706 \r
707 jTable.getModel().addTableModelListener(this);\r
708 }\r
709 return jTable;\r
710 }\r
711 \r
712 public void tableChanged(TableModelEvent arg0) {\r
713 // TODO Auto-generated method stub\r
714 int row = arg0.getFirstRow();\r
715 TableModel m = (TableModel)arg0.getSource();\r
716 if (arg0.getType() == TableModelEvent.UPDATE){\r
717 \r
718 String cName = m.getValueAt(row, 0) + "";\r
719 String token = m.getValueAt(row, 1) + "";\r
720 String ts = m.getValueAt(row, 2) + "";\r
721 String dataType = m.getValueAt(row, 3) + "";\r
722 String defaultVal = m.getValueAt(row, 4) + "";\r
723 String help = m.getValueAt(row, 5) + "";\r
724 String usage = getValidUsage(new Boolean(m.getValueAt(row, 6)+""), new Boolean(m.getValueAt(row, 7)+""), new Boolean(m.getValueAt(row, 8)+""), new Boolean(m.getValueAt(row, 9)+""), new Boolean(m.getValueAt(row, 10)+""));\r
725 String archList = vectorToString(iCheckBoxList.getAllCheckedItemsString());\r
726 String modTypeList = vectorToString(iCheckBoxList1.getAllCheckedItemsString());\r
ce73a791 727 if (usage.length() == 0) {\r
728 JOptionPane.showMessageDialog(frame, "You must choose at least one usage for PCD entry.");\r
729 return;\r
730 }\r
731 Object[] o = {cName, token, ts, dataType, defaultVal, help};\r
732 if (!dataValidation(o)){\r
733 return;\r
734 }\r
a13899c5 735 sfc.updateSpdPcdDefinition(row, cName, token, dataType, usage, ts, defaultVal, help, archList, modTypeList);\r
736 }\r
737 }\r
738\r
739 /**\r
740 * This method initializes jCheckBox \r
741 * \r
742 * @return javax.swing.JCheckBox \r
743 */\r
744 private JCheckBox getJCheckBox() {\r
745 if (jCheckBox == null) {\r
746 jCheckBox = new JCheckBox();\r
747 jCheckBox.setBounds(new java.awt.Rectangle(156,161,100,21));\r
748 jCheckBox.setText("Feature Flag");\r
749 jCheckBox.setPreferredSize(new java.awt.Dimension(21,20));\r
750 }\r
751 return jCheckBox;\r
752 }\r
753\r
754 /**\r
755 * This method initializes jCheckBox1 \r
756 * \r
757 * @return javax.swing.JCheckBox \r
758 */\r
759 private JCheckBox getJCheckBox1() {\r
760 if (jCheckBox1 == null) {\r
761 jCheckBox1 = new JCheckBox();\r
762 jCheckBox1.setBounds(new java.awt.Rectangle(302,133,108,20));\r
763 jCheckBox1.setText("Fixed at Build");\r
764 jCheckBox1.setPreferredSize(new java.awt.Dimension(21,20));\r
765 }\r
766 return jCheckBox1;\r
767 }\r
768\r
769 /**\r
770 * This method initializes jCheckBox2 \r
771 * \r
772 * @return javax.swing.JCheckBox \r
773 */\r
774 private JCheckBox getJCheckBox2() {\r
775 if (jCheckBox2 == null) {\r
776 jCheckBox2 = new JCheckBox();\r
777 jCheckBox2.setBounds(new java.awt.Rectangle(156,133,154,20));\r
778 jCheckBox2.setText("Patchable in Module");\r
779 jCheckBox2.setPreferredSize(new java.awt.Dimension(21,20));\r
780 }\r
781 return jCheckBox2;\r
782 }\r
783\r
784 /**\r
785 * This method initializes jCheckBox3 \r
786 * \r
787 * @return javax.swing.JCheckBox \r
788 */\r
789 private JCheckBox getJCheckBox3() {\r
790 if (jCheckBox3 == null) {\r
791 jCheckBox3 = new JCheckBox();\r
792 jCheckBox3.setBounds(new java.awt.Rectangle(278,161,80,20));\r
793 jCheckBox3.setText("Dynamic");\r
794 jCheckBox3.setPreferredSize(new java.awt.Dimension(21,20));\r
795 }\r
796 return jCheckBox3;\r
797 }\r
798\r
799 /**\r
800 * This method initializes jCheckBox4 \r
801 * \r
802 * @return javax.swing.JCheckBox \r
803 */\r
804 private JCheckBox getJCheckBox4() {\r
805 if (jCheckBox4 == null) {\r
806 jCheckBox4 = new JCheckBox();\r
807 jCheckBox4.setBounds(new java.awt.Rectangle(371,161,99,20));\r
808 jCheckBox4.setText("DynamicEx");\r
809 jCheckBox4.setPreferredSize(new java.awt.Dimension(21,20));\r
810 }\r
811 return jCheckBox4;\r
812 }\r
813 \r
814 private String getValidUsage(boolean ff, boolean fab, boolean pim, boolean d, boolean de) {\r
815 String usage = "";\r
816 if (ff){\r
817 usage += "FEATURE_FLAG ";\r
818 }\r
819 if (fab){\r
820 usage += "FIXED_AT_BUILD ";\r
821 }\r
822 if (pim){\r
823 usage += "PATCHABLE_IN_MODULE ";\r
824 }\r
825 if (d){\r
826 usage += "DYNAMIC ";\r
827 }\r
828 if (de){\r
829 usage += "DYNAMIC_EX ";\r
830 }\r
831 \r
832 return usage.trim();\r
833 }\r
834 \r
ce73a791 835 private boolean checkValidUsage(boolean[] b) {\r
836 if (!(b[0] || b[1] || b[2] || b[3] || b[4])){\r
a13899c5 837 JOptionPane.showMessageDialog(frame, "You must specify at least one usage.");\r
838 return false;\r
839 }\r
840 return true;\r
841 }\r
ce73a791 842 private boolean dataValidation(Object[] row) {\r
843 \r
844 if (!DataValidation.isC_NameType(row[0].toString())) {\r
845 JOptionPane.showMessageDialog(frame, "C_Name is NOT C_NameType.");\r
846 return false;\r
847 }\r
848 if (!(DataValidation.isHexDoubleWordDataType(row[1].toString()) || \r
849 DataValidation.isInt(row[1].toString(), 0, 0xffffffff))) {\r
850 JOptionPane.showMessageDialog(frame, "Token is NOT correct.");\r
851 return false;\r
852 }\r
853 if (!DataValidation.isC_NameType(row[2].toString())) {\r
854 JOptionPane.showMessageDialog(frame, "Token Space is NOT C_NameType");\r
855 return false;\r
856 }\r
857 if (row[5].toString().length() == 0) {\r
858 JOptionPane.showMessageDialog(frame, "HelpText could NOT be empty.");\r
859 return false;\r
860 }\r
861 return true;\r
862 }\r
a13899c5 863\r
864 /**\r
865 * This method initializes jScrollPane1 \r
866 * \r
867 * @return javax.swing.JScrollPane \r
868 */\r
869 private JScrollPane getJScrollPane1() {\r
870 if (jScrollPane1 == null) {\r
871 jScrollPane1 = new JScrollPane();\r
872 jScrollPane1.setBounds(new java.awt.Rectangle(242,213,188,54));\r
873 jScrollPane1.setViewportView(getICheckBoxList());\r
874 jScrollPane1.setPreferredSize(new Dimension(188, 74));\r
875 }\r
876 return jScrollPane1;\r
877 }\r
878\r
879 /**\r
880 * This method initializes iCheckBoxList \r
881 * \r
882 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList \r
883 */\r
884 private ICheckBoxList getICheckBoxList() {\r
885 if (iCheckBoxList == null) {\r
886 iCheckBoxList = new ICheckBoxList();\r
887 iCheckBoxList.setBounds(new Rectangle(197, 142, 188, 74));\r
888 Vector<String> v = new Vector<String>();\r
889 v.add("IA32");\r
890 v.add("X64");\r
891 v.add("IPF");\r
892 v.add("EBC");\r
ce73a791 893 v.add("ARM");\r
894 v.add("PPC");\r
a13899c5 895 iCheckBoxList.setAllItems(v);\r
896 }\r
897 return iCheckBoxList;\r
898 }\r
899\r
900 /**\r
901 * This method initializes jScrollPane2 \r
902 * \r
903 * @return javax.swing.JScrollPane \r
904 */\r
905 private JScrollPane getJScrollPane2() {\r
906 if (jScrollPane2 == null) {\r
907 jScrollPane2 = new JScrollPane();\r
908 jScrollPane2.setBounds(new java.awt.Rectangle(15,213,199,55));\r
909 jScrollPane2.setViewportView(getICheckBoxList1());\r
910 jScrollPane2.setPreferredSize(new Dimension(170, 74));\r
911 }\r
912 return jScrollPane2;\r
913 }\r
914\r
915 /**\r
916 * This method initializes iCheckBoxList1 \r
917 * \r
918 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList \r
919 */\r
920 private ICheckBoxList getICheckBoxList1() {\r
921 if (iCheckBoxList1 == null) {\r
922 iCheckBoxList1 = new ICheckBoxList();\r
923 iCheckBoxList1.setBounds(new Rectangle(14, 142, 170, 74));\r
924 Vector<String> v = new Vector<String>();\r
925 v.add("BASE");\r
926 v.add("SEC");\r
927 v.add("PEI_CORE");\r
928 v.add("PEIM");\r
929 v.add("DXE_CORE");\r
930 v.add("DXE_DRIVER");\r
931 v.add("DXE_RUNTIME_DRIVER");\r
932 v.add("DXE_SAL_DRIVER");\r
933 v.add("DXE_SMM_DRIVER");\r
934 v.add("UEFI_DRIVER");\r
935 v.add("UEFI_APPLICATION");\r
936 v.add("USER_DEFINED");\r
937 iCheckBoxList1.setAllItems(v);\r
938 }\r
939 return iCheckBoxList1;\r
940 }\r
941 \r
942 protected String vectorToString(Vector<String> v) {\r
943 if (v == null) {\r
944 return null;\r
945 }\r
946 String s = " ";\r
947 for (int i = 0; i < v.size(); ++i) {\r
948 s += v.get(i);\r
949 s += " ";\r
950 }\r
951 return s.trim();\r
952 }\r
953} // @jve:decl-index=0:visual-constraint="22,11"\r
954\r
955class CheckboxTableModel extends DefaultTableModel {\r
0b5e1cc3 956 /**\r
957 * \r
958 */\r
959 private static final long serialVersionUID = 1L;\r
960\r
961 public Class<?> getColumnClass (int c) {\r
a13899c5 962 if (getValueAt(0, c) != null){\r
963 return getValueAt(0, c).getClass();\r
964 }\r
965 return String.class;\r
966 }\r
967}\r