]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdMsaFiles.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 / 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.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.AbstractAction;
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.TableModel;
47
48 import org.tianocore.PackageSurfaceAreaDocument;
49 import org.tianocore.frameworkwizard.common.DataType;
50 import org.tianocore.frameworkwizard.common.Tools;
51 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;
52 import org.tianocore.frameworkwizard.common.ui.StarLabel;
53
54 /**
55 GUI for create library definition elements of spd file.
56
57 @since PackageEditor 1.0
58 **/
59 public class SpdMsaFiles extends IInternalFrame implements TableModelListener{
60 static JFrame frame;
61
62 private JScrollPane jScrollPane = null; // @jve:decl-index=0:visual-constraint="10,95"
63
64 private JTable jTable = null;
65
66 private DefaultTableModel model = null;
67
68 private JPanel jContentPane = null;
69
70 private JScrollPane jScrollPane1 = null;
71
72 private JButton jButtonAdd = null;
73
74 private JButton jButtonRemove = null;
75
76 private JButton jButtonClearAll = null;
77
78 private JButton jButtonCancel = null;
79
80 private JButton jButtonOk = null;
81
82 private JLabel jLabel = null;
83
84 private JTextField jTextField = null;
85
86 private JButton jButtonBrowse = null;
87
88 private StarLabel jStarLabel2 = null;
89
90 private SpdFileContents sfc = null;
91
92 private int selectedRow = -1;
93
94 /**
95 This method initializes this
96
97 **/
98 private void initialize() {
99
100 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
101
102 }
103
104 /**
105 This method initializes jScrollPane
106
107 @return javax.swing.JScrollPane
108 **/
109 private JScrollPane getJScrollPane1() {
110 if (jScrollPane1 == null) {
111 jScrollPane1 = new JScrollPane();
112 jScrollPane1.setBounds(new java.awt.Rectangle(13,177,461,139));
113 jScrollPane1.setViewportView(getJTable());
114 }
115 return jScrollPane1;
116 }
117
118 /**
119 This method initializes jTable
120
121 @return javax.swing.JTable
122 **/
123 private JTable getJTable() {
124 if (jTable == null) {
125 model = new DefaultTableModel();
126 jTable = new JTable(model);
127 jTable.setRowHeight(20);
128 model.addColumn("MsaFile");
129
130 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
131 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
132 public void valueChanged(ListSelectionEvent e) {
133 if (e.getValueIsAdjusting()){
134 return;
135 }
136 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
137 if (lsm.isSelectionEmpty()) {
138 return;
139 }
140 else{
141 selectedRow = lsm.getMinSelectionIndex();
142 }
143 }
144 });
145
146 jTable.getModel().addTableModelListener(this);
147 }
148 return jTable;
149 }
150 /**
151 This method initializes jButtonAdd
152
153 @return javax.swing.JButton
154 **/
155 private JButton getJButtonAdd() {
156 if (jButtonAdd == null) {
157 jButtonAdd = new JButton();
158 jButtonAdd.setBounds(new java.awt.Rectangle(163,148,90,20));
159 jButtonAdd.setText("Add");
160 jButtonAdd.addActionListener(this);
161 }
162 return jButtonAdd;
163 }
164
165 /**
166 This method initializes jButtonRemove
167
168 @return javax.swing.JButton
169 **/
170 private JButton getJButtonRemove() {
171 if (jButtonRemove == null) {
172 jButtonRemove = new JButton();
173 jButtonRemove.setBounds(new java.awt.Rectangle(266,148,90,20));
174 jButtonRemove.setText("Remove");
175 jButtonRemove.addActionListener(this);
176 }
177 return jButtonRemove;
178 }
179
180 /**
181 This method initializes jButtonRemoveAll
182
183 @return javax.swing.JButton
184 **/
185 private JButton getJButtonClearAll() {
186 if (jButtonClearAll == null) {
187 jButtonClearAll = new JButton();
188 jButtonClearAll.setBounds(new java.awt.Rectangle(374,148,90,20));
189 jButtonClearAll.setText("Clear All");
190 jButtonClearAll.addActionListener(this);
191 }
192 return jButtonClearAll;
193 }
194
195 /**
196 This method initializes jButtonCancel
197
198 @return javax.swing.JButton
199 **/
200 private JButton getJButtonCancel() {
201 if (jButtonCancel == null) {
202 jButtonCancel = new JButton();
203 jButtonCancel.setPreferredSize(new java.awt.Dimension(90, 20));
204 jButtonCancel.setLocation(new java.awt.Point(390, 305));
205 jButtonCancel.setText("Cancel");
206 jButtonCancel.setSize(new java.awt.Dimension(90, 20));
207 jButtonCancel.setVisible(false);
208 jButtonCancel.addActionListener(this);
209 }
210 return jButtonCancel;
211 }
212
213 /**
214 This method initializes jButton
215
216 @return javax.swing.JButton
217 **/
218 private JButton getJButtonOk() {
219 if (jButtonOk == null) {
220 jButtonOk = new JButton();
221 jButtonOk.setSize(new java.awt.Dimension(90, 20));
222 jButtonOk.setText("OK");
223 jButtonOk.setLocation(new java.awt.Point(290, 305));
224 jButtonOk.setVisible(false);
225 jButtonOk.addActionListener(this);
226 }
227 return jButtonOk;
228 }
229
230 /**
231 This is the default constructor
232 **/
233 public SpdMsaFiles() {
234 super();
235 initialize();
236 init();
237
238 }
239
240 public SpdMsaFiles(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa){
241 this();
242 sfc = new SpdFileContents(inPsa);
243 init(sfc);
244 }
245 /**
246 This method initializes this
247
248 @return void
249 **/
250 private void init() {
251 this.setBounds(new java.awt.Rectangle(0, 0, 500, 370));
252 this.setPreferredSize(new Dimension(490, 400));
253 this.setContentPane(getJScrollPane());
254 this.setTitle("Msa Files");
255 this.addInternalFrameListener(new InternalFrameAdapter(){
256 public void internalFrameDeactivated(InternalFrameEvent e){
257 if (jTable.isEditing()) {
258 jTable.getCellEditor().stopCellEditing();
259 }
260 }
261 });
262 this.setVisible(true);
263 initFrame();
264 }
265
266 private void init(SpdFileContents sfc){
267 if (sfc.getSpdMsaFileCount() == 0) {
268 return ;
269 }
270 //
271 // initialize table using SpdFileContents object
272 //
273 String[][] saa = new String[sfc.getSpdMsaFileCount()][4];
274 sfc.getSpdMsaFiles(saa);
275 int i = 0;
276 while (i < saa.length) {
277 model.addRow(saa[i]);
278 i++;
279 }
280 }
281
282 private JScrollPane getJScrollPane(){
283 if (jScrollPane == null){
284 jScrollPane = new JScrollPane();
285 jScrollPane.setViewportView(getJContentPane());
286 }
287 return jScrollPane;
288 }
289 /**
290 This method initializes jContentPane
291
292 @return javax.swing.JPanel
293 **/
294 private JPanel getJContentPane() {
295 if (jContentPane == null) {
296 jStarLabel2 = new StarLabel();
297 jStarLabel2.setLocation(new java.awt.Point(2,24));
298 jLabel = new JLabel();
299 jLabel.setBounds(new java.awt.Rectangle(17,24,111,22));
300 jLabel.setText("Msa File ");
301
302 jContentPane = new JPanel();
303 jContentPane.setPreferredSize(new Dimension(480, 325));
304 jContentPane.setLayout(null);
305 jContentPane.add(jLabel, null);
306 jContentPane.add(jStarLabel2, null);
307 jContentPane.add(getJScrollPane1(), null);
308 jContentPane.add(getJButtonAdd(), null);
309 jContentPane.add(getJButtonRemove(), null);
310 jContentPane.add(getJButtonClearAll(), null);
311 jContentPane.add(getJButtonCancel(), null);
312 jContentPane.add(getJButtonOk(), null);
313
314 jContentPane.add(getJTextField(), null);
315 jContentPane.add(getJButtonBrowse(), null);
316 }
317 return jContentPane;
318 }
319
320 /**
321 fill ComboBoxes with pre-defined contents
322 **/
323 private void initFrame() {
324
325 }
326
327 /* (non-Javadoc)
328 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
329 */
330 public void actionPerformed(ActionEvent arg0) {
331 if (arg0.getSource() == jButtonOk) {
332 this.save();
333 this.dispose();
334
335 }
336 if (arg0.getSource() == jButtonCancel) {
337 this.dispose();
338 }
339
340 if (arg0.getSource() == jButtonAdd) {
341 //ToDo: check before add
342 String[] row = {jTextField.getText().replace('\\', '/')};
343
344 model.addRow(row);
345 sfc.genSpdMsaFiles(row[0], null, null, null);
346 }
347 //
348 // remove selected line
349 //
350 if (arg0.getSource() == jButtonRemove) {
351 if (jTable.isEditing()){
352 jTable.getCellEditor().stopCellEditing();
353 }
354 int rowSelected = selectedRow;
355 if (rowSelected >= 0) {
356 model.removeRow(rowSelected);
357 sfc.removeSpdMsaFile(rowSelected);
358 }
359 }
360
361 if (arg0.getSource() == jButtonClearAll) {
362 if (model.getRowCount() == 0) {
363 return;
364 }
365 model.setRowCount(0);
366 sfc.removeSpdMsaFile();
367 }
368
369 }
370
371 public void tableChanged(TableModelEvent arg0) {
372 // TODO Auto-generated method stub
373 int row = arg0.getFirstRow();
374 TableModel m = (TableModel)arg0.getSource();
375 if (arg0.getType() == TableModelEvent.UPDATE){
376 String file = m.getValueAt(row, 0) + "";
377
378 sfc.updateSpdMsaFile(row, file, null, null, null);
379 }
380 }
381
382 /**
383 Add contents in list to sfc
384 **/
385 protected void save() {
386
387 }
388
389 /**
390 This method initializes jTextField
391
392 @return javax.swing.JTextField
393 **/
394 private JTextField getJTextField() {
395 if (jTextField == null) {
396 jTextField = new JTextField();
397 jTextField.setBounds(new java.awt.Rectangle(14,51,346,21));
398 jTextField.setPreferredSize(new java.awt.Dimension(345,20));
399 }
400 return jTextField;
401 }
402
403 /**
404 This method initializes jButtonBrowse
405
406 @return javax.swing.JButton
407 **/
408 private JButton getJButtonBrowse() {
409 if (jButtonBrowse == null) {
410 jButtonBrowse = new JButton();
411 jButtonBrowse.setBounds(new java.awt.Rectangle(376,50,92,21));
412 jButtonBrowse.setText("Browse");
413 jButtonBrowse.setPreferredSize(new java.awt.Dimension(90,20));
414 jButtonBrowse.addActionListener(new AbstractAction() {
415 public void actionPerformed(ActionEvent e) {
416 //
417 // Select files from current workspace
418 //
419 String dirPrefix = Tools.dirForNewSpd.substring(0, Tools.dirForNewSpd.lastIndexOf(File.separator));
420 JFileChooser chooser = new JFileChooser(dirPrefix);
421 File theFile = null;
422 String headerDest = null;
423
424 chooser.setMultiSelectionEnabled(false);
425 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
426 int retval = chooser.showOpenDialog(frame);
427 if (retval == JFileChooser.APPROVE_OPTION) {
428
429 theFile = chooser.getSelectedFile();
430 String file = theFile.getPath();
431 if (!file.startsWith(dirPrefix)) {
432 JOptionPane.showMessageDialog(frame, "You can only select files in current package!");
433 return;
434 }
435
436
437 }
438 else {
439 return;
440 }
441
442 headerDest = theFile.getPath();
443 int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), dirPrefix.length());
444
445 jTextField.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));
446
447 }
448 });
449 }
450 return jButtonBrowse;
451 }
452
453 public void componentResized(ComponentEvent arg0) {
454 int intPreferredWidth = 500;
455
456 resizeComponentWidth(this.jScrollPane1, this.getWidth(), intPreferredWidth);
457 resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);
458 relocateComponentX(this.jButtonBrowse, this.getWidth(), this.getPreferredSize().width, 25);
459 }
460
461 public static void main(String[] args){
462 new SpdMsaFiles().setVisible(true);
463 }
464 }
465
466