]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdMsaFiles.java
09cb0f704f994dbe9b33941987c129d8c7d85e01
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdMsaFiles.java
1 /** @file
2 Java class SpdMsaFiles 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.Dimension;
16 import java.awt.event.ActionEvent;
17 import java.awt.event.ComponentEvent;
18 import java.io.File;
19
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;
39
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;
44
45 /**
46 GUI for create library definition elements of spd file.
47
48 @since PackageEditor 1.0
49 **/
50 public class SpdMsaFiles extends IInternalFrame implements TableModelListener{
51 /**
52 *
53 */
54 private static final long serialVersionUID = 1L;
55
56 static JFrame frame;
57
58 private JScrollPane jScrollPane = null; // @jve:decl-index=0:visual-constraint="10,95"
59
60 private JTable jTable = null;
61
62 private DefaultTableModel model = null;
63
64 private JPanel jContentPane = null;
65
66 private JScrollPane jScrollPane1 = null;
67
68 private JButton jButtonAdd = null;
69
70 private JButton jButtonRemove = null;
71
72 private JButton jButtonClearAll = null;
73
74 private JButton jButtonCancel = null;
75
76 private JButton jButtonOk = null;
77
78 private JLabel jLabel = null;
79
80 private JTextField jTextField = null;
81
82 private JButton jButtonBrowse = null;
83
84 private StarLabel jStarLabel2 = null;
85
86 private SpdFileContents sfc = null;
87
88 private int selectedRow = -1;
89
90 /**
91 This method initializes this
92
93 **/
94 private void initialize() {
95
96 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
97
98 }
99
100 /**
101 This method initializes jScrollPane
102
103 @return javax.swing.JScrollPane
104 **/
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());
110 }
111 return jScrollPane1;
112 }
113
114 /**
115 This method initializes jTable
116
117 @return javax.swing.JTable
118 **/
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");
125
126 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
127 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
128 public void valueChanged(ListSelectionEvent e) {
129 if (e.getValueIsAdjusting()){
130 return;
131 }
132 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
133 if (lsm.isSelectionEmpty()) {
134 return;
135 }
136 else{
137 selectedRow = lsm.getMinSelectionIndex();
138 }
139 }
140 });
141
142 jTable.getModel().addTableModelListener(this);
143 }
144 return jTable;
145 }
146 /**
147 This method initializes jButtonAdd
148
149 @return javax.swing.JButton
150 **/
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);
157 }
158 return jButtonAdd;
159 }
160
161 /**
162 This method initializes jButtonRemove
163
164 @return javax.swing.JButton
165 **/
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);
172 }
173 return jButtonRemove;
174 }
175
176 /**
177 This method initializes jButtonRemoveAll
178
179 @return javax.swing.JButton
180 **/
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);
187 }
188 return jButtonClearAll;
189 }
190
191 /**
192 This method initializes jButtonCancel
193
194 @return javax.swing.JButton
195 **/
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);
205 }
206 return jButtonCancel;
207 }
208
209 /**
210 This method initializes jButton
211
212 @return javax.swing.JButton
213 **/
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);
222 }
223 return jButtonOk;
224 }
225
226 /**
227 This is the default constructor
228 **/
229 public SpdMsaFiles() {
230 super();
231 initialize();
232 init();
233
234 }
235
236 public SpdMsaFiles(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa){
237 this();
238 sfc = new SpdFileContents(inPsa);
239 init(sfc);
240 }
241 /**
242 This method initializes this
243
244 @return void
245 **/
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();
255 }
256 }
257 });
258 this.setVisible(true);
259 initFrame();
260 }
261
262 private void init(SpdFileContents sfc){
263 if (sfc.getSpdMsaFileCount() == 0) {
264 return ;
265 }
266 //
267 // initialize table using SpdFileContents object
268 //
269 String[][] saa = new String[sfc.getSpdMsaFileCount()][4];
270 sfc.getSpdMsaFiles(saa);
271 int i = 0;
272 while (i < saa.length) {
273 model.addRow(saa[i]);
274 i++;
275 }
276 }
277
278 private JScrollPane getJScrollPane(){
279 if (jScrollPane == null){
280 jScrollPane = new JScrollPane();
281 jScrollPane.setViewportView(getJContentPane());
282 }
283 return jScrollPane;
284 }
285 /**
286 This method initializes jContentPane
287
288 @return javax.swing.JPanel
289 **/
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 ");
297
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);
309
310 jContentPane.add(getJTextField(), null);
311 jContentPane.add(getJButtonBrowse(), null);
312 }
313 return jContentPane;
314 }
315
316 /**
317 fill ComboBoxes with pre-defined contents
318 **/
319 private void initFrame() {
320
321 }
322
323 /* (non-Javadoc)
324 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
325 */
326 public void actionPerformed(ActionEvent arg0) {
327 if (arg0.getSource() == jButtonOk) {
328 this.save();
329 this.dispose();
330
331 }
332 if (arg0.getSource() == jButtonCancel) {
333 this.dispose();
334 }
335
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.");
341 return;
342 }
343 model.addRow(row);
344 sfc.genSpdMsaFiles(row[0], null, null, null);
345 }
346 //
347 // remove selected line
348 //
349 if (arg0.getSource() == jButtonRemove) {
350 if (jTable.isEditing()){
351 jTable.getCellEditor().stopCellEditing();
352 }
353 int rowSelected = selectedRow;
354 if (rowSelected >= 0) {
355 model.removeRow(rowSelected);
356 sfc.removeSpdMsaFile(rowSelected);
357 }
358 }
359
360 if (arg0.getSource() == jButtonClearAll) {
361 if (model.getRowCount() == 0) {
362 return;
363 }
364 model.setRowCount(0);
365 sfc.removeSpdMsaFile();
366 }
367
368 }
369
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.");
378 return;
379 }
380 sfc.updateSpdMsaFile(row, file, null, null, null);
381 }
382 }
383
384 /**
385 Add contents in list to sfc
386 **/
387 protected void save() {
388
389 }
390
391 /**
392 This method initializes jTextField
393
394 @return javax.swing.JTextField
395 **/
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));
401 }
402 return jTextField;
403 }
404
405 /**
406 This method initializes jButtonBrowse
407
408 @return javax.swing.JButton
409 **/
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() {
417 /**
418 *
419 */
420 private static final long serialVersionUID = 1L;
421
422 public void actionPerformed(ActionEvent e) {
423 //
424 // Select files from current workspace
425 //
426 String dirPrefix = Tools.dirForNewSpd.substring(0, Tools.dirForNewSpd.lastIndexOf(File.separator));
427 JFileChooser chooser = new JFileChooser(dirPrefix);
428 File theFile = null;
429 String headerDest = null;
430
431 chooser.setMultiSelectionEnabled(false);
432 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
433 int retval = chooser.showOpenDialog(frame);
434 if (retval == JFileChooser.APPROVE_OPTION) {
435
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!");
440 return;
441 }
442
443
444 }
445 else {
446 return;
447 }
448
449 headerDest = theFile.getPath();
450 int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), dirPrefix.length());
451
452 jTextField.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));
453
454 }
455 });
456 }
457 return jButtonBrowse;
458 }
459
460 public void componentResized(ComponentEvent arg0) {
461 int intPreferredWidth = 500;
462
463 resizeComponentWidth(this.jScrollPane1, this.getWidth(), intPreferredWidth);
464 resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);
465 relocateComponentX(this.jButtonBrowse, this.getWidth(), this.getPreferredSize().width, 25);
466 }
467
468 public static void main(String[] args){
469 new SpdMsaFiles().setVisible(true);
470 }
471 }
472
473