]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPackageHeaders.java
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@671 6f19259b...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPackageHeaders.java
1 /** @file
2 Java class SpdPackageHeaders is GUI for create library 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.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;
21 import java.io.File;
22 import java.util.Vector;
23
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;
48
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;
54
55 /**
56 GUI for create library definition elements of spd file.
57
58 @since PackageEditor 1.0
59 **/
60 public class SpdPackageHeaders extends IInternalFrame implements TableModelListener{
61 static JFrame frame;
62
63 private SpdFileContents sfc = null;
64
65 private DefaultTableModel model = null;
66
67 private JPanel jContentPane = null;
68
69 private JRadioButton jRadioButtonAdd = null;
70
71 private JRadioButton jRadioButtonSelect = null;
72
73 private JTextField jTextFieldAdd = null;
74
75 private JComboBox jComboBoxSelect = null;
76
77 private JButton jButtonAdd = null;
78
79 private JButton jButtonRemove = null;
80
81 private JButton jButtonClearAll = null;
82
83 private JButton jButtonCancel = null;
84
85 private JButton jButtonOk = null;
86
87 private JLabel jLabel = null;
88
89 private JTextField jTextField = null;
90
91 private JButton jButtonBrowse = null;
92
93 private StarLabel jStarLabel1 = null;
94
95 private StarLabel jStarLabel2 = null;
96
97 private JScrollPane jScrollPane = null;
98
99 private JScrollPane jScrollPane1 = null;
100
101 private int selectedRow = -1;
102
103 private JTable jTable = null;
104
105
106
107 /**
108 This method initializes this
109
110 **/
111 private void initialize() {
112
113 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
114
115 }
116
117 /**
118 This method initializes jRadioButtonAdd
119
120 @return javax.swing.JRadioButton
121 **/
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);
130 }
131 return jRadioButtonAdd;
132 }
133
134 /**
135 This method initializes jRadioButtonSelect
136
137 @return javax.swing.JRadioButton
138 **/
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);
146 }
147 return jRadioButtonSelect;
148 }
149
150 /**
151 This method initializes jTextFieldAdd
152
153 @return javax.swing.JTextField
154 **/
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);
161 }
162 return jTextFieldAdd;
163 }
164
165 /**
166 This method initializes jComboBoxSelect
167
168 @return javax.swing.JComboBox
169 **/
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));
175
176 jComboBoxSelect.setEnabled(true);
177 }
178 return jComboBoxSelect;
179 }
180
181 /**
182 This method initializes jTable
183
184 @return javax.swing.JTable
185 *
186 private JTable getJTable() {
187 if (jTable == null) {
188 model = new PackageHeaderTableModel();
189 model.addColumn("ModuleType");
190 model.addColumn("IncludeHeader");
191
192
193 }
194 return jTable;
195 }*/
196 /**
197 This method initializes jButtonAdd
198
199 @return javax.swing.JButton
200 **/
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);
207 }
208 return jButtonAdd;
209 }
210
211 /**
212 This method initializes jButtonRemove
213
214 @return javax.swing.JButton
215 **/
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);
222 }
223 return jButtonRemove;
224 }
225
226 /**
227 This method initializes jButtonRemoveAll
228
229 @return javax.swing.JButton
230 **/
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);
237 }
238 return jButtonClearAll;
239 }
240
241 /**
242 This method initializes jButtonCancel
243
244 @return javax.swing.JButton
245 **/
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);
255 }
256 return jButtonCancel;
257 }
258
259 /**
260 This method initializes jButton
261
262 @return javax.swing.JButton
263 **/
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);
272 }
273 return jButtonOk;
274 }
275
276 /**
277 This is the default constructor
278 **/
279 public SpdPackageHeaders() {
280 super();
281 initialize();
282 init();
283
284 }
285
286 public SpdPackageHeaders(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa){
287 this();
288 sfc = new SpdFileContents(inPsa);
289 init(sfc);
290 }
291 /**
292 This method initializes this
293
294 @return void
295 **/
296 private void init() {
297
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();
306 }
307 }
308 });
309 initFrame();
310 }
311
312 private void init(SpdFileContents sfc){
313 if (sfc.getSpdPackageHeaderCount() == 0) {
314 return ;
315 }
316 String[][] saa = new String[sfc.getSpdPackageHeaderCount()][2];
317 sfc.getSpdPackageHeaders(saa);
318 int i = 0;
319 while (i < saa.length) {
320 model.addRow(saa[i]);
321 i++;
322 }
323 }
324
325 private JScrollPane getJScrollPane(){
326 if (jScrollPane == null){
327 jScrollPane = new JScrollPane();
328 jScrollPane.setViewportView(getJContentPane());
329 }
330 return jScrollPane;
331 }
332 /**
333 This method initializes jContentPane
334
335 @return javax.swing.JPanel
336 **/
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");
346
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);
362
363 jContentPane.add(getJTextField(), null);
364 jContentPane.add(getJButtonBrowse(), null);
365 jContentPane.add(getJScrollPane1(), null);
366 }
367 return jContentPane;
368 }
369
370 /**
371 fill ComboBoxes with pre-defined contents
372 **/
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);
388 }
389
390 /* (non-Javadoc)
391 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
392 */
393 public void actionPerformed(ActionEvent arg0) {
394 if (arg0.getSource() == jButtonOk) {
395 this.save();
396 this.dispose();
397
398 }
399 if (arg0.getSource() == jButtonCancel) {
400 this.dispose();
401 }
402
403 if (arg0.getSource() == jButtonAdd) {
404 String strLibClass = "";
405 if (jRadioButtonAdd.isSelected()) {
406 strLibClass = jTextFieldAdd.getText();
407 }
408 if (jRadioButtonSelect.isSelected()) {
409 strLibClass = jComboBoxSelect.getSelectedItem().toString();
410 }
411 //ToDo: check before add
412 String[] row = {"", ""};
413 row[0] = strLibClass;
414 row[1] = jTextField.getText().replace('\\', '/');
415 model.addRow(row);
416 sfc.genSpdModuleHeaders(row[0], row[1], null, null, null, null, null, null);
417 }
418 //
419 // remove selected line
420 //
421 if (arg0.getSource() == jButtonRemove) {
422 if (jTable.isEditing()){
423 jTable.getCellEditor().stopCellEditing();
424 }
425 int rowSelected = selectedRow;
426 if (rowSelected >= 0) {
427 model.removeRow(rowSelected);
428 sfc.removeSpdPkgHeader(rowSelected);
429 }
430 }
431
432 if (arg0.getSource() == jButtonClearAll) {
433 if (model.getRowCount() == 0) {
434 return;
435 }
436 model.setRowCount(0);
437 sfc.removeSpdPkgHeader();
438 }
439
440 if (arg0.getSource() == jRadioButtonAdd) {
441 if (jRadioButtonAdd.isSelected()) {
442 jRadioButtonSelect.setSelected(false);
443 jTextFieldAdd.setEnabled(true);
444 jComboBoxSelect.setEnabled(false);
445 }
446 if (!jRadioButtonSelect.isSelected() && !jRadioButtonAdd.isSelected()) {
447 jRadioButtonAdd.setSelected(true);
448 jTextFieldAdd.setEnabled(true);
449 jComboBoxSelect.setEnabled(false);
450 }
451 }
452
453 if (arg0.getSource() == jRadioButtonSelect) {
454 if (jRadioButtonSelect.isSelected()) {
455 jRadioButtonAdd.setSelected(false);
456 jTextFieldAdd.setEnabled(false);
457 jComboBoxSelect.setEnabled(true);
458 }
459 if (!jRadioButtonSelect.isSelected() && !jRadioButtonAdd.isSelected()) {
460 jRadioButtonSelect.setSelected(true);
461 jTextFieldAdd.setEnabled(false);
462 jComboBoxSelect.setEnabled(true);
463 }
464 }
465 }
466
467 /**
468 Add contents in list to sfc
469 **/
470 protected void save() {
471
472 }
473
474 /**
475 This method initializes jTextField
476
477 @return javax.swing.JTextField
478 **/
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));
484 }
485 return jTextField;
486 }
487
488 /**
489 This method initializes jButtonBrowse
490
491 @return javax.swing.JButton
492 **/
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) {
501 //
502 // Select files from current workspace
503 //
504 String dirPrefix = Tools.dirForNewSpd.substring(0, Tools.dirForNewSpd.lastIndexOf(File.separator));
505 JFileChooser chooser = new JFileChooser(dirPrefix);
506 File theFile = null;
507 String headerDest = null;
508
509 chooser.setMultiSelectionEnabled(false);
510 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
511 int retval = chooser.showOpenDialog(frame);
512 if (retval == JFileChooser.APPROVE_OPTION) {
513
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!");
518 return;
519 }
520
521
522 }
523 else {
524 return;
525 }
526
527 headerDest = theFile.getPath();
528 int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), dirPrefix.length());
529
530 jTextField.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));
531
532 }
533 });
534 }
535 return jButtonBrowse;
536 }
537
538 /**
539 * This method initializes jScrollPane
540 *
541 * @return javax.swing.JScrollPane
542 */
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());
548 }
549 return jScrollPane1;
550 }
551
552 /**
553 * This method initializes jTable
554 *
555 * @return javax.swing.JTable
556 */
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));
579
580 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
581 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
582 public void valueChanged(ListSelectionEvent e) {
583 if (e.getValueIsAdjusting()){
584 return;
585 }
586 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
587 if (lsm.isSelectionEmpty()) {
588 return;
589 }
590 else{
591 selectedRow = lsm.getMinSelectionIndex();
592 }
593 }
594 });
595
596 jTable.getModel().addTableModelListener(this);
597 }
598 return jTable;
599 }
600
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);
609 }
610 }
611
612 public void componentResized(ComponentEvent arg0) {
613 int intPreferredWidth = 500;
614
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);
620 }
621
622 public static void main(String[] args){
623 new SpdPackageHeaders().setVisible(true);
624 }
625 }
626
627