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;
157 This method initializes this
160 private void initialize() {
161 this.setTitle("PCD Declarations");
162 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
167 This method initializes jTextFieldC_Name
169 @return javax.swing.JTextField
171 private JTextField
getJTextFieldC_Name() {
172 if (jTextFieldC_Name
== null) {
173 jTextFieldC_Name
= new JTextField();
174 jTextFieldC_Name
.setBounds(new java
.awt
.Rectangle(156,9,317,20));
175 jTextFieldC_Name
.setPreferredSize(new java
.awt
.Dimension(315,20));
177 return jTextFieldC_Name
;
181 This method initializes jTextFieldToken
183 @return javax.swing.JTextField
185 private JTextField
getJTextFieldToken() {
186 if (jTextFieldToken
== null) {
187 jTextFieldToken
= new JTextField();
188 jTextFieldToken
.setBounds(new java
.awt
.Rectangle(156,33,317,20));
189 jTextFieldToken
.setPreferredSize(new java
.awt
.Dimension(315,20));
191 return jTextFieldToken
;
195 This method initializes jButtonOk
197 @return javax.swing.JButton
199 private JButton
getJButtonOk() {
200 if (jButtonOk
== null) {
201 jButtonOk
= new JButton();
202 jButtonOk
.setText("OK");
203 jButtonOk
.setBounds(new java
.awt
.Rectangle(279,276,90,20));
204 jButtonOk
.setVisible(false);
205 jButtonOk
.addActionListener(this);
211 This method initializes jButtonCancel
213 @return javax.swing.JButton
215 private JButton
getJButtonCancel() {
216 if (jButtonCancel
== null) {
217 jButtonCancel
= new JButton();
218 jButtonCancel
.setText("Cancel");
219 jButtonCancel
.setBounds(new java
.awt
.Rectangle(389,276,82,20));
220 jButtonCancel
.setVisible(false);
221 jButtonCancel
.addActionListener(this);
223 return jButtonCancel
;
227 This method initializes jComboBoxDataType
229 @return javax.swing.JComboBox
231 private JComboBox
getJComboBoxDataType() {
232 if (jComboBoxDataType
== null) {
233 jComboBoxDataType
= new JComboBox();
234 jComboBoxDataType
.setBounds(new java
.awt
.Rectangle(156,84,110,20));
236 return jComboBoxDataType
;
240 This is the default constructor
242 public SpdPcdDefs() {
249 public SpdPcdDefs(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
) {
251 sfc
= new SpdFileContents(inPsa
);
255 public SpdPcdDefs(OpeningPackageType opt
) {
256 this(opt
.getXmlSpd());
260 This method initializes this
264 private void init() {
265 this.setSize(500, 650);
266 this.setContentPane(getJContentPane());
267 this.addInternalFrameListener(new InternalFrameAdapter(){
268 public void internalFrameDeactivated(InternalFrameEvent e
){
269 if (jTable
.isEditing()) {
270 jTable
.getCellEditor().stopCellEditing();
275 this.setVisible(true);
278 private void init(SpdFileContents sfc
){
280 if (sfc
.getSpdPcdDefinitionCount() == 0) {
283 String
[][] saa
= new String
[sfc
.getSpdPcdDefinitionCount()][8];
284 String
[][] usage
= new String
[sfc
.getSpdPcdDefinitionCount()][5];
285 Object
[] rowData
= new Object
[13];
286 sfc
.getSpdPcdDefinitions(saa
, usage
);
288 while (i
< saa
.length
) {
290 for (int k
= 0; k
< 6; ++k
) {
291 rowData
[k
] = saa
[i
][k
];
293 for (int m
= 6; m
< 11; ++m
) {
294 rowData
[m
] = new Boolean("false");
298 if (usage
[i
][j
] == null || usage
[i
][j
].length()==0){
302 if (usage
[i
][j
].equals("FEATURE_FLAG")){
303 rowData
[6] = new Boolean("true");
305 if (usage
[i
][j
].equals("FIXED_AT_BUILD")){
306 rowData
[7] = new Boolean("true");
308 if (usage
[i
][j
].equals("PATCHABLE_IN_MODULE")){
309 rowData
[8] = new Boolean("true");
311 if (usage
[i
][j
].equals("DYNAMIC")){
312 rowData
[9] = new Boolean("true");
314 if (usage
[i
][j
].equals("DYNAMIC_EX")){
315 rowData
[10] = new Boolean("true");
321 rowData
[11] = saa
[i
][6];
322 rowData
[12] = saa
[i
][7];
324 model
.addRow(rowData
);
333 private JScrollPane
getJContentPane(){
334 if (topScrollPane
== null){
335 topScrollPane
= new JScrollPane();
336 topScrollPane
.setSize(new java
.awt
.Dimension(482,451));
337 topScrollPane
.setViewportView(getJContentPane1());
339 return topScrollPane
;
341 private JPanel
getJContentPane1() {
342 if (jContentPane
== null) {
344 jLabelSupArch
= new JLabel();
345 jLabelSupArch
.setBounds(new java
.awt
.Rectangle(241,192,89,16));
346 jLabelSupArch
.setText("Supported Architectures");
347 jLabelSupArch
.setEnabled(true);
348 jLabelSupMod
= new JLabel();
349 jLabelSupMod
.setBounds(new java
.awt
.Rectangle(15,193,103,16));
350 jLabelSupMod
.setText("Supported Module type");
351 jLabelSupMod
.setEnabled(true);
352 starLabel
= new StarLabel();
353 starLabel
.setBounds(new java
.awt
.Rectangle(2,134,10,20));
354 jLabelDefVal
= new JLabel();
355 jLabelDefVal
.setBounds(new java
.awt
.Rectangle(277,84,80,20));
356 jLabelDefVal
.setText("Default Value");
357 jLabelVarVal
= new JLabel();
358 jLabelVarVal
.setBounds(new java
.awt
.Rectangle(11,133,84,20));
359 jLabelVarVal
.setText("Valid Usage");
360 jLabelC_Name
= new JLabel();
361 jLabelC_Name
.setText("C Name");
362 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(11,9,140,20));
363 jLabelTokenSpace
= new JLabel();
364 jLabelTokenSpace
.setBounds(new java
.awt
.Rectangle(11,58,140,20));
365 jLabelTokenSpace
.setText("Token Space");
366 jLabelDataType
= new JLabel();
367 jLabelDataType
.setText("Data Type");
368 jLabelDataType
.setBounds(new java
.awt
.Rectangle(11,83,140,20));
369 jLabelToken
= new JLabel();
370 jLabelToken
.setText("Token Number");
371 jLabelToken
.setBounds(new java
.awt
.Rectangle(11,33,140,20));
372 jLabelItemType
= new JLabel();
373 jLabelItemType
.setText("Help Text");
374 jLabelItemType
.setBounds(new java
.awt
.Rectangle(11,108,140,20));
377 jContentPane
= new JPanel();
378 jContentPane
.setLayout(null);
379 jContentPane
.setPreferredSize(new java
.awt
.Dimension(479,375));
381 jContentPane
.add(jLabelItemType
, null);
382 jContentPane
.add(jLabelC_Name
, null);
383 jContentPane
.add(jLabelTokenSpace
, null);
384 jContentPane
.add(getJComboBoxTsGuid(), null);
385 jContentPane
.add(jLabelVarVal
, null);
386 jContentPane
.add(getJTextFieldC_Name(), null);
387 jContentPane
.add(jLabelToken
, null);
388 jContentPane
.add(getJTextFieldToken(), null);
389 jContentPane
.add(jLabelDataType
, null);
390 jContentPane
.add(getJButtonOk(), null);
391 jContentPane
.add(getJButtonCancel(), null);
392 jContentPane
.add(getJComboBoxDataType(), null);
394 jStarLabel
= new StarLabel();
395 jStarLabel1
= new StarLabel();
396 jStarLabel1
.setBounds(new java
.awt
.Rectangle(2,8,10,20));
397 jStarLabel2
= new StarLabel();
398 jStarLabel3
= new StarLabel();
399 jStarLabel4
= new StarLabel();
400 jStarLabel
.setLocation(new java
.awt
.Point(2,84));
401 jStarLabel4
.setLocation(new java
.awt
.Point(2, 109));
402 jStarLabel2
.setLocation(new java
.awt
.Point(2,33));
403 jStarLabel3
.setLocation(new java
.awt
.Point(2, 58));
404 jStarLabel3
.setSize(new java
.awt
.Dimension(8,20));
405 jContentPane
.add(jStarLabel2
, null);
406 jContentPane
.add(jStarLabel3
, null);
407 jContentPane
.add(jStarLabel
, null);
408 jContentPane
.add(jStarLabel1
, null);
409 jContentPane
.add(jStarLabel4
, null);
410 jContentPane
.add(getJTextFieldHelp(), null);
411 jContentPane
.add(jLabelDefVal
, null);
412 jContentPane
.add(getJTextFieldDefaultValue(), null);
413 jContentPane
.add(getJButtonAdd(), null);
414 jContentPane
.add(getJButtonRemove(), null);
415 jContentPane
.add(getJButtonClearAll(), null);
416 jContentPane
.add(getJScrollPane(), null);
417 jContentPane
.add(starLabel
, null);
418 jContentPane
.add(getJCheckBoxFeatureFlag(), null);
419 jContentPane
.add(getJCheckBoxFixedAtBuild(), null);
420 jContentPane
.add(getJCheckBoxPatchInMod(), null);
421 jContentPane
.add(getJCheckBoxDyn(), null);
422 jContentPane
.add(getJCheckBoxDynEx(), null);
423 jContentPane
.add(getJScrollPaneArch(), null);
424 jContentPane
.add(getJScrollPaneMod(), null);
425 jContentPane
.add(jLabelSupMod
, null);
426 jContentPane
.add(jLabelSupArch
, null);
432 This method initializes comboboxes
433 jContentPane.add(jLabelTokenSpace, null);
436 private void initFrame(SpdFileContents sfc
) {
438 jComboBoxDataType
.addItem("UINT8");
439 jComboBoxDataType
.addItem("UINT16");
440 jComboBoxDataType
.addItem("UINT32");
441 jComboBoxDataType
.addItem("UINT64");
442 jComboBoxDataType
.addItem("VOID*");
443 jComboBoxDataType
.addItem("BOOLEAN");
444 jComboBoxDataType
.setSelectedIndex(0);
446 Vector
<String
> vGuidCName
= new Vector
<String
>();
447 sfc
.getSpdGuidDeclWithType(vGuidCName
, "TOKEN_SPACE_GUID");
448 for (int i
= 0; i
< vGuidCName
.size(); ++i
) {
449 jComboBoxTsGuid
.addItem(vGuidCName
.get(i
));
453 public void actionPerformed(ActionEvent arg0
) {
456 if (arg0
.getSource() == jButtonOk
) {
460 if (arg0
.getSource() == jButtonCancel
) {
464 if (arg0
.getSource() == jButtonAdd
) {
465 //ToDo: check before add
467 boolean[] b
= {jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected()};
468 if (!checkValidUsage(b
)) {
471 String archList
= vectorToString(iCheckBoxListArch
.getAllCheckedItemsString());
472 if (archList
.length() == 0) {
475 String modTypeList
= vectorToString(iCheckBoxListMod
.getAllCheckedItemsString());
476 if (modTypeList
.length() == 0) {
479 Object
[] row
= {jTextFieldC_Name
.getText(), jTextFieldToken
.getText(),
480 jComboBoxTsGuid
.getSelectedItem(), jComboBoxDataType
.getSelectedItem(),
481 jTextFieldDefaultValue
.getText(), jTextFieldHelp
.getText(),
482 jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(),
483 jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected(),
484 archList
, modTypeList
};
485 if (!dataValidation(row
)) {
489 if (tokenCNameExisted(jTextFieldToken
.getText(), jTextFieldC_Name
.getText())) {
494 jTable
.changeSelection(model
.getRowCount()-1, 0, false, false);
495 String usage
= getValidUsage(jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected());
496 if (usage
.length() == 0) {
499 sfc
.genSpdPcdDefinitions(row
[0]+"", row
[1]+"", row
[3]+"", usage
, row
[2]+"", row
[4]+"", row
[5]+"", archList
, modTypeList
);
500 docConsole
.setSaved(false);
503 // remove selected line
505 if (arg0
.getSource() == jButtonRemove
) {
506 if (jTable
.isEditing()){
507 jTable
.getCellEditor().stopCellEditing();
509 int rowSelected
= selectedRow
;
510 if (rowSelected
>= 0) {
511 model
.removeRow(rowSelected
);
512 sfc
.removeSpdPcdDefinition(rowSelected
);
513 docConsole
.setSaved(false);
517 if (arg0
.getSource() == jButtonClearAll
) {
518 if (model
.getRowCount() == 0) {
521 model
.setRowCount(0);
522 sfc
.removeSpdPcdDefinition();
523 docConsole
.setSaved(false);
528 protected void save() {
533 * This method initializes jComboBoxTsGuid
535 * @return javax.swing.JComboBox
537 private JComboBox
getJComboBoxTsGuid() {
538 if (jComboBoxTsGuid
== null) {
539 jComboBoxTsGuid
= new JComboBox();
540 jComboBoxTsGuid
.setBounds(new java
.awt
.Rectangle(156,58,315,20));
543 return jComboBoxTsGuid
;
547 * This method initializes jTextField
549 * @return javax.swing.JTextField
551 private JTextField
getJTextFieldHelp() {
552 if (jTextFieldHelp
== null) {
553 jTextFieldHelp
= new JTextField();
554 jTextFieldHelp
.setBounds(new java
.awt
.Rectangle(156,108,317,20));
555 jTextFieldHelp
.setPreferredSize(new java
.awt
.Dimension(315,20));
557 return jTextFieldHelp
;
561 * This method initializes jTextFieldDefaultValue
563 * @return javax.swing.JTextField
565 private JTextField
getJTextFieldDefaultValue() {
566 if (jTextFieldDefaultValue
== null) {
567 jTextFieldDefaultValue
= new JTextField();
568 jTextFieldDefaultValue
.setBounds(new java
.awt
.Rectangle(368,84,105,20));
569 jTextFieldDefaultValue
.setPreferredSize(new java
.awt
.Dimension(104,20));
571 return jTextFieldDefaultValue
;
575 * This method initializes jButtonAdd
577 * @return javax.swing.JButton
579 private JButton
getJButtonAdd() {
580 if (jButtonAdd
== null) {
581 jButtonAdd
= new JButton();
582 jButtonAdd
.setBounds(new java
.awt
.Rectangle(195,277,71,20));
583 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(70,20));
584 jButtonAdd
.setText("Add");
585 jButtonAdd
.addActionListener(this);
592 * This method initializes jButtonRemove
594 * @return javax.swing.JButton
596 private JButton
getJButtonRemove() {
597 if (jButtonRemove
== null) {
598 jButtonRemove
= new JButton();
599 jButtonRemove
.setBounds(new java
.awt
.Rectangle(278,277,81,20));
600 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(70,20));
601 jButtonRemove
.setText("Delete");
602 jButtonRemove
.addActionListener(this);
604 return jButtonRemove
;
608 * This method initializes jButtonClearAll
610 * @return javax.swing.JButton
612 private JButton
getJButtonClearAll() {
613 if (jButtonClearAll
== null) {
614 jButtonClearAll
= new JButton();
615 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(382,277,90,20));
616 jButtonClearAll
.setPreferredSize(new java
.awt
.Dimension(81,20));
617 jButtonClearAll
.setText("Clear All");
618 jButtonClearAll
.addActionListener(this);
620 return jButtonClearAll
;
623 public void componentResized(ComponentEvent arg0
) {
624 int intPreferredWidth
= 500;
626 Tools
.resizeComponentWidth(this.jTextFieldC_Name
, this.getWidth(), intPreferredWidth
);
627 Tools
.resizeComponentWidth(this.jTextFieldToken
, this.getWidth(), intPreferredWidth
);
628 Tools
.resizeComponentWidth(this.jComboBoxTsGuid
, this.getWidth(), intPreferredWidth
);
629 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
630 Tools
.resizeComponentWidth(this.jTextFieldHelp
, this.getWidth(), intPreferredWidth
);
631 Tools
.resizeComponentWidth(this.jScrollPane
, this.getWidth(), intPreferredWidth
);
633 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
634 // relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
635 // relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
636 // relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
640 * This method initializes jScrollPane
642 * @return javax.swing.JScrollPane
644 private JScrollPane
getJScrollPane() {
645 if (jScrollPane
== null) {
646 jScrollPane
= new JScrollPane();
647 jScrollPane
.setBounds(new java
.awt
.Rectangle(5,301,1473,259));
648 jScrollPane
.setViewportView(getJTable());
654 * This method initializes jTable
656 * @return javax.swing.JTable
658 private JTable
getJTable() {
659 if (jTable
== null) {
660 model
= new CheckboxTableModel();
661 jTable
= new JTable(model
);
662 jTable
.setRowHeight(20);
663 jTable
.setAutoResizeMode(JTable
.AUTO_RESIZE_OFF
);
664 jTable
.setSize(new Dimension(1000, 300));
666 model
.addColumn("C_Name");
667 model
.addColumn("Token");
668 model
.addColumn("TokenSpace");
669 model
.addColumn("DatumType");
670 model
.addColumn("DefaultValue");
671 model
.addColumn("HelpText");
673 model
.addColumn("FeatureFlag");
674 model
.addColumn("FixedAtBuild");
675 model
.addColumn("PatchableInModule");
676 model
.addColumn("Dynamic");
677 model
.addColumn("DynamicEx");
678 model
.addColumn("SupportedArch");
679 model
.addColumn("SupportedModule");
681 //ToDo: add a valid usage editor
683 JComboBox jComboBoxDataType
= new JComboBox();
684 jComboBoxDataType
.addItem("UINT8");
685 jComboBoxDataType
.addItem("UINT16");
686 jComboBoxDataType
.addItem("UINT32");
687 jComboBoxDataType
.addItem("UINT64");
688 jComboBoxDataType
.addItem("VOID*");
689 jComboBoxDataType
.addItem("BOOLEAN");
690 TableColumn dataTypeColumn
= jTable
.getColumnModel().getColumn(3);
691 dataTypeColumn
.setCellEditor(new DefaultCellEditor(jComboBoxDataType
));
693 jTable
.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor());
695 Vector
<String
> vArch
= new Vector
<String
>();
702 jTable
.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch
));
704 Vector
<String
> vModule
= new Vector
<String
>();
707 vModule
.add("PEI_CORE");
709 vModule
.add("DXE_CORE");
710 vModule
.add("DXE_DRIVER");
711 vModule
.add("DXE_RUNTIME_DRIVER");
712 vModule
.add("DXE_SAL_DRIVER");
713 vModule
.add("DXE_SMM_DRIVER");
714 vModule
.add("UEFI_DRIVER");
715 vModule
.add("UEFI_APPLICATION");
716 vModule
.add("USER_DEFINED");
717 jTable
.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule
));
719 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
720 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
721 public void valueChanged(ListSelectionEvent e
) {
722 if (e
.getValueIsAdjusting()){
725 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
726 if (lsm
.isSelectionEmpty()) {
730 selectedRow
= lsm
.getMinSelectionIndex();
735 jTable
.getModel().addTableModelListener(this);
740 public void tableChanged(TableModelEvent arg0
) {
741 // TODO Auto-generated method stub
742 int row
= arg0
.getFirstRow();
743 int column
= arg0
.getColumn();
744 TableModel m
= (TableModel
)arg0
.getSource();
745 if (arg0
.getType() == TableModelEvent
.UPDATE
){
746 String
[] sa
= new String
[9];
747 sfc
.getSpdPcdDeclaration(sa
, row
);
748 Object cellData
= m
.getValueAt(row
, column
);
751 if (cellData
== null) {
754 if (cellData
.equals(sa
[column
])) {
757 if (cellData
.toString().length() == 0 && sa
[column
] == null) {
762 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)+""));
763 if (usage
.length() == 0) {
764 JOptionPane
.showMessageDialog(frame
, "You must choose at least one usage for PCD entry.");
767 if (column
<= 10 && column
>= 6) {
768 Vector
<String
> v
= stringToVector(usage
);
769 if (compareTwoVectors(v
, stringToVector(sa
[6]))) {
772 if (v
.contains("FEATURE_FLAG") && v
.size() > 1) {
773 JOptionPane
.showMessageDialog(frame
, "Usage Feature Flag can NOT co-exist with others.");
779 if (cellData
== null) {
782 if (cellData
.equals(sa
[7])) {
785 if (cellData
.toString().length() == 0 && sa
[7] == null) {
791 if (cellData
== null) {
794 if (cellData
.equals(sa
[8])) {
797 if (cellData
.toString().length() == 0 && sa
[8] == null) {
801 String cName
= m
.getValueAt(row
, 0) + "";
802 String token
= m
.getValueAt(row
, 1) + "";
803 String ts
= m
.getValueAt(row
, 2) + "";
804 String dataType
= m
.getValueAt(row
, 3) + "";
805 String defaultVal
= m
.getValueAt(row
, 4) + "";
806 String help
= m
.getValueAt(row
, 5) + "";
809 String archList
= null;
810 if (m
.getValueAt(row
, 11) != null){
811 archList
= m
.getValueAt(row
, 11).toString();
813 String modTypeList
= null;
814 if (m
.getValueAt(row
, 12) != null) {
815 modTypeList
= m
.getValueAt(row
, 12).toString();
818 Object
[] o
= {cName
, token
, ts
, dataType
, defaultVal
, help
};
819 if (!dataValidation(o
)){
822 docConsole
.setSaved(false);
823 sfc
.updateSpdPcdDefinition(row
, cName
, token
, dataType
, usage
, ts
, defaultVal
, help
, archList
, modTypeList
);
828 * This method initializes jCheckBox
830 * @return javax.swing.JCheckBox
832 private JCheckBox
getJCheckBoxFeatureFlag() {
833 if (jCheckBoxFeatureFlag
== null) {
834 jCheckBoxFeatureFlag
= new JCheckBox();
835 jCheckBoxFeatureFlag
.setBounds(new java
.awt
.Rectangle(156,161,100,21));
836 jCheckBoxFeatureFlag
.setText("Feature Flag");
837 jCheckBoxFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(21,20));
838 jCheckBoxFeatureFlag
.addItemListener(new java
.awt
.event
.ItemListener() {
839 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
840 if (jCheckBoxFeatureFlag
.isSelected()) {
841 jCheckBoxPatchInMod
.setSelected(false);
842 jCheckBoxFixedAtBuild
.setSelected(false);
843 jCheckBoxDyn
.setSelected(false);
844 jCheckBoxDynEx
.setSelected(false);
849 return jCheckBoxFeatureFlag
;
853 * This method initializes jCheckBox1
855 * @return javax.swing.JCheckBox
857 private JCheckBox
getJCheckBoxFixedAtBuild() {
858 if (jCheckBoxFixedAtBuild
== null) {
859 jCheckBoxFixedAtBuild
= new JCheckBox();
860 jCheckBoxFixedAtBuild
.setBounds(new java
.awt
.Rectangle(312,133,108,20));
861 jCheckBoxFixedAtBuild
.setText("Fixed at Build");
862 jCheckBoxFixedAtBuild
.setPreferredSize(new java
.awt
.Dimension(21,20));
863 jCheckBoxFixedAtBuild
.addItemListener(new java
.awt
.event
.ItemListener() {
864 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
865 if (jCheckBoxFixedAtBuild
.isSelected()) {
866 jCheckBoxFeatureFlag
.setSelected(false);
871 return jCheckBoxFixedAtBuild
;
875 * This method initializes jCheckBox2
877 * @return javax.swing.JCheckBox
879 private JCheckBox
getJCheckBoxPatchInMod() {
880 if (jCheckBoxPatchInMod
== null) {
881 jCheckBoxPatchInMod
= new JCheckBox();
882 jCheckBoxPatchInMod
.setBounds(new java
.awt
.Rectangle(156,133,154,20));
883 jCheckBoxPatchInMod
.setText("Patchable in Module");
884 jCheckBoxPatchInMod
.setPreferredSize(new java
.awt
.Dimension(21,20));
885 jCheckBoxPatchInMod
.addItemListener(new java
.awt
.event
.ItemListener() {
886 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
887 if (jCheckBoxPatchInMod
.isSelected()) {
888 jCheckBoxFeatureFlag
.setSelected(false);
893 return jCheckBoxPatchInMod
;
897 * This method initializes jCheckBox3
899 * @return javax.swing.JCheckBox
901 private JCheckBox
getJCheckBoxDyn() {
902 if (jCheckBoxDyn
== null) {
903 jCheckBoxDyn
= new JCheckBox();
904 jCheckBoxDyn
.setBounds(new java
.awt
.Rectangle(278,161,80,20));
905 jCheckBoxDyn
.setText("Dynamic");
906 jCheckBoxDyn
.setPreferredSize(new java
.awt
.Dimension(21,20));
907 jCheckBoxDyn
.addItemListener(new java
.awt
.event
.ItemListener() {
908 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
909 if (jCheckBoxDyn
.isSelected()) {
910 jCheckBoxFeatureFlag
.setSelected(false);
919 * This method initializes jCheckBox4
921 * @return javax.swing.JCheckBox
923 private JCheckBox
getJCheckBoxDynEx() {
924 if (jCheckBoxDynEx
== null) {
925 jCheckBoxDynEx
= new JCheckBox();
926 jCheckBoxDynEx
.setBounds(new java
.awt
.Rectangle(371,161,99,20));
927 jCheckBoxDynEx
.setText("DynamicEx");
928 jCheckBoxDynEx
.setPreferredSize(new java
.awt
.Dimension(21,20));
929 jCheckBoxDynEx
.addItemListener(new java
.awt
.event
.ItemListener() {
930 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
931 if (jCheckBoxDynEx
.isSelected()) {
932 jCheckBoxFeatureFlag
.setSelected(false);
937 return jCheckBoxDynEx
;
940 private String
getValidUsage(boolean ff
, boolean fab
, boolean pim
, boolean d
, boolean de
) {
943 usage
+= "FEATURE_FLAG ";
946 usage
+= "FIXED_AT_BUILD ";
949 usage
+= "PATCHABLE_IN_MODULE ";
955 usage
+= "DYNAMIC_EX ";
961 private boolean tokenCNameExisted(String token
, String cName
) {
962 Integer inputToken
= Integer
.decode(token
);
964 for (int i
= 0; i
< jTable
.getRowCount(); ++i
) {
965 if (jTable
.getValueAt(i
, 0).equals(cName
)) {
966 JOptionPane
.showMessageDialog(frame
, "C_Name already existed in table.");
969 if (jTable
.getValueAt(i
, 1).equals(token
)) {
970 JOptionPane
.showMessageDialog(frame
, "Token already existed in table.");
973 Integer tokenValue
= Integer
.decode(jTable
.getValueAt(i
, 1)+"");
974 if (tokenValue
.equals(inputToken
)) {
975 JOptionPane
.showMessageDialog(frame
, "Same token value already existed in table.");
983 private boolean checkValidUsage(boolean[] b
) {
984 if (!(b
[0] || b
[1] || b
[2] || b
[3] || b
[4])){
985 JOptionPane
.showMessageDialog(frame
, "You must specify at least one usage.");
990 private boolean dataValidation(Object
[] row
) {
992 if (!DataValidation
.isC_NameType(row
[0].toString())) {
993 JOptionPane
.showMessageDialog(frame
, "C_Name is NOT C_NameType.");
996 if (!DataValidation
.isHexDoubleWordDataType(row
[1].toString()) &&
997 !DataValidation
.isInt(row
[1].toString(), Integer
.MIN_VALUE
, Integer
.MAX_VALUE
)) {
998 JOptionPane
.showMessageDialog(frame
, "Token is NOT correct.");
1001 if (!DataValidation
.isC_NameType(row
[2].toString())) {
1002 JOptionPane
.showMessageDialog(frame
, "Token Space is NOT C_NameType");
1005 if (row
[5].toString().length() == 0) {
1006 JOptionPane
.showMessageDialog(frame
, "HelpText could NOT be empty.");
1013 * This method initializes jScrollPane1
1015 * @return javax.swing.JScrollPane
1017 private JScrollPane
getJScrollPaneArch() {
1018 if (jScrollPaneArch
== null) {
1019 jScrollPaneArch
= new JScrollPane();
1020 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(242,213,188,54));
1021 jScrollPaneArch
.setViewportView(getICheckBoxListArch());
1022 jScrollPaneArch
.setPreferredSize(new Dimension(188, 74));
1024 return jScrollPaneArch
;
1028 * This method initializes iCheckBoxList
1030 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1032 private ICheckBoxList
getICheckBoxListArch() {
1033 if (iCheckBoxListArch
== null) {
1034 iCheckBoxListArch
= new ICheckBoxList();
1035 iCheckBoxListArch
.setBounds(new Rectangle(197, 142, 188, 74));
1036 Vector
<String
> v
= new Vector
<String
>();
1043 iCheckBoxListArch
.setAllItems(v
);
1045 return iCheckBoxListArch
;
1049 * This method initializes jScrollPane2
1051 * @return javax.swing.JScrollPane
1053 private JScrollPane
getJScrollPaneMod() {
1054 if (jScrollPaneMod
== null) {
1055 jScrollPaneMod
= new JScrollPane();
1056 jScrollPaneMod
.setBounds(new java
.awt
.Rectangle(15,213,199,55));
1057 jScrollPaneMod
.setViewportView(getICheckBoxListMod());
1058 jScrollPaneMod
.setPreferredSize(new Dimension(170, 74));
1060 return jScrollPaneMod
;
1064 * This method initializes iCheckBoxList1
1066 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1068 private ICheckBoxList
getICheckBoxListMod() {
1069 if (iCheckBoxListMod
== null) {
1070 iCheckBoxListMod
= new ICheckBoxList();
1071 iCheckBoxListMod
.setBounds(new Rectangle(14, 142, 170, 74));
1072 Vector
<String
> v
= new Vector
<String
>();
1078 v
.add("DXE_DRIVER");
1079 v
.add("DXE_RUNTIME_DRIVER");
1080 v
.add("DXE_SAL_DRIVER");
1081 v
.add("DXE_SMM_DRIVER");
1082 v
.add("UEFI_DRIVER");
1083 v
.add("UEFI_APPLICATION");
1084 v
.add("USER_DEFINED");
1085 iCheckBoxListMod
.setAllItems(v
);
1087 return iCheckBoxListMod
;
1090 protected String
vectorToString(Vector
<String
> v
) {
1095 for (int i
= 0; i
< v
.size(); ++i
) {
1102 protected Vector
<String
> stringToVector(String s
){
1103 Vector
<String
> v
= new Vector
<String
>();
1107 String
[] sArray
= s
.split(" ");
1109 for (int i
= 0; i
< sArray
.length
; ++i
) {
1115 private boolean compareTwoVectors(Vector v1
, Vector v2
) {
1116 if (v1
.size() != v2
.size()) {
1119 for (int i
= 0; i
< v1
.size(); ++i
) {
1120 if (!v2
.contains(v1
.get(i
))) {
1126 } // @jve:decl-index=0:visual-constraint="22,11"
1128 class CheckboxTableModel
extends DefaultTableModel
{
1132 private static final long serialVersionUID
= 1L;
1134 public Class
<?
> getColumnClass (int c
) {
1135 if (getValueAt(0, c
) != null){
1136 return getValueAt(0, c
).getClass();
1138 return String
.class;