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