]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
f85e40b988e3e77041e80db936fa94ed9489c4e7
[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.ui.IInternalFrame;
43 import org.tianocore.frameworkwizard.common.ui.StarLabel;
44 import javax.swing.JScrollPane;
45 import javax.swing.JTable;
46 import javax.swing.JCheckBox;
47 import org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList;
48 import org.tianocore.frameworkwizard.platform.ui.ListEditor;
49
50 import java.awt.Rectangle;
51 import java.util.Vector;
52
53 /**
54 GUI for create PCD definition elements of spd file
55
56 @since PackageEditor 1.0
57 **/
58 public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
59
60 /**
61 *
62 */
63 private static final long serialVersionUID = 1L;
64
65 static JFrame frame;
66
67 private JPanel jContentPane = null;
68
69 private JLabel jLabelItemType = null;
70
71 private JLabel jLabelC_Name = null;
72
73 private JTextField jTextFieldC_Name = null;
74
75 private JLabel jLabelToken = null;
76
77 private JTextField jTextFieldToken = null;
78
79 private JLabel jLabelDataType = null;
80
81 private JButton jButtonOk = null;
82
83 private JButton jButtonCancel = null;
84
85 private JComboBox jComboBoxDataType = null;
86
87 private SpdFileContents sfc = null;
88
89 private StarLabel jStarLabel2 = null;
90
91 private StarLabel jStarLabel3 = null;
92
93 private StarLabel jStarLabel4 = null;
94
95 private StarLabel jStarLabel = null;
96
97 private StarLabel jStarLabel1 = null;
98
99 private JLabel jLabelTokenSpace = null;
100
101 private JTextField jTextFieldTsGuid = null;
102
103 private JLabel jLabelVarVal = null;
104
105 private JTextField jTextField = null;
106
107 private JLabel jLabelDefVal = null;
108
109 private JTextField jTextFieldDefaultValue = null;
110
111 private JButton jButtonAdd = null;
112
113 private CheckboxTableModel model = null;
114
115 private JButton jButtonRemove = null;
116
117 private JButton jButtonClearAll = null;
118
119 private JScrollPane jScrollPane = null;
120
121 private JTable jTable = null;
122
123 private JScrollPane topScrollPane = null; // @jve:decl-index=0:visual-constraint="390,10"
124
125 private int selectedRow = -1;
126
127 private StarLabel starLabel = null;
128
129 private JCheckBox jCheckBox = null;
130
131 private JCheckBox jCheckBox1 = null;
132
133 private JCheckBox jCheckBox2 = null;
134
135 private JCheckBox jCheckBox3 = null;
136
137 private JCheckBox jCheckBox4 = null;
138
139 private JScrollPane jScrollPane1 = null;
140
141 private ICheckBoxList iCheckBoxList = null;
142
143 private JScrollPane jScrollPane2 = null;
144
145 private ICheckBoxList iCheckBoxList1 = null;
146
147 private JLabel jLabel = null;
148
149 private JLabel jLabel1 = null;
150
151 /**
152 This method initializes this
153
154 **/
155 private void initialize() {
156 this.setTitle("PCD Definition");
157 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
158
159 }
160
161 /**
162 This method initializes jTextFieldC_Name
163
164 @return javax.swing.JTextField
165 **/
166 private JTextField getJTextFieldC_Name() {
167 if (jTextFieldC_Name == null) {
168 jTextFieldC_Name = new JTextField();
169 jTextFieldC_Name.setBounds(new java.awt.Rectangle(156,9,317,20));
170 jTextFieldC_Name.setPreferredSize(new java.awt.Dimension(315,20));
171 }
172 return jTextFieldC_Name;
173 }
174
175 /**
176 This method initializes jTextFieldToken
177
178 @return javax.swing.JTextField
179 **/
180 private JTextField getJTextFieldToken() {
181 if (jTextFieldToken == null) {
182 jTextFieldToken = new JTextField();
183 jTextFieldToken.setBounds(new java.awt.Rectangle(156,33,317,20));
184 jTextFieldToken.setPreferredSize(new java.awt.Dimension(315,20));
185 }
186 return jTextFieldToken;
187 }
188
189 /**
190 This method initializes jButtonOk
191
192 @return javax.swing.JButton
193 **/
194 private JButton getJButtonOk() {
195 if (jButtonOk == null) {
196 jButtonOk = new JButton();
197 jButtonOk.setText("OK");
198 jButtonOk.setBounds(new java.awt.Rectangle(279,276,90,20));
199 jButtonOk.setVisible(false);
200 jButtonOk.addActionListener(this);
201 }
202 return jButtonOk;
203 }
204
205 /**
206 This method initializes jButtonCancel
207
208 @return javax.swing.JButton
209 **/
210 private JButton getJButtonCancel() {
211 if (jButtonCancel == null) {
212 jButtonCancel = new JButton();
213 jButtonCancel.setText("Cancel");
214 jButtonCancel.setBounds(new java.awt.Rectangle(389,276,82,20));
215 jButtonCancel.setVisible(false);
216 jButtonCancel.addActionListener(this);
217 }
218 return jButtonCancel;
219 }
220
221 /**
222 This method initializes jComboBoxDataType
223
224 @return javax.swing.JComboBox
225 **/
226 private JComboBox getJComboBoxDataType() {
227 if (jComboBoxDataType == null) {
228 jComboBoxDataType = new JComboBox();
229 jComboBoxDataType.setBounds(new java.awt.Rectangle(156,84,110,20));
230 }
231 return jComboBoxDataType;
232 }
233
234 /**
235 This is the default constructor
236 **/
237 public SpdPcdDefs() {
238 super();
239 init();
240 initialize();
241
242 }
243
244 public SpdPcdDefs(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa) {
245 this();
246 sfc = new SpdFileContents(inPsa);
247 init(sfc);
248 }
249 /**
250 This method initializes this
251
252 @return void
253 **/
254 private void init() {
255 this.setSize(500, 650);
256 this.setContentPane(getJContentPane());
257 this.addInternalFrameListener(new InternalFrameAdapter(){
258 public void internalFrameDeactivated(InternalFrameEvent e){
259 if (jTable.isEditing()) {
260 jTable.getCellEditor().stopCellEditing();
261 }
262 }
263 });
264 initFrame();
265 this.setVisible(true);
266 }
267
268 private void init(SpdFileContents sfc){
269 if (sfc.getSpdPcdDefinitionCount() == 0) {
270 return ;
271 }
272 String[][] saa = new String[sfc.getSpdPcdDefinitionCount()][8];
273 String[][] usage = new String[sfc.getSpdPcdDefinitionCount()][5];
274 Object[] rowData = new Object[13];
275 sfc.getSpdPcdDefinitions(saa, usage);
276 int i = 0;
277 while (i < saa.length) {
278
279 for (int k = 0; k < 6; ++k) {
280 rowData[k] = saa[i][k];
281 }
282 for (int m = 7; m < 11; ++m) {
283 rowData[m] = new Boolean("false");
284 }
285 int j = 0;
286 while (j < 5) {
287 if (usage[i][j] == null || usage[i][j].length()==0){
288 ++j;
289 continue;
290 }
291 if (usage[i][j].equals("FEATURE_FLAG")){
292 rowData[6] = new Boolean("true");
293 }
294 if (usage[i][j].equals("FIXED_AT_BUILD")){
295 rowData[7] = new Boolean("true");
296 }
297 if (usage[i][j].equals("PATCHABLE_IN_MODULE")){
298 rowData[8] = new Boolean("true");
299 }
300 if (usage[i][j].equals("DYNAMIC")){
301 rowData[9] = new Boolean("true");
302 }
303 if (usage[i][j].equals("DYNAMIC_EX")){
304 rowData[10] = new Boolean("true");
305 }
306
307 ++j;
308 }
309
310 rowData[11] = saa[i][6];
311 rowData[12] = saa[i][7];
312
313 model.addRow(rowData);
314
315 i++;
316 }
317
318
319
320 }
321
322 private JScrollPane getJContentPane(){
323 if (topScrollPane == null){
324 topScrollPane = new JScrollPane();
325 topScrollPane.setSize(new java.awt.Dimension(482,451));
326 topScrollPane.setViewportView(getJContentPane1());
327 }
328 return topScrollPane;
329 }
330 private JPanel getJContentPane1() {
331 if (jContentPane == null) {
332
333 jLabel1 = new JLabel();
334 jLabel1.setBounds(new java.awt.Rectangle(241,192,89,16));
335 jLabel1.setText("Supported Arch");
336 jLabel1.setEnabled(true);
337 jLabel = new JLabel();
338 jLabel.setBounds(new java.awt.Rectangle(15,193,103,16));
339 jLabel.setText("Supported Module");
340 jLabel.setEnabled(true);
341 starLabel = new StarLabel();
342 starLabel.setBounds(new java.awt.Rectangle(2,134,10,20));
343 jLabelDefVal = new JLabel();
344 jLabelDefVal.setBounds(new java.awt.Rectangle(277,84,80,20));
345 jLabelDefVal.setText("Default Value");
346 jLabelVarVal = new JLabel();
347 jLabelVarVal.setBounds(new java.awt.Rectangle(11,133,84,20));
348 jLabelVarVal.setText("Valid Usage");
349 jLabelC_Name = new JLabel();
350 jLabelC_Name.setText("C_Name");
351 jLabelC_Name.setBounds(new java.awt.Rectangle(11,9,140,20));
352 jLabelTokenSpace = new JLabel();
353 jLabelTokenSpace.setBounds(new java.awt.Rectangle(11,58,140,20));
354 jLabelTokenSpace.setText("Token Space");
355 jLabelDataType = new JLabel();
356 jLabelDataType.setText("Data Type");
357 jLabelDataType.setBounds(new java.awt.Rectangle(11,83,140,20));
358 jLabelToken = new JLabel();
359 jLabelToken.setText("Token");
360 jLabelToken.setBounds(new java.awt.Rectangle(11,33,140,20));
361 jLabelItemType = new JLabel();
362 jLabelItemType.setText("Help Text");
363 jLabelItemType.setBounds(new java.awt.Rectangle(11,108,140,20));
364
365
366 jContentPane = new JPanel();
367 jContentPane.setLayout(null);
368 jContentPane.setPreferredSize(new java.awt.Dimension(479,375));
369
370 jContentPane.add(jLabelItemType, null);
371 jContentPane.add(jLabelC_Name, null);
372 jContentPane.add(jLabelTokenSpace, null);
373 jContentPane.add(getJTextFieldTsGuid(), null);
374 jContentPane.add(jLabelVarVal, null);
375 jContentPane.add(getJTextFieldC_Name(), null);
376 jContentPane.add(jLabelToken, null);
377 jContentPane.add(getJTextFieldToken(), null);
378 jContentPane.add(jLabelDataType, null);
379 jContentPane.add(getJButtonOk(), null);
380 jContentPane.add(getJButtonCancel(), null);
381 jContentPane.add(getJComboBoxDataType(), null);
382
383 jStarLabel = new StarLabel();
384 jStarLabel1 = new StarLabel();
385 jStarLabel1.setBounds(new java.awt.Rectangle(2,8,10,20));
386 jStarLabel2 = new StarLabel();
387 jStarLabel3 = new StarLabel();
388 jStarLabel4 = new StarLabel();
389 jStarLabel.setLocation(new java.awt.Point(2,84));
390 jStarLabel4.setLocation(new java.awt.Point(2, 109));
391 jStarLabel2.setLocation(new java.awt.Point(2,33));
392 jStarLabel3.setLocation(new java.awt.Point(2, 58));
393 jStarLabel3.setSize(new java.awt.Dimension(8,20));
394 jContentPane.add(jStarLabel2, null);
395 jContentPane.add(jStarLabel3, null);
396 jContentPane.add(jStarLabel, null);
397 jContentPane.add(jStarLabel1, null);
398 jContentPane.add(jStarLabel4, null);
399 jContentPane.add(getJTextField(), null);
400 jContentPane.add(jLabelDefVal, null);
401 jContentPane.add(getJTextFieldDefaultValue(), null);
402 jContentPane.add(getJButtonAdd(), null);
403 jContentPane.add(getJButtonRemove(), null);
404 jContentPane.add(getJButtonClearAll(), null);
405 jContentPane.add(getJScrollPane(), null);
406 jContentPane.add(starLabel, null);
407 jContentPane.add(getJCheckBox(), null);
408 jContentPane.add(getJCheckBox1(), null);
409 jContentPane.add(getJCheckBox2(), null);
410 jContentPane.add(getJCheckBox3(), null);
411 jContentPane.add(getJCheckBox4(), null);
412 jContentPane.add(getJScrollPane1(), null);
413 jContentPane.add(getJScrollPane2(), null);
414 jContentPane.add(jLabel, null);
415 jContentPane.add(jLabel1, null);
416 }
417 return jContentPane;
418 }
419
420 /**
421 This method initializes comboboxes
422 jContentPane.add(jLabelTokenSpace, null);
423
424 **/
425 private void initFrame() {
426
427 jComboBoxDataType.addItem("UINT8");
428 jComboBoxDataType.addItem("UINT16");
429 jComboBoxDataType.addItem("UINT32");
430 jComboBoxDataType.addItem("UINT64");
431 jComboBoxDataType.addItem("VOID*");
432 jComboBoxDataType.addItem("BOOLEAN");
433 jComboBoxDataType.setSelectedIndex(0);
434 }
435
436 public void actionPerformed(ActionEvent arg0) {
437
438 if (arg0.getSource() == jButtonOk) {
439 this.save();
440 this.dispose();
441 }
442 if (arg0.getSource() == jButtonCancel) {
443 this.dispose();
444 }
445
446 if (arg0.getSource() == jButtonAdd) {
447 //ToDo: check before add
448 boolean[] b = {jCheckBox.isSelected(), jCheckBox1.isSelected(), jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected()};
449 if (!checkValidUsage(b)) {
450 return;
451 }
452 String archList = vectorToString(iCheckBoxList.getAllCheckedItemsString());
453 if (archList.length() == 0) {
454 archList = null;
455 }
456 String modTypeList = vectorToString(iCheckBoxList1.getAllCheckedItemsString());
457 if (modTypeList.length() == 0) {
458 modTypeList = null;
459 }
460 Object[] row = {jTextFieldC_Name.getText(), jTextFieldToken.getText(),
461 jTextFieldTsGuid.getText(), jComboBoxDataType.getSelectedItem(),
462 jTextFieldDefaultValue.getText(), jTextField.getText(),
463 jCheckBox.isSelected(), jCheckBox1.isSelected(),
464 jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected(),
465 archList, modTypeList};
466 if (!dataValidation(row)) {
467 return;
468 }
469 model.addRow(row);
470
471 String usage = getValidUsage(jCheckBox.isSelected(), jCheckBox1.isSelected(), jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected());
472 if (usage.length() == 0) {
473 usage = null;
474 }
475 sfc.genSpdPcdDefinitions(row[0]+"", row[1]+"", row[3]+"", usage, row[2]+"", row[4]+"", row[5]+"", archList, modTypeList);
476 }
477 //
478 // remove selected line
479 //
480 if (arg0.getSource() == jButtonRemove) {
481 if (jTable.isEditing()){
482 jTable.getCellEditor().stopCellEditing();
483 }
484 int rowSelected = selectedRow;
485 if (rowSelected >= 0) {
486 model.removeRow(rowSelected);
487 sfc.removeSpdPcdDefinition(rowSelected);
488 }
489 }
490
491 if (arg0.getSource() == jButtonClearAll) {
492 if (model.getRowCount() == 0) {
493 return;
494 }
495 model.setRowCount(0);
496 sfc.removeSpdPcdDefinition();
497 }
498
499 }
500
501 protected void save() {
502
503 }
504
505 /**
506 * This method initializes jTextFieldTsGuid
507 *
508 * @return javax.swing.JTextField
509 */
510 private JTextField getJTextFieldTsGuid() {
511 if (jTextFieldTsGuid == null) {
512 jTextFieldTsGuid = new JTextField();
513 jTextFieldTsGuid.setPreferredSize(new java.awt.Dimension(315,20));
514 jTextFieldTsGuid.setSize(new java.awt.Dimension(317,20));
515 jTextFieldTsGuid.setLocation(new java.awt.Point(156,58));
516 }
517 return jTextFieldTsGuid;
518 }
519
520 /**
521 * This method initializes jTextField
522 *
523 * @return javax.swing.JTextField
524 */
525 private JTextField getJTextField() {
526 if (jTextField == null) {
527 jTextField = new JTextField();
528 jTextField.setBounds(new java.awt.Rectangle(156,108,317,20));
529 jTextField.setPreferredSize(new java.awt.Dimension(315,20));
530 }
531 return jTextField;
532 }
533
534 /**
535 * This method initializes jTextFieldDefaultValue
536 *
537 * @return javax.swing.JTextField
538 */
539 private JTextField getJTextFieldDefaultValue() {
540 if (jTextFieldDefaultValue == null) {
541 jTextFieldDefaultValue = new JTextField();
542 jTextFieldDefaultValue.setBounds(new java.awt.Rectangle(368,84,105,20));
543 jTextFieldDefaultValue.setPreferredSize(new java.awt.Dimension(104,20));
544 }
545 return jTextFieldDefaultValue;
546 }
547
548 /**
549 * This method initializes jButtonAdd
550 *
551 * @return javax.swing.JButton
552 */
553 private JButton getJButtonAdd() {
554 if (jButtonAdd == null) {
555 jButtonAdd = new JButton();
556 jButtonAdd.setBounds(new java.awt.Rectangle(195,277,71,20));
557 jButtonAdd.setPreferredSize(new java.awt.Dimension(70,20));
558 jButtonAdd.setText("Add");
559 jButtonAdd.addActionListener(this);
560 }
561 return jButtonAdd;
562
563 }
564
565 /**
566 * This method initializes jButtonRemove
567 *
568 * @return javax.swing.JButton
569 */
570 private JButton getJButtonRemove() {
571 if (jButtonRemove == null) {
572 jButtonRemove = new JButton();
573 jButtonRemove.setBounds(new java.awt.Rectangle(278,277,81,20));
574 jButtonRemove.setPreferredSize(new java.awt.Dimension(70,20));
575 jButtonRemove.setText("Delete");
576 jButtonRemove.addActionListener(this);
577 }
578 return jButtonRemove;
579 }
580
581 /**
582 * This method initializes jButtonClearAll
583 *
584 * @return javax.swing.JButton
585 */
586 private JButton getJButtonClearAll() {
587 if (jButtonClearAll == null) {
588 jButtonClearAll = new JButton();
589 jButtonClearAll.setBounds(new java.awt.Rectangle(382,277,90,20));
590 jButtonClearAll.setPreferredSize(new java.awt.Dimension(81,20));
591 jButtonClearAll.setText("Clear All");
592 jButtonClearAll.addActionListener(this);
593 }
594 return jButtonClearAll;
595 }
596
597 public void componentResized(ComponentEvent arg0) {
598 int intPreferredWidth = 500;
599
600 resizeComponentWidth(this.jTextFieldC_Name, this.getWidth(), intPreferredWidth);
601 resizeComponentWidth(this.jTextFieldToken, this.getWidth(), intPreferredWidth);
602 resizeComponentWidth(this.jTextFieldTsGuid, this.getWidth(), intPreferredWidth);
603 resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);
604 resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);
605 resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth);
606
607 resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);
608 // relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
609 // relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
610 // relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
611 }
612
613 /**
614 * This method initializes jScrollPane
615 *
616 * @return javax.swing.JScrollPane
617 */
618 private JScrollPane getJScrollPane() {
619 if (jScrollPane == null) {
620 jScrollPane = new JScrollPane();
621 jScrollPane.setBounds(new java.awt.Rectangle(5,301,1473,137));
622 jScrollPane.setViewportView(getJTable());
623 }
624 return jScrollPane;
625 }
626
627 /**
628 * This method initializes jTable
629 *
630 * @return javax.swing.JTable
631 */
632 private JTable getJTable() {
633 if (jTable == null) {
634 model = new CheckboxTableModel();
635 jTable = new JTable(model);
636 jTable.setRowHeight(20);
637 jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
638 jTable.setSize(new Dimension(1000, 300));
639
640 model.addColumn("C_Name");
641 model.addColumn("Token");
642 model.addColumn("TokenSpace");
643 model.addColumn("DatumType");
644 model.addColumn("DefaultValue");
645 model.addColumn("HelpText");
646
647 model.addColumn("FeatureFlag");
648 model.addColumn("FixedAtBuild");
649 model.addColumn("PatchableInModule");
650 model.addColumn("Dynamic");
651 model.addColumn("DynamicEx");
652 model.addColumn("SupportedArch");
653 model.addColumn("SupportedModule");
654
655 //ToDo: add a valid usage editor
656
657 JComboBox jComboBoxDataType = new JComboBox();
658 jComboBoxDataType.addItem("UINT8");
659 jComboBoxDataType.addItem("UINT16");
660 jComboBoxDataType.addItem("UINT32");
661 jComboBoxDataType.addItem("UINT64");
662 jComboBoxDataType.addItem("VOID*");
663 jComboBoxDataType.addItem("BOOLEAN");
664 TableColumn dataTypeColumn = jTable.getColumnModel().getColumn(3);
665 dataTypeColumn.setCellEditor(new DefaultCellEditor(jComboBoxDataType));
666
667 Vector<String> vArch = new Vector<String>();
668 vArch.add("IA32");
669 vArch.add("X64");
670 vArch.add("IPF");
671 vArch.add("EBC");
672 vArch.add("ARM");
673 vArch.add("PPC");
674 jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch));
675
676 Vector<String> vModule = new Vector<String>();
677 vModule.add("BASE");
678 vModule.add("SEC");
679 vModule.add("PEI_CORE");
680 vModule.add("PEIM");
681 vModule.add("DXE_CORE");
682 vModule.add("DXE_DRIVER");
683 vModule.add("DXE_RUNTIME_DRIVER");
684 vModule.add("DXE_SAL_DRIVER");
685 vModule.add("DXE_SMM_DRIVER");
686 vModule.add("UEFI_DRIVER");
687 vModule.add("UEFI_APPLICATION");
688 vModule.add("USER_DEFINED");
689 jTable.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule));
690
691 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
692 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
693 public void valueChanged(ListSelectionEvent e) {
694 if (e.getValueIsAdjusting()){
695 return;
696 }
697 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
698 if (lsm.isSelectionEmpty()) {
699 return;
700 }
701 else{
702 selectedRow = lsm.getMinSelectionIndex();
703 }
704 }
705 });
706
707 jTable.getModel().addTableModelListener(this);
708 }
709 return jTable;
710 }
711
712 public void tableChanged(TableModelEvent arg0) {
713 // TODO Auto-generated method stub
714 int row = arg0.getFirstRow();
715 TableModel m = (TableModel)arg0.getSource();
716 if (arg0.getType() == TableModelEvent.UPDATE){
717
718 String cName = m.getValueAt(row, 0) + "";
719 String token = m.getValueAt(row, 1) + "";
720 String ts = m.getValueAt(row, 2) + "";
721 String dataType = m.getValueAt(row, 3) + "";
722 String defaultVal = m.getValueAt(row, 4) + "";
723 String help = m.getValueAt(row, 5) + "";
724 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)+""));
725 String archList = vectorToString(iCheckBoxList.getAllCheckedItemsString());
726 String modTypeList = vectorToString(iCheckBoxList1.getAllCheckedItemsString());
727 if (usage.length() == 0) {
728 JOptionPane.showMessageDialog(frame, "You must choose at least one usage for PCD entry.");
729 return;
730 }
731 Object[] o = {cName, token, ts, dataType, defaultVal, help};
732 if (!dataValidation(o)){
733 return;
734 }
735 sfc.updateSpdPcdDefinition(row, cName, token, dataType, usage, ts, defaultVal, help, archList, modTypeList);
736 }
737 }
738
739 /**
740 * This method initializes jCheckBox
741 *
742 * @return javax.swing.JCheckBox
743 */
744 private JCheckBox getJCheckBox() {
745 if (jCheckBox == null) {
746 jCheckBox = new JCheckBox();
747 jCheckBox.setBounds(new java.awt.Rectangle(156,161,100,21));
748 jCheckBox.setText("Feature Flag");
749 jCheckBox.setPreferredSize(new java.awt.Dimension(21,20));
750 }
751 return jCheckBox;
752 }
753
754 /**
755 * This method initializes jCheckBox1
756 *
757 * @return javax.swing.JCheckBox
758 */
759 private JCheckBox getJCheckBox1() {
760 if (jCheckBox1 == null) {
761 jCheckBox1 = new JCheckBox();
762 jCheckBox1.setBounds(new java.awt.Rectangle(302,133,108,20));
763 jCheckBox1.setText("Fixed at Build");
764 jCheckBox1.setPreferredSize(new java.awt.Dimension(21,20));
765 }
766 return jCheckBox1;
767 }
768
769 /**
770 * This method initializes jCheckBox2
771 *
772 * @return javax.swing.JCheckBox
773 */
774 private JCheckBox getJCheckBox2() {
775 if (jCheckBox2 == null) {
776 jCheckBox2 = new JCheckBox();
777 jCheckBox2.setBounds(new java.awt.Rectangle(156,133,154,20));
778 jCheckBox2.setText("Patchable in Module");
779 jCheckBox2.setPreferredSize(new java.awt.Dimension(21,20));
780 }
781 return jCheckBox2;
782 }
783
784 /**
785 * This method initializes jCheckBox3
786 *
787 * @return javax.swing.JCheckBox
788 */
789 private JCheckBox getJCheckBox3() {
790 if (jCheckBox3 == null) {
791 jCheckBox3 = new JCheckBox();
792 jCheckBox3.setBounds(new java.awt.Rectangle(278,161,80,20));
793 jCheckBox3.setText("Dynamic");
794 jCheckBox3.setPreferredSize(new java.awt.Dimension(21,20));
795 }
796 return jCheckBox3;
797 }
798
799 /**
800 * This method initializes jCheckBox4
801 *
802 * @return javax.swing.JCheckBox
803 */
804 private JCheckBox getJCheckBox4() {
805 if (jCheckBox4 == null) {
806 jCheckBox4 = new JCheckBox();
807 jCheckBox4.setBounds(new java.awt.Rectangle(371,161,99,20));
808 jCheckBox4.setText("DynamicEx");
809 jCheckBox4.setPreferredSize(new java.awt.Dimension(21,20));
810 }
811 return jCheckBox4;
812 }
813
814 private String getValidUsage(boolean ff, boolean fab, boolean pim, boolean d, boolean de) {
815 String usage = "";
816 if (ff){
817 usage += "FEATURE_FLAG ";
818 }
819 if (fab){
820 usage += "FIXED_AT_BUILD ";
821 }
822 if (pim){
823 usage += "PATCHABLE_IN_MODULE ";
824 }
825 if (d){
826 usage += "DYNAMIC ";
827 }
828 if (de){
829 usage += "DYNAMIC_EX ";
830 }
831
832 return usage.trim();
833 }
834
835 private boolean checkValidUsage(boolean[] b) {
836 if (!(b[0] || b[1] || b[2] || b[3] || b[4])){
837 JOptionPane.showMessageDialog(frame, "You must specify at least one usage.");
838 return false;
839 }
840 return true;
841 }
842 private boolean dataValidation(Object[] row) {
843
844 if (!DataValidation.isC_NameType(row[0].toString())) {
845 JOptionPane.showMessageDialog(frame, "C_Name is NOT C_NameType.");
846 return false;
847 }
848 if (!(DataValidation.isHexDoubleWordDataType(row[1].toString()) ||
849 DataValidation.isInt(row[1].toString(), 0, 0xffffffff))) {
850 JOptionPane.showMessageDialog(frame, "Token is NOT correct.");
851 return false;
852 }
853 if (!DataValidation.isC_NameType(row[2].toString())) {
854 JOptionPane.showMessageDialog(frame, "Token Space is NOT C_NameType");
855 return false;
856 }
857 if (row[5].toString().length() == 0) {
858 JOptionPane.showMessageDialog(frame, "HelpText could NOT be empty.");
859 return false;
860 }
861 return true;
862 }
863
864 /**
865 * This method initializes jScrollPane1
866 *
867 * @return javax.swing.JScrollPane
868 */
869 private JScrollPane getJScrollPane1() {
870 if (jScrollPane1 == null) {
871 jScrollPane1 = new JScrollPane();
872 jScrollPane1.setBounds(new java.awt.Rectangle(242,213,188,54));
873 jScrollPane1.setViewportView(getICheckBoxList());
874 jScrollPane1.setPreferredSize(new Dimension(188, 74));
875 }
876 return jScrollPane1;
877 }
878
879 /**
880 * This method initializes iCheckBoxList
881 *
882 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
883 */
884 private ICheckBoxList getICheckBoxList() {
885 if (iCheckBoxList == null) {
886 iCheckBoxList = new ICheckBoxList();
887 iCheckBoxList.setBounds(new Rectangle(197, 142, 188, 74));
888 Vector<String> v = new Vector<String>();
889 v.add("IA32");
890 v.add("X64");
891 v.add("IPF");
892 v.add("EBC");
893 v.add("ARM");
894 v.add("PPC");
895 iCheckBoxList.setAllItems(v);
896 }
897 return iCheckBoxList;
898 }
899
900 /**
901 * This method initializes jScrollPane2
902 *
903 * @return javax.swing.JScrollPane
904 */
905 private JScrollPane getJScrollPane2() {
906 if (jScrollPane2 == null) {
907 jScrollPane2 = new JScrollPane();
908 jScrollPane2.setBounds(new java.awt.Rectangle(15,213,199,55));
909 jScrollPane2.setViewportView(getICheckBoxList1());
910 jScrollPane2.setPreferredSize(new Dimension(170, 74));
911 }
912 return jScrollPane2;
913 }
914
915 /**
916 * This method initializes iCheckBoxList1
917 *
918 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
919 */
920 private ICheckBoxList getICheckBoxList1() {
921 if (iCheckBoxList1 == null) {
922 iCheckBoxList1 = new ICheckBoxList();
923 iCheckBoxList1.setBounds(new Rectangle(14, 142, 170, 74));
924 Vector<String> v = new Vector<String>();
925 v.add("BASE");
926 v.add("SEC");
927 v.add("PEI_CORE");
928 v.add("PEIM");
929 v.add("DXE_CORE");
930 v.add("DXE_DRIVER");
931 v.add("DXE_RUNTIME_DRIVER");
932 v.add("DXE_SAL_DRIVER");
933 v.add("DXE_SMM_DRIVER");
934 v.add("UEFI_DRIVER");
935 v.add("UEFI_APPLICATION");
936 v.add("USER_DEFINED");
937 iCheckBoxList1.setAllItems(v);
938 }
939 return iCheckBoxList1;
940 }
941
942 protected String vectorToString(Vector<String> v) {
943 if (v == null) {
944 return null;
945 }
946 String s = " ";
947 for (int i = 0; i < v.size(); ++i) {
948 s += v.get(i);
949 s += " ";
950 }
951 return s.trim();
952 }
953 } // @jve:decl-index=0:visual-constraint="22,11"
954
955 class CheckboxTableModel extends DefaultTableModel {
956 /**
957 *
958 */
959 private static final long serialVersionUID = 1L;
960
961 public Class<?> getColumnClass (int c) {
962 if (getValueAt(0, c) != null){
963 return getValueAt(0, c).getClass();
964 }
965 return String.class;
966 }
967 }