]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
1. Make SPD editor tables bigger.and table now focus the entry added.
[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 Definition");
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 String archList = vectorToString(iCheckBoxList.getAllCheckedItemsString());
735 String modTypeList = vectorToString(iCheckBoxList1.getAllCheckedItemsString());
736 if (usage.length() == 0) {
737 JOptionPane.showMessageDialog(frame, "You must choose at least one usage for PCD entry.");
738 return;
739 }
740 Object[] o = {cName, token, ts, dataType, defaultVal, help};
741 if (!dataValidation(o)){
742 return;
743 }
744 docConsole.setSaved(false);
745 sfc.updateSpdPcdDefinition(row, cName, token, dataType, usage, ts, defaultVal, help, archList, modTypeList);
746 }
747 }
748
749 /**
750 * This method initializes jCheckBox
751 *
752 * @return javax.swing.JCheckBox
753 */
754 private JCheckBox getJCheckBox() {
755 if (jCheckBox == null) {
756 jCheckBox = new JCheckBox();
757 jCheckBox.setBounds(new java.awt.Rectangle(156,161,100,21));
758 jCheckBox.setText("Feature Flag");
759 jCheckBox.setPreferredSize(new java.awt.Dimension(21,20));
760 }
761 return jCheckBox;
762 }
763
764 /**
765 * This method initializes jCheckBox1
766 *
767 * @return javax.swing.JCheckBox
768 */
769 private JCheckBox getJCheckBox1() {
770 if (jCheckBox1 == null) {
771 jCheckBox1 = new JCheckBox();
772 jCheckBox1.setBounds(new java.awt.Rectangle(312,133,108,20));
773 jCheckBox1.setText("Fixed at Build");
774 jCheckBox1.setPreferredSize(new java.awt.Dimension(21,20));
775 }
776 return jCheckBox1;
777 }
778
779 /**
780 * This method initializes jCheckBox2
781 *
782 * @return javax.swing.JCheckBox
783 */
784 private JCheckBox getJCheckBox2() {
785 if (jCheckBox2 == null) {
786 jCheckBox2 = new JCheckBox();
787 jCheckBox2.setBounds(new java.awt.Rectangle(156,133,154,20));
788 jCheckBox2.setText("Patchable in Module");
789 jCheckBox2.setPreferredSize(new java.awt.Dimension(21,20));
790 }
791 return jCheckBox2;
792 }
793
794 /**
795 * This method initializes jCheckBox3
796 *
797 * @return javax.swing.JCheckBox
798 */
799 private JCheckBox getJCheckBox3() {
800 if (jCheckBox3 == null) {
801 jCheckBox3 = new JCheckBox();
802 jCheckBox3.setBounds(new java.awt.Rectangle(278,161,80,20));
803 jCheckBox3.setText("Dynamic");
804 jCheckBox3.setPreferredSize(new java.awt.Dimension(21,20));
805 }
806 return jCheckBox3;
807 }
808
809 /**
810 * This method initializes jCheckBox4
811 *
812 * @return javax.swing.JCheckBox
813 */
814 private JCheckBox getJCheckBox4() {
815 if (jCheckBox4 == null) {
816 jCheckBox4 = new JCheckBox();
817 jCheckBox4.setBounds(new java.awt.Rectangle(371,161,99,20));
818 jCheckBox4.setText("DynamicEx");
819 jCheckBox4.setPreferredSize(new java.awt.Dimension(21,20));
820 }
821 return jCheckBox4;
822 }
823
824 private String getValidUsage(boolean ff, boolean fab, boolean pim, boolean d, boolean de) {
825 String usage = "";
826 if (ff){
827 usage += "FEATURE_FLAG ";
828 }
829 if (fab){
830 usage += "FIXED_AT_BUILD ";
831 }
832 if (pim){
833 usage += "PATCHABLE_IN_MODULE ";
834 }
835 if (d){
836 usage += "DYNAMIC ";
837 }
838 if (de){
839 usage += "DYNAMIC_EX ";
840 }
841
842 return usage.trim();
843 }
844
845 private boolean checkValidUsage(boolean[] b) {
846 if (!(b[0] || b[1] || b[2] || b[3] || b[4])){
847 JOptionPane.showMessageDialog(frame, "You must specify at least one usage.");
848 return false;
849 }
850 return true;
851 }
852 private boolean dataValidation(Object[] row) {
853
854 if (!DataValidation.isC_NameType(row[0].toString())) {
855 JOptionPane.showMessageDialog(frame, "C_Name is NOT C_NameType.");
856 return false;
857 }
858 if (!(DataValidation.isHexDoubleWordDataType(row[1].toString()) ||
859 DataValidation.isInt(row[1].toString(), 0, 0xffffffff))) {
860 JOptionPane.showMessageDialog(frame, "Token is NOT correct.");
861 return false;
862 }
863 if (!DataValidation.isC_NameType(row[2].toString())) {
864 JOptionPane.showMessageDialog(frame, "Token Space is NOT C_NameType");
865 return false;
866 }
867 if (row[5].toString().length() == 0) {
868 JOptionPane.showMessageDialog(frame, "HelpText could NOT be empty.");
869 return false;
870 }
871 return true;
872 }
873
874 /**
875 * This method initializes jScrollPane1
876 *
877 * @return javax.swing.JScrollPane
878 */
879 private JScrollPane getJScrollPane1() {
880 if (jScrollPane1 == null) {
881 jScrollPane1 = new JScrollPane();
882 jScrollPane1.setBounds(new java.awt.Rectangle(242,213,188,54));
883 jScrollPane1.setViewportView(getICheckBoxList());
884 jScrollPane1.setPreferredSize(new Dimension(188, 74));
885 }
886 return jScrollPane1;
887 }
888
889 /**
890 * This method initializes iCheckBoxList
891 *
892 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
893 */
894 private ICheckBoxList getICheckBoxList() {
895 if (iCheckBoxList == null) {
896 iCheckBoxList = new ICheckBoxList();
897 iCheckBoxList.setBounds(new Rectangle(197, 142, 188, 74));
898 Vector<String> v = new Vector<String>();
899 v.add("IA32");
900 v.add("X64");
901 v.add("IPF");
902 v.add("EBC");
903 v.add("ARM");
904 v.add("PPC");
905 iCheckBoxList.setAllItems(v);
906 }
907 return iCheckBoxList;
908 }
909
910 /**
911 * This method initializes jScrollPane2
912 *
913 * @return javax.swing.JScrollPane
914 */
915 private JScrollPane getJScrollPane2() {
916 if (jScrollPane2 == null) {
917 jScrollPane2 = new JScrollPane();
918 jScrollPane2.setBounds(new java.awt.Rectangle(15,213,199,55));
919 jScrollPane2.setViewportView(getICheckBoxList1());
920 jScrollPane2.setPreferredSize(new Dimension(170, 74));
921 }
922 return jScrollPane2;
923 }
924
925 /**
926 * This method initializes iCheckBoxList1
927 *
928 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
929 */
930 private ICheckBoxList getICheckBoxList1() {
931 if (iCheckBoxList1 == null) {
932 iCheckBoxList1 = new ICheckBoxList();
933 iCheckBoxList1.setBounds(new Rectangle(14, 142, 170, 74));
934 Vector<String> v = new Vector<String>();
935 v.add("BASE");
936 v.add("SEC");
937 v.add("PEI_CORE");
938 v.add("PEIM");
939 v.add("DXE_CORE");
940 v.add("DXE_DRIVER");
941 v.add("DXE_RUNTIME_DRIVER");
942 v.add("DXE_SAL_DRIVER");
943 v.add("DXE_SMM_DRIVER");
944 v.add("UEFI_DRIVER");
945 v.add("UEFI_APPLICATION");
946 v.add("USER_DEFINED");
947 iCheckBoxList1.setAllItems(v);
948 }
949 return iCheckBoxList1;
950 }
951
952 protected String vectorToString(Vector<String> v) {
953 if (v == null) {
954 return null;
955 }
956 String s = " ";
957 for (int i = 0; i < v.size(); ++i) {
958 s += v.get(i);
959 s += " ";
960 }
961 return s.trim();
962 }
963 } // @jve:decl-index=0:visual-constraint="22,11"
964
965 class CheckboxTableModel extends DefaultTableModel {
966 /**
967 *
968 */
969 private static final long serialVersionUID = 1L;
970
971 public Class<?> getColumnClass (int c) {
972 if (getValueAt(0, c) != null){
973 return getValueAt(0, c).getClass();
974 }
975 return String.class;
976 }
977 }