2 Java class SpdMsaFiles 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
.Dimension
;
16 import java
.awt
.event
.ActionEvent
;
17 import java
.awt
.event
.ComponentEvent
;
20 import javax
.swing
.AbstractAction
;
21 import javax
.swing
.JFileChooser
;
22 import javax
.swing
.JOptionPane
;
23 import javax
.swing
.JPanel
;
24 import javax
.swing
.JTable
;
25 import javax
.swing
.JTextField
;
26 import javax
.swing
.JLabel
;
27 import javax
.swing
.JScrollPane
;
28 import javax
.swing
.JButton
;
29 import javax
.swing
.JFrame
;
30 import javax
.swing
.ListSelectionModel
;
31 import javax
.swing
.event
.InternalFrameAdapter
;
32 import javax
.swing
.event
.InternalFrameEvent
;
33 import javax
.swing
.event
.ListSelectionEvent
;
34 import javax
.swing
.event
.ListSelectionListener
;
35 import javax
.swing
.event
.TableModelEvent
;
36 import javax
.swing
.event
.TableModelListener
;
37 import javax
.swing
.table
.DefaultTableModel
;
38 import javax
.swing
.table
.TableModel
;
40 import org
.tianocore
.PackageSurfaceAreaDocument
;
41 import org
.tianocore
.frameworkwizard
.common
.Tools
;
42 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningPackageType
;
43 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
44 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
47 GUI for create library definition elements of spd file.
49 @since PackageEditor 1.0
51 public class SpdMsaFiles
extends IInternalFrame
implements TableModelListener
{
55 private static final long serialVersionUID
= 1L;
57 private JFrame topFrame
;
59 private JScrollPane jScrollPane
= null; // @jve:decl-index=0:visual-constraint="10,95"
61 private JTable jTable
= null;
63 private DefaultTableModel model
= null;
65 private JPanel jContentPane
= null;
67 private JScrollPane jScrollPaneMsa
= null;
69 private JButton jButtonAdd
= null;
71 private JButton jButtonRemove
= null;
73 private JButton jButtonClearAll
= null;
75 private JButton jButtonCancel
= null;
77 private JButton jButtonOk
= null;
79 private JLabel jLabel
= null;
81 private JTextField jTextField
= null;
83 private JButton jButtonBrowse
= null;
85 private StarLabel jStarLabel2
= null;
87 private SpdFileContents sfc
= null;
89 private OpeningPackageType docConsole
= null;
91 private int selectedRow
= -1;
94 This method initializes this
97 private void initialize() {
99 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
104 This method initializes jScrollPane
106 @return javax.swing.JScrollPane
108 private JScrollPane
getJScrollPaneMsa() {
109 if (jScrollPaneMsa
== null) {
110 jScrollPaneMsa
= new JScrollPane();
111 jScrollPaneMsa
.setBounds(new java
.awt
.Rectangle(13,177,461,421));
112 jScrollPaneMsa
.setViewportView(getJTable());
114 return jScrollPaneMsa
;
118 This method initializes jTable
120 @return javax.swing.JTable
122 private JTable
getJTable() {
123 if (jTable
== null) {
124 model
= new DefaultTableModel();
125 jTable
= new JTable(model
);
126 jTable
.setRowHeight(20);
127 model
.addColumn("MsaFile");
129 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
130 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
131 public void valueChanged(ListSelectionEvent e
) {
132 if (e
.getValueIsAdjusting()){
135 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
136 if (lsm
.isSelectionEmpty()) {
140 selectedRow
= lsm
.getMinSelectionIndex();
145 jTable
.getModel().addTableModelListener(this);
150 This method initializes jButtonAdd
152 @return javax.swing.JButton
154 private JButton
getJButtonAdd() {
155 if (jButtonAdd
== null) {
156 jButtonAdd
= new JButton();
157 jButtonAdd
.setBounds(new java
.awt
.Rectangle(163,148,90,20));
158 jButtonAdd
.setText("Add");
159 jButtonAdd
.addActionListener(this);
165 This method initializes jButtonRemove
167 @return javax.swing.JButton
169 private JButton
getJButtonRemove() {
170 if (jButtonRemove
== null) {
171 jButtonRemove
= new JButton();
172 jButtonRemove
.setBounds(new java
.awt
.Rectangle(266,148,90,20));
173 jButtonRemove
.setText("Delete");
174 jButtonRemove
.addActionListener(this);
176 return jButtonRemove
;
180 This method initializes jButtonRemoveAll
182 @return javax.swing.JButton
184 private JButton
getJButtonClearAll() {
185 if (jButtonClearAll
== null) {
186 jButtonClearAll
= new JButton();
187 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(374,148,90,20));
188 jButtonClearAll
.setText("Clear All");
189 jButtonClearAll
.addActionListener(this);
191 return jButtonClearAll
;
195 This method initializes jButtonCancel
197 @return javax.swing.JButton
199 private JButton
getJButtonCancel() {
200 if (jButtonCancel
== null) {
201 jButtonCancel
= new JButton();
202 jButtonCancel
.setPreferredSize(new java
.awt
.Dimension(90, 20));
203 jButtonCancel
.setLocation(new java
.awt
.Point(390, 305));
204 jButtonCancel
.setText("Cancel");
205 jButtonCancel
.setSize(new java
.awt
.Dimension(90, 20));
206 jButtonCancel
.setVisible(false);
207 jButtonCancel
.addActionListener(this);
209 return jButtonCancel
;
213 This method initializes jButton
215 @return javax.swing.JButton
217 private JButton
getJButtonOk() {
218 if (jButtonOk
== null) {
219 jButtonOk
= new JButton();
220 jButtonOk
.setSize(new java
.awt
.Dimension(90, 20));
221 jButtonOk
.setText("OK");
222 jButtonOk
.setLocation(new java
.awt
.Point(290, 305));
223 jButtonOk
.setVisible(false);
224 jButtonOk
.addActionListener(this);
230 This is the default constructor
232 public SpdMsaFiles(JFrame frame
) {
239 public SpdMsaFiles(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
, JFrame frame
){
241 sfc
= new SpdFileContents(inPsa
);
245 public SpdMsaFiles(OpeningPackageType opt
, JFrame frame
){
246 this(opt
.getXmlSpd(), frame
);
250 This method initializes this
254 private void init() {
255 this.setBounds(new java
.awt
.Rectangle(0, 0, 500, 370));
256 this.setPreferredSize(new Dimension(490, 400));
257 this.setContentPane(getJScrollPane());
258 this.setTitle("Msa Files");
259 this.addInternalFrameListener(new InternalFrameAdapter(){
260 public void internalFrameDeactivated(InternalFrameEvent e
){
261 if (jTable
.isEditing()) {
262 jTable
.getCellEditor().stopCellEditing();
266 this.setVisible(true);
269 private void init(SpdFileContents sfc
){
271 if (sfc
.getSpdPkgDefsRdOnly().equals("true")) {
272 JOptionPane
.showMessageDialog(topFrame
, "This is a read-only package. You will not be able to edit contents in table.");
276 if (sfc
.getSpdMsaFileCount() == 0) {
280 // initialize table using SpdFileContents object
282 String
[][] saa
= new String
[sfc
.getSpdMsaFileCount()][4];
283 sfc
.getSpdMsaFiles(saa
);
285 while (i
< saa
.length
) {
286 model
.addRow(saa
[i
]);
292 private JScrollPane
getJScrollPane(){
293 if (jScrollPane
== null){
294 jScrollPane
= new JScrollPane();
295 jScrollPane
.setViewportView(getJContentPane());
300 This method initializes jContentPane
302 @return javax.swing.JPanel
304 private JPanel
getJContentPane() {
305 if (jContentPane
== null) {
306 jStarLabel2
= new StarLabel();
307 jStarLabel2
.setLocation(new java
.awt
.Point(2,24));
308 jLabel
= new JLabel();
309 jLabel
.setBounds(new java
.awt
.Rectangle(17,24,111,22));
310 jLabel
.setText("Msa File ");
312 jContentPane
= new JPanel();
313 jContentPane
.setPreferredSize(new Dimension(480, 325));
314 jContentPane
.setLayout(null);
315 jContentPane
.add(jLabel
, null);
316 jContentPane
.add(jStarLabel2
, null);
317 jContentPane
.add(getJScrollPaneMsa(), null);
318 jContentPane
.add(getJButtonAdd(), null);
319 jContentPane
.add(getJButtonRemove(), null);
320 jContentPane
.add(getJButtonClearAll(), null);
321 jContentPane
.add(getJButtonCancel(), null);
322 jContentPane
.add(getJButtonOk(), null);
324 jContentPane
.add(getJTextField(), null);
325 jContentPane
.add(getJButtonBrowse(), null);
331 fill ComboBoxes with pre-defined contents
333 private void initFrame() {
334 boolean editable
= true;
335 if (sfc
.getSpdPkgDefsRdOnly().equals("true")) {
339 jButtonAdd
.setEnabled(editable
);
340 jButtonRemove
.setEnabled(editable
);
341 jButtonClearAll
.setEnabled(editable
);
342 jTable
.setEnabled(editable
);
346 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
348 public void actionPerformed(ActionEvent arg0
) {
350 if (arg0
.getSource() == jButtonOk
) {
355 if (arg0
.getSource() == jButtonCancel
) {
359 if (arg0
.getSource() == jButtonAdd
) {
360 //ToDo: check before add
361 String
[] row
= {jTextField
.getText().replace('\\', '/')};
362 if (jTextField
.getText().length() == 0) {
363 JOptionPane
.showMessageDialog(this, "Msa File is NOT PathAndFilename type.");
367 String dirPrefix
= Tools
.dirForNewSpd
.substring(0, Tools
.dirForNewSpd
.lastIndexOf(File
.separator
));
368 if (!new File(dirPrefix
+ File
.separator
+ jTextField
.getText()).exists()) {
369 JOptionPane
.showMessageDialog(this, "File NOT Exists in Current Package.");
373 jTable
.changeSelection(model
.getRowCount()-1, 0, false, false);
374 sfc
.genSpdMsaFiles(row
[0], null, null, null);
375 docConsole
.setSaved(false);
378 // remove selected line
380 if (arg0
.getSource() == jButtonRemove
) {
381 if (jTable
.isEditing()){
382 jTable
.getCellEditor().stopCellEditing();
384 int rowSelected
= selectedRow
;
385 if (rowSelected
>= 0) {
386 model
.removeRow(rowSelected
);
387 sfc
.removeSpdMsaFile(rowSelected
);
388 docConsole
.setSaved(false);
392 if (arg0
.getSource() == jButtonClearAll
) {
393 if (model
.getRowCount() == 0) {
396 model
.setRowCount(0);
397 sfc
.removeSpdMsaFile();
398 docConsole
.setSaved(false);
403 public void tableChanged(TableModelEvent arg0
) {
404 // TODO Auto-generated method stub
405 int row
= arg0
.getFirstRow();
406 int column
= arg0
.getColumn();
407 TableModel m
= (TableModel
)arg0
.getSource();
408 if (arg0
.getType() == TableModelEvent
.UPDATE
){
409 String
[] sa
= new String
[1];
410 sfc
.getSpdMsaFile(sa
, row
);
411 Object cellData
= m
.getValueAt(row
, column
);
412 if (cellData
== null) {
415 if (cellData
.equals(sa
[column
])) {
418 if (cellData
.toString().length() == 0 && sa
[column
] == null) {
421 String file
= m
.getValueAt(row
, 0) + "";
422 if (file
.length() == 0) {
423 JOptionPane
.showMessageDialog(this, "Msa File is NOT PathAndFilename type.");
426 docConsole
.setSaved(false);
427 sfc
.updateSpdMsaFile(row
, file
, null, null, null);
432 Add contents in list to sfc
434 protected void save() {
439 This method initializes jTextField
441 @return javax.swing.JTextField
443 private JTextField
getJTextField() {
444 if (jTextField
== null) {
445 jTextField
= new JTextField();
446 jTextField
.setBounds(new java
.awt
.Rectangle(14,51,346,21));
447 jTextField
.setPreferredSize(new java
.awt
.Dimension(345,20));
453 This method initializes jButtonBrowse
455 @return javax.swing.JButton
457 private JButton
getJButtonBrowse() {
458 if (jButtonBrowse
== null) {
459 jButtonBrowse
= new JButton();
460 jButtonBrowse
.setBounds(new java
.awt
.Rectangle(376,50,92,21));
461 jButtonBrowse
.setText("Browse");
462 jButtonBrowse
.setPreferredSize(new java
.awt
.Dimension(90,20));
463 jButtonBrowse
.addActionListener(new AbstractAction() {
467 private static final long serialVersionUID
= 1L;
469 public void actionPerformed(ActionEvent e
) {
471 // Select files from current workspace
473 String dirPrefix
= Tools
.dirForNewSpd
.substring(0, Tools
.dirForNewSpd
.lastIndexOf(File
.separator
));
474 JFileChooser chooser
= new JFileChooser(dirPrefix
);
476 String headerDest
= null;
478 chooser
.setMultiSelectionEnabled(false);
479 chooser
.setFileSelectionMode(JFileChooser
.FILES_AND_DIRECTORIES
);
480 int retval
= chooser
.showOpenDialog(SpdMsaFiles
.this);
481 if (retval
== JFileChooser
.APPROVE_OPTION
) {
483 theFile
= chooser
.getSelectedFile();
484 String file
= theFile
.getPath();
485 if (!file
.startsWith(dirPrefix
)) {
486 JOptionPane
.showMessageDialog(SpdMsaFiles
.this, "You can only select files in current package!");
496 headerDest
= theFile
.getPath();
497 int fileIndex
= headerDest
.indexOf(System
.getProperty("file.separator"), dirPrefix
.length());
499 jTextField
.setText(headerDest
.substring(fileIndex
+ 1).replace('\\', '/'));
504 return jButtonBrowse
;
507 public void componentResized(ComponentEvent arg0
) {
508 int intPreferredWidth
= 500;
510 Tools
.resizeComponentWidth(this.jScrollPaneMsa
, this.getWidth(), intPreferredWidth
);
511 Tools
.resizeComponentWidth(this.jTextField
, this.getWidth(), intPreferredWidth
);
512 Tools
.relocateComponentX(this.jButtonBrowse
, this.getWidth(), this.getPreferredSize().width
, 25);