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