]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/ModuleSourceFiles.java
Use table and popup window to add/edit all elements of module instead of original...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / ModuleSourceFiles.java
CommitLineData
a13899c5 1/** @file\r
2 \r
3 The file is used to create, update SourceFile of MSA/MBD file\r
4 \r
5 Copyright (c) 2006, Intel Corporation\r
6 All rights reserved. This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10 \r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 \r
14 **/\r
15package org.tianocore.frameworkwizard.module.ui;\r
16\r
06a19cee 17import java.awt.Dimension;\r
a13899c5 18import java.awt.event.ActionEvent;\r
19import java.awt.event.ComponentEvent;\r
06a19cee 20import java.awt.event.MouseEvent;\r
a13899c5 21import java.util.Vector;\r
22\r
23import javax.swing.JButton;\r
24import javax.swing.JCheckBox;\r
a13899c5 25import javax.swing.JPanel;\r
26import javax.swing.JScrollPane;\r
06a19cee 27import javax.swing.JTable;\r
28import javax.swing.ListSelectionModel;\r
29import javax.swing.event.ListSelectionEvent;\r
a13899c5 30\r
31import org.tianocore.SourceFilesDocument;\r
32import org.tianocore.FilenameDocument.Filename;\r
33import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r
34import org.tianocore.SourceFilesDocument.SourceFiles;\r
35import org.tianocore.frameworkwizard.common.DataType;\r
06a19cee 36import org.tianocore.frameworkwizard.common.IDefaultTableModel;\r
a13899c5 37import org.tianocore.frameworkwizard.common.Log;\r
a13899c5 38import org.tianocore.frameworkwizard.common.Tools;\r
79cb6fdb 39import org.tianocore.frameworkwizard.common.Identifications.OpeningModuleType;\r
06a19cee 40import org.tianocore.frameworkwizard.common.ui.IFrame;\r
a13899c5 41import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
79cb6fdb 42import org.tianocore.frameworkwizard.module.Identifications.SourceFiles.SourceFilesIdentification;\r
43import org.tianocore.frameworkwizard.module.Identifications.SourceFiles.SourceFilesVector;\r
06a19cee 44import org.tianocore.frameworkwizard.module.ui.dialog.SourceFilesDlg;\r
a13899c5 45\r
46/**\r
47 The class is used to create, update SourceFile of MSA/MBD file\r
48 It extends IInternalFrame\r
49 \r
a13899c5 50 **/\r
51public class ModuleSourceFiles extends IInternalFrame {\r
52\r
53 ///\r
54 /// Define class Serial Version UID\r
55 ///\r
56 private static final long serialVersionUID = -6765742852142775378L;\r
57\r
58 //\r
59 // Define class members\r
60 //\r
61 private SourceFilesDocument.SourceFiles sourceFiles = null;\r
62\r
a13899c5 63 private JPanel jContentPane = null;\r
64\r
a13899c5 65 private JButton jButtonAdd = null;\r
66\r
67 private JButton jButtonRemove = null;\r
68\r
69 private JButton jButtonUpdate = null;\r
70\r
71 private JCheckBox jCheckBoxArch = null;\r
72\r
a13899c5 73 private JScrollPane jScrollPane = null;\r
74\r
06a19cee 75 private JScrollPane jScrollPaneTable = null;\r
a13899c5 76\r
06a19cee 77 private JTable jTable = null;\r
a13899c5 78\r
79 //\r
80 // Not used by UI\r
81 //\r
82 private OpeningModuleType omt = null;\r
a13899c5 83\r
06a19cee 84 private ModuleSurfaceArea msa = null;\r
a13899c5 85\r
86 private SourceFilesVector vSourceFiles = new SourceFilesVector();\r
87\r
06a19cee 88 private IDefaultTableModel model = null;\r
a13899c5 89\r
06a19cee 90 private int selectedRow = -1;\r
a13899c5 91\r
92 /**\r
93 This method initializes jButtonAdd \r
94 \r
95 @return javax.swing.JButton jButtonAdd\r
96 \r
97 **/\r
98 private JButton getJButtonAdd() {\r
99 if (jButtonAdd == null) {\r
100 jButtonAdd = new JButton();\r
101 jButtonAdd.setBounds(new java.awt.Rectangle(230, 220, 80, 20));\r
102 jButtonAdd.setText("Add");\r
103 jButtonAdd.addActionListener(this);\r
104 jButtonAdd.setPreferredSize(new java.awt.Dimension(80, 20));\r
105 }\r
106 return jButtonAdd;\r
107 }\r
108\r
109 /**\r
110 This method initializes jButtonRemove \r
111 \r
112 @return javax.swing.JButton jButtonRemove\r
113 \r
114 **/\r
115 private JButton getJButtonRemove() {\r
116 if (jButtonRemove == null) {\r
117 jButtonRemove = new JButton();\r
118 jButtonRemove.setBounds(new java.awt.Rectangle(400, 220, 80, 20));\r
119 jButtonRemove.setText("Remove");\r
120 jButtonRemove.addActionListener(this);\r
121 jButtonRemove.setPreferredSize(new java.awt.Dimension(80, 20));\r
122 }\r
123 return jButtonRemove;\r
124 }\r
125\r
126 /**\r
127 This method initializes jButtonUpdate \r
128 \r
129 @return javax.swing.JButton jButtonUpdate\r
130 \r
131 **/\r
132 private JButton getJButtonUpdate() {\r
133 if (jButtonUpdate == null) {\r
134 jButtonUpdate = new JButton();\r
135 jButtonUpdate.setBounds(new java.awt.Rectangle(315, 220, 80, 20));\r
136 jButtonUpdate.setPreferredSize(new java.awt.Dimension(80, 20));\r
06a19cee 137 jButtonUpdate.setText("Edit");\r
a13899c5 138 jButtonUpdate.addActionListener(this);\r
139 }\r
140 return jButtonUpdate;\r
141 }\r
142\r
a13899c5 143 /**\r
144 This method initializes jScrollPane \r
145 \r
146 @return javax.swing.JScrollPane \r
147 */\r
148 private JScrollPane getJScrollPane() {\r
149 if (jScrollPane == null) {\r
150 jScrollPane = new JScrollPane();\r
151 jScrollPane.setViewportView(getJContentPane());\r
152 }\r
153 return jScrollPane;\r
154 }\r
155\r
156 /**\r
06a19cee 157 * This method initializes jScrollPaneTable \r
158 * \r
159 * @return javax.swing.JScrollPane \r
a13899c5 160 */\r
06a19cee 161 private JScrollPane getJScrollPaneTable() {\r
162 if (jScrollPaneTable == null) {\r
163 jScrollPaneTable = new JScrollPane();\r
164 jScrollPaneTable.setBounds(new java.awt.Rectangle(15, 10, 470, 420));\r
165 jScrollPaneTable.setPreferredSize(new Dimension(470, 420));\r
166 jScrollPaneTable.setViewportView(getJTable());\r
a13899c5 167 }\r
06a19cee 168 return jScrollPaneTable;\r
a13899c5 169 }\r
170\r
171 /**\r
06a19cee 172 * This method initializes jTable \r
173 * \r
174 * @return javax.swing.JTable \r
a13899c5 175 */\r
06a19cee 176 private JTable getJTable() {\r
177 if (jTable == null) {\r
178 jTable = new JTable();\r
179 model = new IDefaultTableModel();\r
180 jTable = new JTable(model);\r
181 jTable.setRowHeight(20);\r
a13899c5 182\r
06a19cee 183 model.addColumn("File Name");\r
a13899c5 184\r
06a19cee 185 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
186 jTable.getSelectionModel().addListSelectionListener(this);\r
187 jTable.getModel().addTableModelListener(this);\r
188 jTable.addMouseListener(this);\r
a13899c5 189 }\r
06a19cee 190 return jTable;\r
a13899c5 191 }\r
192\r
193 public static void main(String[] args) {\r
194\r
195 }\r
196\r
197 /**\r
198 This is the default constructor\r
199 \r
200 **/\r
201 public ModuleSourceFiles() {\r
202 super();\r
203 init();\r
204 this.setVisible(true);\r
205 }\r
206\r
207 /**\r
208 This is the override edit constructor\r
209 \r
210 @param \r
211 \r
212 **/\r
213 public ModuleSourceFiles(OpeningModuleType inOmt) {\r
214 super();\r
215 this.omt = inOmt;\r
06a19cee 216 this.msa = omt.getXmlMsa();\r
a13899c5 217 init(msa.getSourceFiles());\r
218 this.setVisible(true);\r
219 }\r
220\r
221 /** \r
222 This method initializes this\r
223 Fill values to all fields if these values are not empty\r
224 \r
225 \r
226 @param inSourceFiles The input data of SourceFilesDocument.SourceFiles\r
227 \r
228 **/\r
229 private void init(SourceFilesDocument.SourceFiles inSourceFiles) {\r
230 init();\r
231 this.sourceFiles = inSourceFiles;\r
232\r
233 if (this.sourceFiles != null) {\r
234 if (this.sourceFiles.getFilenameList().size() > 0) {\r
235 for (int index = 0; index < this.sourceFiles.getFilenameList().size(); index++) {\r
236 String name = sourceFiles.getFilenameList().get(index).getStringValue();\r
237 String tagName = sourceFiles.getFilenameList().get(index).getTagName();\r
238 String toolCode = sourceFiles.getFilenameList().get(index).getToolCode();\r
239 String tcf = sourceFiles.getFilenameList().get(index).getToolChainFamily();\r
240 String featureFlag = sourceFiles.getFilenameList().get(index).getFeatureFlag();\r
241 Vector<String> arch = Tools.convertListToVector(sourceFiles.getFilenameList().get(index)\r
242 .getSupArchList());\r
243 SourceFilesIdentification sfid = new SourceFilesIdentification(name, tagName, toolCode, tcf,\r
244 featureFlag, arch);\r
245 vSourceFiles.addSourceFiles(sfid);\r
246 }\r
247 }\r
248 }\r
06a19cee 249 showTable();\r
a13899c5 250 }\r
251\r
252 /**\r
253 This method initializes this\r
254 \r
255 **/\r
256 private void init() {\r
257 this.setSize(500, 515);\r
258 this.setContentPane(getJScrollPane());\r
259 this.setTitle("Source Files");\r
a13899c5 260 this.setViewMode(false);\r
261 }\r
262\r
263 /**\r
264 Disable all components when the mode is view\r
265 \r
266 @param isView true - The view mode; false - The non-view mode\r
267 \r
268 **/\r
269 public void setViewMode(boolean isView) {\r
270 if (isView) {\r
a13899c5 271 this.jButtonAdd.setEnabled(!isView);\r
272 this.jButtonRemove.setEnabled(!isView);\r
273 this.jButtonUpdate.setEnabled(!isView);\r
274 this.jCheckBoxArch.setEnabled(!isView);\r
275 }\r
276 }\r
277\r
278 /**\r
279 This method initializes jContentPane\r
280 \r
281 @return javax.swing.JPanel jContentPane\r
282 \r
283 **/\r
284 private JPanel getJContentPane() {\r
285 if (jContentPane == null) {\r
a13899c5 286 jContentPane = new JPanel();\r
287 jContentPane.setLayout(null);\r
288 jContentPane.setPreferredSize(new java.awt.Dimension(490, 490));\r
289\r
a13899c5 290 jContentPane.add(getJButtonAdd(), null);\r
291 jContentPane.add(getJButtonRemove(), null);\r
292 jContentPane.add(getJButtonUpdate(), null);\r
06a19cee 293 jContentPane.add(getJScrollPaneTable(), null);\r
a13899c5 294 }\r
295 return jContentPane;\r
296 }\r
297\r
a13899c5 298 /**\r
299 Save all components of SourceFiles\r
300 if exists sourceFiles, set the value directly\r
301 if not exists sourceFiles, new an instance first\r
302 \r
303 **/\r
304 public void save() {\r
305 try {\r
306 //\r
307 //Save as file name\r
308 //\r
309 int count = this.vSourceFiles.size();\r
310\r
311 this.sourceFiles = SourceFiles.Factory.newInstance();\r
312 if (count > 0) {\r
313 for (int index = 0; index < count; index++) {\r
314 Filename mFilename = Filename.Factory.newInstance();\r
315 if (!isEmpty(vSourceFiles.getSourceFiles(index).getFilename())) {\r
316 mFilename.setStringValue(vSourceFiles.getSourceFiles(index).getFilename());\r
317 }\r
318 if (!isEmpty(vSourceFiles.getSourceFiles(index).getTagName())) {\r
319 mFilename.setTagName(vSourceFiles.getSourceFiles(index).getTagName());\r
320 }\r
321 if (!isEmpty(vSourceFiles.getSourceFiles(index).getToolCode())) {\r
322 mFilename.setToolCode(vSourceFiles.getSourceFiles(index).getToolCode());\r
323 }\r
324 if (!isEmpty(vSourceFiles.getSourceFiles(index).getToolChainFamily())) {\r
325 mFilename.setToolChainFamily(vSourceFiles.getSourceFiles(index).getToolChainFamily());\r
326 }\r
327 if (!isEmpty(vSourceFiles.getSourceFiles(index).getFeatureFlag())) {\r
328 mFilename.setFeatureFlag(vSourceFiles.getSourceFiles(index).getFeatureFlag());\r
329 }\r
330 if (vSourceFiles.getSourceFiles(index).getSupArchList() != null\r
331 && vSourceFiles.getSourceFiles(index).getSupArchList().size() > 0) {\r
332 mFilename.setSupArchList(vSourceFiles.getSourceFiles(index).getSupArchList());\r
333 }\r
334\r
335 this.sourceFiles.addNewFilename();\r
336 this.sourceFiles.setFilenameArray(index, mFilename);\r
337 }\r
338 }\r
339 this.msa.setSourceFiles(sourceFiles);\r
340 this.omt.setSaved(false);\r
341 } catch (Exception e) {\r
a13899c5 342 Log.err("Update Source Files", e.getMessage());\r
343 }\r
344 }\r
345\r
06a19cee 346 private void showEdit(int index) {\r
347 SourceFilesDlg sfd = new SourceFilesDlg(this.vSourceFiles.getSourceFiles(index), new IFrame());\r
348 int result = sfd.showDialog();\r
349 if (result == DataType.RETURN_TYPE_OK) {\r
350 if (index == -1) {\r
351 this.vSourceFiles.addSourceFiles(sfd.getSfid());\r
352 } else {\r
353 this.vSourceFiles.setSourceFiles(sfd.getSfid(), index);\r
354 }\r
355 this.showTable();\r
356 this.save();\r
357 sfd.dispose();\r
358 }\r
359 if (result == DataType.RETURN_TYPE_CANCEL) {\r
360 sfd.dispose();\r
361 }\r
362 }\r
363\r
364 /* (non-Javadoc)\r
365 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
366 *\r
367 * Override actionPerformed to listen all actions\r
368 * \r
369 */\r
370 public void actionPerformed(ActionEvent arg0) {\r
371 if (arg0.getSource() == jButtonAdd) {\r
372 showEdit(-1);\r
373 }\r
374 if (arg0.getSource() == jButtonUpdate) {\r
375 if (this.selectedRow < 0) {\r
376 Log.err("Please select one record first.");\r
377 return;\r
378 }\r
379 showEdit(selectedRow);\r
380 }\r
381\r
382 if (arg0.getSource() == jButtonRemove) {\r
383 if (jTable.isEditing()) {\r
384 jTable.getCellEditor().stopCellEditing();\r
385 }\r
386 if (selectedRow > -1) {\r
387 this.model.removeRow(selectedRow);\r
388 this.vSourceFiles.removeSourceFiles(selectedRow);\r
389 selectedRow = -1;\r
390 this.save();\r
391 }\r
392 }\r
393 }\r
394\r
a13899c5 395 /**\r
06a19cee 396 Clear all table rows\r
a13899c5 397 \r
398 **/\r
06a19cee 399 private void clearAll() {\r
400 if (model != null) {\r
401 for (int index = model.getRowCount() - 1; index >= 0; index--) {\r
402 model.removeRow(index);\r
403 }\r
404 }\r
405 }\r
a13899c5 406\r
06a19cee 407 /**\r
408 Read content of vector and put then into table\r
409 \r
410 **/\r
411 private void showTable() {\r
412 clearAll();\r
413\r
414 if (vSourceFiles.size() > 0) {\r
415 for (int index = 0; index < vSourceFiles.size(); index++) {\r
416 model.addRow(vSourceFiles.toStringVector(index));\r
417 }\r
418 }\r
419 this.jTable.repaint();\r
420 this.jTable.updateUI();\r
421 //this.jScrollPane.setViewportView(this.jTable);\r
422 }\r
423\r
424 /* (non-Javadoc)\r
425 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)\r
426 *\r
427 */\r
428 public void valueChanged(ListSelectionEvent arg0) {\r
429 if (arg0.getValueIsAdjusting()) {\r
430 return;\r
431 }\r
432 ListSelectionModel lsm = (ListSelectionModel) arg0.getSource();\r
433 if (lsm.isSelectionEmpty()) {\r
434 return;\r
435 } else {\r
436 selectedRow = lsm.getMinSelectionIndex();\r
437 }\r
438 }\r
439\r
440 /* (non-Javadoc)\r
441 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)\r
442 *\r
443 */\r
444 public void mouseClicked(MouseEvent arg0) {\r
445 if (arg0.getClickCount() == 2) {\r
446 if (this.selectedRow < 0) {\r
447 return;\r
448 } else {\r
449 showEdit(selectedRow);\r
450 }\r
a13899c5 451 }\r
452 }\r
453\r
454 /* (non-Javadoc)\r
455 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)\r
456 * \r
457 * Override componentResized to resize all components when frame's size is changed\r
458 */\r
459 public void componentResized(ComponentEvent arg0) {\r
460 int intCurrentWidth = this.getJContentPane().getWidth();\r
461 int intCurrentHeight = this.getJContentPane().getHeight();\r
462 int intPreferredWidth = this.getJContentPane().getPreferredSize().width;\r
463 int intPreferredHeight = this.getJContentPane().getPreferredSize().height;\r
464\r
06a19cee 465 resizeComponent(this.jScrollPaneTable, intCurrentWidth, intCurrentHeight, intPreferredWidth, intPreferredHeight);\r
466 relocateComponent(this.jButtonAdd, intCurrentWidth, intCurrentHeight, intPreferredWidth, intPreferredHeight,\r
467 DataType.SPACE_TO_RIGHT_FOR_ADD_BUTTON, DataType.SPACE_TO_BOTTOM_FOR_ADD_BUTTON);\r
468 relocateComponent(this.jButtonRemove, intCurrentWidth, intCurrentHeight, intPreferredWidth, intPreferredHeight,\r
469 DataType.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON, DataType.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON);\r
470 relocateComponent(this.jButtonUpdate, intCurrentWidth, intCurrentHeight, intPreferredWidth, intPreferredHeight,\r
471 DataType.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON, DataType.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON);\r
a13899c5 472 }\r
473}\r