]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
adapte to new resize interface.
[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
8792f60f 42import org.tianocore.frameworkwizard.common.Tools;\r
d6d24759 43import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageType;\r
a13899c5 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
ce73a791 50import org.tianocore.frameworkwizard.platform.ui.ListEditor;\r
51\r
a13899c5 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
0b5e1cc3 62 /**\r
63 * \r
64 */\r
65 private static final long serialVersionUID = 1L;\r
66\r
a13899c5 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
d6d24759 90 \r
91 private OpeningPackageType docConsole = null;\r
a13899c5 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
4da2e625 109 private JTextField jTextFieldHelp = null;\r
a13899c5 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
a13899c5 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
4da2e625 133 private JCheckBox jCheckBoxFeatureFlag = null;\r
a13899c5 134\r
4da2e625 135 private JCheckBox jCheckBoxFixedAtBuild = null;\r
a13899c5 136\r
4da2e625 137 private JCheckBox jCheckBoxPatchInMod = null;\r
a13899c5 138\r
4da2e625 139 private JCheckBox jCheckBoxDyn = null;\r
a13899c5 140\r
4da2e625 141 private JCheckBox jCheckBoxDynEx = null;\r
a13899c5 142\r
4da2e625 143 private JScrollPane jScrollPaneArch = null;\r
a13899c5 144\r
4da2e625 145 private ICheckBoxList iCheckBoxListArch = null;\r
a13899c5 146\r
4da2e625 147 private JScrollPane jScrollPaneMod = null;\r
a13899c5 148\r
4da2e625 149 private ICheckBoxList iCheckBoxListMod = null;\r
a13899c5 150\r
4da2e625 151 private JLabel jLabelSupMod = null;\r
a13899c5 152\r
4da2e625 153 private JLabel jLabelSupArch = null;\r
a13899c5 154\r
155 /**\r
156 This method initializes this\r
157 \r
158 **/\r
159 private void initialize() {\r
209abc92 160 this.setTitle("PCD Declarations");\r
a13899c5 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
d6d24759 253 \r
254 public SpdPcdDefs(OpeningPackageType opt) {\r
255 this(opt.getXmlSpd());\r
256 docConsole = opt;\r
257 }\r
a13899c5 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
af25df16 291 for (int m = 6; m < 11; ++m) {\r
a13899c5 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
4da2e625 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
a13899c5 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
4da2e625 408 jContentPane.add(getJTextFieldHelp(), null);\r
a13899c5 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
a13899c5 414 jContentPane.add(getJScrollPane(), null);\r
415 jContentPane.add(starLabel, null);\r
4da2e625 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
a13899c5 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
d6d24759 447 docConsole.setSaved(false);\r
a13899c5 448 if (arg0.getSource() == jButtonOk) {\r
449 this.save();\r
450 this.dispose();\r
a13899c5 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
4da2e625 458 boolean[] b = {jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(), jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected()};\r
ce73a791 459 if (!checkValidUsage(b)) {\r
a13899c5 460 return;\r
461 }\r
4da2e625 462 String archList = vectorToString(iCheckBoxListArch.getAllCheckedItemsString());\r
a13899c5 463 if (archList.length() == 0) {\r
464 archList = null;\r
465 }\r
4da2e625 466 String modTypeList = vectorToString(iCheckBoxListMod.getAllCheckedItemsString());\r
a13899c5 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
4da2e625 472 jTextFieldDefaultValue.getText(), jTextFieldHelp.getText(),\r
473 jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(),\r
474 jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected(),\r
a13899c5 475 archList, modTypeList};\r
ce73a791 476 if (!dataValidation(row)) {\r
477 return;\r
478 }\r
a13899c5 479 model.addRow(row);\r
af25df16 480 jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
4da2e625 481 String usage = getValidUsage(jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(), jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected());\r
a13899c5 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
a13899c5 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
ce73a791 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
a13899c5 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
4da2e625 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
a13899c5 540 }\r
4da2e625 541 return jTextFieldHelp;\r
a13899c5 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
a13899c5 607 public void componentResized(ComponentEvent arg0) {\r
608 int intPreferredWidth = 500;\r
609 \r
8792f60f 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
a13899c5 616 \r
8792f60f 617 Tools.resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);\r
a13899c5 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
a13899c5 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
af25df16 631 jScrollPane.setBounds(new java.awt.Rectangle(5,301,1473,259));\r
a13899c5 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
ce73a791 646 jTable.setRowHeight(20);\r
a13899c5 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
a13899c5 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
ce73a791 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
a13899c5 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
a490bca8 725 int column = arg0.getColumn();\r
a13899c5 726 TableModel m = (TableModel)arg0.getSource();\r
727 if (arg0.getType() == TableModelEvent.UPDATE){\r
a490bca8 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
a13899c5 766 \r
a490bca8 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
a13899c5 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
a490bca8 784 \r
209abc92 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
a490bca8 794 \r
ce73a791 795 Object[] o = {cName, token, ts, dataType, defaultVal, help};\r
796 if (!dataValidation(o)){\r
797 return;\r
798 }\r
d6d24759 799 docConsole.setSaved(false);\r
a13899c5 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
4da2e625 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
a13899c5 815 }\r
4da2e625 816 return jCheckBoxFeatureFlag;\r
a13899c5 817 }\r
818\r
819 /**\r
820 * This method initializes jCheckBox1 \r
821 * \r
822 * @return javax.swing.JCheckBox \r
823 */\r
4da2e625 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
a13899c5 830 }\r
4da2e625 831 return jCheckBoxFixedAtBuild;\r
a13899c5 832 }\r
833\r
834 /**\r
835 * This method initializes jCheckBox2 \r
836 * \r
837 * @return javax.swing.JCheckBox \r
838 */\r
4da2e625 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
a13899c5 845 }\r
4da2e625 846 return jCheckBoxPatchInMod;\r
a13899c5 847 }\r
848\r
849 /**\r
850 * This method initializes jCheckBox3 \r
851 * \r
852 * @return javax.swing.JCheckBox \r
853 */\r
4da2e625 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
a13899c5 860 }\r
4da2e625 861 return jCheckBoxDyn;\r
a13899c5 862 }\r
863\r
864 /**\r
865 * This method initializes jCheckBox4 \r
866 * \r
867 * @return javax.swing.JCheckBox \r
868 */\r
4da2e625 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
a13899c5 875 }\r
4da2e625 876 return jCheckBoxDynEx;\r
a13899c5 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
ce73a791 900 private boolean checkValidUsage(boolean[] b) {\r
901 if (!(b[0] || b[1] || b[2] || b[3] || b[4])){\r
a13899c5 902 JOptionPane.showMessageDialog(frame, "You must specify at least one usage.");\r
903 return false;\r
904 }\r
905 return true;\r
906 }\r
ce73a791 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
b876680a 913 if (!DataValidation.isHexDoubleWordDataType(row[1].toString()) && \r
914 !DataValidation.isInt(row[1].toString(), Integer.MIN_VALUE, Integer.MAX_VALUE)) {\r
ce73a791 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
a13899c5 928\r
929 /**\r
930 * This method initializes jScrollPane1 \r
931 * \r
932 * @return javax.swing.JScrollPane \r
933 */\r
4da2e625 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
a13899c5 940 }\r
4da2e625 941 return jScrollPaneArch;\r
a13899c5 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
4da2e625 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
a13899c5 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
ce73a791 958 v.add("ARM");\r
959 v.add("PPC");\r
4da2e625 960 iCheckBoxListArch.setAllItems(v);\r
a13899c5 961 }\r
4da2e625 962 return iCheckBoxListArch;\r
a13899c5 963 }\r
964\r
965 /**\r
966 * This method initializes jScrollPane2 \r
967 * \r
968 * @return javax.swing.JScrollPane \r
969 */\r
4da2e625 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
a13899c5 976 }\r
4da2e625 977 return jScrollPaneMod;\r
a13899c5 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
4da2e625 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
a13899c5 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
4da2e625 1002 iCheckBoxListMod.setAllItems(v);\r
a13899c5 1003 }\r
4da2e625 1004 return iCheckBoxListMod;\r
a13899c5 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
a490bca8 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
a13899c5 1042} // @jve:decl-index=0:visual-constraint="22,11"\r
1043\r
1044class CheckboxTableModel extends DefaultTableModel {\r
0b5e1cc3 1045 /**\r
1046 * \r
1047 */\r
1048 private static final long serialVersionUID = 1L;\r
1049\r
1050 public Class<?> getColumnClass (int c) {\r
a13899c5 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