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
;
52 import java
.awt
.Rectangle
;
53 import java
.util
.Vector
;
56 GUI for create PCD definition elements of spd file
58 @since PackageEditor 1.0
60 public class SpdPcdDefs
extends IInternalFrame
implements TableModelListener
{
65 private static final long serialVersionUID
= 1L;
69 private JPanel jContentPane
= null;
71 private JLabel jLabelItemType
= null;
73 private JLabel jLabelC_Name
= null;
75 private JTextField jTextFieldC_Name
= null;
77 private JLabel jLabelToken
= null;
79 private JTextField jTextFieldToken
= null;
81 private JLabel jLabelDataType
= null;
83 private JButton jButtonOk
= null;
85 private JButton jButtonCancel
= null;
87 private JComboBox jComboBoxDataType
= null;
89 private SpdFileContents sfc
= null;
91 private OpeningPackageType docConsole
= null;
93 private StarLabel jStarLabel2
= null;
95 private StarLabel jStarLabel3
= null;
97 private StarLabel jStarLabel4
= null;
99 private StarLabel jStarLabel
= null;
101 private StarLabel jStarLabel1
= null;
103 private JLabel jLabelTokenSpace
= null;
105 private JComboBox jComboBoxTsGuid
= null;
107 private JLabel jLabelVarVal
= null;
109 private JTextField jTextFieldHelp
= null;
111 private JLabel jLabelDefVal
= null;
113 private JTextField jTextFieldDefaultValue
= null;
115 private JButton jButtonAdd
= null;
117 private CheckboxTableModel model
= null;
119 private JButton jButtonRemove
= null;
121 private JButton jButtonClearAll
= null;
123 private JScrollPane jScrollPane
= null;
125 private JTable jTable
= null;
127 private JScrollPane topScrollPane
= null; // @jve:decl-index=0:visual-constraint="390,10"
129 private int selectedRow
= -1;
131 private StarLabel starLabel
= null;
133 private JCheckBox jCheckBoxFeatureFlag
= null;
135 private JCheckBox jCheckBoxFixedAtBuild
= null;
137 private JCheckBox jCheckBoxPatchInMod
= null;
139 private JCheckBox jCheckBoxDyn
= null;
141 private JCheckBox jCheckBoxDynEx
= null;
143 private JScrollPane jScrollPaneArch
= null;
145 private ICheckBoxList iCheckBoxListArch
= null;
147 private JScrollPane jScrollPaneMod
= null;
149 private ICheckBoxList iCheckBoxListMod
= null;
151 private JLabel jLabelSupMod
= null;
153 private JLabel jLabelSupArch
= null;
156 This method initializes this
159 private void initialize() {
160 this.setTitle("PCD Declarations");
161 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
166 This method initializes jTextFieldC_Name
168 @return javax.swing.JTextField
170 private JTextField
getJTextFieldC_Name() {
171 if (jTextFieldC_Name
== null) {
172 jTextFieldC_Name
= new JTextField();
173 jTextFieldC_Name
.setBounds(new java
.awt
.Rectangle(156,9,317,20));
174 jTextFieldC_Name
.setPreferredSize(new java
.awt
.Dimension(315,20));
176 return jTextFieldC_Name
;
180 This method initializes jTextFieldToken
182 @return javax.swing.JTextField
184 private JTextField
getJTextFieldToken() {
185 if (jTextFieldToken
== null) {
186 jTextFieldToken
= new JTextField();
187 jTextFieldToken
.setBounds(new java
.awt
.Rectangle(156,33,317,20));
188 jTextFieldToken
.setPreferredSize(new java
.awt
.Dimension(315,20));
190 return jTextFieldToken
;
194 This method initializes jButtonOk
196 @return javax.swing.JButton
198 private JButton
getJButtonOk() {
199 if (jButtonOk
== null) {
200 jButtonOk
= new JButton();
201 jButtonOk
.setText("OK");
202 jButtonOk
.setBounds(new java
.awt
.Rectangle(279,276,90,20));
203 jButtonOk
.setVisible(false);
204 jButtonOk
.addActionListener(this);
210 This method initializes jButtonCancel
212 @return javax.swing.JButton
214 private JButton
getJButtonCancel() {
215 if (jButtonCancel
== null) {
216 jButtonCancel
= new JButton();
217 jButtonCancel
.setText("Cancel");
218 jButtonCancel
.setBounds(new java
.awt
.Rectangle(389,276,82,20));
219 jButtonCancel
.setVisible(false);
220 jButtonCancel
.addActionListener(this);
222 return jButtonCancel
;
226 This method initializes jComboBoxDataType
228 @return javax.swing.JComboBox
230 private JComboBox
getJComboBoxDataType() {
231 if (jComboBoxDataType
== null) {
232 jComboBoxDataType
= new JComboBox();
233 jComboBoxDataType
.setBounds(new java
.awt
.Rectangle(156,84,110,20));
235 return jComboBoxDataType
;
239 This is the default constructor
241 public SpdPcdDefs() {
248 public SpdPcdDefs(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
) {
250 sfc
= new SpdFileContents(inPsa
);
254 public SpdPcdDefs(OpeningPackageType opt
) {
255 this(opt
.getXmlSpd());
259 This method initializes this
263 private void init() {
264 this.setSize(500, 650);
265 this.setContentPane(getJContentPane());
266 this.addInternalFrameListener(new InternalFrameAdapter(){
267 public void internalFrameDeactivated(InternalFrameEvent e
){
268 if (jTable
.isEditing()) {
269 jTable
.getCellEditor().stopCellEditing();
274 this.setVisible(true);
277 private void init(SpdFileContents sfc
){
279 if (sfc
.getSpdPcdDefinitionCount() == 0) {
282 String
[][] saa
= new String
[sfc
.getSpdPcdDefinitionCount()][8];
283 String
[][] usage
= new String
[sfc
.getSpdPcdDefinitionCount()][5];
284 Object
[] rowData
= new Object
[13];
285 sfc
.getSpdPcdDefinitions(saa
, usage
);
287 while (i
< saa
.length
) {
289 for (int k
= 0; k
< 6; ++k
) {
290 rowData
[k
] = saa
[i
][k
];
292 for (int m
= 6; m
< 11; ++m
) {
293 rowData
[m
] = new Boolean("false");
297 if (usage
[i
][j
] == null || usage
[i
][j
].length()==0){
301 if (usage
[i
][j
].equals("FEATURE_FLAG")){
302 rowData
[6] = new Boolean("true");
304 if (usage
[i
][j
].equals("FIXED_AT_BUILD")){
305 rowData
[7] = new Boolean("true");
307 if (usage
[i
][j
].equals("PATCHABLE_IN_MODULE")){
308 rowData
[8] = new Boolean("true");
310 if (usage
[i
][j
].equals("DYNAMIC")){
311 rowData
[9] = new Boolean("true");
313 if (usage
[i
][j
].equals("DYNAMIC_EX")){
314 rowData
[10] = new Boolean("true");
320 rowData
[11] = saa
[i
][6];
321 rowData
[12] = saa
[i
][7];
323 model
.addRow(rowData
);
332 private JScrollPane
getJContentPane(){
333 if (topScrollPane
== null){
334 topScrollPane
= new JScrollPane();
335 topScrollPane
.setSize(new java
.awt
.Dimension(482,451));
336 topScrollPane
.setViewportView(getJContentPane1());
338 return topScrollPane
;
340 private JPanel
getJContentPane1() {
341 if (jContentPane
== null) {
343 jLabelSupArch
= new JLabel();
344 jLabelSupArch
.setBounds(new java
.awt
.Rectangle(241,192,89,16));
345 jLabelSupArch
.setText("Supported Architectures");
346 jLabelSupArch
.setEnabled(true);
347 jLabelSupMod
= new JLabel();
348 jLabelSupMod
.setBounds(new java
.awt
.Rectangle(15,193,103,16));
349 jLabelSupMod
.setText("Supported Module type");
350 jLabelSupMod
.setEnabled(true);
351 starLabel
= new StarLabel();
352 starLabel
.setBounds(new java
.awt
.Rectangle(2,134,10,20));
353 jLabelDefVal
= new JLabel();
354 jLabelDefVal
.setBounds(new java
.awt
.Rectangle(277,84,80,20));
355 jLabelDefVal
.setText("Default Value");
356 jLabelVarVal
= new JLabel();
357 jLabelVarVal
.setBounds(new java
.awt
.Rectangle(11,133,84,20));
358 jLabelVarVal
.setText("Valid Usage");
359 jLabelC_Name
= new JLabel();
360 jLabelC_Name
.setText("C Name");
361 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(11,9,140,20));
362 jLabelTokenSpace
= new JLabel();
363 jLabelTokenSpace
.setBounds(new java
.awt
.Rectangle(11,58,140,20));
364 jLabelTokenSpace
.setText("Token Space");
365 jLabelDataType
= new JLabel();
366 jLabelDataType
.setText("Data Type");
367 jLabelDataType
.setBounds(new java
.awt
.Rectangle(11,83,140,20));
368 jLabelToken
= new JLabel();
369 jLabelToken
.setText("Token Number");
370 jLabelToken
.setBounds(new java
.awt
.Rectangle(11,33,140,20));
371 jLabelItemType
= new JLabel();
372 jLabelItemType
.setText("Help Text");
373 jLabelItemType
.setBounds(new java
.awt
.Rectangle(11,108,140,20));
376 jContentPane
= new JPanel();
377 jContentPane
.setLayout(null);
378 jContentPane
.setPreferredSize(new java
.awt
.Dimension(479,375));
380 jContentPane
.add(jLabelItemType
, null);
381 jContentPane
.add(jLabelC_Name
, null);
382 jContentPane
.add(jLabelTokenSpace
, null);
383 jContentPane
.add(getJComboBoxTsGuid(), null);
384 jContentPane
.add(jLabelVarVal
, null);
385 jContentPane
.add(getJTextFieldC_Name(), null);
386 jContentPane
.add(jLabelToken
, null);
387 jContentPane
.add(getJTextFieldToken(), null);
388 jContentPane
.add(jLabelDataType
, null);
389 jContentPane
.add(getJButtonOk(), null);
390 jContentPane
.add(getJButtonCancel(), null);
391 jContentPane
.add(getJComboBoxDataType(), null);
393 jStarLabel
= new StarLabel();
394 jStarLabel1
= new StarLabel();
395 jStarLabel1
.setBounds(new java
.awt
.Rectangle(2,8,10,20));
396 jStarLabel2
= new StarLabel();
397 jStarLabel3
= new StarLabel();
398 jStarLabel4
= new StarLabel();
399 jStarLabel
.setLocation(new java
.awt
.Point(2,84));
400 jStarLabel4
.setLocation(new java
.awt
.Point(2, 109));
401 jStarLabel2
.setLocation(new java
.awt
.Point(2,33));
402 jStarLabel3
.setLocation(new java
.awt
.Point(2, 58));
403 jStarLabel3
.setSize(new java
.awt
.Dimension(8,20));
404 jContentPane
.add(jStarLabel2
, null);
405 jContentPane
.add(jStarLabel3
, null);
406 jContentPane
.add(jStarLabel
, null);
407 jContentPane
.add(jStarLabel1
, null);
408 jContentPane
.add(jStarLabel4
, null);
409 jContentPane
.add(getJTextFieldHelp(), null);
410 jContentPane
.add(jLabelDefVal
, null);
411 jContentPane
.add(getJTextFieldDefaultValue(), null);
412 jContentPane
.add(getJButtonAdd(), null);
413 jContentPane
.add(getJButtonRemove(), null);
414 jContentPane
.add(getJButtonClearAll(), null);
415 jContentPane
.add(getJScrollPane(), null);
416 jContentPane
.add(starLabel
, null);
417 jContentPane
.add(getJCheckBoxFeatureFlag(), null);
418 jContentPane
.add(getJCheckBoxFixedAtBuild(), null);
419 jContentPane
.add(getJCheckBoxPatchInMod(), null);
420 jContentPane
.add(getJCheckBoxDyn(), null);
421 jContentPane
.add(getJCheckBoxDynEx(), null);
422 jContentPane
.add(getJScrollPaneArch(), null);
423 jContentPane
.add(getJScrollPaneMod(), null);
424 jContentPane
.add(jLabelSupMod
, null);
425 jContentPane
.add(jLabelSupArch
, null);
431 This method initializes comboboxes
432 jContentPane.add(jLabelTokenSpace, null);
435 private void initFrame(SpdFileContents sfc
) {
437 jComboBoxDataType
.addItem("UINT8");
438 jComboBoxDataType
.addItem("UINT16");
439 jComboBoxDataType
.addItem("UINT32");
440 jComboBoxDataType
.addItem("UINT64");
441 jComboBoxDataType
.addItem("VOID*");
442 jComboBoxDataType
.addItem("BOOLEAN");
443 jComboBoxDataType
.setSelectedIndex(0);
445 Vector
<String
> vGuidCName
= new Vector
<String
>();
446 sfc
.getSpdGuidDeclWithType(vGuidCName
, "TOKEN_SPACE_GUID");
447 for (int i
= 0; i
< vGuidCName
.size(); ++i
) {
448 jComboBoxTsGuid
.addItem(vGuidCName
.get(i
));
452 public void actionPerformed(ActionEvent arg0
) {
455 if (arg0
.getSource() == jButtonOk
) {
459 if (arg0
.getSource() == jButtonCancel
) {
463 if (arg0
.getSource() == jButtonAdd
) {
464 //ToDo: check before add
466 boolean[] b
= {jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected()};
467 if (!checkValidUsage(b
)) {
470 String archList
= vectorToString(iCheckBoxListArch
.getAllCheckedItemsString());
471 if (archList
.length() == 0) {
474 String modTypeList
= vectorToString(iCheckBoxListMod
.getAllCheckedItemsString());
475 if (modTypeList
.length() == 0) {
478 Object
[] row
= {jTextFieldC_Name
.getText(), jTextFieldToken
.getText(),
479 jComboBoxTsGuid
.getSelectedItem(), jComboBoxDataType
.getSelectedItem(),
480 jTextFieldDefaultValue
.getText(), jTextFieldHelp
.getText(),
481 jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(),
482 jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected(),
483 archList
, modTypeList
};
484 if (!dataValidation(row
)) {
488 if (tokenCNameExisted(jTextFieldToken
.getText(), jTextFieldC_Name
.getText())) {
493 jTable
.changeSelection(model
.getRowCount()-1, 0, false, false);
494 String usage
= getValidUsage(jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected());
495 if (usage
.length() == 0) {
498 sfc
.genSpdPcdDefinitions(row
[0]+"", row
[1]+"", row
[3]+"", usage
, row
[2]+"", row
[4]+"", row
[5]+"", archList
, modTypeList
);
499 docConsole
.setSaved(false);
502 // remove selected line
504 if (arg0
.getSource() == jButtonRemove
) {
505 if (jTable
.isEditing()){
506 jTable
.getCellEditor().stopCellEditing();
508 int rowSelected
= selectedRow
;
509 if (rowSelected
>= 0) {
510 model
.removeRow(rowSelected
);
511 sfc
.removeSpdPcdDefinition(rowSelected
);
512 docConsole
.setSaved(false);
516 if (arg0
.getSource() == jButtonClearAll
) {
517 if (model
.getRowCount() == 0) {
520 model
.setRowCount(0);
521 sfc
.removeSpdPcdDefinition();
522 docConsole
.setSaved(false);
527 protected void save() {
532 * This method initializes jComboBoxTsGuid
534 * @return javax.swing.JComboBox
536 private JComboBox
getJComboBoxTsGuid() {
537 if (jComboBoxTsGuid
== null) {
538 jComboBoxTsGuid
= new JComboBox();
539 jComboBoxTsGuid
.setBounds(new java
.awt
.Rectangle(156,58,315,20));
542 return jComboBoxTsGuid
;
546 * This method initializes jTextField
548 * @return javax.swing.JTextField
550 private JTextField
getJTextFieldHelp() {
551 if (jTextFieldHelp
== null) {
552 jTextFieldHelp
= new JTextField();
553 jTextFieldHelp
.setBounds(new java
.awt
.Rectangle(156,108,317,20));
554 jTextFieldHelp
.setPreferredSize(new java
.awt
.Dimension(315,20));
556 return jTextFieldHelp
;
560 * This method initializes jTextFieldDefaultValue
562 * @return javax.swing.JTextField
564 private JTextField
getJTextFieldDefaultValue() {
565 if (jTextFieldDefaultValue
== null) {
566 jTextFieldDefaultValue
= new JTextField();
567 jTextFieldDefaultValue
.setBounds(new java
.awt
.Rectangle(368,84,105,20));
568 jTextFieldDefaultValue
.setPreferredSize(new java
.awt
.Dimension(104,20));
570 return jTextFieldDefaultValue
;
574 * This method initializes jButtonAdd
576 * @return javax.swing.JButton
578 private JButton
getJButtonAdd() {
579 if (jButtonAdd
== null) {
580 jButtonAdd
= new JButton();
581 jButtonAdd
.setBounds(new java
.awt
.Rectangle(195,277,71,20));
582 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(70,20));
583 jButtonAdd
.setText("Add");
584 jButtonAdd
.addActionListener(this);
591 * This method initializes jButtonRemove
593 * @return javax.swing.JButton
595 private JButton
getJButtonRemove() {
596 if (jButtonRemove
== null) {
597 jButtonRemove
= new JButton();
598 jButtonRemove
.setBounds(new java
.awt
.Rectangle(278,277,81,20));
599 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(70,20));
600 jButtonRemove
.setText("Delete");
601 jButtonRemove
.addActionListener(this);
603 return jButtonRemove
;
607 * This method initializes jButtonClearAll
609 * @return javax.swing.JButton
611 private JButton
getJButtonClearAll() {
612 if (jButtonClearAll
== null) {
613 jButtonClearAll
= new JButton();
614 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(382,277,90,20));
615 jButtonClearAll
.setPreferredSize(new java
.awt
.Dimension(81,20));
616 jButtonClearAll
.setText("Clear All");
617 jButtonClearAll
.addActionListener(this);
619 return jButtonClearAll
;
622 public void componentResized(ComponentEvent arg0
) {
623 int intPreferredWidth
= 500;
625 Tools
.resizeComponentWidth(this.jTextFieldC_Name
, this.getWidth(), intPreferredWidth
);
626 Tools
.resizeComponentWidth(this.jTextFieldToken
, this.getWidth(), intPreferredWidth
);
627 Tools
.resizeComponentWidth(this.jComboBoxTsGuid
, this.getWidth(), intPreferredWidth
);
628 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
629 Tools
.resizeComponentWidth(this.jTextFieldHelp
, this.getWidth(), intPreferredWidth
);
630 Tools
.resizeComponentWidth(this.jScrollPane
, this.getWidth(), intPreferredWidth
);
632 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
633 // relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
634 // relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
635 // relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
639 * This method initializes jScrollPane
641 * @return javax.swing.JScrollPane
643 private JScrollPane
getJScrollPane() {
644 if (jScrollPane
== null) {
645 jScrollPane
= new JScrollPane();
646 jScrollPane
.setBounds(new java
.awt
.Rectangle(5,301,1473,259));
647 jScrollPane
.setViewportView(getJTable());
653 * This method initializes jTable
655 * @return javax.swing.JTable
657 private JTable
getJTable() {
658 if (jTable
== null) {
659 model
= new CheckboxTableModel();
660 jTable
= new JTable(model
);
661 jTable
.setRowHeight(20);
662 jTable
.setAutoResizeMode(JTable
.AUTO_RESIZE_OFF
);
663 jTable
.setSize(new Dimension(1000, 300));
665 model
.addColumn("C_Name");
666 model
.addColumn("Token");
667 model
.addColumn("TokenSpace");
668 model
.addColumn("DatumType");
669 model
.addColumn("DefaultValue");
670 model
.addColumn("HelpText");
672 model
.addColumn("FeatureFlag");
673 model
.addColumn("FixedAtBuild");
674 model
.addColumn("PatchableInModule");
675 model
.addColumn("Dynamic");
676 model
.addColumn("DynamicEx");
677 model
.addColumn("SupportedArch");
678 model
.addColumn("SupportedModule");
680 //ToDo: add a valid usage editor
682 JComboBox jComboBoxDataType
= new JComboBox();
683 jComboBoxDataType
.addItem("UINT8");
684 jComboBoxDataType
.addItem("UINT16");
685 jComboBoxDataType
.addItem("UINT32");
686 jComboBoxDataType
.addItem("UINT64");
687 jComboBoxDataType
.addItem("VOID*");
688 jComboBoxDataType
.addItem("BOOLEAN");
689 TableColumn dataTypeColumn
= jTable
.getColumnModel().getColumn(3);
690 dataTypeColumn
.setCellEditor(new DefaultCellEditor(jComboBoxDataType
));
692 Vector
<String
> vArch
= new Vector
<String
>();
699 jTable
.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch
));
701 Vector
<String
> vModule
= new Vector
<String
>();
704 vModule
.add("PEI_CORE");
706 vModule
.add("DXE_CORE");
707 vModule
.add("DXE_DRIVER");
708 vModule
.add("DXE_RUNTIME_DRIVER");
709 vModule
.add("DXE_SAL_DRIVER");
710 vModule
.add("DXE_SMM_DRIVER");
711 vModule
.add("UEFI_DRIVER");
712 vModule
.add("UEFI_APPLICATION");
713 vModule
.add("USER_DEFINED");
714 jTable
.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule
));
716 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
717 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
718 public void valueChanged(ListSelectionEvent e
) {
719 if (e
.getValueIsAdjusting()){
722 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
723 if (lsm
.isSelectionEmpty()) {
727 selectedRow
= lsm
.getMinSelectionIndex();
732 jTable
.getModel().addTableModelListener(this);
737 public void tableChanged(TableModelEvent arg0
) {
738 // TODO Auto-generated method stub
739 int row
= arg0
.getFirstRow();
740 int column
= arg0
.getColumn();
741 TableModel m
= (TableModel
)arg0
.getSource();
742 if (arg0
.getType() == TableModelEvent
.UPDATE
){
743 String
[] sa
= new String
[9];
744 sfc
.getSpdPcdDeclaration(sa
, row
);
745 Object cellData
= m
.getValueAt(row
, column
);
748 if (cellData
== null) {
751 if (cellData
.equals(sa
[column
])) {
754 if (cellData
.toString().length() == 0 && sa
[column
] == null) {
759 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)+""));
760 if (usage
.length() == 0) {
761 JOptionPane
.showMessageDialog(frame
, "You must choose at least one usage for PCD entry.");
764 if (column
<= 10 && column
>= 6) {
765 if (compareTwoVectors(stringToVector(usage
), stringToVector(sa
[6]))) {
771 if (cellData
== null) {
774 if (cellData
.equals(sa
[7])) {
777 if (cellData
.toString().length() == 0 && sa
[7] == null) {
783 if (cellData
== null) {
786 if (cellData
.equals(sa
[8])) {
789 if (cellData
.toString().length() == 0 && sa
[8] == null) {
793 String cName
= m
.getValueAt(row
, 0) + "";
794 String token
= m
.getValueAt(row
, 1) + "";
795 String ts
= m
.getValueAt(row
, 2) + "";
796 String dataType
= m
.getValueAt(row
, 3) + "";
797 String defaultVal
= m
.getValueAt(row
, 4) + "";
798 String help
= m
.getValueAt(row
, 5) + "";
801 String archList
= null;
802 if (m
.getValueAt(row
, 11) != null){
803 archList
= m
.getValueAt(row
, 11).toString();
805 String modTypeList
= null;
806 if (m
.getValueAt(row
, 12) != null) {
807 modTypeList
= m
.getValueAt(row
, 12).toString();
810 Object
[] o
= {cName
, token
, ts
, dataType
, defaultVal
, help
};
811 if (!dataValidation(o
)){
814 docConsole
.setSaved(false);
815 sfc
.updateSpdPcdDefinition(row
, cName
, token
, dataType
, usage
, ts
, defaultVal
, help
, archList
, modTypeList
);
820 * This method initializes jCheckBox
822 * @return javax.swing.JCheckBox
824 private JCheckBox
getJCheckBoxFeatureFlag() {
825 if (jCheckBoxFeatureFlag
== null) {
826 jCheckBoxFeatureFlag
= new JCheckBox();
827 jCheckBoxFeatureFlag
.setBounds(new java
.awt
.Rectangle(156,161,100,21));
828 jCheckBoxFeatureFlag
.setText("Feature Flag");
829 jCheckBoxFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(21,20));
830 jCheckBoxFeatureFlag
.addItemListener(new java
.awt
.event
.ItemListener() {
831 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
832 if (jCheckBoxFeatureFlag
.isSelected()) {
833 jCheckBoxPatchInMod
.setSelected(false);
834 jCheckBoxFixedAtBuild
.setSelected(false);
835 jCheckBoxDyn
.setSelected(false);
836 jCheckBoxDynEx
.setSelected(false);
841 return jCheckBoxFeatureFlag
;
845 * This method initializes jCheckBox1
847 * @return javax.swing.JCheckBox
849 private JCheckBox
getJCheckBoxFixedAtBuild() {
850 if (jCheckBoxFixedAtBuild
== null) {
851 jCheckBoxFixedAtBuild
= new JCheckBox();
852 jCheckBoxFixedAtBuild
.setBounds(new java
.awt
.Rectangle(312,133,108,20));
853 jCheckBoxFixedAtBuild
.setText("Fixed at Build");
854 jCheckBoxFixedAtBuild
.setPreferredSize(new java
.awt
.Dimension(21,20));
855 jCheckBoxFixedAtBuild
.addItemListener(new java
.awt
.event
.ItemListener() {
856 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
857 if (jCheckBoxFixedAtBuild
.isSelected()) {
858 jCheckBoxFeatureFlag
.setSelected(false);
863 return jCheckBoxFixedAtBuild
;
867 * This method initializes jCheckBox2
869 * @return javax.swing.JCheckBox
871 private JCheckBox
getJCheckBoxPatchInMod() {
872 if (jCheckBoxPatchInMod
== null) {
873 jCheckBoxPatchInMod
= new JCheckBox();
874 jCheckBoxPatchInMod
.setBounds(new java
.awt
.Rectangle(156,133,154,20));
875 jCheckBoxPatchInMod
.setText("Patchable in Module");
876 jCheckBoxPatchInMod
.setPreferredSize(new java
.awt
.Dimension(21,20));
877 jCheckBoxPatchInMod
.addItemListener(new java
.awt
.event
.ItemListener() {
878 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
879 if (jCheckBoxPatchInMod
.isSelected()) {
880 jCheckBoxFeatureFlag
.setSelected(false);
885 return jCheckBoxPatchInMod
;
889 * This method initializes jCheckBox3
891 * @return javax.swing.JCheckBox
893 private JCheckBox
getJCheckBoxDyn() {
894 if (jCheckBoxDyn
== null) {
895 jCheckBoxDyn
= new JCheckBox();
896 jCheckBoxDyn
.setBounds(new java
.awt
.Rectangle(278,161,80,20));
897 jCheckBoxDyn
.setText("Dynamic");
898 jCheckBoxDyn
.setPreferredSize(new java
.awt
.Dimension(21,20));
899 jCheckBoxDyn
.addItemListener(new java
.awt
.event
.ItemListener() {
900 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
901 if (jCheckBoxDyn
.isSelected()) {
902 jCheckBoxFeatureFlag
.setSelected(false);
911 * This method initializes jCheckBox4
913 * @return javax.swing.JCheckBox
915 private JCheckBox
getJCheckBoxDynEx() {
916 if (jCheckBoxDynEx
== null) {
917 jCheckBoxDynEx
= new JCheckBox();
918 jCheckBoxDynEx
.setBounds(new java
.awt
.Rectangle(371,161,99,20));
919 jCheckBoxDynEx
.setText("DynamicEx");
920 jCheckBoxDynEx
.setPreferredSize(new java
.awt
.Dimension(21,20));
921 jCheckBoxDynEx
.addItemListener(new java
.awt
.event
.ItemListener() {
922 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
923 if (jCheckBoxDynEx
.isSelected()) {
924 jCheckBoxFeatureFlag
.setSelected(false);
929 return jCheckBoxDynEx
;
932 private String
getValidUsage(boolean ff
, boolean fab
, boolean pim
, boolean d
, boolean de
) {
935 usage
+= "FEATURE_FLAG ";
938 usage
+= "FIXED_AT_BUILD ";
941 usage
+= "PATCHABLE_IN_MODULE ";
947 usage
+= "DYNAMIC_EX ";
953 private boolean tokenCNameExisted(String token
, String cName
) {
954 Integer inputToken
= Integer
.decode(token
);
956 for (int i
= 0; i
< jTable
.getRowCount(); ++i
) {
957 if (jTable
.getValueAt(i
, 0).equals(cName
)) {
958 JOptionPane
.showMessageDialog(frame
, "C_Name already existed in table.");
961 if (jTable
.getValueAt(i
, 1).equals(token
)) {
962 JOptionPane
.showMessageDialog(frame
, "Token already existed in table.");
965 Integer tokenValue
= Integer
.decode(jTable
.getValueAt(i
, 1)+"");
966 if (tokenValue
.equals(inputToken
)) {
967 JOptionPane
.showMessageDialog(frame
, "Same token value already existed in table.");
975 private boolean checkValidUsage(boolean[] b
) {
976 if (!(b
[0] || b
[1] || b
[2] || b
[3] || b
[4])){
977 JOptionPane
.showMessageDialog(frame
, "You must specify at least one usage.");
982 private boolean dataValidation(Object
[] row
) {
984 if (!DataValidation
.isC_NameType(row
[0].toString())) {
985 JOptionPane
.showMessageDialog(frame
, "C_Name is NOT C_NameType.");
988 if (!DataValidation
.isHexDoubleWordDataType(row
[1].toString()) &&
989 !DataValidation
.isInt(row
[1].toString(), Integer
.MIN_VALUE
, Integer
.MAX_VALUE
)) {
990 JOptionPane
.showMessageDialog(frame
, "Token is NOT correct.");
993 if (!DataValidation
.isC_NameType(row
[2].toString())) {
994 JOptionPane
.showMessageDialog(frame
, "Token Space is NOT C_NameType");
997 if (row
[5].toString().length() == 0) {
998 JOptionPane
.showMessageDialog(frame
, "HelpText could NOT be empty.");
1005 * This method initializes jScrollPane1
1007 * @return javax.swing.JScrollPane
1009 private JScrollPane
getJScrollPaneArch() {
1010 if (jScrollPaneArch
== null) {
1011 jScrollPaneArch
= new JScrollPane();
1012 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(242,213,188,54));
1013 jScrollPaneArch
.setViewportView(getICheckBoxListArch());
1014 jScrollPaneArch
.setPreferredSize(new Dimension(188, 74));
1016 return jScrollPaneArch
;
1020 * This method initializes iCheckBoxList
1022 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1024 private ICheckBoxList
getICheckBoxListArch() {
1025 if (iCheckBoxListArch
== null) {
1026 iCheckBoxListArch
= new ICheckBoxList();
1027 iCheckBoxListArch
.setBounds(new Rectangle(197, 142, 188, 74));
1028 Vector
<String
> v
= new Vector
<String
>();
1035 iCheckBoxListArch
.setAllItems(v
);
1037 return iCheckBoxListArch
;
1041 * This method initializes jScrollPane2
1043 * @return javax.swing.JScrollPane
1045 private JScrollPane
getJScrollPaneMod() {
1046 if (jScrollPaneMod
== null) {
1047 jScrollPaneMod
= new JScrollPane();
1048 jScrollPaneMod
.setBounds(new java
.awt
.Rectangle(15,213,199,55));
1049 jScrollPaneMod
.setViewportView(getICheckBoxListMod());
1050 jScrollPaneMod
.setPreferredSize(new Dimension(170, 74));
1052 return jScrollPaneMod
;
1056 * This method initializes iCheckBoxList1
1058 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1060 private ICheckBoxList
getICheckBoxListMod() {
1061 if (iCheckBoxListMod
== null) {
1062 iCheckBoxListMod
= new ICheckBoxList();
1063 iCheckBoxListMod
.setBounds(new Rectangle(14, 142, 170, 74));
1064 Vector
<String
> v
= new Vector
<String
>();
1070 v
.add("DXE_DRIVER");
1071 v
.add("DXE_RUNTIME_DRIVER");
1072 v
.add("DXE_SAL_DRIVER");
1073 v
.add("DXE_SMM_DRIVER");
1074 v
.add("UEFI_DRIVER");
1075 v
.add("UEFI_APPLICATION");
1076 v
.add("USER_DEFINED");
1077 iCheckBoxListMod
.setAllItems(v
);
1079 return iCheckBoxListMod
;
1082 protected String
vectorToString(Vector
<String
> v
) {
1087 for (int i
= 0; i
< v
.size(); ++i
) {
1094 protected Vector
<String
> stringToVector(String s
){
1098 String
[] sArray
= s
.split(" ");
1099 Vector
<String
> v
= new Vector
<String
>();
1100 for (int i
= 0; i
< sArray
.length
; ++i
) {
1106 private boolean compareTwoVectors(Vector v1
, Vector v2
) {
1107 if (v1
.size() != v2
.size()) {
1110 for (int i
= 0; i
< v1
.size(); ++i
) {
1111 if (!v2
.contains(v1
.get(i
))) {
1117 } // @jve:decl-index=0:visual-constraint="22,11"
1119 class CheckboxTableModel
extends DefaultTableModel
{
1123 private static final long serialVersionUID
= 1L;
1125 public Class
<?
> getColumnClass (int c
) {
1126 if (getValueAt(0, c
) != null){
1127 return getValueAt(0, c
).getClass();
1129 return String
.class;