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
.Identifications
.OpeningPackageType
;
43 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
44 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
45 import javax
.swing
.JScrollPane
;
46 import javax
.swing
.JTable
;
47 import javax
.swing
.JCheckBox
;
48 import org
.tianocore
.frameworkwizard
.common
.ui
.iCheckBoxList
.ICheckBoxList
;
49 import org
.tianocore
.frameworkwizard
.platform
.ui
.ListEditor
;
51 import java
.awt
.Rectangle
;
52 import java
.util
.Vector
;
55 GUI for create PCD definition elements of spd file
57 @since PackageEditor 1.0
59 public class SpdPcdDefs
extends IInternalFrame
implements TableModelListener
{
64 private static final long serialVersionUID
= 1L;
68 private JPanel jContentPane
= null;
70 private JLabel jLabelItemType
= null;
72 private JLabel jLabelC_Name
= null;
74 private JTextField jTextFieldC_Name
= null;
76 private JLabel jLabelToken
= null;
78 private JTextField jTextFieldToken
= null;
80 private JLabel jLabelDataType
= null;
82 private JButton jButtonOk
= null;
84 private JButton jButtonCancel
= null;
86 private JComboBox jComboBoxDataType
= null;
88 private SpdFileContents sfc
= null;
90 private OpeningPackageType docConsole
= null;
92 private StarLabel jStarLabel2
= null;
94 private StarLabel jStarLabel3
= null;
96 private StarLabel jStarLabel4
= null;
98 private StarLabel jStarLabel
= null;
100 private StarLabel jStarLabel1
= null;
102 private JLabel jLabelTokenSpace
= null;
104 private JTextField jTextFieldTsGuid
= null;
106 private JLabel jLabelVarVal
= null;
108 private JTextField jTextField
= null;
110 private JLabel jLabelDefVal
= null;
112 private JTextField jTextFieldDefaultValue
= null;
114 private JButton jButtonAdd
= null;
116 private CheckboxTableModel model
= null;
118 private JButton jButtonRemove
= null;
120 private JButton jButtonClearAll
= null;
122 private JScrollPane jScrollPane
= null;
124 private JTable jTable
= null;
126 private JScrollPane topScrollPane
= null; // @jve:decl-index=0:visual-constraint="390,10"
128 private int selectedRow
= -1;
130 private StarLabel starLabel
= null;
132 private JCheckBox jCheckBox
= null;
134 private JCheckBox jCheckBox1
= null;
136 private JCheckBox jCheckBox2
= null;
138 private JCheckBox jCheckBox3
= null;
140 private JCheckBox jCheckBox4
= null;
142 private JScrollPane jScrollPane1
= null;
144 private ICheckBoxList iCheckBoxList
= null;
146 private JScrollPane jScrollPane2
= null;
148 private ICheckBoxList iCheckBoxList1
= null;
150 private JLabel jLabel
= null;
152 private JLabel jLabel1
= null;
155 This method initializes this
158 private void initialize() {
159 this.setTitle("PCD Declarations");
160 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
165 This method initializes jTextFieldC_Name
167 @return javax.swing.JTextField
169 private JTextField
getJTextFieldC_Name() {
170 if (jTextFieldC_Name
== null) {
171 jTextFieldC_Name
= new JTextField();
172 jTextFieldC_Name
.setBounds(new java
.awt
.Rectangle(156,9,317,20));
173 jTextFieldC_Name
.setPreferredSize(new java
.awt
.Dimension(315,20));
175 return jTextFieldC_Name
;
179 This method initializes jTextFieldToken
181 @return javax.swing.JTextField
183 private JTextField
getJTextFieldToken() {
184 if (jTextFieldToken
== null) {
185 jTextFieldToken
= new JTextField();
186 jTextFieldToken
.setBounds(new java
.awt
.Rectangle(156,33,317,20));
187 jTextFieldToken
.setPreferredSize(new java
.awt
.Dimension(315,20));
189 return jTextFieldToken
;
193 This method initializes jButtonOk
195 @return javax.swing.JButton
197 private JButton
getJButtonOk() {
198 if (jButtonOk
== null) {
199 jButtonOk
= new JButton();
200 jButtonOk
.setText("OK");
201 jButtonOk
.setBounds(new java
.awt
.Rectangle(279,276,90,20));
202 jButtonOk
.setVisible(false);
203 jButtonOk
.addActionListener(this);
209 This method initializes jButtonCancel
211 @return javax.swing.JButton
213 private JButton
getJButtonCancel() {
214 if (jButtonCancel
== null) {
215 jButtonCancel
= new JButton();
216 jButtonCancel
.setText("Cancel");
217 jButtonCancel
.setBounds(new java
.awt
.Rectangle(389,276,82,20));
218 jButtonCancel
.setVisible(false);
219 jButtonCancel
.addActionListener(this);
221 return jButtonCancel
;
225 This method initializes jComboBoxDataType
227 @return javax.swing.JComboBox
229 private JComboBox
getJComboBoxDataType() {
230 if (jComboBoxDataType
== null) {
231 jComboBoxDataType
= new JComboBox();
232 jComboBoxDataType
.setBounds(new java
.awt
.Rectangle(156,84,110,20));
234 return jComboBoxDataType
;
238 This is the default constructor
240 public SpdPcdDefs() {
247 public SpdPcdDefs(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
) {
249 sfc
= new SpdFileContents(inPsa
);
253 public SpdPcdDefs(OpeningPackageType opt
) {
254 this(opt
.getXmlSpd());
258 This method initializes this
262 private void init() {
263 this.setSize(500, 650);
264 this.setContentPane(getJContentPane());
265 this.addInternalFrameListener(new InternalFrameAdapter(){
266 public void internalFrameDeactivated(InternalFrameEvent e
){
267 if (jTable
.isEditing()) {
268 jTable
.getCellEditor().stopCellEditing();
273 this.setVisible(true);
276 private void init(SpdFileContents sfc
){
277 if (sfc
.getSpdPcdDefinitionCount() == 0) {
280 String
[][] saa
= new String
[sfc
.getSpdPcdDefinitionCount()][8];
281 String
[][] usage
= new String
[sfc
.getSpdPcdDefinitionCount()][5];
282 Object
[] rowData
= new Object
[13];
283 sfc
.getSpdPcdDefinitions(saa
, usage
);
285 while (i
< saa
.length
) {
287 for (int k
= 0; k
< 6; ++k
) {
288 rowData
[k
] = saa
[i
][k
];
290 for (int m
= 6; m
< 11; ++m
) {
291 rowData
[m
] = new Boolean("false");
295 if (usage
[i
][j
] == null || usage
[i
][j
].length()==0){
299 if (usage
[i
][j
].equals("FEATURE_FLAG")){
300 rowData
[6] = new Boolean("true");
302 if (usage
[i
][j
].equals("FIXED_AT_BUILD")){
303 rowData
[7] = new Boolean("true");
305 if (usage
[i
][j
].equals("PATCHABLE_IN_MODULE")){
306 rowData
[8] = new Boolean("true");
308 if (usage
[i
][j
].equals("DYNAMIC")){
309 rowData
[9] = new Boolean("true");
311 if (usage
[i
][j
].equals("DYNAMIC_EX")){
312 rowData
[10] = new Boolean("true");
318 rowData
[11] = saa
[i
][6];
319 rowData
[12] = saa
[i
][7];
321 model
.addRow(rowData
);
330 private JScrollPane
getJContentPane(){
331 if (topScrollPane
== null){
332 topScrollPane
= new JScrollPane();
333 topScrollPane
.setSize(new java
.awt
.Dimension(482,451));
334 topScrollPane
.setViewportView(getJContentPane1());
336 return topScrollPane
;
338 private JPanel
getJContentPane1() {
339 if (jContentPane
== null) {
341 jLabel1
= new JLabel();
342 jLabel1
.setBounds(new java
.awt
.Rectangle(241,192,89,16));
343 jLabel1
.setText("Supported Arch");
344 jLabel1
.setEnabled(true);
345 jLabel
= new JLabel();
346 jLabel
.setBounds(new java
.awt
.Rectangle(15,193,103,16));
347 jLabel
.setText("Supported Module");
348 jLabel
.setEnabled(true);
349 starLabel
= new StarLabel();
350 starLabel
.setBounds(new java
.awt
.Rectangle(2,134,10,20));
351 jLabelDefVal
= new JLabel();
352 jLabelDefVal
.setBounds(new java
.awt
.Rectangle(277,84,80,20));
353 jLabelDefVal
.setText("Default Value");
354 jLabelVarVal
= new JLabel();
355 jLabelVarVal
.setBounds(new java
.awt
.Rectangle(11,133,84,20));
356 jLabelVarVal
.setText("Valid Usage");
357 jLabelC_Name
= new JLabel();
358 jLabelC_Name
.setText("C_Name");
359 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(11,9,140,20));
360 jLabelTokenSpace
= new JLabel();
361 jLabelTokenSpace
.setBounds(new java
.awt
.Rectangle(11,58,140,20));
362 jLabelTokenSpace
.setText("Token Space");
363 jLabelDataType
= new JLabel();
364 jLabelDataType
.setText("Data Type");
365 jLabelDataType
.setBounds(new java
.awt
.Rectangle(11,83,140,20));
366 jLabelToken
= new JLabel();
367 jLabelToken
.setText("Token");
368 jLabelToken
.setBounds(new java
.awt
.Rectangle(11,33,140,20));
369 jLabelItemType
= new JLabel();
370 jLabelItemType
.setText("Help Text");
371 jLabelItemType
.setBounds(new java
.awt
.Rectangle(11,108,140,20));
374 jContentPane
= new JPanel();
375 jContentPane
.setLayout(null);
376 jContentPane
.setPreferredSize(new java
.awt
.Dimension(479,375));
378 jContentPane
.add(jLabelItemType
, null);
379 jContentPane
.add(jLabelC_Name
, null);
380 jContentPane
.add(jLabelTokenSpace
, null);
381 jContentPane
.add(getJTextFieldTsGuid(), null);
382 jContentPane
.add(jLabelVarVal
, null);
383 jContentPane
.add(getJTextFieldC_Name(), null);
384 jContentPane
.add(jLabelToken
, null);
385 jContentPane
.add(getJTextFieldToken(), null);
386 jContentPane
.add(jLabelDataType
, null);
387 jContentPane
.add(getJButtonOk(), null);
388 jContentPane
.add(getJButtonCancel(), null);
389 jContentPane
.add(getJComboBoxDataType(), null);
391 jStarLabel
= new StarLabel();
392 jStarLabel1
= new StarLabel();
393 jStarLabel1
.setBounds(new java
.awt
.Rectangle(2,8,10,20));
394 jStarLabel2
= new StarLabel();
395 jStarLabel3
= new StarLabel();
396 jStarLabel4
= new StarLabel();
397 jStarLabel
.setLocation(new java
.awt
.Point(2,84));
398 jStarLabel4
.setLocation(new java
.awt
.Point(2, 109));
399 jStarLabel2
.setLocation(new java
.awt
.Point(2,33));
400 jStarLabel3
.setLocation(new java
.awt
.Point(2, 58));
401 jStarLabel3
.setSize(new java
.awt
.Dimension(8,20));
402 jContentPane
.add(jStarLabel2
, null);
403 jContentPane
.add(jStarLabel3
, null);
404 jContentPane
.add(jStarLabel
, null);
405 jContentPane
.add(jStarLabel1
, null);
406 jContentPane
.add(jStarLabel4
, null);
407 jContentPane
.add(getJTextField(), null);
408 jContentPane
.add(jLabelDefVal
, null);
409 jContentPane
.add(getJTextFieldDefaultValue(), null);
410 jContentPane
.add(getJButtonAdd(), null);
411 jContentPane
.add(getJButtonRemove(), null);
412 jContentPane
.add(getJButtonClearAll(), null);
413 jContentPane
.add(getJScrollPane(), null);
414 jContentPane
.add(starLabel
, null);
415 jContentPane
.add(getJCheckBox(), null);
416 jContentPane
.add(getJCheckBox1(), null);
417 jContentPane
.add(getJCheckBox2(), null);
418 jContentPane
.add(getJCheckBox3(), null);
419 jContentPane
.add(getJCheckBox4(), null);
420 jContentPane
.add(getJScrollPane1(), null);
421 jContentPane
.add(getJScrollPane2(), null);
422 jContentPane
.add(jLabel
, null);
423 jContentPane
.add(jLabel1
, null);
429 This method initializes comboboxes
430 jContentPane.add(jLabelTokenSpace, null);
433 private void initFrame() {
435 jComboBoxDataType
.addItem("UINT8");
436 jComboBoxDataType
.addItem("UINT16");
437 jComboBoxDataType
.addItem("UINT32");
438 jComboBoxDataType
.addItem("UINT64");
439 jComboBoxDataType
.addItem("VOID*");
440 jComboBoxDataType
.addItem("BOOLEAN");
441 jComboBoxDataType
.setSelectedIndex(0);
444 public void actionPerformed(ActionEvent arg0
) {
446 docConsole
.setSaved(false);
447 if (arg0
.getSource() == jButtonOk
) {
451 if (arg0
.getSource() == jButtonCancel
) {
455 if (arg0
.getSource() == jButtonAdd
) {
456 //ToDo: check before add
457 boolean[] b
= {jCheckBox
.isSelected(), jCheckBox1
.isSelected(), jCheckBox2
.isSelected(), jCheckBox3
.isSelected(), jCheckBox4
.isSelected()};
458 if (!checkValidUsage(b
)) {
461 String archList
= vectorToString(iCheckBoxList
.getAllCheckedItemsString());
462 if (archList
.length() == 0) {
465 String modTypeList
= vectorToString(iCheckBoxList1
.getAllCheckedItemsString());
466 if (modTypeList
.length() == 0) {
469 Object
[] row
= {jTextFieldC_Name
.getText(), jTextFieldToken
.getText(),
470 jTextFieldTsGuid
.getText(), jComboBoxDataType
.getSelectedItem(),
471 jTextFieldDefaultValue
.getText(), jTextField
.getText(),
472 jCheckBox
.isSelected(), jCheckBox1
.isSelected(),
473 jCheckBox2
.isSelected(), jCheckBox3
.isSelected(), jCheckBox4
.isSelected(),
474 archList
, modTypeList
};
475 if (!dataValidation(row
)) {
479 jTable
.changeSelection(model
.getRowCount()-1, 0, false, false);
480 String usage
= getValidUsage(jCheckBox
.isSelected(), jCheckBox1
.isSelected(), jCheckBox2
.isSelected(), jCheckBox3
.isSelected(), jCheckBox4
.isSelected());
481 if (usage
.length() == 0) {
484 sfc
.genSpdPcdDefinitions(row
[0]+"", row
[1]+"", row
[3]+"", usage
, row
[2]+"", row
[4]+"", row
[5]+"", archList
, modTypeList
);
487 // remove selected line
489 if (arg0
.getSource() == jButtonRemove
) {
490 if (jTable
.isEditing()){
491 jTable
.getCellEditor().stopCellEditing();
493 int rowSelected
= selectedRow
;
494 if (rowSelected
>= 0) {
495 model
.removeRow(rowSelected
);
496 sfc
.removeSpdPcdDefinition(rowSelected
);
500 if (arg0
.getSource() == jButtonClearAll
) {
501 if (model
.getRowCount() == 0) {
504 model
.setRowCount(0);
505 sfc
.removeSpdPcdDefinition();
510 protected void save() {
515 * This method initializes jTextFieldTsGuid
517 * @return javax.swing.JTextField
519 private JTextField
getJTextFieldTsGuid() {
520 if (jTextFieldTsGuid
== null) {
521 jTextFieldTsGuid
= new JTextField();
522 jTextFieldTsGuid
.setPreferredSize(new java
.awt
.Dimension(315,20));
523 jTextFieldTsGuid
.setSize(new java
.awt
.Dimension(317,20));
524 jTextFieldTsGuid
.setLocation(new java
.awt
.Point(156,58));
526 return jTextFieldTsGuid
;
530 * This method initializes jTextField
532 * @return javax.swing.JTextField
534 private JTextField
getJTextField() {
535 if (jTextField
== null) {
536 jTextField
= new JTextField();
537 jTextField
.setBounds(new java
.awt
.Rectangle(156,108,317,20));
538 jTextField
.setPreferredSize(new java
.awt
.Dimension(315,20));
544 * This method initializes jTextFieldDefaultValue
546 * @return javax.swing.JTextField
548 private JTextField
getJTextFieldDefaultValue() {
549 if (jTextFieldDefaultValue
== null) {
550 jTextFieldDefaultValue
= new JTextField();
551 jTextFieldDefaultValue
.setBounds(new java
.awt
.Rectangle(368,84,105,20));
552 jTextFieldDefaultValue
.setPreferredSize(new java
.awt
.Dimension(104,20));
554 return jTextFieldDefaultValue
;
558 * This method initializes jButtonAdd
560 * @return javax.swing.JButton
562 private JButton
getJButtonAdd() {
563 if (jButtonAdd
== null) {
564 jButtonAdd
= new JButton();
565 jButtonAdd
.setBounds(new java
.awt
.Rectangle(195,277,71,20));
566 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(70,20));
567 jButtonAdd
.setText("Add");
568 jButtonAdd
.addActionListener(this);
575 * This method initializes jButtonRemove
577 * @return javax.swing.JButton
579 private JButton
getJButtonRemove() {
580 if (jButtonRemove
== null) {
581 jButtonRemove
= new JButton();
582 jButtonRemove
.setBounds(new java
.awt
.Rectangle(278,277,81,20));
583 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(70,20));
584 jButtonRemove
.setText("Delete");
585 jButtonRemove
.addActionListener(this);
587 return jButtonRemove
;
591 * This method initializes jButtonClearAll
593 * @return javax.swing.JButton
595 private JButton
getJButtonClearAll() {
596 if (jButtonClearAll
== null) {
597 jButtonClearAll
= new JButton();
598 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(382,277,90,20));
599 jButtonClearAll
.setPreferredSize(new java
.awt
.Dimension(81,20));
600 jButtonClearAll
.setText("Clear All");
601 jButtonClearAll
.addActionListener(this);
603 return jButtonClearAll
;
606 public void componentResized(ComponentEvent arg0
) {
607 int intPreferredWidth
= 500;
609 resizeComponentWidth(this.jTextFieldC_Name
, this.getWidth(), intPreferredWidth
);
610 resizeComponentWidth(this.jTextFieldToken
, this.getWidth(), intPreferredWidth
);
611 resizeComponentWidth(this.jTextFieldTsGuid
, this.getWidth(), intPreferredWidth
);
612 resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
613 resizeComponentWidth(this.jTextField
, this.getWidth(), intPreferredWidth
);
614 resizeComponentWidth(this.jScrollPane
, this.getWidth(), intPreferredWidth
);
616 resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
617 // relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
618 // relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
619 // relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
623 * This method initializes jScrollPane
625 * @return javax.swing.JScrollPane
627 private JScrollPane
getJScrollPane() {
628 if (jScrollPane
== null) {
629 jScrollPane
= new JScrollPane();
630 jScrollPane
.setBounds(new java
.awt
.Rectangle(5,301,1473,259));
631 jScrollPane
.setViewportView(getJTable());
637 * This method initializes jTable
639 * @return javax.swing.JTable
641 private JTable
getJTable() {
642 if (jTable
== null) {
643 model
= new CheckboxTableModel();
644 jTable
= new JTable(model
);
645 jTable
.setRowHeight(20);
646 jTable
.setAutoResizeMode(JTable
.AUTO_RESIZE_OFF
);
647 jTable
.setSize(new Dimension(1000, 300));
649 model
.addColumn("C_Name");
650 model
.addColumn("Token");
651 model
.addColumn("TokenSpace");
652 model
.addColumn("DatumType");
653 model
.addColumn("DefaultValue");
654 model
.addColumn("HelpText");
656 model
.addColumn("FeatureFlag");
657 model
.addColumn("FixedAtBuild");
658 model
.addColumn("PatchableInModule");
659 model
.addColumn("Dynamic");
660 model
.addColumn("DynamicEx");
661 model
.addColumn("SupportedArch");
662 model
.addColumn("SupportedModule");
664 //ToDo: add a valid usage editor
666 JComboBox jComboBoxDataType
= new JComboBox();
667 jComboBoxDataType
.addItem("UINT8");
668 jComboBoxDataType
.addItem("UINT16");
669 jComboBoxDataType
.addItem("UINT32");
670 jComboBoxDataType
.addItem("UINT64");
671 jComboBoxDataType
.addItem("VOID*");
672 jComboBoxDataType
.addItem("BOOLEAN");
673 TableColumn dataTypeColumn
= jTable
.getColumnModel().getColumn(3);
674 dataTypeColumn
.setCellEditor(new DefaultCellEditor(jComboBoxDataType
));
676 Vector
<String
> vArch
= new Vector
<String
>();
683 jTable
.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch
));
685 Vector
<String
> vModule
= new Vector
<String
>();
688 vModule
.add("PEI_CORE");
690 vModule
.add("DXE_CORE");
691 vModule
.add("DXE_DRIVER");
692 vModule
.add("DXE_RUNTIME_DRIVER");
693 vModule
.add("DXE_SAL_DRIVER");
694 vModule
.add("DXE_SMM_DRIVER");
695 vModule
.add("UEFI_DRIVER");
696 vModule
.add("UEFI_APPLICATION");
697 vModule
.add("USER_DEFINED");
698 jTable
.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule
));
700 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
701 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
702 public void valueChanged(ListSelectionEvent e
) {
703 if (e
.getValueIsAdjusting()){
706 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
707 if (lsm
.isSelectionEmpty()) {
711 selectedRow
= lsm
.getMinSelectionIndex();
716 jTable
.getModel().addTableModelListener(this);
721 public void tableChanged(TableModelEvent arg0
) {
722 // TODO Auto-generated method stub
723 int row
= arg0
.getFirstRow();
724 int column
= arg0
.getColumn();
725 TableModel m
= (TableModel
)arg0
.getSource();
726 if (arg0
.getType() == TableModelEvent
.UPDATE
){
727 String
[] sa
= new String
[9];
728 sfc
.getSpdPcdDeclaration(sa
, row
);
729 Object cellData
= m
.getValueAt(row
, column
);
732 if (cellData
== null) {
735 if (cellData
.equals(sa
[column
])) {
738 if (cellData
.toString().length() == 0 && sa
[column
] == null) {
743 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)+""));
744 if (usage
.length() == 0) {
745 JOptionPane
.showMessageDialog(frame
, "You must choose at least one usage for PCD entry.");
748 if (column
<= 10 && column
>= 6) {
749 if (compareTwoVectors(stringToVector(usage
), stringToVector(sa
[6]))) {
755 if (cellData
== null) {
758 if (cellData
.equals(sa
[7])) {
761 if (cellData
.toString().length() == 0 && sa
[7] == null) {
767 if (cellData
== null) {
770 if (cellData
.equals(sa
[8])) {
773 if (cellData
.toString().length() == 0 && sa
[8] == null) {
777 String cName
= m
.getValueAt(row
, 0) + "";
778 String token
= m
.getValueAt(row
, 1) + "";
779 String ts
= m
.getValueAt(row
, 2) + "";
780 String dataType
= m
.getValueAt(row
, 3) + "";
781 String defaultVal
= m
.getValueAt(row
, 4) + "";
782 String help
= m
.getValueAt(row
, 5) + "";
785 String archList
= null;
786 if (m
.getValueAt(row
, 11) != null){
787 archList
= m
.getValueAt(row
, 11).toString();
789 String modTypeList
= null;
790 if (m
.getValueAt(row
, 12) != null) {
791 modTypeList
= m
.getValueAt(row
, 12).toString();
794 Object
[] o
= {cName
, token
, ts
, dataType
, defaultVal
, help
};
795 if (!dataValidation(o
)){
798 docConsole
.setSaved(false);
799 sfc
.updateSpdPcdDefinition(row
, cName
, token
, dataType
, usage
, ts
, defaultVal
, help
, archList
, modTypeList
);
804 * This method initializes jCheckBox
806 * @return javax.swing.JCheckBox
808 private JCheckBox
getJCheckBox() {
809 if (jCheckBox
== null) {
810 jCheckBox
= new JCheckBox();
811 jCheckBox
.setBounds(new java
.awt
.Rectangle(156,161,100,21));
812 jCheckBox
.setText("Feature Flag");
813 jCheckBox
.setPreferredSize(new java
.awt
.Dimension(21,20));
819 * This method initializes jCheckBox1
821 * @return javax.swing.JCheckBox
823 private JCheckBox
getJCheckBox1() {
824 if (jCheckBox1
== null) {
825 jCheckBox1
= new JCheckBox();
826 jCheckBox1
.setBounds(new java
.awt
.Rectangle(312,133,108,20));
827 jCheckBox1
.setText("Fixed at Build");
828 jCheckBox1
.setPreferredSize(new java
.awt
.Dimension(21,20));
834 * This method initializes jCheckBox2
836 * @return javax.swing.JCheckBox
838 private JCheckBox
getJCheckBox2() {
839 if (jCheckBox2
== null) {
840 jCheckBox2
= new JCheckBox();
841 jCheckBox2
.setBounds(new java
.awt
.Rectangle(156,133,154,20));
842 jCheckBox2
.setText("Patchable in Module");
843 jCheckBox2
.setPreferredSize(new java
.awt
.Dimension(21,20));
849 * This method initializes jCheckBox3
851 * @return javax.swing.JCheckBox
853 private JCheckBox
getJCheckBox3() {
854 if (jCheckBox3
== null) {
855 jCheckBox3
= new JCheckBox();
856 jCheckBox3
.setBounds(new java
.awt
.Rectangle(278,161,80,20));
857 jCheckBox3
.setText("Dynamic");
858 jCheckBox3
.setPreferredSize(new java
.awt
.Dimension(21,20));
864 * This method initializes jCheckBox4
866 * @return javax.swing.JCheckBox
868 private JCheckBox
getJCheckBox4() {
869 if (jCheckBox4
== null) {
870 jCheckBox4
= new JCheckBox();
871 jCheckBox4
.setBounds(new java
.awt
.Rectangle(371,161,99,20));
872 jCheckBox4
.setText("DynamicEx");
873 jCheckBox4
.setPreferredSize(new java
.awt
.Dimension(21,20));
878 private String
getValidUsage(boolean ff
, boolean fab
, boolean pim
, boolean d
, boolean de
) {
881 usage
+= "FEATURE_FLAG ";
884 usage
+= "FIXED_AT_BUILD ";
887 usage
+= "PATCHABLE_IN_MODULE ";
893 usage
+= "DYNAMIC_EX ";
899 private boolean checkValidUsage(boolean[] b
) {
900 if (!(b
[0] || b
[1] || b
[2] || b
[3] || b
[4])){
901 JOptionPane
.showMessageDialog(frame
, "You must specify at least one usage.");
906 private boolean dataValidation(Object
[] row
) {
908 if (!DataValidation
.isC_NameType(row
[0].toString())) {
909 JOptionPane
.showMessageDialog(frame
, "C_Name is NOT C_NameType.");
912 if (!(DataValidation
.isHexDoubleWordDataType(row
[1].toString()) ||
913 DataValidation
.isInt(row
[1].toString(), 0, 0xffffffff))) {
914 JOptionPane
.showMessageDialog(frame
, "Token is NOT correct.");
917 if (!DataValidation
.isC_NameType(row
[2].toString())) {
918 JOptionPane
.showMessageDialog(frame
, "Token Space is NOT C_NameType");
921 if (row
[5].toString().length() == 0) {
922 JOptionPane
.showMessageDialog(frame
, "HelpText could NOT be empty.");
929 * This method initializes jScrollPane1
931 * @return javax.swing.JScrollPane
933 private JScrollPane
getJScrollPane1() {
934 if (jScrollPane1
== null) {
935 jScrollPane1
= new JScrollPane();
936 jScrollPane1
.setBounds(new java
.awt
.Rectangle(242,213,188,54));
937 jScrollPane1
.setViewportView(getICheckBoxList());
938 jScrollPane1
.setPreferredSize(new Dimension(188, 74));
944 * This method initializes iCheckBoxList
946 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
948 private ICheckBoxList
getICheckBoxList() {
949 if (iCheckBoxList
== null) {
950 iCheckBoxList
= new ICheckBoxList();
951 iCheckBoxList
.setBounds(new Rectangle(197, 142, 188, 74));
952 Vector
<String
> v
= new Vector
<String
>();
959 iCheckBoxList
.setAllItems(v
);
961 return iCheckBoxList
;
965 * This method initializes jScrollPane2
967 * @return javax.swing.JScrollPane
969 private JScrollPane
getJScrollPane2() {
970 if (jScrollPane2
== null) {
971 jScrollPane2
= new JScrollPane();
972 jScrollPane2
.setBounds(new java
.awt
.Rectangle(15,213,199,55));
973 jScrollPane2
.setViewportView(getICheckBoxList1());
974 jScrollPane2
.setPreferredSize(new Dimension(170, 74));
980 * This method initializes iCheckBoxList1
982 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
984 private ICheckBoxList
getICheckBoxList1() {
985 if (iCheckBoxList1
== null) {
986 iCheckBoxList1
= new ICheckBoxList();
987 iCheckBoxList1
.setBounds(new Rectangle(14, 142, 170, 74));
988 Vector
<String
> v
= new Vector
<String
>();
995 v
.add("DXE_RUNTIME_DRIVER");
996 v
.add("DXE_SAL_DRIVER");
997 v
.add("DXE_SMM_DRIVER");
998 v
.add("UEFI_DRIVER");
999 v
.add("UEFI_APPLICATION");
1000 v
.add("USER_DEFINED");
1001 iCheckBoxList1
.setAllItems(v
);
1003 return iCheckBoxList1
;
1006 protected String
vectorToString(Vector
<String
> v
) {
1011 for (int i
= 0; i
< v
.size(); ++i
) {
1018 protected Vector
<String
> stringToVector(String s
){
1022 String
[] sArray
= s
.split(" ");
1023 Vector
<String
> v
= new Vector
<String
>();
1024 for (int i
= 0; i
< sArray
.length
; ++i
) {
1030 private boolean compareTwoVectors(Vector v1
, Vector v2
) {
1031 if (v1
.size() != v2
.size()) {
1034 for (int i
= 0; i
< v1
.size(); ++i
) {
1035 if (!v2
.contains(v1
.get(i
))) {
1041 } // @jve:decl-index=0:visual-constraint="22,11"
1043 class CheckboxTableModel
extends DefaultTableModel
{
1047 private static final long serialVersionUID
= 1L;
1049 public Class
<?
> getColumnClass (int c
) {
1050 if (getValueAt(0, c
) != null){
1051 return getValueAt(0, c
).getClass();
1053 return String
.class;