]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFvOptions.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 / platform / ui / FpdFvOptions.java
... / ...
CommitLineData
1/** @file\r
2 Java class FpdFvOptions is GUI for FV options in FPD 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.platform.ui;\r
14\r
15import java.awt.BorderLayout;\r
16import java.awt.Dimension;\r
17import java.awt.Toolkit;\r
18import java.awt.event.MouseEvent;\r
19import java.awt.event.WindowEvent;\r
20import java.util.Iterator;\r
21import java.util.LinkedHashMap;\r
22import java.util.Set;\r
23\r
24import javax.swing.JFrame;\r
25import javax.swing.JOptionPane;\r
26import javax.swing.JPanel;\r
27import javax.swing.JDialog;\r
28import javax.swing.JScrollPane;\r
29import javax.swing.JTable;\r
30import javax.swing.ListSelectionModel;\r
31import javax.swing.event.ListSelectionEvent;\r
32import javax.swing.event.ListSelectionListener;\r
33import javax.swing.event.TableModelEvent;\r
34import javax.swing.event.TableModelListener;\r
35import javax.swing.table.DefaultTableModel;\r
36import javax.swing.table.TableModel;\r
37import javax.swing.JButton;\r
38\r
39import org.tianocore.frameworkwizard.FrameworkWizardUI;\r
40import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
41\r
42/**\r
43 * \r
44 *\r
45 */\r
46public class FpdFvOptions extends JDialog {\r
47\r
48 /**\r
49 * \r
50 */\r
51 private static final long serialVersionUID = 1L;\r
52 private static JFrame frame;\r
53 private JPanel jContentPane = null;\r
54 private JPanel jPanelN = null;\r
55 private JPanel jPanelS = null;\r
56 private JPanel jPanelC = null;\r
57 private JScrollPane jScrollPaneFvOptions = null;\r
58 private JTable jTableFvOptions = null;\r
59 private DefaultTableModel tableModel = null;\r
60 private String fvName = null;\r
61 private FpdFileContents ffc = null;\r
62 private OpeningPlatformType docConsole = null;\r
63 private JButton jButtonNew = null;\r
64 private JButton jButtonDelete = null;\r
65 private String oldOptionName = "";\r
66 private int selectedRow = -1;\r
67 private TableModelListener tableModelListener = null;\r
68\r
69 /**\r
70 * This is the default constructor\r
71 */\r
72 public FpdFvOptions(String name, DefaultTableModel tm, FpdFileContents ffc, OpeningPlatformType dc) {\r
73 super(FrameworkWizardUI.getInstance());\r
74 fvName = name;\r
75 this.ffc = ffc;\r
76 this.docConsole = dc;\r
77 setTableModel(tm);\r
78 initOptions();\r
79 initialize();\r
80 \r
81 }\r
82 \r
83 protected void processWindowEvent (WindowEvent e) {\r
84 if (e.getID() == WindowEvent.WINDOW_CLOSING) {\r
85 if (jTableFvOptions.isEditing()) {\r
86 jTableFvOptions.getCellEditor().stopCellEditing();\r
87 }\r
88 tableModel.removeTableModelListener(tableModelListener);\r
89 this.dispose();\r
90 }\r
91 }\r
92\r
93 private void initOptions() {\r
94 tableModel.setRowCount(0);\r
95 LinkedHashMap<String, String> mOpts = new LinkedHashMap<String, String>();\r
96 ffc.getFvImagesFvImageOptions(fvName, mOpts);\r
97 Set<String> sKey = mOpts.keySet();\r
98 Iterator<String> iter = sKey.iterator();\r
99 while (iter.hasNext()) {\r
100 String name = iter.next();\r
101 String value = mOpts.get(name);\r
102 tableModel.addRow(new String[]{name, value});\r
103 }\r
104 }\r
105 \r
106 private boolean fvOptionNameExists (String name) {\r
107 int count = 0;\r
108 for (int i = 0; i < jTableFvOptions.getRowCount(); ++i) {\r
109 if (getTableModel().getValueAt(i, 0).equals(name)) {\r
110 ++count;\r
111 }\r
112 }\r
113 if (count > 1) {\r
114 return true;\r
115 }\r
116 return false;\r
117 }\r
118 /**\r
119 * This method initializes this\r
120 * \r
121 * @return void\r
122 */\r
123 private void initialize() {\r
124 this.setSize(650, 400);\r
125 this.setModal(true);\r
126 this.setTitle("FV Options");\r
127 this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);\r
128 this.setContentPane(getJContentPane());\r
129 this.centerWindow();\r
130 this.setVisible(true);\r
131 \r
132 }\r
133\r
134 /**\r
135 * This method initializes jContentPane\r
136 * \r
137 * @return javax.swing.JPanel\r
138 */\r
139 private JPanel getJContentPane() {\r
140 if (jContentPane == null) {\r
141 jContentPane = new JPanel();\r
142 jContentPane.setLayout(new BorderLayout());\r
143 jContentPane.add(getJPanelN(), java.awt.BorderLayout.NORTH);\r
144 jContentPane.add(getJPanelS(), java.awt.BorderLayout.SOUTH);\r
145 jContentPane.add(getJPanelC(), java.awt.BorderLayout.CENTER);\r
146 }\r
147 return jContentPane;\r
148 }\r
149\r
150 /**\r
151 * This method initializes jPanelN \r
152 * \r
153 * @return javax.swing.JPanel \r
154 */\r
155 private JPanel getJPanelN() {\r
156 if (jPanelN == null) {\r
157 jPanelN = new JPanel();\r
158 }\r
159 return jPanelN;\r
160 }\r
161\r
162 /**\r
163 * This method initializes jPanelS \r
164 * \r
165 * @return javax.swing.JPanel \r
166 */\r
167 private JPanel getJPanelS() {\r
168 if (jPanelS == null) {\r
169 jPanelS = new JPanel();\r
170 jPanelS.add(getJButtonNew(), null);\r
171 jPanelS.add(getJButtonDelete(), null);\r
172 }\r
173 return jPanelS;\r
174 }\r
175\r
176 /**\r
177 * This method initializes jPanelC \r
178 * \r
179 * @return javax.swing.JPanel \r
180 */\r
181 private JPanel getJPanelC() {\r
182 if (jPanelC == null) {\r
183 jPanelC = new JPanel();\r
184 jPanelC.add(getJScrollPaneFvOptions(), null);\r
185 }\r
186 return jPanelC;\r
187 }\r
188\r
189 /**\r
190 * This method initializes jScrollPaneFvOptions \r
191 * \r
192 * @return javax.swing.JScrollPane \r
193 */\r
194 private JScrollPane getJScrollPaneFvOptions() {\r
195 if (jScrollPaneFvOptions == null) {\r
196 jScrollPaneFvOptions = new JScrollPane();\r
197 jScrollPaneFvOptions.setPreferredSize(new java.awt.Dimension(600,320));\r
198 jScrollPaneFvOptions.setViewportView(getJTableFvOptions());\r
199 }\r
200 return jScrollPaneFvOptions;\r
201 }\r
202\r
203 /**\r
204 * This method initializes jTableFvOptions \r
205 * \r
206 * @return javax.swing.JTable \r
207 */\r
208 private JTable getJTableFvOptions() {\r
209 if (jTableFvOptions == null) {\r
210 jTableFvOptions = new JTable(getTableModel()) {\r
211 /**\r
212 * \r
213 */\r
214 private static final long serialVersionUID = -1941328952828651192L;\r
215\r
216 public String getToolTipText(MouseEvent e) {\r
217 String tip = null;\r
218 java.awt.Point p = e.getPoint();\r
219 int rowIndex = rowAtPoint(p);\r
220// int colIndex = columnAtPoint(p);\r
221// int realColumnIndex = convertColumnIndexToModel(colIndex);\r
222\r
223 TableModel model = getModel();\r
224 String optName = (String) model.getValueAt(rowIndex, 0);\r
225 if (((FvOptsTableModel)model).getVKeyWords().contains(optName)){\r
226 tip = optName + " is from Flash Definition File and it is NOT editable.";\r
227 }\r
228 \r
229 return tip;\r
230 }\r
231\r
232 };\r
233 \r
234 jTableFvOptions.setRowHeight(20);\r
235 \r
236 jTableFvOptions.getSelectionModel().addListSelectionListener(new ListSelectionListener() {\r
237 public void valueChanged(ListSelectionEvent e) {\r
238 if (e.getValueIsAdjusting()) {\r
239 return;\r
240 }\r
241 ListSelectionModel lsm = (ListSelectionModel) e.getSource();\r
242 if (lsm.isSelectionEmpty()) {\r
243 return;\r
244 } else {\r
245 selectedRow = lsm.getMinSelectionIndex();\r
246 oldOptionName = getTableModel().getValueAt(selectedRow, 0)+"";\r
247 }\r
248 }\r
249 });\r
250 \r
251 tableModelListener = new TableModelListener() {\r
252 public void tableChanged(TableModelEvent arg0) {\r
253 // TODO Auto-generated method stub\r
254 int row = arg0.getFirstRow();\r
255 int col = arg0.getColumn();\r
256 TableModel m = (TableModel) arg0.getSource();\r
257 \r
258 if (arg0.getType() == TableModelEvent.UPDATE) {\r
259 String newOptionName = m.getValueAt(row, 0) + "";\r
260 if (col == 0) {\r
261 if (newOptionName.equals(oldOptionName)) {\r
262 return;\r
263 }\r
264 if (fvOptionNameExists(newOptionName)) {\r
265 JOptionPane.showMessageDialog(frame, "This Option already exists. Please choose another Option name.");\r
266 m.setValueAt(oldOptionName, row, 0);\r
267 return;\r
268 }\r
269 \r
270 ffc.setTypedNamedFvImageNameValue(fvName, "Options", oldOptionName, m.getValueAt(row, 1)+"", newOptionName);\r
271 docConsole.setSaved(false);\r
272 oldOptionName = newOptionName;\r
273 }\r
274 \r
275 if (col == 1) {\r
276 ffc.setTypedNamedFvImageNameValue(fvName, "Options", oldOptionName, m.getValueAt(row, 1)+"", newOptionName);\r
277 docConsole.setSaved(false); \r
278 }\r
279 \r
280 }\r
281 }\r
282 };\r
283 \r
284 jTableFvOptions.getModel().addTableModelListener(tableModelListener);\r
285 }\r
286 return jTableFvOptions;\r
287 }\r
288\r
289 protected DefaultTableModel getTableModel() {\r
290 return tableModel;\r
291 }\r
292\r
293 protected void setTableModel(DefaultTableModel tableModel) {\r
294 \r
295 this.tableModel = tableModel;\r
296 \r
297 }\r
298\r
299 /**\r
300 Start the window at the center of screen\r
301 \r
302 **/\r
303 protected void centerWindow(int intWidth, int intHeight) {\r
304 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
305 this.setLocation((d.width - intWidth) / 2, (d.height - intHeight) / 2);\r
306 }\r
307\r
308 /**\r
309 Start the window at the center of screen\r
310 \r
311 **/\r
312 protected void centerWindow() {\r
313 centerWindow(this.getSize().width, this.getSize().height);\r
314 }\r
315\r
316/**\r
317 * This method initializes jButtonNew \r
318 * \r
319 * @return javax.swing.JButton \r
320 */\r
321private JButton getJButtonNew() {\r
322 if (jButtonNew == null) {\r
323 jButtonNew = new JButton();\r
324 jButtonNew.setPreferredSize(new java.awt.Dimension(80,20));\r
325 jButtonNew.setText("New");\r
326 jButtonNew.addActionListener(new java.awt.event.ActionListener() {\r
327 public void actionPerformed(java.awt.event.ActionEvent e) {\r
328 tableModel.addRow(new String[]{"", ""});\r
329 oldOptionName = "";\r
330 }\r
331 });\r
332 }\r
333 return jButtonNew;\r
334}\r
335\r
336/**\r
337 * This method initializes jButtonDelete \r
338 * \r
339 * @return javax.swing.JButton \r
340 */\r
341private JButton getJButtonDelete() {\r
342 if (jButtonDelete == null) {\r
343 jButtonDelete = new JButton();\r
344 jButtonDelete.setPreferredSize(new java.awt.Dimension(80,20));\r
345 jButtonDelete.setText("Delete");\r
346 jButtonDelete.addActionListener(new java.awt.event.ActionListener() {\r
347 public void actionPerformed(java.awt.event.ActionEvent e) {\r
348 int selectedRow = jTableFvOptions.getSelectedRow();\r
349 if (selectedRow < 0) {\r
350 return;\r
351 }\r
352 String optName = tableModel.getValueAt(selectedRow, 0)+"";\r
353 if (((FvOptsTableModel)tableModel).getVKeyWords().contains(optName)){\r
354 return;\r
355 }\r
356 if (((FvOptsTableModel)tableModel).getVNonEditableName().contains(optName)){\r
357 return;\r
358 }\r
359 \r
360 ffc.removeTypedNamedFvImageNameValue(fvName, "Options", optName);\r
361 tableModel.removeRow(selectedRow);\r
362 docConsole.setSaved(false);\r
363 }\r
364 });\r
365 }\r
366 return jButtonDelete;\r
367}\r
368}\r