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