]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
1. change SPD Pcd editor title to "PCD Declarations".
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPcdDefs.java
1 /** @file
2 Java class SpdPcdDefs is GUI for create PCD definition elements of spd file.
3
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
9
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.
12 **/
13 package org.tianocore.frameworkwizard.packaging.ui;
14
15 import java.awt.Dimension;
16 import java.awt.event.ActionEvent;
17 import java.awt.event.ComponentEvent;
18
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;
28
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;
38
39 import org.tianocore.PackageSurfaceAreaDocument;
40
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;
50
51 import java.awt.Rectangle;
52 import java.util.Vector;
53
54 /**
55 GUI for create PCD definition elements of spd file
56
57 @since PackageEditor 1.0
58 **/
59 public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
60
61 /**
62 *
63 */
64 private static final long serialVersionUID = 1L;
65
66 static JFrame frame;
67
68 private JPanel jContentPane = null;
69
70 private JLabel jLabelItemType = null;
71
72 private JLabel jLabelC_Name = null;
73
74 private JTextField jTextFieldC_Name = null;
75
76 private JLabel jLabelToken = null;
77
78 private JTextField jTextFieldToken = null;
79
80 private JLabel jLabelDataType = null;
81
82 private JButton jButtonOk = null;
83
84 private JButton jButtonCancel = null;
85
86 private JComboBox jComboBoxDataType = null;
87
88 private SpdFileContents sfc = null;
89
90 private OpeningPackageType docConsole = null;
91
92 private StarLabel jStarLabel2 = null;
93
94 private StarLabel jStarLabel3 = null;
95
96 private StarLabel jStarLabel4 = null;
97
98 private StarLabel jStarLabel = null;
99
100 private StarLabel jStarLabel1 = null;
101
102 private JLabel jLabelTokenSpace = null;
103
104 private JTextField jTextFieldTsGuid = null;
105
106 private JLabel jLabelVarVal = null;
107
108 private JTextField jTextField = null;
109
110 private JLabel jLabelDefVal = null;
111
112 private JTextField jTextFieldDefaultValue = null;
113
114 private JButton jButtonAdd = null;
115
116 private CheckboxTableModel model = null;
117
118 private JButton jButtonRemove = null;
119
120 private JButton jButtonClearAll = null;
121
122 private JScrollPane jScrollPane = null;
123
124 private JTable jTable = null;
125
126 private JScrollPane topScrollPane = null; // @jve:decl-index=0:visual-constraint="390,10"
127
128 private int selectedRow = -1;
129
130 private StarLabel starLabel = null;
131
132 private JCheckBox jCheckBox = null;
133
134 private JCheckBox jCheckBox1 = null;
135
136 private JCheckBox jCheckBox2 = null;
137
138 private JCheckBox jCheckBox3 = null;
139
140 private JCheckBox jCheckBox4 = null;
141
142 private JScrollPane jScrollPane1 = null;
143
144 private ICheckBoxList iCheckBoxList = null;
145
146 private JScrollPane jScrollPane2 = null;
147
148 private ICheckBoxList iCheckBoxList1 = null;
149
150 private JLabel jLabel = null;
151
152 private JLabel jLabel1 = null;
153
154 /**
155 This method initializes this
156
157 **/
158 private void initialize() {
159 this.setTitle("PCD Declarations");
160 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
161
162 }
163
164 /**
165 This method initializes jTextFieldC_Name
166
167 @return javax.swing.JTextField
168 **/
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));
174 }
175 return jTextFieldC_Name;
176 }
177
178 /**
179 This method initializes jTextFieldToken
180
181 @return javax.swing.JTextField
182 **/
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));
188 }
189 return jTextFieldToken;
190 }
191
192 /**
193 This method initializes jButtonOk
194
195 @return javax.swing.JButton
196 **/
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);
204 }
205 return jButtonOk;
206 }
207
208 /**
209 This method initializes jButtonCancel
210
211 @return javax.swing.JButton
212 **/
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);
220 }
221 return jButtonCancel;
222 }
223
224 /**
225 This method initializes jComboBoxDataType
226
227 @return javax.swing.JComboBox
228 **/
229 private JComboBox getJComboBoxDataType() {
230 if (jComboBoxDataType == null) {
231 jComboBoxDataType = new JComboBox();
232 jComboBoxDataType.setBounds(new java.awt.Rectangle(156,84,110,20));
233 }
234 return jComboBoxDataType;
235 }
236
237 /**
238 This is the default constructor
239 **/
240 public SpdPcdDefs() {
241 super();
242 init();
243 initialize();
244
245 }
246
247 public SpdPcdDefs(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa) {
248 this();
249 sfc = new SpdFileContents(inPsa);
250 init(sfc);
251 }
252
253 public SpdPcdDefs(OpeningPackageType opt) {
254 this(opt.getXmlSpd());
255 docConsole = opt;
256 }
257 /**
258 This method initializes this
259
260 @return void
261 **/
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();
269 }
270 }
271 });
272 initFrame();
273 this.setVisible(true);
274 }
275
276 private void init(SpdFileContents sfc){
277 if (sfc.getSpdPcdDefinitionCount() == 0) {
278 return ;
279 }
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);
284 int i = 0;
285 while (i < saa.length) {
286
287 for (int k = 0; k < 6; ++k) {
288 rowData[k] = saa[i][k];
289 }
290 for (int m = 6; m < 11; ++m) {
291 rowData[m] = new Boolean("false");
292 }
293 int j = 0;
294 while (j < 5) {
295 if (usage[i][j] == null || usage[i][j].length()==0){
296 ++j;
297 continue;
298 }
299 if (usage[i][j].equals("FEATURE_FLAG")){
300 rowData[6] = new Boolean("true");
301 }
302 if (usage[i][j].equals("FIXED_AT_BUILD")){
303 rowData[7] = new Boolean("true");
304 }
305 if (usage[i][j].equals("PATCHABLE_IN_MODULE")){
306 rowData[8] = new Boolean("true");
307 }
308 if (usage[i][j].equals("DYNAMIC")){
309 rowData[9] = new Boolean("true");
310 }
311 if (usage[i][j].equals("DYNAMIC_EX")){
312 rowData[10] = new Boolean("true");
313 }
314
315 ++j;
316 }
317
318 rowData[11] = saa[i][6];
319 rowData[12] = saa[i][7];
320
321 model.addRow(rowData);
322
323 i++;
324 }
325
326
327
328 }
329
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());
335 }
336 return topScrollPane;
337 }
338 private JPanel getJContentPane1() {
339 if (jContentPane == null) {
340
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));
372
373
374 jContentPane = new JPanel();
375 jContentPane.setLayout(null);
376 jContentPane.setPreferredSize(new java.awt.Dimension(479,375));
377
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);
390
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);
424 }
425 return jContentPane;
426 }
427
428 /**
429 This method initializes comboboxes
430 jContentPane.add(jLabelTokenSpace, null);
431
432 **/
433 private void initFrame() {
434
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);
442 }
443
444 public void actionPerformed(ActionEvent arg0) {
445
446 docConsole.setSaved(false);
447 if (arg0.getSource() == jButtonOk) {
448 this.save();
449 this.dispose();
450 }
451 if (arg0.getSource() == jButtonCancel) {
452 this.dispose();
453 }
454
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)) {
459 return;
460 }
461 String archList = vectorToString(iCheckBoxList.getAllCheckedItemsString());
462 if (archList.length() == 0) {
463 archList = null;
464 }
465 String modTypeList = vectorToString(iCheckBoxList1.getAllCheckedItemsString());
466 if (modTypeList.length() == 0) {
467 modTypeList = null;
468 }
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)) {
476 return;
477 }
478 model.addRow(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) {
482 usage = null;
483 }
484 sfc.genSpdPcdDefinitions(row[0]+"", row[1]+"", row[3]+"", usage, row[2]+"", row[4]+"", row[5]+"", archList, modTypeList);
485 }
486 //
487 // remove selected line
488 //
489 if (arg0.getSource() == jButtonRemove) {
490 if (jTable.isEditing()){
491 jTable.getCellEditor().stopCellEditing();
492 }
493 int rowSelected = selectedRow;
494 if (rowSelected >= 0) {
495 model.removeRow(rowSelected);
496 sfc.removeSpdPcdDefinition(rowSelected);
497 }
498 }
499
500 if (arg0.getSource() == jButtonClearAll) {
501 if (model.getRowCount() == 0) {
502 return;
503 }
504 model.setRowCount(0);
505 sfc.removeSpdPcdDefinition();
506 }
507
508 }
509
510 protected void save() {
511
512 }
513
514 /**
515 * This method initializes jTextFieldTsGuid
516 *
517 * @return javax.swing.JTextField
518 */
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));
525 }
526 return jTextFieldTsGuid;
527 }
528
529 /**
530 * This method initializes jTextField
531 *
532 * @return javax.swing.JTextField
533 */
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));
539 }
540 return jTextField;
541 }
542
543 /**
544 * This method initializes jTextFieldDefaultValue
545 *
546 * @return javax.swing.JTextField
547 */
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));
553 }
554 return jTextFieldDefaultValue;
555 }
556
557 /**
558 * This method initializes jButtonAdd
559 *
560 * @return javax.swing.JButton
561 */
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);
569 }
570 return jButtonAdd;
571
572 }
573
574 /**
575 * This method initializes jButtonRemove
576 *
577 * @return javax.swing.JButton
578 */
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);
586 }
587 return jButtonRemove;
588 }
589
590 /**
591 * This method initializes jButtonClearAll
592 *
593 * @return javax.swing.JButton
594 */
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);
602 }
603 return jButtonClearAll;
604 }
605
606 public void componentResized(ComponentEvent arg0) {
607 int intPreferredWidth = 500;
608
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);
615
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);
620 }
621
622 /**
623 * This method initializes jScrollPane
624 *
625 * @return javax.swing.JScrollPane
626 */
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());
632 }
633 return jScrollPane;
634 }
635
636 /**
637 * This method initializes jTable
638 *
639 * @return javax.swing.JTable
640 */
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));
648
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");
655
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");
663
664 //ToDo: add a valid usage editor
665
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));
675
676 Vector<String> vArch = new Vector<String>();
677 vArch.add("IA32");
678 vArch.add("X64");
679 vArch.add("IPF");
680 vArch.add("EBC");
681 vArch.add("ARM");
682 vArch.add("PPC");
683 jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch));
684
685 Vector<String> vModule = new Vector<String>();
686 vModule.add("BASE");
687 vModule.add("SEC");
688 vModule.add("PEI_CORE");
689 vModule.add("PEIM");
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));
699
700 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
701 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
702 public void valueChanged(ListSelectionEvent e) {
703 if (e.getValueIsAdjusting()){
704 return;
705 }
706 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
707 if (lsm.isSelectionEmpty()) {
708 return;
709 }
710 else{
711 selectedRow = lsm.getMinSelectionIndex();
712 }
713 }
714 });
715
716 jTable.getModel().addTableModelListener(this);
717 }
718 return jTable;
719 }
720
721 public void tableChanged(TableModelEvent arg0) {
722 // TODO Auto-generated method stub
723 int row = arg0.getFirstRow();
724 TableModel m = (TableModel)arg0.getSource();
725 if (arg0.getType() == TableModelEvent.UPDATE){
726
727 String cName = m.getValueAt(row, 0) + "";
728 String token = m.getValueAt(row, 1) + "";
729 String ts = m.getValueAt(row, 2) + "";
730 String dataType = m.getValueAt(row, 3) + "";
731 String defaultVal = m.getValueAt(row, 4) + "";
732 String help = m.getValueAt(row, 5) + "";
733 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)+""));
734
735 String archList = null;
736 if (m.getValueAt(row, 11) != null){
737 archList = m.getValueAt(row, 11).toString();
738 }
739 String modTypeList = null;
740 if (m.getValueAt(row, 12) != null) {
741 modTypeList = m.getValueAt(row, 12).toString();
742 }
743 if (usage.length() == 0) {
744 JOptionPane.showMessageDialog(frame, "You must choose at least one usage for PCD entry.");
745 return;
746 }
747 Object[] o = {cName, token, ts, dataType, defaultVal, help};
748 if (!dataValidation(o)){
749 return;
750 }
751 docConsole.setSaved(false);
752 sfc.updateSpdPcdDefinition(row, cName, token, dataType, usage, ts, defaultVal, help, archList, modTypeList);
753 }
754 }
755
756 /**
757 * This method initializes jCheckBox
758 *
759 * @return javax.swing.JCheckBox
760 */
761 private JCheckBox getJCheckBox() {
762 if (jCheckBox == null) {
763 jCheckBox = new JCheckBox();
764 jCheckBox.setBounds(new java.awt.Rectangle(156,161,100,21));
765 jCheckBox.setText("Feature Flag");
766 jCheckBox.setPreferredSize(new java.awt.Dimension(21,20));
767 }
768 return jCheckBox;
769 }
770
771 /**
772 * This method initializes jCheckBox1
773 *
774 * @return javax.swing.JCheckBox
775 */
776 private JCheckBox getJCheckBox1() {
777 if (jCheckBox1 == null) {
778 jCheckBox1 = new JCheckBox();
779 jCheckBox1.setBounds(new java.awt.Rectangle(312,133,108,20));
780 jCheckBox1.setText("Fixed at Build");
781 jCheckBox1.setPreferredSize(new java.awt.Dimension(21,20));
782 }
783 return jCheckBox1;
784 }
785
786 /**
787 * This method initializes jCheckBox2
788 *
789 * @return javax.swing.JCheckBox
790 */
791 private JCheckBox getJCheckBox2() {
792 if (jCheckBox2 == null) {
793 jCheckBox2 = new JCheckBox();
794 jCheckBox2.setBounds(new java.awt.Rectangle(156,133,154,20));
795 jCheckBox2.setText("Patchable in Module");
796 jCheckBox2.setPreferredSize(new java.awt.Dimension(21,20));
797 }
798 return jCheckBox2;
799 }
800
801 /**
802 * This method initializes jCheckBox3
803 *
804 * @return javax.swing.JCheckBox
805 */
806 private JCheckBox getJCheckBox3() {
807 if (jCheckBox3 == null) {
808 jCheckBox3 = new JCheckBox();
809 jCheckBox3.setBounds(new java.awt.Rectangle(278,161,80,20));
810 jCheckBox3.setText("Dynamic");
811 jCheckBox3.setPreferredSize(new java.awt.Dimension(21,20));
812 }
813 return jCheckBox3;
814 }
815
816 /**
817 * This method initializes jCheckBox4
818 *
819 * @return javax.swing.JCheckBox
820 */
821 private JCheckBox getJCheckBox4() {
822 if (jCheckBox4 == null) {
823 jCheckBox4 = new JCheckBox();
824 jCheckBox4.setBounds(new java.awt.Rectangle(371,161,99,20));
825 jCheckBox4.setText("DynamicEx");
826 jCheckBox4.setPreferredSize(new java.awt.Dimension(21,20));
827 }
828 return jCheckBox4;
829 }
830
831 private String getValidUsage(boolean ff, boolean fab, boolean pim, boolean d, boolean de) {
832 String usage = "";
833 if (ff){
834 usage += "FEATURE_FLAG ";
835 }
836 if (fab){
837 usage += "FIXED_AT_BUILD ";
838 }
839 if (pim){
840 usage += "PATCHABLE_IN_MODULE ";
841 }
842 if (d){
843 usage += "DYNAMIC ";
844 }
845 if (de){
846 usage += "DYNAMIC_EX ";
847 }
848
849 return usage.trim();
850 }
851
852 private boolean checkValidUsage(boolean[] b) {
853 if (!(b[0] || b[1] || b[2] || b[3] || b[4])){
854 JOptionPane.showMessageDialog(frame, "You must specify at least one usage.");
855 return false;
856 }
857 return true;
858 }
859 private boolean dataValidation(Object[] row) {
860
861 if (!DataValidation.isC_NameType(row[0].toString())) {
862 JOptionPane.showMessageDialog(frame, "C_Name is NOT C_NameType.");
863 return false;
864 }
865 if (!(DataValidation.isHexDoubleWordDataType(row[1].toString()) ||
866 DataValidation.isInt(row[1].toString(), 0, 0xffffffff))) {
867 JOptionPane.showMessageDialog(frame, "Token is NOT correct.");
868 return false;
869 }
870 if (!DataValidation.isC_NameType(row[2].toString())) {
871 JOptionPane.showMessageDialog(frame, "Token Space is NOT C_NameType");
872 return false;
873 }
874 if (row[5].toString().length() == 0) {
875 JOptionPane.showMessageDialog(frame, "HelpText could NOT be empty.");
876 return false;
877 }
878 return true;
879 }
880
881 /**
882 * This method initializes jScrollPane1
883 *
884 * @return javax.swing.JScrollPane
885 */
886 private JScrollPane getJScrollPane1() {
887 if (jScrollPane1 == null) {
888 jScrollPane1 = new JScrollPane();
889 jScrollPane1.setBounds(new java.awt.Rectangle(242,213,188,54));
890 jScrollPane1.setViewportView(getICheckBoxList());
891 jScrollPane1.setPreferredSize(new Dimension(188, 74));
892 }
893 return jScrollPane1;
894 }
895
896 /**
897 * This method initializes iCheckBoxList
898 *
899 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
900 */
901 private ICheckBoxList getICheckBoxList() {
902 if (iCheckBoxList == null) {
903 iCheckBoxList = new ICheckBoxList();
904 iCheckBoxList.setBounds(new Rectangle(197, 142, 188, 74));
905 Vector<String> v = new Vector<String>();
906 v.add("IA32");
907 v.add("X64");
908 v.add("IPF");
909 v.add("EBC");
910 v.add("ARM");
911 v.add("PPC");
912 iCheckBoxList.setAllItems(v);
913 }
914 return iCheckBoxList;
915 }
916
917 /**
918 * This method initializes jScrollPane2
919 *
920 * @return javax.swing.JScrollPane
921 */
922 private JScrollPane getJScrollPane2() {
923 if (jScrollPane2 == null) {
924 jScrollPane2 = new JScrollPane();
925 jScrollPane2.setBounds(new java.awt.Rectangle(15,213,199,55));
926 jScrollPane2.setViewportView(getICheckBoxList1());
927 jScrollPane2.setPreferredSize(new Dimension(170, 74));
928 }
929 return jScrollPane2;
930 }
931
932 /**
933 * This method initializes iCheckBoxList1
934 *
935 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
936 */
937 private ICheckBoxList getICheckBoxList1() {
938 if (iCheckBoxList1 == null) {
939 iCheckBoxList1 = new ICheckBoxList();
940 iCheckBoxList1.setBounds(new Rectangle(14, 142, 170, 74));
941 Vector<String> v = new Vector<String>();
942 v.add("BASE");
943 v.add("SEC");
944 v.add("PEI_CORE");
945 v.add("PEIM");
946 v.add("DXE_CORE");
947 v.add("DXE_DRIVER");
948 v.add("DXE_RUNTIME_DRIVER");
949 v.add("DXE_SAL_DRIVER");
950 v.add("DXE_SMM_DRIVER");
951 v.add("UEFI_DRIVER");
952 v.add("UEFI_APPLICATION");
953 v.add("USER_DEFINED");
954 iCheckBoxList1.setAllItems(v);
955 }
956 return iCheckBoxList1;
957 }
958
959 protected String vectorToString(Vector<String> v) {
960 if (v == null) {
961 return null;
962 }
963 String s = " ";
964 for (int i = 0; i < v.size(); ++i) {
965 s += v.get(i);
966 s += " ";
967 }
968 return s.trim();
969 }
970 } // @jve:decl-index=0:visual-constraint="22,11"
971
972 class CheckboxTableModel extends DefaultTableModel {
973 /**
974 *
975 */
976 private static final long serialVersionUID = 1L;
977
978 public Class<?> getColumnClass (int c) {
979 if (getValueAt(0, c) != null){
980 return getValueAt(0, c).getClass();
981 }
982 return String.class;
983 }
984 }