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;
168 This method initializes this
171 private void initialize() {
172 this.setTitle("PCD Declarations");
173 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
175 int xPos
= jCheckBoxPatchInMod
.getX() + jCheckBoxPatchInMod
.getWidth();
176 jCheckBoxFixedAtBuild
.setLocation(xPos
,133);
178 xPos
= jCheckBoxFeatureFlag
.getX() + jCheckBoxFeatureFlag
.getWidth();
179 jCheckBoxDyn
.setLocation(xPos
,161);
181 xPos
= jCheckBoxDyn
.getX() + jCheckBoxDyn
.getWidth();
182 jCheckBoxDynEx
.setLocation(xPos
,161);
187 This method initializes jTextFieldC_Name
189 @return javax.swing.JTextField
191 private JTextField
getJTextFieldC_Name() {
192 if (jTextFieldC_Name
== null) {
193 jTextFieldC_Name
= new JTextField();
194 jTextFieldC_Name
.setBounds(new java
.awt
.Rectangle(156,9,317,20));
195 jTextFieldC_Name
.setPreferredSize(new java
.awt
.Dimension(315,20));
197 return jTextFieldC_Name
;
201 This method initializes jTextFieldToken
203 @return javax.swing.JTextField
205 private JTextField
getJTextFieldToken() {
206 if (jTextFieldToken
== null) {
207 jTextFieldToken
= new JTextField();
208 jTextFieldToken
.setBounds(new java
.awt
.Rectangle(156,33,317,20));
209 jTextFieldToken
.setPreferredSize(new java
.awt
.Dimension(315,20));
211 return jTextFieldToken
;
215 This method initializes jButtonOk
217 @return javax.swing.JButton
219 private JButton
getJButtonOk() {
220 if (jButtonOk
== null) {
221 jButtonOk
= new JButton();
222 jButtonOk
.setText("OK");
223 jButtonOk
.setBounds(new java
.awt
.Rectangle(279,276,90,20));
224 jButtonOk
.setVisible(false);
225 jButtonOk
.addActionListener(this);
231 This method initializes jButtonCancel
233 @return javax.swing.JButton
235 private JButton
getJButtonCancel() {
236 if (jButtonCancel
== null) {
237 jButtonCancel
= new JButton();
238 jButtonCancel
.setText("Cancel");
239 jButtonCancel
.setBounds(new java
.awt
.Rectangle(389,276,82,20));
240 jButtonCancel
.setVisible(false);
241 jButtonCancel
.addActionListener(this);
243 return jButtonCancel
;
247 This method initializes jComboBoxDataType
249 @return javax.swing.JComboBox
251 private JComboBox
getJComboBoxDataType() {
252 if (jComboBoxDataType
== null) {
253 jComboBoxDataType
= new JComboBox();
254 jComboBoxDataType
.setBounds(new java
.awt
.Rectangle(156,84,110,20));
256 return jComboBoxDataType
;
260 This is the default constructor
262 public SpdPcdDefs() {
269 public SpdPcdDefs(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
) {
271 sfc
= new SpdFileContents(inPsa
);
275 public SpdPcdDefs(OpeningPackageType opt
) {
276 this(opt
.getXmlSpd());
280 This method initializes this
284 private void init() {
285 this.setSize(500, 650);
286 this.setContentPane(getJContentPane());
287 this.addInternalFrameListener(new InternalFrameAdapter(){
288 public void internalFrameDeactivated(InternalFrameEvent e
){
289 if (jTable
.isEditing()) {
290 jTable
.getCellEditor().stopCellEditing();
295 this.setVisible(true);
298 private void init(SpdFileContents sfc
){
300 if (sfc
.getSpdPcdDefinitionCount() == 0) {
303 String
[][] saa
= new String
[sfc
.getSpdPcdDefinitionCount()][8];
304 String
[][] usage
= new String
[sfc
.getSpdPcdDefinitionCount()][5];
305 Object
[] rowData
= new Object
[13];
306 sfc
.getSpdPcdDefinitions(saa
, usage
);
308 while (i
< saa
.length
) {
310 for (int k
= 0; k
< 6; ++k
) {
311 rowData
[k
] = saa
[i
][k
];
313 for (int m
= 6; m
< 11; ++m
) {
314 rowData
[m
] = new Boolean("false");
318 if (usage
[i
][j
] == null || usage
[i
][j
].length()==0){
322 if (usage
[i
][j
].equals("FEATURE_FLAG")){
323 rowData
[6] = new Boolean("true");
325 if (usage
[i
][j
].equals("FIXED_AT_BUILD")){
326 rowData
[7] = new Boolean("true");
328 if (usage
[i
][j
].equals("PATCHABLE_IN_MODULE")){
329 rowData
[8] = new Boolean("true");
331 if (usage
[i
][j
].equals("DYNAMIC")){
332 rowData
[9] = new Boolean("true");
334 if (usage
[i
][j
].equals("DYNAMIC_EX")){
335 rowData
[10] = new Boolean("true");
341 rowData
[11] = saa
[i
][6];
342 rowData
[12] = saa
[i
][7];
344 model
.addRow(rowData
);
353 private JScrollPane
getJContentPane(){
354 if (topScrollPane
== null){
355 topScrollPane
= new JScrollPane();
356 topScrollPane
.setSize(new java
.awt
.Dimension(482,451));
357 topScrollPane
.setViewportView(getJContentPane1());
359 return topScrollPane
;
361 private JPanel
getJContentPane1() {
362 if (jContentPane
== null) {
364 jLabelSupArch
= new JLabel();
365 jLabelSupArch
.setBounds(new java
.awt
.Rectangle(241,192,89,16));
366 jLabelSupArch
.setText("Supported Architectures");
367 jLabelSupArch
.setEnabled(true);
368 FontMetrics fm
= jLabelSupArch
.getFontMetrics(jLabelSupArch
.getFont());
369 jLabelSupArch
.setSize(fm
.stringWidth(jLabelSupArch
.getText()) + 10, 20);
370 jLabelSupMod
= new JLabel();
371 jLabelSupMod
.setBounds(new java
.awt
.Rectangle(15,193,103,16));
372 jLabelSupMod
.setText("Supported Module types");
373 jLabelSupMod
.setEnabled(true);
374 fm
= jLabelSupMod
.getFontMetrics(jLabelSupMod
.getFont());
375 jLabelSupMod
.setSize(fm
.stringWidth(jLabelSupMod
.getText()) + 10, 20);
376 starLabel
= new StarLabel();
377 starLabel
.setBounds(new java
.awt
.Rectangle(2,134,10,20));
378 jLabelDefVal
= new JLabel();
379 jLabelDefVal
.setBounds(new java
.awt
.Rectangle(277,84,80,20));
380 jLabelDefVal
.setText("Default Value");
381 fm
= jLabelDefVal
.getFontMetrics(jLabelDefVal
.getFont());
382 jLabelDefVal
.setSize(fm
.stringWidth(jLabelDefVal
.getText()) + 10, 20);
383 jLabelVarVal
= new JLabel();
384 jLabelVarVal
.setBounds(new java
.awt
.Rectangle(11,133,100,20));
385 jLabelVarVal
.setText("Valid Usage");
386 jLabelC_Name
= new JLabel();
387 jLabelC_Name
.setText("C Name");
388 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(11,9,140,20));
389 jLabelTokenSpace
= new JLabel();
390 jLabelTokenSpace
.setBounds(new java
.awt
.Rectangle(11,58,140,20));
391 jLabelTokenSpace
.setText("Token Space");
392 jLabelDataType
= new JLabel();
393 jLabelDataType
.setText("Data Type");
394 jLabelDataType
.setBounds(new java
.awt
.Rectangle(11,83,140,20));
395 jLabelToken
= new JLabel();
396 jLabelToken
.setText("Token Number");
397 jLabelToken
.setBounds(new java
.awt
.Rectangle(11,33,140,20));
398 jLabelItemType
= new JLabel();
399 jLabelItemType
.setText("Help Text");
400 jLabelItemType
.setBounds(new java
.awt
.Rectangle(11,108,140,20));
403 jContentPane
= new JPanel();
404 jContentPane
.setLayout(null);
405 jContentPane
.setPreferredSize(new java
.awt
.Dimension(479,375));
407 jContentPane
.add(jLabelItemType
, null);
408 jContentPane
.add(jLabelC_Name
, null);
409 jContentPane
.add(jLabelTokenSpace
, null);
410 jContentPane
.add(getJComboBoxTsGuid(), null);
411 jContentPane
.add(jLabelVarVal
, null);
412 jContentPane
.add(getJTextFieldC_Name(), null);
413 jContentPane
.add(jLabelToken
, null);
414 jContentPane
.add(getJTextFieldToken(), null);
415 jContentPane
.add(jLabelDataType
, null);
416 jContentPane
.add(getJButtonOk(), null);
417 jContentPane
.add(getJButtonCancel(), null);
418 jContentPane
.add(getJComboBoxDataType(), null);
420 jStarLabel
= new StarLabel();
421 jStarLabel1
= new StarLabel();
422 jStarLabel1
.setBounds(new java
.awt
.Rectangle(2,8,10,20));
423 jStarLabel2
= new StarLabel();
424 jStarLabel3
= new StarLabel();
425 jStarLabel4
= new StarLabel();
426 jStarLabel
.setLocation(new java
.awt
.Point(2,84));
427 jStarLabel4
.setLocation(new java
.awt
.Point(2, 109));
428 jStarLabel2
.setLocation(new java
.awt
.Point(2,33));
429 jStarLabel3
.setLocation(new java
.awt
.Point(2, 58));
430 jStarLabel3
.setSize(new java
.awt
.Dimension(8,20));
431 jContentPane
.add(jStarLabel2
, null);
432 jContentPane
.add(jStarLabel3
, null);
433 jContentPane
.add(jStarLabel
, null);
434 jContentPane
.add(jStarLabel1
, null);
435 jContentPane
.add(jStarLabel4
, null);
436 jContentPane
.add(getJTextFieldHelp(), null);
437 jContentPane
.add(jLabelDefVal
, null);
438 jContentPane
.add(getJTextFieldDefaultValue(), null);
439 jContentPane
.add(getJButtonAdd(), null);
440 jContentPane
.add(getJButtonRemove(), null);
441 jContentPane
.add(getJButtonClearAll(), null);
442 jContentPane
.add(getJScrollPane(), null);
443 jContentPane
.add(starLabel
, null);
444 jContentPane
.add(getJCheckBoxFeatureFlag(), null);
445 jContentPane
.add(getJCheckBoxFixedAtBuild(), null);
446 jContentPane
.add(getJCheckBoxPatchInMod(), null);
447 jContentPane
.add(getJCheckBoxDyn(), null);
448 jContentPane
.add(getJCheckBoxDynEx(), null);
449 jContentPane
.add(getJScrollPaneArch(), null);
450 jContentPane
.add(getJScrollPaneMod(), null);
451 jContentPane
.add(jLabelSupMod
, null);
452 jContentPane
.add(jLabelSupArch
, null);
458 This method initializes comboboxes
459 jContentPane.add(jLabelTokenSpace, null);
462 private void initFrame(SpdFileContents sfc
) {
464 jComboBoxDataType
.addItem("UINT8");
465 jComboBoxDataType
.addItem("UINT16");
466 jComboBoxDataType
.addItem("UINT32");
467 jComboBoxDataType
.addItem("UINT64");
468 jComboBoxDataType
.addItem("VOID*");
469 jComboBoxDataType
.addItem("BOOLEAN");
470 jComboBoxDataType
.setSelectedIndex(0);
472 Vector
<String
> vGuidCName
= new Vector
<String
>();
473 sfc
.getSpdGuidDeclWithType(vGuidCName
, "TOKEN_SPACE_GUID");
474 for (int i
= 0; i
< vGuidCName
.size(); ++i
) {
475 jComboBoxTsGuid
.addItem(vGuidCName
.get(i
));
479 public void actionPerformed(ActionEvent arg0
) {
482 if (arg0
.getSource() == jButtonOk
) {
486 if (arg0
.getSource() == jButtonCancel
) {
490 if (arg0
.getSource() == jButtonAdd
) {
491 //ToDo: check before add
493 boolean[] b
= {jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected()};
494 if (!checkValidUsage(b
)) {
497 String archList
= vectorToString(iCheckBoxListArch
.getAllCheckedItemsString());
498 if (archList
.length() == 0) {
501 String modTypeList
= vectorToString(iCheckBoxListMod
.getAllCheckedItemsString());
502 if (modTypeList
.length() == 0) {
505 Object
[] row
= {jTextFieldC_Name
.getText(), jTextFieldToken
.getText(),
506 jComboBoxTsGuid
.getSelectedItem(), jComboBoxDataType
.getSelectedItem(),
507 jTextFieldDefaultValue
.getText(), jTextFieldHelp
.getText(),
508 jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(),
509 jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected(),
510 archList
, modTypeList
};
511 if (!dataValidation(row
)) {
515 if (tokenCNameExisted(jTextFieldToken
.getText(), jTextFieldC_Name
.getText())) {
520 jTable
.changeSelection(model
.getRowCount()-1, 0, false, false);
521 String usage
= getValidUsage(jCheckBoxFeatureFlag
.isSelected(), jCheckBoxFixedAtBuild
.isSelected(), jCheckBoxPatchInMod
.isSelected(), jCheckBoxDyn
.isSelected(), jCheckBoxDynEx
.isSelected());
522 if (usage
.length() == 0) {
525 sfc
.genSpdPcdDefinitions(row
[0]+"", row
[1]+"", row
[3]+"", usage
, row
[2]+"", row
[4]+"", row
[5]+"", archList
, modTypeList
);
526 docConsole
.setSaved(false);
529 // remove selected line
531 if (arg0
.getSource() == jButtonRemove
) {
532 if (jTable
.isEditing()){
533 jTable
.getCellEditor().stopCellEditing();
535 int rowSelected
= selectedRow
;
536 if (rowSelected
>= 0) {
537 model
.removeRow(rowSelected
);
538 sfc
.removeSpdPcdDefinition(rowSelected
);
539 docConsole
.setSaved(false);
543 if (arg0
.getSource() == jButtonClearAll
) {
544 if (model
.getRowCount() == 0) {
547 model
.setRowCount(0);
548 sfc
.removeSpdPcdDefinition();
549 docConsole
.setSaved(false);
554 protected void save() {
559 * This method initializes jComboBoxTsGuid
561 * @return javax.swing.JComboBox
563 private JComboBox
getJComboBoxTsGuid() {
564 if (jComboBoxTsGuid
== null) {
565 jComboBoxTsGuid
= new JComboBox();
566 jComboBoxTsGuid
.setBounds(new java
.awt
.Rectangle(156,58,315,20));
569 return jComboBoxTsGuid
;
573 * This method initializes jTextField
575 * @return javax.swing.JTextField
577 private JTextField
getJTextFieldHelp() {
578 if (jTextFieldHelp
== null) {
579 jTextFieldHelp
= new JTextField();
580 jTextFieldHelp
.setBounds(new java
.awt
.Rectangle(156,108,317,20));
581 jTextFieldHelp
.setPreferredSize(new java
.awt
.Dimension(315,20));
583 return jTextFieldHelp
;
587 * This method initializes jTextFieldDefaultValue
589 * @return javax.swing.JTextField
591 private JTextField
getJTextFieldDefaultValue() {
592 if (jTextFieldDefaultValue
== null) {
593 jTextFieldDefaultValue
= new JTextField();
594 int xPos
= jLabelDefVal
.getX() + jLabelDefVal
.getWidth();
595 jTextFieldDefaultValue
.setBounds(new java
.awt
.Rectangle(xPos
,84,105,20));
596 jTextFieldDefaultValue
.setPreferredSize(new java
.awt
.Dimension(104,20));
598 return jTextFieldDefaultValue
;
602 * This method initializes jButtonAdd
604 * @return javax.swing.JButton
606 private JButton
getJButtonAdd() {
607 if (jButtonAdd
== null) {
608 jButtonAdd
= new JButton();
609 jButtonAdd
.setBounds(new java
.awt
.Rectangle(195,277,71,20));
610 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(70,20));
611 jButtonAdd
.setText("Add");
612 jButtonAdd
.addActionListener(this);
619 * This method initializes jButtonRemove
621 * @return javax.swing.JButton
623 private JButton
getJButtonRemove() {
624 if (jButtonRemove
== null) {
625 jButtonRemove
= new JButton();
626 jButtonRemove
.setBounds(new java
.awt
.Rectangle(278,277,81,20));
627 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(70,20));
628 jButtonRemove
.setText("Delete");
629 jButtonRemove
.addActionListener(this);
631 return jButtonRemove
;
635 * This method initializes jButtonClearAll
637 * @return javax.swing.JButton
639 private JButton
getJButtonClearAll() {
640 if (jButtonClearAll
== null) {
641 jButtonClearAll
= new JButton();
642 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(382,277,90,20));
643 jButtonClearAll
.setPreferredSize(new java
.awt
.Dimension(81,20));
644 jButtonClearAll
.setText("Clear All");
645 jButtonClearAll
.addActionListener(this);
647 return jButtonClearAll
;
650 public void componentResized(ComponentEvent arg0
) {
651 int intPreferredWidth
= 500;
653 Tools
.resizeComponentWidth(this.jTextFieldC_Name
, this.getWidth(), intPreferredWidth
);
654 Tools
.resizeComponentWidth(this.jTextFieldToken
, this.getWidth(), intPreferredWidth
);
655 Tools
.resizeComponentWidth(this.jComboBoxTsGuid
, this.getWidth(), intPreferredWidth
);
656 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
657 Tools
.resizeComponentWidth(this.jTextFieldHelp
, this.getWidth(), intPreferredWidth
);
658 Tools
.resizeComponentWidth(this.jScrollPane
, this.getWidth(), intPreferredWidth
);
660 Tools
.resizeComponentWidth(this.jTextFieldDefaultValue
, this.getWidth(), intPreferredWidth
);
661 // relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
662 // relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
663 // relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
667 * This method initializes jScrollPane
669 * @return javax.swing.JScrollPane
671 private JScrollPane
getJScrollPane() {
672 if (jScrollPane
== null) {
673 jScrollPane
= new JScrollPane();
674 jScrollPane
.setBounds(new java
.awt
.Rectangle(5,301,1473,259));
675 jScrollPane
.setViewportView(getJTable());
681 * This method initializes jTable
683 * @return javax.swing.JTable
685 private JTable
getJTable() {
686 if (jTable
== null) {
687 model
= new CheckboxTableModel();
688 jTable
= new JTable(model
);
689 jTable
.setRowHeight(20);
690 jTable
.setAutoResizeMode(JTable
.AUTO_RESIZE_OFF
);
691 jTable
.setSize(new Dimension(1000, 300));
693 model
.addColumn("C_Name");
694 model
.addColumn("Token");
695 model
.addColumn("TokenSpace");
696 model
.addColumn("DatumType");
697 model
.addColumn("DefaultValue");
698 model
.addColumn("HelpText");
700 model
.addColumn("FeatureFlag");
701 model
.addColumn("FixedAtBuild");
702 model
.addColumn("PatchableInModule");
703 model
.addColumn("Dynamic");
704 model
.addColumn("DynamicEx");
705 model
.addColumn("SupportedArch");
706 model
.addColumn("SupportedModule");
708 TableColumn column
= jTable
.getColumnModel().getColumn(0);
709 column
.setMinWidth(this.pcdCNameMinWidth
);
710 column
= jTable
.getColumnModel().getColumn(1);
711 column
.setMinWidth(this.pcdTokenMinWidth
);
712 column
= jTable
.getColumnModel().getColumn(2);
713 column
.setMinWidth(this.pcdTokenSpaceMinWidth
);
714 column
= jTable
.getColumnModel().getColumn(3);
715 column
.setMinWidth(this.datumTypeMinWidth
);
716 column
= jTable
.getColumnModel().getColumn(4);
717 column
.setMinWidth(this.defaultValueMinWidth
);
718 column
= jTable
.getColumnModel().getColumn(5);
719 column
.setMinWidth(this.helpTextMinWidth
);
720 column
= jTable
.getColumnModel().getColumn(6);
721 column
.setMinWidth(this.usageMinWidth
);
722 column
= jTable
.getColumnModel().getColumn(7);
723 column
.setMinWidth(this.usageMinWidth
);
724 column
= jTable
.getColumnModel().getColumn(8);
725 column
.setMinWidth(this.usageMinWidth
);
726 column
= jTable
.getColumnModel().getColumn(9);
727 column
.setMinWidth(this.usageMinWidth
);
728 column
= jTable
.getColumnModel().getColumn(10);
729 column
.setMinWidth(this.usageMinWidth
);
730 column
= jTable
.getColumnModel().getColumn(11);
731 column
.setMinWidth(this.supArchMinWidth
);
732 column
= jTable
.getColumnModel().getColumn(12);
733 column
.setMinWidth(this.supModMinWidth
);
735 //ToDo: add a valid usage editor
737 JComboBox jComboBoxDataType
= new JComboBox();
738 jComboBoxDataType
.addItem("UINT8");
739 jComboBoxDataType
.addItem("UINT16");
740 jComboBoxDataType
.addItem("UINT32");
741 jComboBoxDataType
.addItem("UINT64");
742 jComboBoxDataType
.addItem("VOID*");
743 jComboBoxDataType
.addItem("BOOLEAN");
744 TableColumn dataTypeColumn
= jTable
.getColumnModel().getColumn(3);
745 dataTypeColumn
.setCellEditor(new DefaultCellEditor(jComboBoxDataType
));
747 jTable
.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor());
749 Vector
<String
> vArch
= new Vector
<String
>();
756 jTable
.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch
));
758 Vector
<String
> vModule
= new Vector
<String
>();
761 vModule
.add("PEI_CORE");
763 vModule
.add("DXE_CORE");
764 vModule
.add("DXE_DRIVER");
765 vModule
.add("DXE_RUNTIME_DRIVER");
766 vModule
.add("DXE_SAL_DRIVER");
767 vModule
.add("DXE_SMM_DRIVER");
768 vModule
.add("UEFI_DRIVER");
769 vModule
.add("UEFI_APPLICATION");
770 vModule
.add("USER_DEFINED");
771 jTable
.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule
));
773 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
774 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
775 public void valueChanged(ListSelectionEvent e
) {
776 if (e
.getValueIsAdjusting()){
779 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
780 if (lsm
.isSelectionEmpty()) {
784 selectedRow
= lsm
.getMinSelectionIndex();
789 jTable
.getModel().addTableModelListener(this);
794 public void tableChanged(TableModelEvent arg0
) {
795 // TODO Auto-generated method stub
796 int row
= arg0
.getFirstRow();
797 int column
= arg0
.getColumn();
798 TableModel m
= (TableModel
)arg0
.getSource();
799 if (arg0
.getType() == TableModelEvent
.UPDATE
){
800 String
[] sa
= new String
[9];
801 sfc
.getSpdPcdDeclaration(sa
, row
);
802 Object cellData
= m
.getValueAt(row
, column
);
805 if (cellData
== null) {
808 if (cellData
.equals(sa
[column
])) {
811 if (cellData
.toString().length() == 0 && sa
[column
] == null) {
816 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)+""));
817 if (usage
.length() == 0) {
818 JOptionPane
.showMessageDialog(frame
, "You must choose at least one usage for PCD entry.");
821 if (column
<= 10 && column
>= 6) {
822 Vector
<String
> v
= stringToVector(usage
);
823 if (compareTwoVectors(v
, stringToVector(sa
[6]))) {
826 if (v
.contains("FEATURE_FLAG") && v
.size() > 1) {
827 JOptionPane
.showMessageDialog(frame
, "Usage Feature Flag can NOT co-exist with others.");
833 if (cellData
== null) {
836 if (cellData
.equals(sa
[7])) {
839 if (cellData
.toString().length() == 0 && sa
[7] == null) {
845 if (cellData
== null) {
848 if (cellData
.equals(sa
[8])) {
851 if (cellData
.toString().length() == 0 && sa
[8] == null) {
855 String cName
= m
.getValueAt(row
, 0) + "";
856 String token
= m
.getValueAt(row
, 1) + "";
857 String ts
= m
.getValueAt(row
, 2) + "";
858 String dataType
= m
.getValueAt(row
, 3) + "";
859 String defaultVal
= m
.getValueAt(row
, 4) + "";
860 String help
= m
.getValueAt(row
, 5) + "";
863 String archList
= null;
864 if (m
.getValueAt(row
, 11) != null){
865 archList
= m
.getValueAt(row
, 11).toString();
867 String modTypeList
= null;
868 if (m
.getValueAt(row
, 12) != null) {
869 modTypeList
= m
.getValueAt(row
, 12).toString();
872 Object
[] o
= {cName
, token
, ts
, dataType
, defaultVal
, help
};
873 if (!dataValidation(o
)){
876 docConsole
.setSaved(false);
877 sfc
.updateSpdPcdDefinition(row
, cName
, token
, dataType
, usage
, ts
, defaultVal
, help
, archList
, modTypeList
);
882 * This method initializes jCheckBox
884 * @return javax.swing.JCheckBox
886 private JCheckBox
getJCheckBoxFeatureFlag() {
887 if (jCheckBoxFeatureFlag
== null) {
888 jCheckBoxFeatureFlag
= new JCheckBox();
889 jCheckBoxFeatureFlag
.setBounds(new java
.awt
.Rectangle(156,161,100,21));
890 jCheckBoxFeatureFlag
.setText("Feature Flag");
891 FontMetrics fm
= jCheckBoxFeatureFlag
.getFontMetrics(jCheckBoxFeatureFlag
.getFont());
892 jCheckBoxFeatureFlag
.setSize(fm
.stringWidth(jCheckBoxFeatureFlag
.getText()) + 30, 20);
893 jCheckBoxFeatureFlag
.addItemListener(new java
.awt
.event
.ItemListener() {
894 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
895 if (jCheckBoxFeatureFlag
.isSelected()) {
896 jCheckBoxPatchInMod
.setSelected(false);
897 jCheckBoxFixedAtBuild
.setSelected(false);
898 jCheckBoxDyn
.setSelected(false);
899 jCheckBoxDynEx
.setSelected(false);
904 return jCheckBoxFeatureFlag
;
908 * This method initializes jCheckBox1
910 * @return javax.swing.JCheckBox
912 private JCheckBox
getJCheckBoxFixedAtBuild() {
913 if (jCheckBoxFixedAtBuild
== null) {
914 jCheckBoxFixedAtBuild
= new JCheckBox();
916 jCheckBoxFixedAtBuild
.setText("Fixed at Build");
917 FontMetrics fm
= jCheckBoxFixedAtBuild
.getFontMetrics(jCheckBoxFixedAtBuild
.getFont());
918 jCheckBoxFixedAtBuild
.setSize(fm
.stringWidth(jCheckBoxFixedAtBuild
.getText()) + 30, 20);
919 jCheckBoxFixedAtBuild
.addItemListener(new java
.awt
.event
.ItemListener() {
920 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
921 if (jCheckBoxFixedAtBuild
.isSelected()) {
922 jCheckBoxFeatureFlag
.setSelected(false);
927 return jCheckBoxFixedAtBuild
;
931 * This method initializes jCheckBox2
933 * @return javax.swing.JCheckBox
935 private JCheckBox
getJCheckBoxPatchInMod() {
936 if (jCheckBoxPatchInMod
== null) {
937 jCheckBoxPatchInMod
= new JCheckBox();
939 jCheckBoxPatchInMod
.setBounds(new java
.awt
.Rectangle(156,133,154,20));
940 jCheckBoxPatchInMod
.setText("Patchable in Module");
941 FontMetrics fm
= jCheckBoxPatchInMod
.getFontMetrics(jCheckBoxPatchInMod
.getFont());
942 jCheckBoxPatchInMod
.setSize(fm
.stringWidth(jCheckBoxPatchInMod
.getText()) + 30, 20);
943 jCheckBoxPatchInMod
.addItemListener(new java
.awt
.event
.ItemListener() {
944 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
945 if (jCheckBoxPatchInMod
.isSelected()) {
946 jCheckBoxFeatureFlag
.setSelected(false);
951 return jCheckBoxPatchInMod
;
955 * This method initializes jCheckBox3
957 * @return javax.swing.JCheckBox
959 private JCheckBox
getJCheckBoxDyn() {
960 if (jCheckBoxDyn
== null) {
961 jCheckBoxDyn
= new JCheckBox();
963 jCheckBoxDyn
.setText("Dynamic");
964 FontMetrics fm
= jCheckBoxDyn
.getFontMetrics(jCheckBoxDyn
.getFont());
965 jCheckBoxDyn
.setSize(fm
.stringWidth(jCheckBoxDyn
.getText()) + 30, 20);
966 jCheckBoxDyn
.addItemListener(new java
.awt
.event
.ItemListener() {
967 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
968 if (jCheckBoxDyn
.isSelected()) {
969 jCheckBoxFeatureFlag
.setSelected(false);
978 * This method initializes jCheckBox4
980 * @return javax.swing.JCheckBox
982 private JCheckBox
getJCheckBoxDynEx() {
983 if (jCheckBoxDynEx
== null) {
984 jCheckBoxDynEx
= new JCheckBox();
986 jCheckBoxDynEx
.setText("DynamicEx");
987 FontMetrics fm
= jCheckBoxDynEx
.getFontMetrics(jCheckBoxDynEx
.getFont());
988 jCheckBoxDynEx
.setSize(fm
.stringWidth(jCheckBoxDynEx
.getText()) + 30, 20);
989 jCheckBoxDynEx
.addItemListener(new java
.awt
.event
.ItemListener() {
990 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
991 if (jCheckBoxDynEx
.isSelected()) {
992 jCheckBoxFeatureFlag
.setSelected(false);
997 return jCheckBoxDynEx
;
1000 private String
getValidUsage(boolean ff
, boolean fab
, boolean pim
, boolean d
, boolean de
) {
1003 usage
+= "FEATURE_FLAG ";
1006 usage
+= "FIXED_AT_BUILD ";
1009 usage
+= "PATCHABLE_IN_MODULE ";
1012 usage
+= "DYNAMIC ";
1015 usage
+= "DYNAMIC_EX ";
1018 return usage
.trim();
1021 private boolean tokenCNameExisted(String token
, String cName
) {
1022 Integer inputToken
= Integer
.decode(token
);
1024 for (int i
= 0; i
< jTable
.getRowCount(); ++i
) {
1025 if (jTable
.getValueAt(i
, 0).equals(cName
)) {
1026 JOptionPane
.showMessageDialog(frame
, "C_Name already existed in table.");
1029 if (jTable
.getValueAt(i
, 1).equals(token
)) {
1030 JOptionPane
.showMessageDialog(frame
, "Token already existed in table.");
1033 Integer tokenValue
= Integer
.decode(jTable
.getValueAt(i
, 1)+"");
1034 if (tokenValue
.equals(inputToken
)) {
1035 JOptionPane
.showMessageDialog(frame
, "Same token value already existed in table.");
1043 private boolean checkValidUsage(boolean[] b
) {
1044 if (!(b
[0] || b
[1] || b
[2] || b
[3] || b
[4])){
1045 JOptionPane
.showMessageDialog(frame
, "You must specify at least one usage.");
1050 private boolean dataValidation(Object
[] row
) {
1052 if (!DataValidation
.isC_NameType(row
[0].toString())) {
1053 JOptionPane
.showMessageDialog(frame
, "C_Name is NOT C_NameType.");
1056 if (!DataValidation
.isHexDoubleWordDataType(row
[1].toString()) &&
1057 !DataValidation
.isInt(row
[1].toString(), Integer
.MIN_VALUE
, Integer
.MAX_VALUE
)) {
1058 JOptionPane
.showMessageDialog(frame
, "Token is NOT correct.");
1061 if (!DataValidation
.isC_NameType(row
[2].toString())) {
1062 JOptionPane
.showMessageDialog(frame
, "Token Space is NOT C_NameType");
1065 if (row
[5].toString().length() == 0) {
1066 JOptionPane
.showMessageDialog(frame
, "HelpText could NOT be empty.");
1073 * This method initializes jScrollPane1
1075 * @return javax.swing.JScrollPane
1077 private JScrollPane
getJScrollPaneArch() {
1078 if (jScrollPaneArch
== null) {
1079 jScrollPaneArch
= new JScrollPane();
1080 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(242,213,188,54));
1081 jScrollPaneArch
.setViewportView(getICheckBoxListArch());
1082 jScrollPaneArch
.setPreferredSize(new Dimension(188, 74));
1084 return jScrollPaneArch
;
1088 * This method initializes iCheckBoxList
1090 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1092 private ICheckBoxList
getICheckBoxListArch() {
1093 if (iCheckBoxListArch
== null) {
1094 iCheckBoxListArch
= new ICheckBoxList();
1095 iCheckBoxListArch
.setBounds(new Rectangle(197, 142, 188, 74));
1096 Vector
<String
> v
= new Vector
<String
>();
1103 iCheckBoxListArch
.setAllItems(v
);
1105 return iCheckBoxListArch
;
1109 * This method initializes jScrollPane2
1111 * @return javax.swing.JScrollPane
1113 private JScrollPane
getJScrollPaneMod() {
1114 if (jScrollPaneMod
== null) {
1115 jScrollPaneMod
= new JScrollPane();
1116 jScrollPaneMod
.setBounds(new java
.awt
.Rectangle(15,213,199,55));
1117 jScrollPaneMod
.setViewportView(getICheckBoxListMod());
1118 jScrollPaneMod
.setPreferredSize(new Dimension(170, 74));
1120 return jScrollPaneMod
;
1124 * This method initializes iCheckBoxList1
1126 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1128 private ICheckBoxList
getICheckBoxListMod() {
1129 if (iCheckBoxListMod
== null) {
1130 iCheckBoxListMod
= new ICheckBoxList();
1131 iCheckBoxListMod
.setBounds(new Rectangle(14, 142, 170, 74));
1132 Vector
<String
> v
= new Vector
<String
>();
1138 v
.add("DXE_DRIVER");
1139 v
.add("DXE_RUNTIME_DRIVER");
1140 v
.add("DXE_SAL_DRIVER");
1141 v
.add("DXE_SMM_DRIVER");
1142 v
.add("UEFI_DRIVER");
1143 v
.add("UEFI_APPLICATION");
1144 v
.add("USER_DEFINED");
1145 iCheckBoxListMod
.setAllItems(v
);
1147 return iCheckBoxListMod
;
1150 protected String
vectorToString(Vector
<String
> v
) {
1155 for (int i
= 0; i
< v
.size(); ++i
) {
1162 protected Vector
<String
> stringToVector(String s
){
1163 Vector
<String
> v
= new Vector
<String
>();
1167 String
[] sArray
= s
.split(" ");
1169 for (int i
= 0; i
< sArray
.length
; ++i
) {
1175 private boolean compareTwoVectors(Vector v1
, Vector v2
) {
1176 if (v1
.size() != v2
.size()) {
1179 for (int i
= 0; i
< v1
.size(); ++i
) {
1180 if (!v2
.contains(v1
.get(i
))) {
1186 } // @jve:decl-index=0:visual-constraint="22,11"
1188 class CheckboxTableModel
extends DefaultTableModel
{
1192 private static final long serialVersionUID
= 1L;
1194 public Class
<?
> getColumnClass (int c
) {
1195 if (getValueAt(0, c
) != null){
1196 return getValueAt(0, c
).getClass();
1198 return String
.class;