2 Java class SpdPcdDefs is GUI for create PCD definition elements of spd file.
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 package org
.tianocore
.frameworkwizard
.packaging
.ui
;
15 import java
.awt
.Dimension
;
16 import java
.awt
.event
.ActionEvent
;
17 import java
.awt
.event
.ComponentEvent
;
19 import javax
.swing
.DefaultCellEditor
;
20 import javax
.swing
.JFrame
;
21 import javax
.swing
.JOptionPane
;
22 import javax
.swing
.JPanel
;
23 import javax
.swing
.JLabel
;
24 import javax
.swing
.JTextField
;
25 import javax
.swing
.JComboBox
;
26 import javax
.swing
.JButton
;
27 import javax
.swing
.ListSelectionModel
;
29 import javax
.swing
.event
.InternalFrameAdapter
;
30 import javax
.swing
.event
.InternalFrameEvent
;
31 import javax
.swing
.event
.ListSelectionEvent
;
32 import javax
.swing
.event
.ListSelectionListener
;
33 import javax
.swing
.event
.TableModelEvent
;
34 import javax
.swing
.event
.TableModelListener
;
35 import javax
.swing
.table
.DefaultTableModel
;
36 import javax
.swing
.table
.TableColumn
;
37 import javax
.swing
.table
.TableModel
;
39 import org
.tianocore
.PackageSurfaceAreaDocument
;
41 import org
.tianocore
.frameworkwizard
.common
.DataValidation
;
42 import org
.tianocore
.frameworkwizard
.common
.Tools
;
43 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningPackageType
;
44 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
45 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
46 import javax
.swing
.JScrollPane
;
47 import javax
.swing
.JTable
;
48 import javax
.swing
.JCheckBox
;
49 import org
.tianocore
.frameworkwizard
.common
.ui
.iCheckBoxList
.ICheckBoxList
;
50 import org
.tianocore
.frameworkwizard
.platform
.ui
.ListEditor
;
51 import org
.tianocore
.frameworkwizard
.platform
.ui
.LongTextEditor
;
53 import java
.awt
.Rectangle
;
54 import java
.util
.Vector
;
57 GUI for create PCD definition elements of spd file
59 @since PackageEditor 1.0
61 public class SpdPcdDefs
extends IInternalFrame
implements TableModelListener
{
66 private static final long serialVersionUID
= 1L;
70 private JPanel jContentPane
= null;
72 private JLabel jLabelItemType
= null;
74 private JLabel jLabelC_Name
= null;
76 private JTextField jTextFieldC_Name
= null;
78 private JLabel jLabelToken
= null;
80 private JTextField jTextFieldToken
= null;
82 private JLabel jLabelDataType
= null;
84 private JButton jButtonOk
= null;
86 private JButton jButtonCancel
= null;
88 private JComboBox jComboBoxDataType
= null;
90 private SpdFileContents sfc
= null;
92 private OpeningPackageType docConsole
= null;
94 private StarLabel jStarLabel2
= null;
96 private StarLabel jStarLabel3
= null;
98 private StarLabel jStarLabel4
= null;
100 private StarLabel jStarLabel
= null;
102 private StarLabel jStarLabel1
= null;
104 private JLabel jLabelTokenSpace
= null;
106 private JComboBox jComboBoxTsGuid
= null;
108 private JLabel jLabelVarVal
= null;
110 private JTextField jTextFieldHelp
= null;
112 private JLabel jLabelDefVal
= null;
114 private JTextField jTextFieldDefaultValue
= null;
116 private JButton jButtonAdd
= null;
118 private CheckboxTableModel model
= null;
120 private JButton jButtonRemove
= null;
122 private JButton jButtonClearAll
= null;
124 private JScrollPane jScrollPane
= null;
126 private JTable jTable
= null;
128 private JScrollPane topScrollPane
= null; // @jve:decl-index=0:visual-constraint="390,10"
130 private int selectedRow
= -1;
132 private StarLabel starLabel
= null;
134 private JCheckBox jCheckBoxFeatureFlag
= null;
136 private JCheckBox jCheckBoxFixedAtBuild
= null;
138 private JCheckBox jCheckBoxPatchInMod
= null;
140 private JCheckBox jCheckBoxDyn
= null;
142 private JCheckBox jCheckBoxDynEx
= null;
144 private JScrollPane jScrollPaneArch
= null;
146 private ICheckBoxList iCheckBoxListArch
= null;
148 private JScrollPane jScrollPaneMod
= null;
150 private ICheckBoxList iCheckBoxListMod
= null;
152 private JLabel jLabelSupMod
= null;
154 private JLabel jLabelSupArch
= null;
156 private final int pcdCNameMinWidth
= 200;
157 private final int pcdTokenMinWidth
= 100;
158 private final int pcdTokenSpaceMinWidth
= 200;
159 private final int datumTypeMinWidth
= 80;
160 private final int defaultValueMinWidth
= 100;
161 private final int helpTextMinWidth
= 200;
162 private final int usageMinWidth
= 60;
163 private final int supArchMinWidth
= 200;
164 private final int supModMinWidth
= 200;
167 This method initializes this
170 private void initialize() {
171 this.setTitle("PCD Declarations");
172 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
177 This method initializes jTextFieldC_Name
179 @return javax.swing.JTextField
181 private JTextField
getJTextFieldC_Name() {
182 if (jTextFieldC_Name
== null) {
183 jTextFieldC_Name
= new JTextField();
184 jTextFieldC_Name
.setBounds(new java
.awt
.Rectangle(156,9,317,20));
185 jTextFieldC_Name
.setPreferredSize(new java
.awt
.Dimension(315,20));
187 return jTextFieldC_Name
;
191 This method initializes jTextFieldToken
193 @return javax.swing.JTextField
195 private JTextField
getJTextFieldToken() {
196 if (jTextFieldToken
== null) {
197 jTextFieldToken
= new JTextField();
198 jTextFieldToken
.setBounds(new java
.awt
.Rectangle(156,33,317,20));
199 jTextFieldToken
.setPreferredSize(new java
.awt
.Dimension(315,20));
201 return jTextFieldToken
;
205 This method initializes jButtonOk
207 @return javax.swing.JButton
209 private JButton
getJButtonOk() {
210 if (jButtonOk
== null) {
211 jButtonOk
= new JButton();
212 jButtonOk
.setText("OK");
213 jButtonOk
.setBounds(new java
.awt
.Rectangle(279,276,90,20));
214 jButtonOk
.setVisible(false);
215 jButtonOk
.addActionListener(this);
221 This method initializes jButtonCancel
223 @return javax.swing.JButton
225 private JButton
getJButtonCancel() {
226 if (jButtonCancel
== null) {
227 jButtonCancel
= new JButton();
228 jButtonCancel
.setText("Cancel");
229 jButtonCancel
.setBounds(new java
.awt
.Rectangle(389,276,82,20));
230 jButtonCancel
.setVisible(false);
231 jButtonCancel
.addActionListener(this);
233 return jButtonCancel
;
237 This method initializes jComboBoxDataType
239 @return javax.swing.JComboBox
241 private JComboBox
getJComboBoxDataType() {
242 if (jComboBoxDataType
== null) {
243 jComboBoxDataType
= new JComboBox();
244 jComboBoxDataType
.setBounds(new java
.awt
.Rectangle(156,84,110,20));
246 return jComboBoxDataType
;
250 This is the default constructor
252 public SpdPcdDefs() {
259 public SpdPcdDefs(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
) {
261 sfc
= new SpdFileContents(inPsa
);
265 public SpdPcdDefs(OpeningPackageType opt
) {
266 this(opt
.getXmlSpd());
270 This method initializes this
274 private void init() {
275 this.setSize(500, 650);
276 this.setContentPane(getJContentPane());
277 this.addInternalFrameListener(new InternalFrameAdapter(){
278 public void internalFrameDeactivated(InternalFrameEvent e
){
279 if (jTable
.isEditing()) {
280 jTable
.getCellEditor().stopCellEditing();
285 this.setVisible(true);
288 private void init(SpdFileContents sfc
){
290 if (sfc
.getSpdPcdDefinitionCount() == 0) {
293 String
[][] saa
= new String
[sfc
.getSpdPcdDefinitionCount()][8];
294 String
[][] usage
= new String
[sfc
.getSpdPcdDefinitionCount()][5];
295 Object
[] rowData
= new Object
[13];
296 sfc
.getSpdPcdDefinitions(saa
, usage
);
298 while (i
< saa
.length
) {
300 for (int k
= 0; k
< 6; ++k
) {
301 rowData
[k
] = saa
[i
][k
];
303 for (int m
= 6; m
< 11; ++m
) {
304 rowData
[m
] = new Boolean("false");
308 if (usage
[i
][j
] == null || usage
[i
][j
].length()==0){
312 if (usage
[i
][j
].equals("FEATURE_FLAG")){
313 rowData
[6] = new Boolean("true");
315 if (usage
[i
][j
].equals("FIXED_AT_BUILD")){
316 rowData
[7] = new Boolean("true");
318 if (usage
[i
][j
].equals("PATCHABLE_IN_MODULE")){
319 rowData
[8] = new Boolean("true");
321 if (usage
[i
][j
].equals("DYNAMIC")){
322 rowData
[9] = new Boolean("true");
324 if (usage
[i
][j
].equals("DYNAMIC_EX")){
325 rowData
[10] = new Boolean("true");
331 rowData
[11] = saa
[i
][6];
332 rowData
[12] = saa
[i
][7];
334 model
.addRow(rowData
);
343 private JScrollPane
getJContentPane(){
344 if (topScrollPane
== null){
345 topScrollPane
= new JScrollPane();
346 topScrollPane
.setSize(new java
.awt
.Dimension(482,451));
347 topScrollPane
.setViewportView(getJContentPane1());
349 return topScrollPane
;
351 private JPanel
getJContentPane1() {
352 if (jContentPane
== null) {
354 jLabelSupArch
= new JLabel();
355 jLabelSupArch
.setBounds(new java
.awt
.Rectangle(241,192,89,16));
356 jLabelSupArch
.setText("Supported Architectures");
357 jLabelSupArch
.setEnabled(true);
358 jLabelSupMod
= new JLabel();
359 jLabelSupMod
.setBounds(new java
.awt
.Rectangle(15,193,103,16));
360 jLabelSupMod
.setText("Supported Module type");
361 jLabelSupMod
.setEnabled(true);
362 starLabel
= new StarLabel();
363 starLabel
.setBounds(new java
.awt
.Rectangle(2,134,10,20));
364 jLabelDefVal
= new JLabel();
365 jLabelDefVal
.setBounds(new java
.awt
.Rectangle(277,84,80,20));
366 jLabelDefVal
.setText("Default Value");
367 jLabelVarVal
= new JLabel();
368 jLabelVarVal
.setBounds(new java
.awt
.Rectangle(11,133,84,20));
369 jLabelVarVal
.setText("Valid Usage");
370 jLabelC_Name
= new JLabel();
371 jLabelC_Name
.setText("C Name");
372 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(11,9,140,20));
373 jLabelTokenSpace
= new JLabel();
374 jLabelTokenSpace
.setBounds(new java
.awt
.Rectangle(11,58,140,20));
375 jLabelTokenSpace
.setText("Token Space");
376 jLabelDataType
= new JLabel();
377 jLabelDataType
.setText("Data Type");
378 jLabelDataType
.setBounds(new java
.awt
.Rectangle(11,83,140,20));
379 jLabelToken
= new JLabel();
380 jLabelToken
.setText("Token Number");
381 jLabelToken
.setBounds(new java
.awt
.Rectangle(11,33,140,20));
382 jLabelItemType
= new JLabel();
383 jLabelItemType
.setText("Help Text");
384 jLabelItemType
.setBounds(new java
.awt
.Rectangle(11,108,140,20));
387 jContentPane
= new JPanel();
388 jContentPane
.setLayout(null);
389 jContentPane
.setPreferredSize(new java
.awt
.Dimension(479,375));
391 jContentPane
.add(jLabelItemType
, null);
392 jContentPane
.add(jLabelC_Name
, null);
393 jContentPane
.add(jLabelTokenSpace
, null);
394 jContentPane
.add(getJComboBoxTsGuid(), null);
395 jContentPane
.add(jLabelVarVal
, null);
396 jContentPane
.add(getJTextFieldC_Name(), null);
397 jContentPane
.add(jLabelToken
, null);
398 jContentPane
.add(getJTextFieldToken(), null);
399 jContentPane
.add(jLabelDataType
, null);
400 jContentPane
.add(getJButtonOk(), null);
401 jContentPane
.add(getJButtonCancel(), null);
402 jContentPane
.add(getJComboBoxDataType(), null);
404 jStarLabel
= new StarLabel();
405 jStarLabel1
= new StarLabel();
406 jStarLabel1
.setBounds(new java
.awt
.Rectangle(2,8,10,20));
407 jStarLabel2
= new StarLabel();
408 jStarLabel3
= new StarLabel();
409 jStarLabel4
= new StarLabel();
410 jStarLabel
.setLocation(new java
.awt
.Point(2,84));
411 jStarLabel4
.setLocation(new java
.awt
.Point(2, 109));
412 jStarLabel2
.setLocation(new java
.awt
.Point(2,33));
413 jStarLabel3
.setLocation(new java
.awt
.Point(2, 58));
414 jStarLabel3
.setSize(new java
.awt
.Dimension(8,20));
415 jContentPane
.add(jStarLabel2
, null);
416 jContentPane
.add(jStarLabel3
, null);
417 jContentPane
.add(jStarLabel
, null);
418 jContentPane
.add(jStarLabel1
, null);
419 jContentPane
.add(jStarLabel4
, null);
420 jContentPane
.add(getJTextFieldHelp(), null);
421 jContentPane
.add(jLabelDefVal
, null);
422 jContentPane
.add(getJTextFieldDefaultValue(), null);
423 jContentPane
.add(getJButtonAdd(), null);
424 jContentPane
.add(getJButtonRemove(), null);
425 jContentPane
.add(getJButtonClearAll(), null);
426 jContentPane
.add(getJScrollPane(), null);
427 jContentPane
.add(starLabel
, null);
428 jContentPane
.add(getJCheckBoxFeatureFlag(), null);
429 jContentPane
.add(getJCheckBoxFixedAtBuild(), null);
430 jContentPane
.add(getJCheckBoxPatchInMod(), null);
431 jContentPane
.add(getJCheckBoxDyn(), null);
432 jContentPane
.add(getJCheckBoxDynEx(), null);
433 jContentPane
.add(getJScrollPaneArch(), null);
434 jContentPane
.add(getJScrollPaneMod(), null);
435 jContentPane
.add(jLabelSupMod
, null);
436 jContentPane
.add(jLabelSupArch
, null);
442 This method initializes comboboxes
443 jContentPane.add(jLabelTokenSpace, null);
446 private void initFrame(SpdFileContents sfc
) {
448 jComboBoxDataType
.addItem("UINT8");
449 jComboBoxDataType
.addItem("UINT16");
450 jComboBoxDataType
.addItem("UINT32");
451 jComboBoxDataType
.addItem("UINT64");
452 jComboBoxDataType
.addItem("VOID*");
453 jComboBoxDataType
.addItem("BOOLEAN");
454 jComboBoxDataType
.setSelectedIndex(0);
456 Vector
<String
> vGuidCName
= new Vector
<String
>();
457 sfc
.getSpdGuidDeclWithType(vGuidCName
, "TOKEN_SPACE_GUID");
458 for (int i
= 0; i
< vGuidCName
.size(); ++i
) {
459 jComboBoxTsGuid
.addItem(vGuidCName
.get(i
));
463 public void actionPerformed(ActionEvent arg0
) {
466 if (arg0
.getSource() == jButtonOk
) {
470 if (arg0
.getSource() == jButtonCancel
) {
474 if (arg0
.getSource() == jButtonAdd
) {
475 //ToDo: check before add
477 boolean[] b
= {jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected()};
478 if (!checkValidUsage(b
)) {
481 String archList
= vectorToString(iCheckBoxListArch
.getAllCheckedItemsString());
482 if (archList
.length() == 0) {
485 String modTypeList
= vectorToString(iCheckBoxListMod
.getAllCheckedItemsString());
486 if (modTypeList
.length() == 0) {
489 Object
[] row
= {jTextFieldC_Name
.getText(), jTextFieldToken
.getText(),
490 jComboBoxTsGuid
.getSelectedItem(), jComboBoxDataType
.getSelectedItem(),
491 jTextFieldDefaultValue
.getText(), jTextFieldHelp
.getText(),
492 jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(),
493 jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected(),
494 archList
, modTypeList
};
495 if (!dataValidation(row
)) {
499 if (tokenCNameExisted(jTextFieldToken
.getText(), jTextFieldC_Name
.getText())) {
504 jTable
.changeSelection(model
.getRowCount()-1, 0, false, false);
505 String usage
= getValidUsage(jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected());
506 if (usage
.length() == 0) {
509 sfc
.genSpdPcdDefinitions(row
[0]+"", row
[1]+"", row
[3]+"", usage
, row
[2]+"", row
[4]+"", row
[5]+"", archList
, modTypeList
);
510 docConsole
.setSaved(false);
513 // remove selected line
515 if (arg0
.getSource() == jButtonRemove
) {
516 if (jTable
.isEditing()){
517 jTable
.getCellEditor().stopCellEditing();
519 int rowSelected
= selectedRow
;
520 if (rowSelected
>= 0) {
521 model
.removeRow(rowSelected
);
522 sfc
.removeSpdPcdDefinition(rowSelected
);
523 docConsole
.setSaved(false);
527 if (arg0
.getSource() == jButtonClearAll
) {
528 if (model
.getRowCount() == 0) {
531 model
.setRowCount(0);
532 sfc
.removeSpdPcdDefinition();
533 docConsole
.setSaved(false);
538 protected void save() {
543 * This method initializes jComboBoxTsGuid
545 * @return javax.swing.JComboBox
547 private JComboBox
getJComboBoxTsGuid() {
548 if (jComboBoxTsGuid
== null) {
549 jComboBoxTsGuid
= new JComboBox();
550 jComboBoxTsGuid
.setBounds(new java
.awt
.Rectangle(156,58,315,20));
553 return jComboBoxTsGuid
;
557 * This method initializes jTextField
559 * @return javax.swing.JTextField
561 private JTextField
getJTextFieldHelp() {
562 if (jTextFieldHelp
== null) {
563 jTextFieldHelp
= new JTextField();
564 jTextFieldHelp
.setBounds(new java
.awt
.Rectangle(156,108,317,20));
565 jTextFieldHelp
.setPreferredSize(new java
.awt
.Dimension(315,20));
567 return jTextFieldHelp
;
571 * This method initializes jTextFieldDefaultValue
573 * @return javax.swing.JTextField
575 private JTextField
getJTextFieldDefaultValue() {
576 if (jTextFieldDefaultValue
== null) {
577 jTextFieldDefaultValue
= new JTextField();
578 jTextFieldDefaultValue
.setBounds(new java
.awt
.Rectangle(368,84,105,20));
579 jTextFieldDefaultValue
.setPreferredSize(new java
.awt
.Dimension(104,20));
581 return jTextFieldDefaultValue
;
585 * This method initializes jButtonAdd
587 * @return javax.swing.JButton
589 private JButton
getJButtonAdd() {
590 if (jButtonAdd
== null) {
591 jButtonAdd
= new JButton();
592 jButtonAdd
.setBounds(new java
.awt
.Rectangle(195,277,71,20));
593 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(70,20));
594 jButtonAdd
.setText("Add");
595 jButtonAdd
.addActionListener(this);
602 * This method initializes jButtonRemove
604 * @return javax.swing.JButton
606 private JButton
getJButtonRemove() {
607 if (jButtonRemove
== null) {
608 jButtonRemove
= new JButton();
609 jButtonRemove
.setBounds(new java
.awt
.Rectangle(278,277,81,20));
610 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(70,20));
611 jButtonRemove
.setText("Delete");
612 jButtonRemove
.addActionListener(this);
614 return jButtonRemove
;
618 * This method initializes jButtonClearAll
620 * @return javax.swing.JButton
622 private JButton
getJButtonClearAll() {
623 if (jButtonClearAll
== null) {
624 jButtonClearAll
= new JButton();
625 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(382,277,90,20));
626 jButtonClearAll
.setPreferredSize(new java
.awt
.Dimension(81,20));
627 jButtonClearAll
.setText("Clear All");
628 jButtonClearAll
.addActionListener(this);
630 return jButtonClearAll
;
633 public void componentResized(ComponentEvent arg0
) {
634 int intPreferredWidth
= 500;
636 Tools
.resizeComponentWidth(this.jTextFieldC_Name
, this.getWidth(), intPreferredWidth
);
637 Tools
.resizeComponentWidth(this.jTextFieldToken
, this.getWidth(), intPreferredWidth
);
638 Tools
.resizeComponentWidth(this.jComboBoxTsGuid
, this.getWidth(), intPreferredWidth
);
639 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
640 Tools
.resizeComponentWidth(this.jTextFieldHelp
, this.getWidth(), intPreferredWidth
);
641 Tools
.resizeComponentWidth(this.jScrollPane
, this.getWidth(), intPreferredWidth
);
643 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
644 // relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
645 // relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
646 // relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
650 * This method initializes jScrollPane
652 * @return javax.swing.JScrollPane
654 private JScrollPane
getJScrollPane() {
655 if (jScrollPane
== null) {
656 jScrollPane
= new JScrollPane();
657 jScrollPane
.setBounds(new java
.awt
.Rectangle(5,301,1473,259));
658 jScrollPane
.setViewportView(getJTable());
664 * This method initializes jTable
666 * @return javax.swing.JTable
668 private JTable
getJTable() {
669 if (jTable
== null) {
670 model
= new CheckboxTableModel();
671 jTable
= new JTable(model
);
672 jTable
.setRowHeight(20);
673 jTable
.setAutoResizeMode(JTable
.AUTO_RESIZE_OFF
);
674 jTable
.setSize(new Dimension(1000, 300));
676 model
.addColumn("C_Name");
677 model
.addColumn("Token");
678 model
.addColumn("TokenSpace");
679 model
.addColumn("DatumType");
680 model
.addColumn("DefaultValue");
681 model
.addColumn("HelpText");
683 model
.addColumn("FeatureFlag");
684 model
.addColumn("FixedAtBuild");
685 model
.addColumn("PatchableInModule");
686 model
.addColumn("Dynamic");
687 model
.addColumn("DynamicEx");
688 model
.addColumn("SupportedArch");
689 model
.addColumn("SupportedModule");
691 TableColumn column
= jTable
.getColumnModel().getColumn(0);
692 column
.setMinWidth(this.pcdCNameMinWidth
);
693 column
= jTable
.getColumnModel().getColumn(1);
694 column
.setMinWidth(this.pcdTokenMinWidth
);
695 column
= jTable
.getColumnModel().getColumn(2);
696 column
.setMinWidth(this.pcdTokenSpaceMinWidth
);
697 column
= jTable
.getColumnModel().getColumn(3);
698 column
.setMinWidth(this.datumTypeMinWidth
);
699 column
= jTable
.getColumnModel().getColumn(4);
700 column
.setMinWidth(this.defaultValueMinWidth
);
701 column
= jTable
.getColumnModel().getColumn(5);
702 column
.setMinWidth(this.helpTextMinWidth
);
703 column
= jTable
.getColumnModel().getColumn(6);
704 column
.setMinWidth(this.usageMinWidth
);
705 column
= jTable
.getColumnModel().getColumn(7);
706 column
.setMinWidth(this.usageMinWidth
);
707 column
= jTable
.getColumnModel().getColumn(8);
708 column
.setMinWidth(this.usageMinWidth
);
709 column
= jTable
.getColumnModel().getColumn(9);
710 column
.setMinWidth(this.usageMinWidth
);
711 column
= jTable
.getColumnModel().getColumn(10);
712 column
.setMinWidth(this.usageMinWidth
);
713 column
= jTable
.getColumnModel().getColumn(11);
714 column
.setMinWidth(this.supArchMinWidth
);
715 column
= jTable
.getColumnModel().getColumn(12);
716 column
.setMinWidth(this.supModMinWidth
);
718 //ToDo: add a valid usage editor
720 JComboBox jComboBoxDataType
= new JComboBox();
721 jComboBoxDataType
.addItem("UINT8");
722 jComboBoxDataType
.addItem("UINT16");
723 jComboBoxDataType
.addItem("UINT32");
724 jComboBoxDataType
.addItem("UINT64");
725 jComboBoxDataType
.addItem("VOID*");
726 jComboBoxDataType
.addItem("BOOLEAN");
727 TableColumn dataTypeColumn
= jTable
.getColumnModel().getColumn(3);
728 dataTypeColumn
.setCellEditor(new DefaultCellEditor(jComboBoxDataType
));
730 jTable
.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor());
732 Vector
<String
> vArch
= new Vector
<String
>();
739 jTable
.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch
));
741 Vector
<String
> vModule
= new Vector
<String
>();
744 vModule
.add("PEI_CORE");
746 vModule
.add("DXE_CORE");
747 vModule
.add("DXE_DRIVER");
748 vModule
.add("DXE_RUNTIME_DRIVER");
749 vModule
.add("DXE_SAL_DRIVER");
750 vModule
.add("DXE_SMM_DRIVER");
751 vModule
.add("UEFI_DRIVER");
752 vModule
.add("UEFI_APPLICATION");
753 vModule
.add("USER_DEFINED");
754 jTable
.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule
));
756 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
757 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
758 public void valueChanged(ListSelectionEvent e
) {
759 if (e
.getValueIsAdjusting()){
762 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
763 if (lsm
.isSelectionEmpty()) {
767 selectedRow
= lsm
.getMinSelectionIndex();
772 jTable
.getModel().addTableModelListener(this);
777 public void tableChanged(TableModelEvent arg0
) {
778 // TODO Auto-generated method stub
779 int row
= arg0
.getFirstRow();
780 int column
= arg0
.getColumn();
781 TableModel m
= (TableModel
)arg0
.getSource();
782 if (arg0
.getType() == TableModelEvent
.UPDATE
){
783 String
[] sa
= new String
[9];
784 sfc
.getSpdPcdDeclaration(sa
, row
);
785 Object cellData
= m
.getValueAt(row
, column
);
788 if (cellData
== null) {
791 if (cellData
.equals(sa
[column
])) {
794 if (cellData
.toString().length() == 0 && sa
[column
] == null) {
799 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)+""));
800 if (usage
.length() == 0) {
801 JOptionPane
.showMessageDialog(frame
, "You must choose at least one usage for PCD entry.");
804 if (column
<= 10 && column
>= 6) {
805 Vector
<String
> v
= stringToVector(usage
);
806 if (compareTwoVectors(v
, stringToVector(sa
[6]))) {
809 if (v
.contains("FEATURE_FLAG") && v
.size() > 1) {
810 JOptionPane
.showMessageDialog(frame
, "Usage Feature Flag can NOT co-exist with others.");
816 if (cellData
== null) {
819 if (cellData
.equals(sa
[7])) {
822 if (cellData
.toString().length() == 0 && sa
[7] == null) {
828 if (cellData
== null) {
831 if (cellData
.equals(sa
[8])) {
834 if (cellData
.toString().length() == 0 && sa
[8] == null) {
838 String cName
= m
.getValueAt(row
, 0) + "";
839 String token
= m
.getValueAt(row
, 1) + "";
840 String ts
= m
.getValueAt(row
, 2) + "";
841 String dataType
= m
.getValueAt(row
, 3) + "";
842 String defaultVal
= m
.getValueAt(row
, 4) + "";
843 String help
= m
.getValueAt(row
, 5) + "";
846 String archList
= null;
847 if (m
.getValueAt(row
, 11) != null){
848 archList
= m
.getValueAt(row
, 11).toString();
850 String modTypeList
= null;
851 if (m
.getValueAt(row
, 12) != null) {
852 modTypeList
= m
.getValueAt(row
, 12).toString();
855 Object
[] o
= {cName
, token
, ts
, dataType
, defaultVal
, help
};
856 if (!dataValidation(o
)){
859 docConsole
.setSaved(false);
860 sfc
.updateSpdPcdDefinition(row
, cName
, token
, dataType
, usage
, ts
, defaultVal
, help
, archList
, modTypeList
);
865 * This method initializes jCheckBox
867 * @return javax.swing.JCheckBox
869 private JCheckBox
getJCheckBoxFeatureFlag() {
870 if (jCheckBoxFeatureFlag
== null) {
871 jCheckBoxFeatureFlag
= new JCheckBox();
872 jCheckBoxFeatureFlag
.setBounds(new java
.awt
.Rectangle(156,161,100,21));
873 jCheckBoxFeatureFlag
.setText("Feature Flag");
874 jCheckBoxFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(21,20));
875 jCheckBoxFeatureFlag
.addItemListener(new java
.awt
.event
.ItemListener() {
876 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
877 if (jCheckBoxFeatureFlag
.isSelected()) {
878 jCheckBoxPatchInMod
.setSelected(false);
879 jCheckBoxFixedAtBuild
.setSelected(false);
880 jCheckBoxDyn
.setSelected(false);
881 jCheckBoxDynEx
.setSelected(false);
886 return jCheckBoxFeatureFlag
;
890 * This method initializes jCheckBox1
892 * @return javax.swing.JCheckBox
894 private JCheckBox
getJCheckBoxFixedAtBuild() {
895 if (jCheckBoxFixedAtBuild
== null) {
896 jCheckBoxFixedAtBuild
= new JCheckBox();
897 jCheckBoxFixedAtBuild
.setBounds(new java
.awt
.Rectangle(312,133,108,20));
898 jCheckBoxFixedAtBuild
.setText("Fixed at Build");
899 jCheckBoxFixedAtBuild
.setPreferredSize(new java
.awt
.Dimension(21,20));
900 jCheckBoxFixedAtBuild
.addItemListener(new java
.awt
.event
.ItemListener() {
901 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
902 if (jCheckBoxFixedAtBuild
.isSelected()) {
903 jCheckBoxFeatureFlag
.setSelected(false);
908 return jCheckBoxFixedAtBuild
;
912 * This method initializes jCheckBox2
914 * @return javax.swing.JCheckBox
916 private JCheckBox
getJCheckBoxPatchInMod() {
917 if (jCheckBoxPatchInMod
== null) {
918 jCheckBoxPatchInMod
= new JCheckBox();
919 jCheckBoxPatchInMod
.setBounds(new java
.awt
.Rectangle(156,133,154,20));
920 jCheckBoxPatchInMod
.setText("Patchable in Module");
921 jCheckBoxPatchInMod
.setPreferredSize(new java
.awt
.Dimension(21,20));
922 jCheckBoxPatchInMod
.addItemListener(new java
.awt
.event
.ItemListener() {
923 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
924 if (jCheckBoxPatchInMod
.isSelected()) {
925 jCheckBoxFeatureFlag
.setSelected(false);
930 return jCheckBoxPatchInMod
;
934 * This method initializes jCheckBox3
936 * @return javax.swing.JCheckBox
938 private JCheckBox
getJCheckBoxDyn() {
939 if (jCheckBoxDyn
== null) {
940 jCheckBoxDyn
= new JCheckBox();
941 jCheckBoxDyn
.setBounds(new java
.awt
.Rectangle(278,161,80,20));
942 jCheckBoxDyn
.setText("Dynamic");
943 jCheckBoxDyn
.setPreferredSize(new java
.awt
.Dimension(21,20));
944 jCheckBoxDyn
.addItemListener(new java
.awt
.event
.ItemListener() {
945 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
946 if (jCheckBoxDyn
.isSelected()) {
947 jCheckBoxFeatureFlag
.setSelected(false);
956 * This method initializes jCheckBox4
958 * @return javax.swing.JCheckBox
960 private JCheckBox
getJCheckBoxDynEx() {
961 if (jCheckBoxDynEx
== null) {
962 jCheckBoxDynEx
= new JCheckBox();
963 jCheckBoxDynEx
.setBounds(new java
.awt
.Rectangle(371,161,99,20));
964 jCheckBoxDynEx
.setText("DynamicEx");
965 jCheckBoxDynEx
.setPreferredSize(new java
.awt
.Dimension(21,20));
966 jCheckBoxDynEx
.addItemListener(new java
.awt
.event
.ItemListener() {
967 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
968 if (jCheckBoxDynEx
.isSelected()) {
969 jCheckBoxFeatureFlag
.setSelected(false);
974 return jCheckBoxDynEx
;
977 private String
getValidUsage(boolean ff
, boolean fab
, boolean pim
, boolean d
, boolean de
) {
980 usage
+= "FEATURE_FLAG ";
983 usage
+= "FIXED_AT_BUILD ";
986 usage
+= "PATCHABLE_IN_MODULE ";
992 usage
+= "DYNAMIC_EX ";
998 private boolean tokenCNameExisted(String token
, String cName
) {
999 Integer inputToken
= Integer
.decode(token
);
1001 for (int i
= 0; i
< jTable
.getRowCount(); ++i
) {
1002 if (jTable
.getValueAt(i
, 0).equals(cName
)) {
1003 JOptionPane
.showMessageDialog(frame
, "C_Name already existed in table.");
1006 if (jTable
.getValueAt(i
, 1).equals(token
)) {
1007 JOptionPane
.showMessageDialog(frame
, "Token already existed in table.");
1010 Integer tokenValue
= Integer
.decode(jTable
.getValueAt(i
, 1)+"");
1011 if (tokenValue
.equals(inputToken
)) {
1012 JOptionPane
.showMessageDialog(frame
, "Same token value already existed in table.");
1020 private boolean checkValidUsage(boolean[] b
) {
1021 if (!(b
[0] || b
[1] || b
[2] || b
[3] || b
[4])){
1022 JOptionPane
.showMessageDialog(frame
, "You must specify at least one usage.");
1027 private boolean dataValidation(Object
[] row
) {
1029 if (!DataValidation
.isC_NameType(row
[0].toString())) {
1030 JOptionPane
.showMessageDialog(frame
, "C_Name is NOT C_NameType.");
1033 if (!DataValidation
.isHexDoubleWordDataType(row
[1].toString()) &&
1034 !DataValidation
.isInt(row
[1].toString(), Integer
.MIN_VALUE
, Integer
.MAX_VALUE
)) {
1035 JOptionPane
.showMessageDialog(frame
, "Token is NOT correct.");
1038 if (!DataValidation
.isC_NameType(row
[2].toString())) {
1039 JOptionPane
.showMessageDialog(frame
, "Token Space is NOT C_NameType");
1042 if (row
[5].toString().length() == 0) {
1043 JOptionPane
.showMessageDialog(frame
, "HelpText could NOT be empty.");
1050 * This method initializes jScrollPane1
1052 * @return javax.swing.JScrollPane
1054 private JScrollPane
getJScrollPaneArch() {
1055 if (jScrollPaneArch
== null) {
1056 jScrollPaneArch
= new JScrollPane();
1057 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(242,213,188,54));
1058 jScrollPaneArch
.setViewportView(getICheckBoxListArch());
1059 jScrollPaneArch
.setPreferredSize(new Dimension(188, 74));
1061 return jScrollPaneArch
;
1065 * This method initializes iCheckBoxList
1067 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1069 private ICheckBoxList
getICheckBoxListArch() {
1070 if (iCheckBoxListArch
== null) {
1071 iCheckBoxListArch
= new ICheckBoxList();
1072 iCheckBoxListArch
.setBounds(new Rectangle(197, 142, 188, 74));
1073 Vector
<String
> v
= new Vector
<String
>();
1080 iCheckBoxListArch
.setAllItems(v
);
1082 return iCheckBoxListArch
;
1086 * This method initializes jScrollPane2
1088 * @return javax.swing.JScrollPane
1090 private JScrollPane
getJScrollPaneMod() {
1091 if (jScrollPaneMod
== null) {
1092 jScrollPaneMod
= new JScrollPane();
1093 jScrollPaneMod
.setBounds(new java
.awt
.Rectangle(15,213,199,55));
1094 jScrollPaneMod
.setViewportView(getICheckBoxListMod());
1095 jScrollPaneMod
.setPreferredSize(new Dimension(170, 74));
1097 return jScrollPaneMod
;
1101 * This method initializes iCheckBoxList1
1103 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1105 private ICheckBoxList
getICheckBoxListMod() {
1106 if (iCheckBoxListMod
== null) {
1107 iCheckBoxListMod
= new ICheckBoxList();
1108 iCheckBoxListMod
.setBounds(new Rectangle(14, 142, 170, 74));
1109 Vector
<String
> v
= new Vector
<String
>();
1115 v
.add("DXE_DRIVER");
1116 v
.add("DXE_RUNTIME_DRIVER");
1117 v
.add("DXE_SAL_DRIVER");
1118 v
.add("DXE_SMM_DRIVER");
1119 v
.add("UEFI_DRIVER");
1120 v
.add("UEFI_APPLICATION");
1121 v
.add("USER_DEFINED");
1122 iCheckBoxListMod
.setAllItems(v
);
1124 return iCheckBoxListMod
;
1127 protected String
vectorToString(Vector
<String
> v
) {
1132 for (int i
= 0; i
< v
.size(); ++i
) {
1139 protected Vector
<String
> stringToVector(String s
){
1140 Vector
<String
> v
= new Vector
<String
>();
1144 String
[] sArray
= s
.split(" ");
1146 for (int i
= 0; i
< sArray
.length
; ++i
) {
1152 private boolean compareTwoVectors(Vector v1
, Vector v2
) {
1153 if (v1
.size() != v2
.size()) {
1156 for (int i
= 0; i
< v1
.size(); ++i
) {
1157 if (!v2
.contains(v1
.get(i
))) {
1163 } // @jve:decl-index=0:visual-constraint="22,11"
1165 class CheckboxTableModel
extends DefaultTableModel
{
1169 private static final long serialVersionUID
= 1L;
1171 public Class
<?
> getColumnClass (int c
) {
1172 if (getValueAt(0, c
) != null){
1173 return getValueAt(0, c
).getClass();
1175 return String
.class;