]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/ToolChainConfig.java
1. Restructure module description on main UI
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / ToolChainConfig.java
1 /** @file
2
3 The file is used to setup tool chain configuration
4
5 Copyright (c) 2006, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15 package org.tianocore.frameworkwizard;
16
17 import java.awt.event.ActionEvent;
18 import java.awt.event.WindowEvent;
19 import java.io.File;
20 import java.io.IOException;
21
22 import javax.swing.JButton;
23 import javax.swing.JFileChooser;
24 import javax.swing.JLabel;
25 import javax.swing.JPanel;
26 import javax.swing.JScrollPane;
27 import javax.swing.JTable;
28 import javax.swing.JTextField;
29 import javax.swing.ListSelectionModel;
30 import javax.swing.event.ListSelectionEvent;
31 import javax.swing.event.ListSelectionListener;
32 import javax.swing.event.TableModelEvent;
33 import javax.swing.event.TableModelListener;
34 import javax.swing.table.DefaultTableModel;
35 import javax.swing.table.TableModel;
36
37 import org.tianocore.frameworkwizard.common.DataType;
38 import org.tianocore.frameworkwizard.common.Log;
39 import org.tianocore.frameworkwizard.common.Tools;
40 import org.tianocore.frameworkwizard.common.Identifications.ToolChainConfigId;
41 import org.tianocore.frameworkwizard.common.Identifications.ToolChainConfigVector;
42 import org.tianocore.frameworkwizard.common.ui.IFrame;
43 import org.tianocore.frameworkwizard.workspace.Workspace;
44
45 public class ToolChainConfig extends IFrame implements ListSelectionListener, TableModelListener{
46
47 ///
48 /// Define Class Members
49 ///
50 private static final long serialVersionUID = 1486930966278269085L;
51
52 private JPanel jContentPane = null;
53
54 private JScrollPane jScrollPane = null;
55
56 private DefaultTableModel model = null;
57
58 private JTable jTable = null;
59
60 private JButton jButtonOpen = null;
61
62 private JButton jButtonSave = null;
63
64 private JButton jButtonClose = null;
65
66 private String toolsDir = Tools.addFileSeparator(Workspace.getCurrentWorkspace()) + "Tools"
67 + DataType.FILE_SEPARATOR + "Conf";
68
69 private String currentFile = Tools.addFileSeparator(toolsDir) + "tools_def.template";
70
71 private ToolChainConfigVector vtcc = new ToolChainConfigVector();
72
73 private JLabel jLabelName = null;
74
75 private JTextField jTextFieldName = null;
76
77 private JLabel jLabelValue = null;
78
79 private JTextField jTextFieldValue = null;
80
81 private JButton jButtonAdd = null;
82
83 private JButton jButtonRemove = null;
84
85 private int selectedRow = -1;
86
87 private JButton jButtonHelp = null;
88
89 private static ToolChainConfig tcc = null;
90
91 private ToolChainConfigHelp tcch = null;
92
93 /**
94 This method initializes jScrollPane
95
96 @return javax.swing.JScrollPane
97
98 **/
99 private JScrollPane getJScrollPane() {
100 if (jScrollPane == null) {
101 jScrollPane = new JScrollPane();
102 jScrollPane.setBounds(new java.awt.Rectangle(15, 15, 555, 345));
103 jScrollPane.setViewportView(getJTable());
104 }
105 return jScrollPane;
106 }
107
108 /**
109 This method initializes jTable
110
111 @return javax.swing.JTable
112
113 **/
114 private JTable getJTable() {
115 if (jTable == null) {
116 model = new DefaultTableModel();
117 jTable = new JTable(model);
118 jTable.setRowHeight(20);
119
120 model.addColumn("Property");
121 model.addColumn("Value");
122
123 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
124 jTable.getSelectionModel().addListSelectionListener(this);
125 jTable.getModel().addTableModelListener(this);
126 }
127 return jTable;
128 }
129
130 /**
131 This method initializes jButtonOpen
132
133 @return javax.swing.JButton
134
135 **/
136 private JButton getJButtonOpen() {
137 if (jButtonOpen == null) {
138 jButtonOpen = new JButton();
139 jButtonOpen.setBounds(new java.awt.Rectangle(40, 405, 120, 20));
140 jButtonOpen.setText("Open a file");
141 jButtonOpen.addActionListener(this);
142 }
143 return jButtonOpen;
144 }
145
146 /**
147 This method initializes jButtonSave
148
149 @return javax.swing.JButton
150
151 **/
152 private JButton getJButtonSave() {
153 if (jButtonSave == null) {
154 jButtonSave = new JButton();
155 jButtonSave.setBounds(new java.awt.Rectangle(170, 405, 120, 20));
156 jButtonSave.setText("Save to a file");
157 jButtonSave.addActionListener(this);
158 }
159 return jButtonSave;
160 }
161
162 /**
163 This method initializes jButtonClose
164
165 @return javax.swing.JButton
166
167 **/
168 private JButton getJButtonClose() {
169 if (jButtonClose == null) {
170 jButtonClose = new JButton();
171 jButtonClose.setBounds(new java.awt.Rectangle(490, 405, 80, 20));
172 jButtonClose.setText("Close");
173 jButtonClose.addActionListener(this);
174 }
175 return jButtonClose;
176 }
177
178 /**
179 This method initializes jTextFieldName
180
181 @return javax.swing.JTextField
182
183 **/
184 private JTextField getJTextFieldName() {
185 if (jTextFieldName == null) {
186 jTextFieldName = new JTextField();
187 jTextFieldName.setBounds(new java.awt.Rectangle(60, 365, 140, 20));
188 }
189 return jTextFieldName;
190 }
191
192 /**
193 This method initializes jTextFieldValue
194
195 @return javax.swing.JTextField
196
197 **/
198 private JTextField getJTextFieldValue() {
199 if (jTextFieldValue == null) {
200 jTextFieldValue = new JTextField();
201 jTextFieldValue.setBounds(new java.awt.Rectangle(250, 365, 140, 20));
202 }
203 return jTextFieldValue;
204 }
205
206 /**
207 This method initializes jButtonAdd
208
209 @return javax.swing.JButton
210
211 **/
212 private JButton getJButtonAdd() {
213 if (jButtonAdd == null) {
214 jButtonAdd = new JButton();
215 jButtonAdd.setBounds(new java.awt.Rectangle(400, 365, 80, 20));
216 jButtonAdd.setText("Add");
217 jButtonAdd.addActionListener(this);
218 }
219 return jButtonAdd;
220 }
221
222 /**
223 This method initializes jButtonRemove
224
225 @return javax.swing.JButton
226
227 **/
228 private JButton getJButtonRemove() {
229 if (jButtonRemove == null) {
230 jButtonRemove = new JButton();
231 jButtonRemove.setBounds(new java.awt.Rectangle(490, 365, 80, 20));
232 jButtonRemove.setText("Remove");
233 jButtonRemove.addActionListener(this);
234 }
235 return jButtonRemove;
236 }
237
238 /**
239 * This method initializes jButtonHelp
240 *
241 * @return javax.swing.JButton
242 */
243 private JButton getJButtonHelp() {
244 if (jButtonHelp == null) {
245 jButtonHelp = new JButton();
246 jButtonHelp.setBounds(new java.awt.Rectangle(300,405,120,20));
247 jButtonHelp.setText("Help");
248 jButtonHelp.addActionListener(this);
249 }
250 return jButtonHelp;
251 }
252
253 /**
254
255 @param args
256
257 **/
258 public static void main(String[] args) {
259 // TODO Auto-generated method stub
260
261 }
262
263 public static ToolChainConfig getInstance() {
264 if (tcc == null) {
265 tcc = new ToolChainConfig();
266 }
267 return tcc;
268 }
269
270 /**
271 * This is the default constructor
272 */
273 public ToolChainConfig() {
274 super();
275 init();
276 }
277
278 /**
279 This method initializes this
280
281 **/
282 private void init() {
283 this.setSize(600, 480);
284 this.setContentPane(getJContentPane());
285 this.setTitle("Tool Chain Configuration");
286 this.centerWindow();
287
288 //
289 // Read default file
290 //
291 File f = new File(currentFile);
292 if (f.exists()) {
293 try {
294 vtcc.removeAll();
295 vtcc.parseFile(this.currentFile);
296 this.setTitle("Tool Chain Configuration" + " [" + currentFile + "]");
297 } catch (IOException e) {
298 Log.log(this.currentFile + "Read Error", e.getMessage());
299 e.printStackTrace();
300 }
301 } else {
302 Log.log("Open file", this.currentFile + " Not Found");
303 }
304
305 showTable();
306 }
307
308 /**
309 This method initializes jContentPane
310
311 @return javax.swing.JPanel
312
313 **/
314 private JPanel getJContentPane() {
315 if (jContentPane == null) {
316 jLabelValue = new JLabel();
317 jLabelValue.setBounds(new java.awt.Rectangle(205, 365, 40, 20));
318 jLabelValue.setText("Value");
319 jLabelName = new JLabel();
320 jLabelName.setBounds(new java.awt.Rectangle(15, 365, 40, 20));
321 jLabelName.setText("Name");
322 jContentPane = new JPanel();
323 jContentPane.setLayout(null);
324 jContentPane.add(getJScrollPane(), null);
325 jContentPane.add(getJButtonOpen(), null);
326 jContentPane.add(getJButtonSave(), null);
327 jContentPane.add(getJButtonClose(), null);
328 jContentPane.add(jLabelName, null);
329 jContentPane.add(getJTextFieldName(), null);
330 jContentPane.add(jLabelValue, null);
331 jContentPane.add(getJTextFieldValue(), null);
332 jContentPane.add(getJButtonAdd(), null);
333 jContentPane.add(getJButtonRemove(), null);
334 jContentPane.add(getJButtonHelp(), null);
335 }
336 return jContentPane;
337 }
338
339 /* (non-Javadoc)
340 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
341 *
342 * Override actionPerformed to listen all actions
343 */
344 public void actionPerformed(ActionEvent arg0) {
345 if (arg0.getSource() == jButtonClose) {
346 this.exit();
347 }
348
349 if (arg0.getSource() == jButtonOpen) {
350 JFileChooser fc = new JFileChooser();
351 fc.setAcceptAllFileFilterUsed(true);
352 fc.setCurrentDirectory(new File(toolsDir));
353
354 int result = fc.showOpenDialog(new JPanel());
355 if (result == JFileChooser.APPROVE_OPTION) {
356 try {
357 vtcc.removeAll();
358 vtcc.parseFile(fc.getSelectedFile().getPath());
359 currentFile = fc.getSelectedFile().getPath();
360 this.setTitle("Tool Chain Configuration" + " [" + currentFile + "]");
361 } catch (IOException e) {
362 Log.err(this.currentFile + "Read Error", e.getMessage());
363 e.printStackTrace();
364 return;
365 }
366 this.showTable();
367 }
368 }
369
370 if (arg0.getSource() == jButtonSave) {
371 JFileChooser fc = new JFileChooser();
372 fc.setAcceptAllFileFilterUsed(true);
373 fc.setSelectedFile(new File(currentFile));
374
375 int result = fc.showSaveDialog(new JPanel());
376 if (result == JFileChooser.APPROVE_OPTION) {
377 currentFile = fc.getSelectedFile().getPath();
378 try {
379 vtcc.saveFile(currentFile);
380 } catch (IOException e) {
381 Log.err(this.currentFile + "Write Error", e.getMessage());
382 e.printStackTrace();
383 return;
384 }
385 }
386 }
387
388 if (arg0.getSource() == jButtonAdd) {
389 if (check()) {
390 String[] row = { jTextFieldName.getText(), jTextFieldValue.getText() };
391 this.vtcc.addToolChainConfigs(new ToolChainConfigId(row[0], row[1]));
392 this.model.addRow(row);
393 }
394 }
395
396 if (arg0.getSource() == jButtonRemove) {
397 if (jTable.isEditing()) {
398 jTable.getCellEditor().stopCellEditing();
399 }
400 if (selectedRow > -1) {
401 this.model.removeRow(selectedRow);
402 this.vtcc.removeToolChainConfigs(selectedRow);
403 selectedRow = -1;
404 }
405 }
406
407 if (arg0.getSource() == jButtonHelp) {
408 tcch = ToolChainConfigHelp.getInstance();
409 tcch.setVisible(true);
410 }
411 }
412
413 /**
414 Read content of vector and put then into table
415
416 **/
417 private void showTable() {
418 clearAll();
419
420 if (vtcc.size() > 0) {
421 for (int index = 0; index < vtcc.size(); index++) {
422 model.addRow(vtcc.toStringVector(index));
423 }
424 }
425 this.jTable.repaint();
426 this.jTable.updateUI();
427 //this.jScrollPane.setViewportView(this.jTable);
428 }
429
430 /**
431 Clear all table rows
432
433 **/
434 private void clearAll() {
435 if (model != null) {
436 for (int index = model.getRowCount() - 1; index >= 0; index--) {
437 model.removeRow(index);
438 }
439 }
440 }
441
442 /**
443 Check if name or value is empty
444
445 @return
446
447 **/
448 private boolean check() {
449 if (isEmpty(this.jTextFieldName.getText())) {
450 Log.err("Add Tool Chain", "Name couldn't be empty!");
451 return false;
452 }
453
454 if (isEmpty(this.jTextFieldValue.getText())) {
455 Log.err("Add Tool Chain", "Value couldn't be empty");
456 return false;
457 }
458 return true;
459 }
460
461 /* (non-Javadoc)
462 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
463 *
464 */
465 public void valueChanged(ListSelectionEvent arg0) {
466 if (arg0.getValueIsAdjusting()) {
467 return;
468 }
469 ListSelectionModel lsm = (ListSelectionModel) arg0.getSource();
470 if (lsm.isSelectionEmpty()) {
471 return;
472 } else {
473 selectedRow = lsm.getMinSelectionIndex();
474 }
475 }
476
477 public void tableChanged(TableModelEvent arg0) {
478 int row = arg0.getFirstRow();
479 TableModel m = (TableModel)arg0.getSource();
480 if (arg0.getType() == TableModelEvent.UPDATE){
481 this.vtcc.getToolChainConfigs(row).setName(m.getValueAt(row, 0).toString());
482 this.vtcc.getToolChainConfigs(row).setValue(m.getValueAt(row, 1).toString());
483 }
484 }
485
486 /* (non-Javadoc)
487 * @see java.awt.event.WindowListener#windowClosing(java.awt.event.WindowEvent)
488 *
489 * Override windowClosing to popup warning message to confirm quit
490 *
491 */
492 public void windowClosing(WindowEvent arg0) {
493 this.exit();
494 }
495
496 private void exit() {
497 this.setVisible(false);
498 if (tcch != null) {
499 tcch.dispose();
500 }
501 }
502 }