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