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
.ui
.IInternalFrame
;
43 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
46 GUI for create library definition elements of spd file.
48 @since PackageEditor 1.0
50 public class SpdMsaFiles
extends IInternalFrame
implements TableModelListener
{
54 private static final long serialVersionUID
= 1L;
58 private JScrollPane jScrollPane
= null; // @jve:decl-index=0:visual-constraint="10,95"
60 private JTable jTable
= null;
62 private DefaultTableModel model
= null;
64 private JPanel jContentPane
= null;
66 private JScrollPane jScrollPane1
= null;
68 private JButton jButtonAdd
= null;
70 private JButton jButtonRemove
= null;
72 private JButton jButtonClearAll
= null;
74 private JButton jButtonCancel
= null;
76 private JButton jButtonOk
= null;
78 private JLabel jLabel
= null;
80 private JTextField jTextField
= null;
82 private JButton jButtonBrowse
= null;
84 private StarLabel jStarLabel2
= null;
86 private SpdFileContents sfc
= null;
88 private int selectedRow
= -1;
91 This method initializes this
94 private void initialize() {
96 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
101 This method initializes jScrollPane
103 @return javax.swing.JScrollPane
105 private JScrollPane
getJScrollPane1() {
106 if (jScrollPane1
== null) {
107 jScrollPane1
= new JScrollPane();
108 jScrollPane1
.setBounds(new java
.awt
.Rectangle(13,177,461,139));
109 jScrollPane1
.setViewportView(getJTable());
115 This method initializes jTable
117 @return javax.swing.JTable
119 private JTable
getJTable() {
120 if (jTable
== null) {
121 model
= new DefaultTableModel();
122 jTable
= new JTable(model
);
123 jTable
.setRowHeight(20);
124 model
.addColumn("MsaFile");
126 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
127 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
128 public void valueChanged(ListSelectionEvent e
) {
129 if (e
.getValueIsAdjusting()){
132 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
133 if (lsm
.isSelectionEmpty()) {
137 selectedRow
= lsm
.getMinSelectionIndex();
142 jTable
.getModel().addTableModelListener(this);
147 This method initializes jButtonAdd
149 @return javax.swing.JButton
151 private JButton
getJButtonAdd() {
152 if (jButtonAdd
== null) {
153 jButtonAdd
= new JButton();
154 jButtonAdd
.setBounds(new java
.awt
.Rectangle(163,148,90,20));
155 jButtonAdd
.setText("Add");
156 jButtonAdd
.addActionListener(this);
162 This method initializes jButtonRemove
164 @return javax.swing.JButton
166 private JButton
getJButtonRemove() {
167 if (jButtonRemove
== null) {
168 jButtonRemove
= new JButton();
169 jButtonRemove
.setBounds(new java
.awt
.Rectangle(266,148,90,20));
170 jButtonRemove
.setText("Remove");
171 jButtonRemove
.addActionListener(this);
173 return jButtonRemove
;
177 This method initializes jButtonRemoveAll
179 @return javax.swing.JButton
181 private JButton
getJButtonClearAll() {
182 if (jButtonClearAll
== null) {
183 jButtonClearAll
= new JButton();
184 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(374,148,90,20));
185 jButtonClearAll
.setText("Clear All");
186 jButtonClearAll
.addActionListener(this);
188 return jButtonClearAll
;
192 This method initializes jButtonCancel
194 @return javax.swing.JButton
196 private JButton
getJButtonCancel() {
197 if (jButtonCancel
== null) {
198 jButtonCancel
= new JButton();
199 jButtonCancel
.setPreferredSize(new java
.awt
.Dimension(90, 20));
200 jButtonCancel
.setLocation(new java
.awt
.Point(390, 305));
201 jButtonCancel
.setText("Cancel");
202 jButtonCancel
.setSize(new java
.awt
.Dimension(90, 20));
203 jButtonCancel
.setVisible(false);
204 jButtonCancel
.addActionListener(this);
206 return jButtonCancel
;
210 This method initializes jButton
212 @return javax.swing.JButton
214 private JButton
getJButtonOk() {
215 if (jButtonOk
== null) {
216 jButtonOk
= new JButton();
217 jButtonOk
.setSize(new java
.awt
.Dimension(90, 20));
218 jButtonOk
.setText("OK");
219 jButtonOk
.setLocation(new java
.awt
.Point(290, 305));
220 jButtonOk
.setVisible(false);
221 jButtonOk
.addActionListener(this);
227 This is the default constructor
229 public SpdMsaFiles() {
236 public SpdMsaFiles(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
){
238 sfc
= new SpdFileContents(inPsa
);
242 This method initializes this
246 private void init() {
247 this.setBounds(new java
.awt
.Rectangle(0, 0, 500, 370));
248 this.setPreferredSize(new Dimension(490, 400));
249 this.setContentPane(getJScrollPane());
250 this.setTitle("Msa Files");
251 this.addInternalFrameListener(new InternalFrameAdapter(){
252 public void internalFrameDeactivated(InternalFrameEvent e
){
253 if (jTable
.isEditing()) {
254 jTable
.getCellEditor().stopCellEditing();
258 this.setVisible(true);
262 private void init(SpdFileContents sfc
){
263 if (sfc
.getSpdMsaFileCount() == 0) {
267 // initialize table using SpdFileContents object
269 String
[][] saa
= new String
[sfc
.getSpdMsaFileCount()][4];
270 sfc
.getSpdMsaFiles(saa
);
272 while (i
< saa
.length
) {
273 model
.addRow(saa
[i
]);
278 private JScrollPane
getJScrollPane(){
279 if (jScrollPane
== null){
280 jScrollPane
= new JScrollPane();
281 jScrollPane
.setViewportView(getJContentPane());
286 This method initializes jContentPane
288 @return javax.swing.JPanel
290 private JPanel
getJContentPane() {
291 if (jContentPane
== null) {
292 jStarLabel2
= new StarLabel();
293 jStarLabel2
.setLocation(new java
.awt
.Point(2,24));
294 jLabel
= new JLabel();
295 jLabel
.setBounds(new java
.awt
.Rectangle(17,24,111,22));
296 jLabel
.setText("Msa File ");
298 jContentPane
= new JPanel();
299 jContentPane
.setPreferredSize(new Dimension(480, 325));
300 jContentPane
.setLayout(null);
301 jContentPane
.add(jLabel
, null);
302 jContentPane
.add(jStarLabel2
, null);
303 jContentPane
.add(getJScrollPane1(), null);
304 jContentPane
.add(getJButtonAdd(), null);
305 jContentPane
.add(getJButtonRemove(), null);
306 jContentPane
.add(getJButtonClearAll(), null);
307 jContentPane
.add(getJButtonCancel(), null);
308 jContentPane
.add(getJButtonOk(), null);
310 jContentPane
.add(getJTextField(), null);
311 jContentPane
.add(getJButtonBrowse(), null);
317 fill ComboBoxes with pre-defined contents
319 private void initFrame() {
324 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
326 public void actionPerformed(ActionEvent arg0
) {
327 if (arg0
.getSource() == jButtonOk
) {
332 if (arg0
.getSource() == jButtonCancel
) {
336 if (arg0
.getSource() == jButtonAdd
) {
337 //ToDo: check before add
338 String
[] row
= {jTextField
.getText().replace('\\', '/')};
339 if (jTextField
.getText().length() == 0) {
340 JOptionPane
.showMessageDialog(this, "Msa File is NOT PathAndFilename type.");
344 sfc
.genSpdMsaFiles(row
[0], null, null, null);
347 // remove selected line
349 if (arg0
.getSource() == jButtonRemove
) {
350 if (jTable
.isEditing()){
351 jTable
.getCellEditor().stopCellEditing();
353 int rowSelected
= selectedRow
;
354 if (rowSelected
>= 0) {
355 model
.removeRow(rowSelected
);
356 sfc
.removeSpdMsaFile(rowSelected
);
360 if (arg0
.getSource() == jButtonClearAll
) {
361 if (model
.getRowCount() == 0) {
364 model
.setRowCount(0);
365 sfc
.removeSpdMsaFile();
370 public void tableChanged(TableModelEvent arg0
) {
371 // TODO Auto-generated method stub
372 int row
= arg0
.getFirstRow();
373 TableModel m
= (TableModel
)arg0
.getSource();
374 if (arg0
.getType() == TableModelEvent
.UPDATE
){
375 String file
= m
.getValueAt(row
, 0) + "";
376 if (file
.length() == 0) {
377 JOptionPane
.showMessageDialog(this, "Msa File is NOT PathAndFilename type.");
380 sfc
.updateSpdMsaFile(row
, file
, null, null, null);
385 Add contents in list to sfc
387 protected void save() {
392 This method initializes jTextField
394 @return javax.swing.JTextField
396 private JTextField
getJTextField() {
397 if (jTextField
== null) {
398 jTextField
= new JTextField();
399 jTextField
.setBounds(new java
.awt
.Rectangle(14,51,346,21));
400 jTextField
.setPreferredSize(new java
.awt
.Dimension(345,20));
406 This method initializes jButtonBrowse
408 @return javax.swing.JButton
410 private JButton
getJButtonBrowse() {
411 if (jButtonBrowse
== null) {
412 jButtonBrowse
= new JButton();
413 jButtonBrowse
.setBounds(new java
.awt
.Rectangle(376,50,92,21));
414 jButtonBrowse
.setText("Browse");
415 jButtonBrowse
.setPreferredSize(new java
.awt
.Dimension(90,20));
416 jButtonBrowse
.addActionListener(new AbstractAction() {
420 private static final long serialVersionUID
= 1L;
422 public void actionPerformed(ActionEvent e
) {
424 // Select files from current workspace
426 String dirPrefix
= Tools
.dirForNewSpd
.substring(0, Tools
.dirForNewSpd
.lastIndexOf(File
.separator
));
427 JFileChooser chooser
= new JFileChooser(dirPrefix
);
429 String headerDest
= null;
431 chooser
.setMultiSelectionEnabled(false);
432 chooser
.setFileSelectionMode(JFileChooser
.FILES_AND_DIRECTORIES
);
433 int retval
= chooser
.showOpenDialog(frame
);
434 if (retval
== JFileChooser
.APPROVE_OPTION
) {
436 theFile
= chooser
.getSelectedFile();
437 String file
= theFile
.getPath();
438 if (!file
.startsWith(dirPrefix
)) {
439 JOptionPane
.showMessageDialog(frame
, "You can only select files in current package!");
449 headerDest
= theFile
.getPath();
450 int fileIndex
= headerDest
.indexOf(System
.getProperty("file.separator"), dirPrefix
.length());
452 jTextField
.setText(headerDest
.substring(fileIndex
+ 1).replace('\\', '/'));
457 return jButtonBrowse
;
460 public void componentResized(ComponentEvent arg0
) {
461 int intPreferredWidth
= 500;
463 resizeComponentWidth(this.jScrollPane1
, this.getWidth(), intPreferredWidth
);
464 resizeComponentWidth(this.jTextField
, this.getWidth(), intPreferredWidth
);
465 relocateComponentX(this.jButtonBrowse
, this.getWidth(), this.getPreferredSize().width
, 25);
468 public static void main(String
[] args
){
469 new SpdMsaFiles().setVisible(true);