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
.FontMetrics
;
17 import java
.awt
.event
.ActionEvent
;
18 import java
.awt
.event
.ComponentEvent
;
20 import javax
.swing
.DefaultCellEditor
;
21 import javax
.swing
.JFrame
;
22 import javax
.swing
.JOptionPane
;
23 import javax
.swing
.JPanel
;
24 import javax
.swing
.JLabel
;
25 import javax
.swing
.JTextField
;
26 import javax
.swing
.JComboBox
;
27 import javax
.swing
.JButton
;
28 import javax
.swing
.ListSelectionModel
;
30 import javax
.swing
.event
.InternalFrameAdapter
;
31 import javax
.swing
.event
.InternalFrameEvent
;
32 import javax
.swing
.event
.ListSelectionEvent
;
33 import javax
.swing
.event
.ListSelectionListener
;
34 import javax
.swing
.event
.TableModelEvent
;
35 import javax
.swing
.event
.TableModelListener
;
36 import javax
.swing
.table
.DefaultTableModel
;
37 import javax
.swing
.table
.TableColumn
;
38 import javax
.swing
.table
.TableModel
;
40 import org
.tianocore
.PackageSurfaceAreaDocument
;
42 import org
.tianocore
.frameworkwizard
.common
.DataValidation
;
43 import org
.tianocore
.frameworkwizard
.common
.Tools
;
44 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningPackageType
;
45 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
46 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
47 import javax
.swing
.JScrollPane
;
48 import javax
.swing
.JTable
;
49 import javax
.swing
.JCheckBox
;
50 import org
.tianocore
.frameworkwizard
.common
.ui
.iCheckBoxList
.ICheckBoxList
;
51 import org
.tianocore
.frameworkwizard
.platform
.ui
.ListEditor
;
52 import org
.tianocore
.frameworkwizard
.platform
.ui
.LongTextEditor
;
54 import java
.awt
.Rectangle
;
55 import java
.util
.Vector
;
58 GUI for create PCD definition elements of spd file
60 @since PackageEditor 1.0
62 public class SpdPcdDefs
extends IInternalFrame
implements TableModelListener
{
67 private static final long serialVersionUID
= 1L;
71 private JPanel jContentPane
= null;
73 private JLabel jLabelItemType
= null;
75 private JLabel jLabelC_Name
= null;
77 private JTextField jTextFieldC_Name
= null;
79 private JLabel jLabelToken
= null;
81 private JTextField jTextFieldToken
= null;
83 private JLabel jLabelDataType
= null;
85 private JButton jButtonOk
= null;
87 private JButton jButtonCancel
= null;
89 private JComboBox jComboBoxDataType
= null;
91 private SpdFileContents sfc
= null;
93 private OpeningPackageType docConsole
= null;
95 private StarLabel jStarLabel2
= null;
97 private StarLabel jStarLabel3
= null;
99 private StarLabel jStarLabel4
= null;
101 private StarLabel jStarLabel
= null;
103 private StarLabel jStarLabel1
= null;
105 private JLabel jLabelTokenSpace
= null;
107 private JComboBox jComboBoxTsGuid
= null;
109 private JLabel jLabelVarVal
= null;
111 private JTextField jTextFieldHelp
= null;
113 private JLabel jLabelDefVal
= null;
115 private JTextField jTextFieldDefaultValue
= null;
117 private JButton jButtonAdd
= null;
119 private CheckboxTableModel model
= null;
121 private JButton jButtonRemove
= null;
123 private JButton jButtonClearAll
= null;
125 private JScrollPane jScrollPane
= null;
127 private JTable jTable
= null;
129 private JScrollPane topScrollPane
= null; // @jve:decl-index=0:visual-constraint="390,10"
131 private int selectedRow
= -1;
133 private StarLabel starLabel
= null;
135 private JCheckBox jCheckBoxFeatureFlag
= null;
137 private JCheckBox jCheckBoxFixedAtBuild
= null;
139 private JCheckBox jCheckBoxPatchInMod
= null;
141 private JCheckBox jCheckBoxDyn
= null;
143 private JCheckBox jCheckBoxDynEx
= null;
145 private JScrollPane jScrollPaneArch
= null;
147 private ICheckBoxList iCheckBoxListArch
= null;
149 private JScrollPane jScrollPaneMod
= null;
151 private ICheckBoxList iCheckBoxListMod
= null;
153 private JLabel jLabelSupMod
= null;
155 private JLabel jLabelSupArch
= null;
157 private final int pcdCNameMinWidth
= 200;
158 private final int pcdTokenMinWidth
= 100;
159 private final int pcdTokenSpaceMinWidth
= 200;
160 private final int datumTypeMinWidth
= 80;
161 private final int defaultValueMinWidth
= 100;
162 private final int helpTextMinWidth
= 200;
163 private final int usageMinWidth
= 60;
164 private final int supArchMinWidth
= 200;
165 private final int supModMinWidth
= 200;
167 // private Object boolModifyLock = new Object();
168 // private boolean exclusiveUsage = false;
171 This method initializes this
174 private void initialize() {
175 this.setTitle("PCD Declarations");
176 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
178 int xPos
= jCheckBoxPatchInMod
.getX() + jCheckBoxPatchInMod
.getWidth();
179 jCheckBoxFixedAtBuild
.setLocation(xPos
,133);
181 xPos
= jCheckBoxFeatureFlag
.getX() + jCheckBoxFeatureFlag
.getWidth();
182 jCheckBoxDyn
.setLocation(xPos
,161);
184 xPos
= jCheckBoxDyn
.getX() + jCheckBoxDyn
.getWidth();
185 jCheckBoxDynEx
.setLocation(xPos
,161);
190 This method initializes jTextFieldC_Name
192 @return javax.swing.JTextField
194 private JTextField
getJTextFieldC_Name() {
195 if (jTextFieldC_Name
== null) {
196 jTextFieldC_Name
= new JTextField();
197 jTextFieldC_Name
.setBounds(new java
.awt
.Rectangle(156,9,317,20));
198 jTextFieldC_Name
.setPreferredSize(new java
.awt
.Dimension(315,20));
200 return jTextFieldC_Name
;
204 This method initializes jTextFieldToken
206 @return javax.swing.JTextField
208 private JTextField
getJTextFieldToken() {
209 if (jTextFieldToken
== null) {
210 jTextFieldToken
= new JTextField();
211 jTextFieldToken
.setBounds(new java
.awt
.Rectangle(156,33,317,20));
212 jTextFieldToken
.setPreferredSize(new java
.awt
.Dimension(315,20));
214 return jTextFieldToken
;
218 This method initializes jButtonOk
220 @return javax.swing.JButton
222 private JButton
getJButtonOk() {
223 if (jButtonOk
== null) {
224 jButtonOk
= new JButton();
225 jButtonOk
.setText("OK");
226 jButtonOk
.setBounds(new java
.awt
.Rectangle(279,276,90,20));
227 jButtonOk
.setVisible(false);
228 jButtonOk
.addActionListener(this);
234 This method initializes jButtonCancel
236 @return javax.swing.JButton
238 private JButton
getJButtonCancel() {
239 if (jButtonCancel
== null) {
240 jButtonCancel
= new JButton();
241 jButtonCancel
.setText("Cancel");
242 jButtonCancel
.setBounds(new java
.awt
.Rectangle(389,276,82,20));
243 jButtonCancel
.setVisible(false);
244 jButtonCancel
.addActionListener(this);
246 return jButtonCancel
;
250 This method initializes jComboBoxDataType
252 @return javax.swing.JComboBox
254 private JComboBox
getJComboBoxDataType() {
255 if (jComboBoxDataType
== null) {
256 jComboBoxDataType
= new JComboBox();
257 jComboBoxDataType
.setBounds(new java
.awt
.Rectangle(156,84,110,20));
259 return jComboBoxDataType
;
263 This is the default constructor
265 public SpdPcdDefs() {
272 public SpdPcdDefs(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
) {
274 sfc
= new SpdFileContents(inPsa
);
278 public SpdPcdDefs(OpeningPackageType opt
) {
279 this(opt
.getXmlSpd());
283 This method initializes this
287 private void init() {
288 this.setSize(500, 650);
289 this.setContentPane(getJContentPane());
290 this.addInternalFrameListener(new InternalFrameAdapter(){
291 public void internalFrameDeactivated(InternalFrameEvent e
){
292 if (jTable
.isEditing()) {
293 jTable
.getCellEditor().stopCellEditing();
298 this.setVisible(true);
301 private void init(SpdFileContents sfc
){
303 if (sfc
.getSpdPkgDefsRdOnly().equals("true")) {
304 JOptionPane
.showMessageDialog(frame
, "This is a read-only package. You will not be able to edit contents in table.");
308 if (sfc
.getSpdPcdDefinitionCount() == 0) {
311 String
[][] saa
= new String
[sfc
.getSpdPcdDefinitionCount()][8];
312 String
[][] usage
= new String
[sfc
.getSpdPcdDefinitionCount()][5];
313 Object
[] rowData
= new Object
[13];
314 sfc
.getSpdPcdDefinitions(saa
, usage
);
316 while (i
< saa
.length
) {
318 for (int k
= 0; k
< 6; ++k
) {
319 rowData
[k
] = saa
[i
][k
];
321 for (int m
= 6; m
< 11; ++m
) {
322 rowData
[m
] = new Boolean("false");
326 if (usage
[i
][j
] == null || usage
[i
][j
].length()==0){
330 if (usage
[i
][j
].equals("FEATURE_FLAG")){
331 rowData
[6] = new Boolean("true");
333 if (usage
[i
][j
].equals("FIXED_AT_BUILD")){
334 rowData
[7] = new Boolean("true");
336 if (usage
[i
][j
].equals("PATCHABLE_IN_MODULE")){
337 rowData
[8] = new Boolean("true");
339 if (usage
[i
][j
].equals("DYNAMIC")){
340 rowData
[9] = new Boolean("true");
342 if (usage
[i
][j
].equals("DYNAMIC_EX")){
343 rowData
[10] = new Boolean("true");
349 rowData
[11] = saa
[i
][6];
350 rowData
[12] = saa
[i
][7];
352 model
.addRow(rowData
);
359 private JScrollPane
getJContentPane(){
360 if (topScrollPane
== null){
361 topScrollPane
= new JScrollPane();
362 topScrollPane
.setSize(new java
.awt
.Dimension(482,451));
363 topScrollPane
.setViewportView(getJContentPane1());
365 return topScrollPane
;
367 private JPanel
getJContentPane1() {
368 if (jContentPane
== null) {
370 jLabelSupArch
= new JLabel();
371 jLabelSupArch
.setBounds(new java
.awt
.Rectangle(241,192,89,16));
372 jLabelSupArch
.setText("Supported Architectures");
373 jLabelSupArch
.setEnabled(true);
374 FontMetrics fm
= jLabelSupArch
.getFontMetrics(jLabelSupArch
.getFont());
375 jLabelSupArch
.setSize(fm
.stringWidth(jLabelSupArch
.getText()) + 10, 20);
376 jLabelSupMod
= new JLabel();
377 jLabelSupMod
.setBounds(new java
.awt
.Rectangle(15,193,103,16));
378 jLabelSupMod
.setText("Supported Module types");
379 jLabelSupMod
.setEnabled(true);
380 fm
= jLabelSupMod
.getFontMetrics(jLabelSupMod
.getFont());
381 jLabelSupMod
.setSize(fm
.stringWidth(jLabelSupMod
.getText()) + 10, 20);
382 starLabel
= new StarLabel();
383 starLabel
.setBounds(new java
.awt
.Rectangle(2,134,10,20));
384 jLabelDefVal
= new JLabel();
385 jLabelDefVal
.setBounds(new java
.awt
.Rectangle(277,84,80,20));
386 jLabelDefVal
.setText("Default Value");
387 fm
= jLabelDefVal
.getFontMetrics(jLabelDefVal
.getFont());
388 jLabelDefVal
.setSize(fm
.stringWidth(jLabelDefVal
.getText()) + 10, 20);
389 jLabelVarVal
= new JLabel();
390 jLabelVarVal
.setBounds(new java
.awt
.Rectangle(11,133,100,20));
391 jLabelVarVal
.setText("Valid Usage");
392 jLabelC_Name
= new JLabel();
393 jLabelC_Name
.setText("C Name");
394 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(11,9,140,20));
395 jLabelTokenSpace
= new JLabel();
396 jLabelTokenSpace
.setBounds(new java
.awt
.Rectangle(11,58,140,20));
397 jLabelTokenSpace
.setText("Token Space");
398 jLabelDataType
= new JLabel();
399 jLabelDataType
.setText("Data Type");
400 jLabelDataType
.setBounds(new java
.awt
.Rectangle(11,83,140,20));
401 jLabelToken
= new JLabel();
402 jLabelToken
.setText("Token Number");
403 jLabelToken
.setBounds(new java
.awt
.Rectangle(11,33,140,20));
404 jLabelItemType
= new JLabel();
405 jLabelItemType
.setText("Help Text");
406 jLabelItemType
.setBounds(new java
.awt
.Rectangle(11,108,140,20));
409 jContentPane
= new JPanel();
410 jContentPane
.setLayout(null);
411 jContentPane
.setPreferredSize(new java
.awt
.Dimension(479,375));
413 jContentPane
.add(jLabelItemType
, null);
414 jContentPane
.add(jLabelC_Name
, null);
415 jContentPane
.add(jLabelTokenSpace
, null);
416 jContentPane
.add(getJComboBoxTsGuid(), null);
417 jContentPane
.add(jLabelVarVal
, null);
418 jContentPane
.add(getJTextFieldC_Name(), null);
419 jContentPane
.add(jLabelToken
, null);
420 jContentPane
.add(getJTextFieldToken(), null);
421 jContentPane
.add(jLabelDataType
, null);
422 jContentPane
.add(getJButtonOk(), null);
423 jContentPane
.add(getJButtonCancel(), null);
424 jContentPane
.add(getJComboBoxDataType(), null);
426 jStarLabel
= new StarLabel();
427 jStarLabel1
= new StarLabel();
428 jStarLabel1
.setBounds(new java
.awt
.Rectangle(2,8,10,20));
429 jStarLabel2
= new StarLabel();
430 jStarLabel3
= new StarLabel();
431 jStarLabel4
= new StarLabel();
432 jStarLabel
.setLocation(new java
.awt
.Point(2,84));
433 jStarLabel4
.setLocation(new java
.awt
.Point(2, 109));
434 jStarLabel2
.setLocation(new java
.awt
.Point(2,33));
435 jStarLabel3
.setLocation(new java
.awt
.Point(2, 58));
436 jStarLabel3
.setSize(new java
.awt
.Dimension(8,20));
437 jContentPane
.add(jStarLabel2
, null);
438 jContentPane
.add(jStarLabel3
, null);
439 jContentPane
.add(jStarLabel
, null);
440 jContentPane
.add(jStarLabel1
, null);
441 jContentPane
.add(jStarLabel4
, null);
442 jContentPane
.add(getJTextFieldHelp(), null);
443 jContentPane
.add(jLabelDefVal
, null);
444 jContentPane
.add(getJTextFieldDefaultValue(), null);
445 jContentPane
.add(getJButtonAdd(), null);
446 jContentPane
.add(getJButtonRemove(), null);
447 jContentPane
.add(getJButtonClearAll(), null);
448 jContentPane
.add(getJScrollPane(), null);
449 jContentPane
.add(starLabel
, null);
450 jContentPane
.add(getJCheckBoxFeatureFlag(), null);
451 jContentPane
.add(getJCheckBoxFixedAtBuild(), null);
452 jContentPane
.add(getJCheckBoxPatchInMod(), null);
453 jContentPane
.add(getJCheckBoxDyn(), null);
454 jContentPane
.add(getJCheckBoxDynEx(), null);
455 jContentPane
.add(getJScrollPaneArch(), null);
456 jContentPane
.add(getJScrollPaneMod(), null);
457 jContentPane
.add(jLabelSupMod
, null);
458 jContentPane
.add(jLabelSupArch
, null);
464 This method initializes comboboxes
465 jContentPane.add(jLabelTokenSpace, null);
468 private void initFrame() {
470 jComboBoxDataType
.addItem("UINT8");
471 jComboBoxDataType
.addItem("UINT16");
472 jComboBoxDataType
.addItem("UINT32");
473 jComboBoxDataType
.addItem("UINT64");
474 jComboBoxDataType
.addItem("VOID*");
475 jComboBoxDataType
.addItem("BOOLEAN");
476 jComboBoxDataType
.setSelectedIndex(0);
478 Vector
<String
> vGuidCName
= new Vector
<String
>();
479 sfc
.getSpdGuidDeclWithType(vGuidCName
, "TOKEN_SPACE_GUID");
480 for (int i
= 0; i
< vGuidCName
.size(); ++i
) {
481 jComboBoxTsGuid
.addItem(vGuidCName
.get(i
));
484 boolean editable
= true;
485 if (sfc
.getSpdPkgDefsRdOnly().equals("true")) {
489 jButtonAdd
.setEnabled(editable
);
490 jButtonRemove
.setEnabled(editable
);
491 jButtonClearAll
.setEnabled(editable
);
492 jTable
.setEnabled(editable
);
495 public void actionPerformed(ActionEvent arg0
) {
498 if (arg0
.getSource() == jButtonOk
) {
502 if (arg0
.getSource() == jButtonCancel
) {
506 if (arg0
.getSource() == jButtonAdd
) {
507 //ToDo: check before add
509 boolean[] b
= {jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected()};
510 if (!checkValidUsage(b
)) {
513 String archList
= vectorToString(iCheckBoxListArch
.getAllCheckedItemsString());
514 if (archList
.length() == 0) {
517 String modTypeList
= vectorToString(iCheckBoxListMod
.getAllCheckedItemsString());
518 if (modTypeList
.length() == 0) {
521 Object
[] row
= {jTextFieldC_Name
.getText(), jTextFieldToken
.getText(),
522 jComboBoxTsGuid
.getSelectedItem(), jComboBoxDataType
.getSelectedItem(),
523 jTextFieldDefaultValue
.getText(), jTextFieldHelp
.getText(),
524 jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(),
525 jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected(),
526 archList
, modTypeList
};
527 if (!dataValidation(row
)) {
531 if (tokenCNameExisted(jTextFieldToken
.getText(), jTextFieldC_Name
.getText())) {
536 jTable
.changeSelection(model
.getRowCount()-1, 0, false, false);
537 String usage
= getValidUsage(jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected());
538 if (usage
.length() == 0) {
541 sfc
.genSpdPcdDefinitions(row
[0]+"", row
[1]+"", row
[3]+"", usage
, row
[2]+"", row
[4]+"", row
[5]+"", archList
, modTypeList
);
542 docConsole
.setSaved(false);
545 // remove selected line
547 if (arg0
.getSource() == jButtonRemove
) {
548 if (jTable
.isEditing()){
549 jTable
.getCellEditor().stopCellEditing();
551 int rowSelected
= selectedRow
;
552 if (rowSelected
>= 0) {
553 model
.removeRow(rowSelected
);
554 sfc
.removeSpdPcdDefinition(rowSelected
);
555 docConsole
.setSaved(false);
559 if (arg0
.getSource() == jButtonClearAll
) {
560 if (model
.getRowCount() == 0) {
563 model
.setRowCount(0);
564 sfc
.removeSpdPcdDefinition();
565 docConsole
.setSaved(false);
570 protected void save() {
575 * This method initializes jComboBoxTsGuid
577 * @return javax.swing.JComboBox
579 private JComboBox
getJComboBoxTsGuid() {
580 if (jComboBoxTsGuid
== null) {
581 jComboBoxTsGuid
= new JComboBox();
582 jComboBoxTsGuid
.setBounds(new java
.awt
.Rectangle(156,58,315,20));
585 return jComboBoxTsGuid
;
589 * This method initializes jTextField
591 * @return javax.swing.JTextField
593 private JTextField
getJTextFieldHelp() {
594 if (jTextFieldHelp
== null) {
595 jTextFieldHelp
= new JTextField();
596 jTextFieldHelp
.setBounds(new java
.awt
.Rectangle(156,108,317,20));
597 jTextFieldHelp
.setPreferredSize(new java
.awt
.Dimension(315,20));
599 return jTextFieldHelp
;
603 * This method initializes jTextFieldDefaultValue
605 * @return javax.swing.JTextField
607 private JTextField
getJTextFieldDefaultValue() {
608 if (jTextFieldDefaultValue
== null) {
609 jTextFieldDefaultValue
= new JTextField();
610 int xPos
= jLabelDefVal
.getX() + jLabelDefVal
.getWidth();
611 jTextFieldDefaultValue
.setBounds(new java
.awt
.Rectangle(xPos
,84,105,20));
612 jTextFieldDefaultValue
.setPreferredSize(new java
.awt
.Dimension(104,20));
614 return jTextFieldDefaultValue
;
618 * This method initializes jButtonAdd
620 * @return javax.swing.JButton
622 private JButton
getJButtonAdd() {
623 if (jButtonAdd
== null) {
624 jButtonAdd
= new JButton();
625 jButtonAdd
.setBounds(new java
.awt
.Rectangle(195,277,71,20));
626 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(70,20));
627 jButtonAdd
.setText("Add");
628 jButtonAdd
.addActionListener(this);
635 * This method initializes jButtonRemove
637 * @return javax.swing.JButton
639 private JButton
getJButtonRemove() {
640 if (jButtonRemove
== null) {
641 jButtonRemove
= new JButton();
642 jButtonRemove
.setBounds(new java
.awt
.Rectangle(278,277,81,20));
643 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(70,20));
644 jButtonRemove
.setText("Delete");
645 jButtonRemove
.addActionListener(this);
647 return jButtonRemove
;
651 * This method initializes jButtonClearAll
653 * @return javax.swing.JButton
655 private JButton
getJButtonClearAll() {
656 if (jButtonClearAll
== null) {
657 jButtonClearAll
= new JButton();
658 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(382,277,90,20));
659 jButtonClearAll
.setPreferredSize(new java
.awt
.Dimension(81,20));
660 jButtonClearAll
.setText("Clear All");
661 jButtonClearAll
.addActionListener(this);
663 return jButtonClearAll
;
666 public void componentResized(ComponentEvent arg0
) {
667 int intPreferredWidth
= 500;
669 Tools
.resizeComponentWidth(this.jTextFieldC_Name
, this.getWidth(), intPreferredWidth
);
670 Tools
.resizeComponentWidth(this.jTextFieldToken
, this.getWidth(), intPreferredWidth
);
671 Tools
.resizeComponentWidth(this.jComboBoxTsGuid
, this.getWidth(), intPreferredWidth
);
672 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
673 Tools
.resizeComponentWidth(this.jTextFieldHelp
, this.getWidth(), intPreferredWidth
);
674 Tools
.resizeComponentWidth(this.jScrollPane
, this.getWidth(), intPreferredWidth
);
676 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
677 // relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
678 // relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
679 // relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
683 * This method initializes jScrollPane
685 * @return javax.swing.JScrollPane
687 private JScrollPane
getJScrollPane() {
688 if (jScrollPane
== null) {
689 jScrollPane
= new JScrollPane();
690 jScrollPane
.setBounds(new java
.awt
.Rectangle(5,301,1473,259));
691 jScrollPane
.setViewportView(getJTable());
697 * This method initializes jTable
699 * @return javax.swing.JTable
701 private JTable
getJTable() {
702 if (jTable
== null) {
703 model
= new CheckboxTableModel();
704 jTable
= new JTable(model
);
705 jTable
.setRowHeight(20);
706 jTable
.setAutoResizeMode(JTable
.AUTO_RESIZE_OFF
);
707 jTable
.setSize(new Dimension(1000, 300));
709 model
.addColumn("C_Name");
710 model
.addColumn("Token");
711 model
.addColumn("TokenSpace");
712 model
.addColumn("DatumType");
713 model
.addColumn("DefaultValue");
714 model
.addColumn("HelpText");
716 model
.addColumn("FeatureFlag");
717 model
.addColumn("FixedAtBuild");
718 model
.addColumn("PatchableInModule");
719 model
.addColumn("Dynamic");
720 model
.addColumn("DynamicEx");
721 model
.addColumn("SupportedArch");
722 model
.addColumn("SupportedModule");
724 TableColumn column
= jTable
.getColumnModel().getColumn(0);
725 column
.setMinWidth(this.pcdCNameMinWidth
);
726 column
= jTable
.getColumnModel().getColumn(1);
727 column
.setMinWidth(this.pcdTokenMinWidth
);
728 column
= jTable
.getColumnModel().getColumn(2);
729 column
.setMinWidth(this.pcdTokenSpaceMinWidth
);
730 column
= jTable
.getColumnModel().getColumn(3);
731 column
.setMinWidth(this.datumTypeMinWidth
);
732 column
= jTable
.getColumnModel().getColumn(4);
733 column
.setMinWidth(this.defaultValueMinWidth
);
734 column
= jTable
.getColumnModel().getColumn(5);
735 column
.setMinWidth(this.helpTextMinWidth
);
736 column
= jTable
.getColumnModel().getColumn(6);
737 column
.setMinWidth(this.usageMinWidth
);
738 column
= jTable
.getColumnModel().getColumn(7);
739 column
.setMinWidth(this.usageMinWidth
);
740 column
= jTable
.getColumnModel().getColumn(8);
741 column
.setMinWidth(this.usageMinWidth
);
742 column
= jTable
.getColumnModel().getColumn(9);
743 column
.setMinWidth(this.usageMinWidth
);
744 column
= jTable
.getColumnModel().getColumn(10);
745 column
.setMinWidth(this.usageMinWidth
);
746 column
= jTable
.getColumnModel().getColumn(11);
747 column
.setMinWidth(this.supArchMinWidth
);
748 column
= jTable
.getColumnModel().getColumn(12);
749 column
.setMinWidth(this.supModMinWidth
);
751 //ToDo: add a valid usage editor
753 JComboBox jComboBoxDataType
= new JComboBox();
754 jComboBoxDataType
.addItem("UINT8");
755 jComboBoxDataType
.addItem("UINT16");
756 jComboBoxDataType
.addItem("UINT32");
757 jComboBoxDataType
.addItem("UINT64");
758 jComboBoxDataType
.addItem("VOID*");
759 jComboBoxDataType
.addItem("BOOLEAN");
760 TableColumn dataTypeColumn
= jTable
.getColumnModel().getColumn(3);
761 dataTypeColumn
.setCellEditor(new DefaultCellEditor(jComboBoxDataType
));
763 jTable
.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor());
765 Vector
<String
> vArch
= new Vector
<String
>();
772 jTable
.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch
));
774 Vector
<String
> vModule
= new Vector
<String
>();
777 vModule
.add("PEI_CORE");
779 vModule
.add("DXE_CORE");
780 vModule
.add("DXE_DRIVER");
781 vModule
.add("DXE_RUNTIME_DRIVER");
782 vModule
.add("DXE_SAL_DRIVER");
783 vModule
.add("DXE_SMM_DRIVER");
784 vModule
.add("UEFI_DRIVER");
785 vModule
.add("UEFI_APPLICATION");
786 vModule
.add("USER_DEFINED");
787 jTable
.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule
));
789 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
790 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
791 public void valueChanged(ListSelectionEvent e
) {
792 if (e
.getValueIsAdjusting()){
795 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
796 if (lsm
.isSelectionEmpty()) {
800 selectedRow
= lsm
.getMinSelectionIndex();
805 jTable
.getModel().addTableModelListener(this);
810 public void tableChanged(TableModelEvent arg0
) {
811 // TODO Auto-generated method stub
812 int row
= arg0
.getFirstRow();
813 int column
= arg0
.getColumn();
814 TableModel m
= (TableModel
)arg0
.getSource();
815 if (arg0
.getType() == TableModelEvent
.UPDATE
){
816 String
[] sa
= new String
[9];
817 sfc
.getSpdPcdDeclaration(sa
, row
);
818 Object cellData
= m
.getValueAt(row
, column
);
821 if (cellData
== null) {
824 if (cellData
.equals(sa
[column
])) {
827 if (cellData
.toString().length() == 0 && sa
[column
] == null) {
832 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)+""));
833 if (usage
.length() == 0) {
834 JOptionPane
.showMessageDialog(frame
, "You must choose at least one usage for PCD entry.");
838 if (column
<= 10 && column
>= 6) {
839 Vector
<String
> v
= stringToVector(usage
);
840 if (compareTwoVectors(v
, stringToVector(sa
[6]))) {
843 if (v
.contains("FEATURE_FLAG")/* && v.size() > 1 && !exclusiveUsage*/) {
845 JOptionPane
.showMessageDialog(frame
, "Usage Feature Flag can NOT co-exist with others.");
848 // synchronized (boolModifyLock){
849 // exclusiveUsage = true;
851 // m.setValueAt(false, row, 7);
852 // m.setValueAt(false, row, 8);
853 // m.setValueAt(false, row, 9);
854 // m.setValueAt(false, row, 10);
856 m
.setValueAt("BOOLEAN", row
, 3);
863 if (cellData
== null) {
866 if (cellData
.equals(sa
[7])) {
869 if (cellData
.toString().length() == 0 && sa
[7] == null) {
875 if (cellData
== null) {
878 if (cellData
.equals(sa
[8])) {
881 if (cellData
.toString().length() == 0 && sa
[8] == null) {
885 String cName
= m
.getValueAt(row
, 0) + "";
886 String token
= m
.getValueAt(row
, 1) + "";
887 String ts
= m
.getValueAt(row
, 2) + "";
888 String dataType
= m
.getValueAt(row
, 3) + "";
889 String defaultVal
= m
.getValueAt(row
, 4) + "";
890 String help
= m
.getValueAt(row
, 5) + "";
893 String archList
= null;
894 if (m
.getValueAt(row
, 11) != null){
895 archList
= m
.getValueAt(row
, 11).toString();
897 String modTypeList
= null;
898 if (m
.getValueAt(row
, 12) != null) {
899 modTypeList
= m
.getValueAt(row
, 12).toString();
902 Object
[] o
= {cName
, token
, ts
, dataType
, defaultVal
, help
};
903 if (!dataValidation(o
)){
906 docConsole
.setSaved(false);
907 sfc
.updateSpdPcdDefinition(row
, cName
, token
, dataType
, usage
, ts
, defaultVal
, help
, archList
, modTypeList
);
912 * This method initializes jCheckBox
914 * @return javax.swing.JCheckBox
916 private JCheckBox
getJCheckBoxFeatureFlag() {
917 if (jCheckBoxFeatureFlag
== null) {
918 jCheckBoxFeatureFlag
= new JCheckBox();
919 jCheckBoxFeatureFlag
.setBounds(new java
.awt
.Rectangle(156,161,100,21));
920 jCheckBoxFeatureFlag
.setText("Feature Flag");
921 FontMetrics fm
= jCheckBoxFeatureFlag
.getFontMetrics(jCheckBoxFeatureFlag
.getFont());
922 jCheckBoxFeatureFlag
.setSize(fm
.stringWidth(jCheckBoxFeatureFlag
.getText()) + 30, 20);
923 jCheckBoxFeatureFlag
.addItemListener(new java
.awt
.event
.ItemListener() {
924 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
925 if (jCheckBoxFeatureFlag
.isSelected()) {
926 jCheckBoxPatchInMod
.setSelected(false);
927 jCheckBoxFixedAtBuild
.setSelected(false);
928 jCheckBoxDyn
.setSelected(false);
929 jCheckBoxDynEx
.setSelected(false);
930 jComboBoxDataType
.setSelectedItem("BOOLEAN");
935 return jCheckBoxFeatureFlag
;
939 * This method initializes jCheckBox1
941 * @return javax.swing.JCheckBox
943 private JCheckBox
getJCheckBoxFixedAtBuild() {
944 if (jCheckBoxFixedAtBuild
== null) {
945 jCheckBoxFixedAtBuild
= new JCheckBox();
947 jCheckBoxFixedAtBuild
.setText("Fixed at Build");
948 FontMetrics fm
= jCheckBoxFixedAtBuild
.getFontMetrics(jCheckBoxFixedAtBuild
.getFont());
949 jCheckBoxFixedAtBuild
.setSize(fm
.stringWidth(jCheckBoxFixedAtBuild
.getText()) + 30, 20);
950 jCheckBoxFixedAtBuild
.addItemListener(new java
.awt
.event
.ItemListener() {
951 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
952 if (jCheckBoxFixedAtBuild
.isSelected()) {
953 jCheckBoxFeatureFlag
.setSelected(false);
958 return jCheckBoxFixedAtBuild
;
962 * This method initializes jCheckBox2
964 * @return javax.swing.JCheckBox
966 private JCheckBox
getJCheckBoxPatchInMod() {
967 if (jCheckBoxPatchInMod
== null) {
968 jCheckBoxPatchInMod
= new JCheckBox();
970 jCheckBoxPatchInMod
.setBounds(new java
.awt
.Rectangle(156,133,154,20));
971 jCheckBoxPatchInMod
.setText("Patchable in Module");
972 FontMetrics fm
= jCheckBoxPatchInMod
.getFontMetrics(jCheckBoxPatchInMod
.getFont());
973 jCheckBoxPatchInMod
.setSize(fm
.stringWidth(jCheckBoxPatchInMod
.getText()) + 30, 20);
974 jCheckBoxPatchInMod
.addItemListener(new java
.awt
.event
.ItemListener() {
975 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
976 if (jCheckBoxPatchInMod
.isSelected()) {
977 jCheckBoxFeatureFlag
.setSelected(false);
982 return jCheckBoxPatchInMod
;
986 * This method initializes jCheckBox3
988 * @return javax.swing.JCheckBox
990 private JCheckBox
getJCheckBoxDyn() {
991 if (jCheckBoxDyn
== null) {
992 jCheckBoxDyn
= new JCheckBox();
994 jCheckBoxDyn
.setText("Dynamic");
995 FontMetrics fm
= jCheckBoxDyn
.getFontMetrics(jCheckBoxDyn
.getFont());
996 jCheckBoxDyn
.setSize(fm
.stringWidth(jCheckBoxDyn
.getText()) + 30, 20);
997 jCheckBoxDyn
.addItemListener(new java
.awt
.event
.ItemListener() {
998 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
999 if (jCheckBoxDyn
.isSelected()) {
1000 jCheckBoxFeatureFlag
.setSelected(false);
1005 return jCheckBoxDyn
;
1009 * This method initializes jCheckBox4
1011 * @return javax.swing.JCheckBox
1013 private JCheckBox
getJCheckBoxDynEx() {
1014 if (jCheckBoxDynEx
== null) {
1015 jCheckBoxDynEx
= new JCheckBox();
1017 jCheckBoxDynEx
.setText("DynamicEx");
1018 FontMetrics fm
= jCheckBoxDynEx
.getFontMetrics(jCheckBoxDynEx
.getFont());
1019 jCheckBoxDynEx
.setSize(fm
.stringWidth(jCheckBoxDynEx
.getText()) + 30, 20);
1020 jCheckBoxDynEx
.addItemListener(new java
.awt
.event
.ItemListener() {
1021 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
1022 if (jCheckBoxDynEx
.isSelected()) {
1023 jCheckBoxFeatureFlag
.setSelected(false);
1028 return jCheckBoxDynEx
;
1031 private String
getValidUsage(boolean ff
, boolean fab
, boolean pim
, boolean d
, boolean de
) {
1034 usage
+= "FEATURE_FLAG ";
1037 usage
+= "FIXED_AT_BUILD ";
1040 usage
+= "PATCHABLE_IN_MODULE ";
1043 usage
+= "DYNAMIC ";
1046 usage
+= "DYNAMIC_EX ";
1049 return usage
.trim();
1052 private boolean tokenCNameExisted(String token
, String cName
) {
1053 Integer inputToken
= Integer
.decode(token
);
1055 for (int i
= 0; i
< jTable
.getRowCount(); ++i
) {
1056 if (jTable
.getValueAt(i
, 0).equals(cName
)) {
1057 JOptionPane
.showMessageDialog(frame
, "C_Name already existed in table.");
1060 if (jTable
.getValueAt(i
, 1).equals(token
)) {
1061 JOptionPane
.showMessageDialog(frame
, "Token already existed in table.");
1064 Integer tokenValue
= Integer
.decode(jTable
.getValueAt(i
, 1)+"");
1065 if (tokenValue
.equals(inputToken
)) {
1066 JOptionPane
.showMessageDialog(frame
, "Same token value already existed in table.");
1074 private boolean checkValidUsage(boolean[] b
) {
1075 if (!(b
[0] || b
[1] || b
[2] || b
[3] || b
[4])){
1076 JOptionPane
.showMessageDialog(frame
, "You must specify at least one usage.");
1081 private boolean dataValidation(Object
[] row
) {
1083 if (!DataValidation
.isC_NameType(row
[0].toString())) {
1084 JOptionPane
.showMessageDialog(frame
, "C_Name is NOT C_NameType.");
1087 if (!DataValidation
.isHexDoubleWordDataType(row
[1].toString()) &&
1088 !DataValidation
.isInt(row
[1].toString(), Integer
.MIN_VALUE
, Integer
.MAX_VALUE
)) {
1089 JOptionPane
.showMessageDialog(frame
, "Token is NOT correct.");
1092 if (!DataValidation
.isC_NameType(row
[2].toString())) {
1093 JOptionPane
.showMessageDialog(frame
, "Token Space is NOT C_NameType");
1096 if (row
[5].toString().length() == 0) {
1097 JOptionPane
.showMessageDialog(frame
, "HelpText could NOT be empty.");
1104 * This method initializes jScrollPane1
1106 * @return javax.swing.JScrollPane
1108 private JScrollPane
getJScrollPaneArch() {
1109 if (jScrollPaneArch
== null) {
1110 jScrollPaneArch
= new JScrollPane();
1111 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(242,213,188,54));
1112 jScrollPaneArch
.setViewportView(getICheckBoxListArch());
1113 jScrollPaneArch
.setPreferredSize(new Dimension(188, 74));
1115 return jScrollPaneArch
;
1119 * This method initializes iCheckBoxList
1121 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1123 private ICheckBoxList
getICheckBoxListArch() {
1124 if (iCheckBoxListArch
== null) {
1125 iCheckBoxListArch
= new ICheckBoxList();
1126 iCheckBoxListArch
.setBounds(new Rectangle(197, 142, 188, 74));
1127 Vector
<String
> v
= new Vector
<String
>();
1134 iCheckBoxListArch
.setAllItems(v
);
1136 return iCheckBoxListArch
;
1140 * This method initializes jScrollPane2
1142 * @return javax.swing.JScrollPane
1144 private JScrollPane
getJScrollPaneMod() {
1145 if (jScrollPaneMod
== null) {
1146 jScrollPaneMod
= new JScrollPane();
1147 jScrollPaneMod
.setBounds(new java
.awt
.Rectangle(15,213,199,55));
1148 jScrollPaneMod
.setViewportView(getICheckBoxListMod());
1149 jScrollPaneMod
.setPreferredSize(new Dimension(170, 74));
1151 return jScrollPaneMod
;
1155 * This method initializes iCheckBoxList1
1157 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1159 private ICheckBoxList
getICheckBoxListMod() {
1160 if (iCheckBoxListMod
== null) {
1161 iCheckBoxListMod
= new ICheckBoxList();
1162 iCheckBoxListMod
.setBounds(new Rectangle(14, 142, 170, 74));
1163 Vector
<String
> v
= new Vector
<String
>();
1169 v
.add("DXE_DRIVER");
1170 v
.add("DXE_RUNTIME_DRIVER");
1171 v
.add("DXE_SAL_DRIVER");
1172 v
.add("DXE_SMM_DRIVER");
1173 v
.add("UEFI_DRIVER");
1174 v
.add("UEFI_APPLICATION");
1175 v
.add("USER_DEFINED");
1176 iCheckBoxListMod
.setAllItems(v
);
1178 return iCheckBoxListMod
;
1181 protected String
vectorToString(Vector
<String
> v
) {
1186 for (int i
= 0; i
< v
.size(); ++i
) {
1193 protected Vector
<String
> stringToVector(String s
){
1194 Vector
<String
> v
= new Vector
<String
>();
1198 String
[] sArray
= s
.split(" ");
1200 for (int i
= 0; i
< sArray
.length
; ++i
) {
1206 private boolean compareTwoVectors(Vector v1
, Vector v2
) {
1207 if (v1
.size() != v2
.size()) {
1210 for (int i
= 0; i
< v1
.size(); ++i
) {
1211 if (!v2
.contains(v1
.get(i
))) {
1217 } // @jve:decl-index=0:visual-constraint="22,11"
1219 class CheckboxTableModel
extends DefaultTableModel
{
1223 private static final long serialVersionUID
= 1L;
1225 public Class
<?
> getColumnClass (int c
) {
1226 if (getValueAt(0, c
) != null){
1227 return getValueAt(0, c
).getClass();
1229 return String
.class;