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