2 Java class SpdPackageHeaders is GUI for create library definition elements of spd file.
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
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.
13 package org
.tianocore
.frameworkwizard
.packaging
.ui
;
15 import java
.awt
.BorderLayout
;
16 import java
.awt
.Dimension
;
17 import java
.awt
.Toolkit
;
18 import java
.awt
.event
.ActionEvent
;
19 import java
.awt
.event
.ActionListener
;
20 import java
.awt
.event
.ComponentEvent
;
22 import java
.util
.Vector
;
24 import javax
.swing
.DefaultCellEditor
;
25 import javax
.swing
.DefaultListModel
;
26 import javax
.swing
.JFileChooser
;
27 import javax
.swing
.JOptionPane
;
28 import javax
.swing
.JPanel
;
29 import javax
.swing
.JRadioButton
;
30 import javax
.swing
.JTable
;
31 import javax
.swing
.JTextField
;
32 import javax
.swing
.JComboBox
;
33 import javax
.swing
.JLabel
;
34 import javax
.swing
.JList
;
35 import javax
.swing
.JScrollPane
;
36 import javax
.swing
.JButton
;
37 import javax
.swing
.JFrame
;
38 import javax
.swing
.ListSelectionModel
;
39 import javax
.swing
.event
.InternalFrameAdapter
;
40 import javax
.swing
.event
.InternalFrameEvent
;
41 import javax
.swing
.event
.ListSelectionEvent
;
42 import javax
.swing
.event
.ListSelectionListener
;
43 import javax
.swing
.event
.TableModelEvent
;
44 import javax
.swing
.event
.TableModelListener
;
45 import javax
.swing
.table
.DefaultTableModel
;
46 import javax
.swing
.table
.TableColumn
;
47 import javax
.swing
.table
.TableModel
;
49 import org
.tianocore
.PackageSurfaceAreaDocument
;
50 import org
.tianocore
.frameworkwizard
.common
.DataType
;
51 import org
.tianocore
.frameworkwizard
.common
.Tools
;
52 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
53 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
56 GUI for create library definition elements of spd file.
58 @since PackageEditor 1.0
60 public class SpdPackageHeaders
extends IInternalFrame
implements TableModelListener
{
63 private SpdFileContents sfc
= null;
65 private DefaultTableModel model
= null;
67 private JPanel jContentPane
= null;
69 private JRadioButton jRadioButtonAdd
= null;
71 private JRadioButton jRadioButtonSelect
= null;
73 private JTextField jTextFieldAdd
= null;
75 private JComboBox jComboBoxSelect
= null;
77 private JButton jButtonAdd
= null;
79 private JButton jButtonRemove
= null;
81 private JButton jButtonClearAll
= null;
83 private JButton jButtonCancel
= null;
85 private JButton jButtonOk
= null;
87 private JLabel jLabel
= null;
89 private JTextField jTextField
= null;
91 private JButton jButtonBrowse
= null;
93 private StarLabel jStarLabel1
= null;
95 private StarLabel jStarLabel2
= null;
97 private JScrollPane jScrollPane
= null;
99 private JScrollPane jScrollPane1
= null;
101 private int selectedRow
= -1;
103 private JTable jTable
= null;
108 This method initializes this
111 private void initialize() {
113 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
118 This method initializes jRadioButtonAdd
120 @return javax.swing.JRadioButton
122 private JRadioButton
getJRadioButtonAdd() {
123 if (jRadioButtonAdd
== null) {
124 jRadioButtonAdd
= new JRadioButton();
125 jRadioButtonAdd
.setBounds(new java
.awt
.Rectangle(9,35,197,20));
126 jRadioButtonAdd
.setText("Add a new ModuleType");
127 jRadioButtonAdd
.setEnabled(false);
128 jRadioButtonAdd
.addActionListener(this);
129 jRadioButtonAdd
.setSelected(false);
131 return jRadioButtonAdd
;
135 This method initializes jRadioButtonSelect
137 @return javax.swing.JRadioButton
139 private JRadioButton
getJRadioButtonSelect() {
140 if (jRadioButtonSelect
== null) {
141 jRadioButtonSelect
= new JRadioButton();
142 jRadioButtonSelect
.setBounds(new java
.awt
.Rectangle(9,10,198,20));
143 jRadioButtonSelect
.setText("Select Existing ModuleType");
144 jRadioButtonSelect
.addActionListener(this);
145 jRadioButtonSelect
.setSelected(true);
147 return jRadioButtonSelect
;
151 This method initializes jTextFieldAdd
153 @return javax.swing.JTextField
155 private JTextField
getJTextFieldAdd() {
156 if (jTextFieldAdd
== null) {
157 jTextFieldAdd
= new JTextField();
158 jTextFieldAdd
.setBounds(new java
.awt
.Rectangle(220, 35, 260, 20));
159 jTextFieldAdd
.setPreferredSize(new java
.awt
.Dimension(260,20));
160 jTextFieldAdd
.setEnabled(false);
162 return jTextFieldAdd
;
166 This method initializes jComboBoxSelect
168 @return javax.swing.JComboBox
170 private JComboBox
getJComboBoxSelect() {
171 if (jComboBoxSelect
== null) {
172 jComboBoxSelect
= new JComboBox();
173 jComboBoxSelect
.setBounds(new java
.awt
.Rectangle(220, 10, 260, 20));
174 jComboBoxSelect
.setPreferredSize(new java
.awt
.Dimension(260,20));
176 jComboBoxSelect
.setEnabled(true);
178 return jComboBoxSelect
;
182 This method initializes jTable
184 @return javax.swing.JTable
186 private JTable getJTable() {
187 if (jTable == null) {
188 model = new PackageHeaderTableModel();
189 model.addColumn("ModuleType");
190 model.addColumn("IncludeHeader");
197 This method initializes jButtonAdd
199 @return javax.swing.JButton
201 private JButton
getJButtonAdd() {
202 if (jButtonAdd
== null) {
203 jButtonAdd
= new JButton();
204 jButtonAdd
.setBounds(new java
.awt
.Rectangle(189,119,73,20));
205 jButtonAdd
.setText("Add");
206 jButtonAdd
.addActionListener(this);
212 This method initializes jButtonRemove
214 @return javax.swing.JButton
216 private JButton
getJButtonRemove() {
217 if (jButtonRemove
== null) {
218 jButtonRemove
= new JButton();
219 jButtonRemove
.setBounds(new java
.awt
.Rectangle(271,119,87,20));
220 jButtonRemove
.setText("Remove");
221 jButtonRemove
.addActionListener(this);
223 return jButtonRemove
;
227 This method initializes jButtonRemoveAll
229 @return javax.swing.JButton
231 private JButton
getJButtonClearAll() {
232 if (jButtonClearAll
== null) {
233 jButtonClearAll
= new JButton();
234 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(374,119,90,20));
235 jButtonClearAll
.setText("Clear All");
236 jButtonClearAll
.addActionListener(this);
238 return jButtonClearAll
;
242 This method initializes jButtonCancel
244 @return javax.swing.JButton
246 private JButton
getJButtonCancel() {
247 if (jButtonCancel
== null) {
248 jButtonCancel
= new JButton();
249 jButtonCancel
.setPreferredSize(new java
.awt
.Dimension(90, 20));
250 jButtonCancel
.setLocation(new java
.awt
.Point(390, 305));
251 jButtonCancel
.setText("Cancel");
252 jButtonCancel
.setSize(new java
.awt
.Dimension(90, 20));
253 jButtonCancel
.setVisible(false);
254 jButtonCancel
.addActionListener(this);
256 return jButtonCancel
;
260 This method initializes jButton
262 @return javax.swing.JButton
264 private JButton
getJButtonOk() {
265 if (jButtonOk
== null) {
266 jButtonOk
= new JButton();
267 jButtonOk
.setSize(new java
.awt
.Dimension(90, 20));
268 jButtonOk
.setText("OK");
269 jButtonOk
.setLocation(new java
.awt
.Point(290, 305));
270 jButtonOk
.setVisible(false);
271 jButtonOk
.addActionListener(this);
277 This is the default constructor
279 public SpdPackageHeaders() {
286 public SpdPackageHeaders(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
){
288 sfc
= new SpdFileContents(inPsa
);
292 This method initializes this
296 private void init() {
298 this.setContentPane(getJScrollPane());
299 this.setTitle("Library Class Declarations");
300 this.setBounds(new java
.awt
.Rectangle(0, 0, 500, 370));
301 this.setVisible(true);
302 this.addInternalFrameListener(new InternalFrameAdapter(){
303 public void internalFrameDeactivated(InternalFrameEvent e
){
304 if (jTable
.isEditing()) {
305 jTable
.getCellEditor().stopCellEditing();
312 private void init(SpdFileContents sfc
){
313 if (sfc
.getSpdPackageHeaderCount() == 0) {
316 String
[][] saa
= new String
[sfc
.getSpdPackageHeaderCount()][2];
317 sfc
.getSpdPackageHeaders(saa
);
319 while (i
< saa
.length
) {
320 model
.addRow(saa
[i
]);
325 private JScrollPane
getJScrollPane(){
326 if (jScrollPane
== null){
327 jScrollPane
= new JScrollPane();
328 jScrollPane
.setViewportView(getJContentPane());
333 This method initializes jContentPane
335 @return javax.swing.JPanel
337 private JPanel
getJContentPane() {
338 if (jContentPane
== null) {
339 jStarLabel1
= new StarLabel();
340 jStarLabel1
.setLocation(new java
.awt
.Point(0, 10));
341 jStarLabel2
= new StarLabel();
342 jStarLabel2
.setLocation(new java
.awt
.Point(0,62));
343 jLabel
= new JLabel();
344 jLabel
.setBounds(new java
.awt
.Rectangle(14,62,199,22));
345 jLabel
.setText("Include Header for Module Type");
347 jContentPane
= new JPanel();
348 jContentPane
.setPreferredSize(new Dimension(480, 325));
349 jContentPane
.setLayout(null);
350 jContentPane
.add(jLabel
, null);
351 jContentPane
.add(jStarLabel1
, null);
352 jContentPane
.add(jStarLabel2
, null);
353 jContentPane
.add(getJRadioButtonAdd(), null);
354 jContentPane
.add(getJRadioButtonSelect(), null);
355 jContentPane
.add(getJTextFieldAdd(), null);
356 jContentPane
.add(getJComboBoxSelect(), null);
357 jContentPane
.add(getJButtonAdd(), null);
358 jContentPane
.add(getJButtonRemove(), null);
359 jContentPane
.add(getJButtonClearAll(), null);
360 jContentPane
.add(getJButtonCancel(), null);
361 jContentPane
.add(getJButtonOk(), null);
363 jContentPane
.add(getJTextField(), null);
364 jContentPane
.add(getJButtonBrowse(), null);
365 jContentPane
.add(getJScrollPane1(), null);
371 fill ComboBoxes with pre-defined contents
373 private void initFrame() {
374 jComboBoxSelect
.addItem("BASE");
375 jComboBoxSelect
.addItem("SEC");
376 jComboBoxSelect
.addItem("PEI_CORE");
377 jComboBoxSelect
.addItem("PEIM");
378 jComboBoxSelect
.addItem("DXE_CORE");
379 jComboBoxSelect
.addItem("DXE_DRIVER");
380 jComboBoxSelect
.addItem("DXE_RUNTIME_DRIVER");
381 jComboBoxSelect
.addItem("DXE_SAL_DRIVER");
382 jComboBoxSelect
.addItem("DXE_SMM_DRIVER");
383 jComboBoxSelect
.addItem("TOOLS");
384 jComboBoxSelect
.addItem("UEFI_DRIVER");
385 jComboBoxSelect
.addItem("UEFI_APPLICATION");
386 jComboBoxSelect
.addItem("USER_DEFINED");
387 jComboBoxSelect
.setSelectedIndex(0);
391 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
393 public void actionPerformed(ActionEvent arg0
) {
394 if (arg0
.getSource() == jButtonOk
) {
399 if (arg0
.getSource() == jButtonCancel
) {
403 if (arg0
.getSource() == jButtonAdd
) {
404 String strLibClass
= "";
405 if (jRadioButtonAdd
.isSelected()) {
406 strLibClass
= jTextFieldAdd
.getText();
408 if (jRadioButtonSelect
.isSelected()) {
409 strLibClass
= jComboBoxSelect
.getSelectedItem().toString();
411 //ToDo: check before add
412 String
[] row
= {"", ""};
413 row
[0] = strLibClass
;
414 row
[1] = jTextField
.getText().replace('\\', '/');
416 sfc
.genSpdModuleHeaders(row
[0], row
[1], null, null, null, null, null, null);
419 // remove selected line
421 if (arg0
.getSource() == jButtonRemove
) {
422 if (jTable
.isEditing()){
423 jTable
.getCellEditor().stopCellEditing();
425 int rowSelected
= selectedRow
;
426 if (rowSelected
>= 0) {
427 model
.removeRow(rowSelected
);
428 sfc
.removeSpdPkgHeader(rowSelected
);
432 if (arg0
.getSource() == jButtonClearAll
) {
433 if (model
.getRowCount() == 0) {
436 model
.setRowCount(0);
437 sfc
.removeSpdPkgHeader();
440 if (arg0
.getSource() == jRadioButtonAdd
) {
441 if (jRadioButtonAdd
.isSelected()) {
442 jRadioButtonSelect
.setSelected(false);
443 jTextFieldAdd
.setEnabled(true);
444 jComboBoxSelect
.setEnabled(false);
446 if (!jRadioButtonSelect
.isSelected() && !jRadioButtonAdd
.isSelected()) {
447 jRadioButtonAdd
.setSelected(true);
448 jTextFieldAdd
.setEnabled(true);
449 jComboBoxSelect
.setEnabled(false);
453 if (arg0
.getSource() == jRadioButtonSelect
) {
454 if (jRadioButtonSelect
.isSelected()) {
455 jRadioButtonAdd
.setSelected(false);
456 jTextFieldAdd
.setEnabled(false);
457 jComboBoxSelect
.setEnabled(true);
459 if (!jRadioButtonSelect
.isSelected() && !jRadioButtonAdd
.isSelected()) {
460 jRadioButtonSelect
.setSelected(true);
461 jTextFieldAdd
.setEnabled(false);
462 jComboBoxSelect
.setEnabled(true);
468 Add contents in list to sfc
470 protected void save() {
475 This method initializes jTextField
477 @return javax.swing.JTextField
479 private JTextField
getJTextField() {
480 if (jTextField
== null) {
481 jTextField
= new JTextField();
482 jTextField
.setBounds(new java
.awt
.Rectangle(13,90,346,21));
483 jTextField
.setPreferredSize(new java
.awt
.Dimension(345,20));
489 This method initializes jButtonBrowse
491 @return javax.swing.JButton
493 private JButton
getJButtonBrowse() {
494 if (jButtonBrowse
== null) {
495 jButtonBrowse
= new JButton();
496 jButtonBrowse
.setBounds(new java
.awt
.Rectangle(374,89,92,21));
497 jButtonBrowse
.setText("Browse");
498 jButtonBrowse
.setPreferredSize(new java
.awt
.Dimension(92,20));
499 jButtonBrowse
.addActionListener(new javax
.swing
.AbstractAction() {
500 public void actionPerformed(ActionEvent e
) {
502 // Select files from current workspace
504 String dirPrefix
= Tools
.dirForNewSpd
.substring(0, Tools
.dirForNewSpd
.lastIndexOf(File
.separator
));
505 JFileChooser chooser
= new JFileChooser(dirPrefix
);
507 String headerDest
= null;
509 chooser
.setMultiSelectionEnabled(false);
510 chooser
.setFileSelectionMode(JFileChooser
.FILES_AND_DIRECTORIES
);
511 int retval
= chooser
.showOpenDialog(frame
);
512 if (retval
== JFileChooser
.APPROVE_OPTION
) {
514 theFile
= chooser
.getSelectedFile();
515 String file
= theFile
.getPath();
516 if (!file
.startsWith(dirPrefix
)) {
517 JOptionPane
.showMessageDialog(frame
, "You can only select files in current package!");
527 headerDest
= theFile
.getPath();
528 int fileIndex
= headerDest
.indexOf(System
.getProperty("file.separator"), dirPrefix
.length());
530 jTextField
.setText(headerDest
.substring(fileIndex
+ 1).replace('\\', '/'));
535 return jButtonBrowse
;
539 * This method initializes jScrollPane
541 * @return javax.swing.JScrollPane
543 private JScrollPane
getJScrollPane1() {
544 if (jScrollPane1
== null) {
545 jScrollPane1
= new JScrollPane();
546 jScrollPane1
.setBounds(new java
.awt
.Rectangle(13,149,453,165));
547 jScrollPane1
.setViewportView(getJTable());
553 * This method initializes jTable
555 * @return javax.swing.JTable
557 private JTable
getJTable() {
558 if (jTable
== null) {
559 model
= new DefaultTableModel();
560 jTable
= new JTable(model
);
561 model
.addColumn("ModuleType");
562 model
.addColumn("IncludeHeader");
563 TableColumn typeColumn
= jTable
.getColumnModel().getColumn(0);
564 JComboBox jComboBoxSelect
= new JComboBox();
565 jComboBoxSelect
.addItem("BASE");
566 jComboBoxSelect
.addItem("SEC");
567 jComboBoxSelect
.addItem("PEI_CORE");
568 jComboBoxSelect
.addItem("PEIM");
569 jComboBoxSelect
.addItem("DXE_CORE");
570 jComboBoxSelect
.addItem("DXE_DRIVER");
571 jComboBoxSelect
.addItem("DXE_RUNTIME_DRIVER");
572 jComboBoxSelect
.addItem("DXE_SAL_DRIVER");
573 jComboBoxSelect
.addItem("DXE_SMM_DRIVER");
574 jComboBoxSelect
.addItem("TOOLS");
575 jComboBoxSelect
.addItem("UEFI_DRIVER");
576 jComboBoxSelect
.addItem("UEFI_APPLICATION");
577 jComboBoxSelect
.addItem("USER_DEFINED");
578 typeColumn
.setCellEditor(new DefaultCellEditor(jComboBoxSelect
));
580 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
581 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
582 public void valueChanged(ListSelectionEvent e
) {
583 if (e
.getValueIsAdjusting()){
586 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
587 if (lsm
.isSelectionEmpty()) {
591 selectedRow
= lsm
.getMinSelectionIndex();
596 jTable
.getModel().addTableModelListener(this);
601 public void tableChanged(TableModelEvent arg0
) {
602 // TODO Auto-generated method stub
603 int row
= arg0
.getFirstRow();
604 TableModel m
= (TableModel
)arg0
.getSource();
605 if (arg0
.getType() == TableModelEvent
.UPDATE
){
606 String pkg
= m
.getValueAt(row
, 0) + "";
607 String hdr
= m
.getValueAt(row
, 1) + "";
608 sfc
.updateSpdPkgHdr(row
, pkg
, hdr
);
612 public void componentResized(ComponentEvent arg0
) {
613 int intPreferredWidth
= 500;
615 resizeComponentWidth(this.jComboBoxSelect
, this.getWidth(), intPreferredWidth
);
616 resizeComponentWidth(this.jTextFieldAdd
, this.getWidth(), intPreferredWidth
);
617 resizeComponentWidth(this.jTextField
, this.getWidth(), intPreferredWidth
);
618 resizeComponentWidth(this.jScrollPane
, this.getWidth(), intPreferredWidth
);
619 relocateComponentX(this.jButtonBrowse
, this.getWidth(), this.getPreferredSize().width
, 30);
622 public static void main(String
[] args
){
623 new SpdPackageHeaders().setVisible(true);