]> git.proxmox.com Git - mirror_edk2.git/blame - 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
b411fc1f 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
0cc00bf0 18import java.awt.event.MouseEvent;\r
19import java.awt.event.WindowEvent;\r
b411fc1f 20import java.util.Iterator;\r
0cc00bf0 21import java.util.LinkedHashMap;\r
b411fc1f 22import java.util.Set;\r
23\r
0cc00bf0 24import javax.swing.JFrame;\r
25import javax.swing.JOptionPane;\r
b411fc1f 26import javax.swing.JPanel;\r
27import javax.swing.JDialog;\r
28import javax.swing.JScrollPane;\r
29import javax.swing.JTable;\r
0cc00bf0 30import javax.swing.ListSelectionModel;\r
31import javax.swing.event.ListSelectionEvent;\r
32import javax.swing.event.ListSelectionListener;\r
b411fc1f 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
82484861 39import org.tianocore.frameworkwizard.FrameworkWizardUI;\r
b411fc1f 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
72426064 48 /**\r
49 * \r
50 */\r
51 private static final long serialVersionUID = 1L;\r
0cc00bf0 52 private static JFrame frame;\r
b411fc1f 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
0cc00bf0 65 private String oldOptionName = "";\r
66 private int selectedRow = -1;\r
67 private TableModelListener tableModelListener = null;\r
b411fc1f 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
82484861 73 super(FrameworkWizardUI.getInstance());\r
b411fc1f 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
0cc00bf0 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
b411fc1f 92\r
93 private void initOptions() {\r
94 tableModel.setRowCount(0);\r
0cc00bf0 95 LinkedHashMap<String, String> mOpts = new LinkedHashMap<String, String>();\r
b411fc1f 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
0cc00bf0 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
b411fc1f 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
f893f756 125 this.setModal(true);\r
b411fc1f 126 this.setTitle("FV Options");\r
0cc00bf0 127 this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);\r
b411fc1f 128 this.setContentPane(getJContentPane());\r
129 this.centerWindow();\r
130 this.setVisible(true);\r
0cc00bf0 131 \r
b411fc1f 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
0cc00bf0 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
b411fc1f 234 jTableFvOptions.setRowHeight(20);\r
b411fc1f 235 \r
0cc00bf0 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
b411fc1f 252 public void tableChanged(TableModelEvent arg0) {\r
253 // TODO Auto-generated method stub\r
254 int row = arg0.getFirstRow();\r
0cc00bf0 255 int col = arg0.getColumn();\r
b411fc1f 256 TableModel m = (TableModel) arg0.getSource();\r
257 \r
258 if (arg0.getType() == TableModelEvent.UPDATE) {\r
0cc00bf0 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
b411fc1f 273 }\r
0cc00bf0 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
b411fc1f 280 }\r
281 }\r
0cc00bf0 282 };\r
283 \r
284 jTableFvOptions.getModel().addTableModelListener(tableModelListener);\r
b411fc1f 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
0cc00bf0 329 oldOptionName = "";\r
b411fc1f 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
72426064 356 if (((FvOptsTableModel)tableModel).getVNonEditableName().contains(optName)){\r
357 return;\r
358 }\r
b411fc1f 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