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