]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFrameworkModules.java
Fixed a bug in resetting the tools path when you switched workspaces.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFrameworkModules.java
CommitLineData
a13899c5 1package org.tianocore.frameworkwizard.platform.ui;\r
2\r
3import java.awt.BorderLayout;\r
4\r
5import javax.swing.JFrame;\r
6import javax.swing.JOptionPane;\r
7import javax.swing.JPanel;\r
a13899c5 8import javax.swing.JSplitPane;\r
9import javax.swing.JLabel;\r
10import javax.swing.JScrollPane;\r
11import javax.swing.JTable;\r
12import javax.swing.JButton;\r
13import javax.swing.ListSelectionModel;\r
14import javax.swing.table.DefaultTableModel;\r
15\r
16import org.tianocore.PlatformSurfaceAreaDocument;\r
d6d24759 17import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
a13899c5 18import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
19import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
20import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
21import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
22\r
23import java.awt.FlowLayout;\r
24import java.io.File;\r
25import java.util.ArrayList;\r
26import java.util.HashMap;\r
27import java.util.Iterator;\r
28import java.util.Map;\r
29import java.util.Set;\r
bf5abaff 30import java.util.Vector;\r
a13899c5 31\r
32public class FpdFrameworkModules extends IInternalFrame {\r
33\r
44053733 34 /**\r
35 * \r
36 */\r
37 private static final long serialVersionUID = 1L;\r
a13899c5 38 static JFrame frame;\r
39 private JSplitPane jSplitPane = null;\r
4da2e625 40 private JPanel jPanelTop = null;\r
41 private JPanel jPanelBottom = null;\r
a13899c5 42 private JLabel jLabel = null;\r
4da2e625 43 private JScrollPane jScrollPaneAllModules = null;\r
44 private JTable jTableAllModules = null;\r
45 private JPanel jPanelTopSouth = null;\r
46 private JButton jButtonAddModule = null;\r
47 private JLabel jLabelModulesAdded = null;\r
48 private JPanel jPanelBottomSouth = null;\r
49 private JScrollPane jScrollPaneFpdModules = null;\r
50 private JTable jTableFpdModules = null;\r
51 private JButton jButtonSettings = null;\r
52 private JButton jButtonRemoveModule = null;\r
53 private NonEditableTableModel modelAllModules = null;\r
54 private NonEditableTableModel modelFpdModules = null;\r
a13899c5 55 \r
56 private FpdModuleSA settingDlg = null;\r
57 \r
58 private FpdFileContents ffc = null;\r
d6d24759 59 private OpeningPlatformType docConsole = null;\r
bf5abaff 60 private Map<String, ArrayList<String>> fpdMsa = null;\r
a13899c5 61 \r
62 private ArrayList<ModuleIdentification> miList = null;\r
63\r
64 /**\r
65 * This method initializes jSplitPane \r
66 * \r
67 * @return javax.swing.JSplitPane \r
68 */\r
69 private JSplitPane getJSplitPane() {\r
70 if (jSplitPane == null) {\r
71 jSplitPane = new JSplitPane();\r
72 jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
73 jSplitPane.setDividerLocation(250);\r
4da2e625 74 jSplitPane.setBottomComponent(getJPanelBottom());\r
75 jSplitPane.setTopComponent(getJPanelTop());\r
a13899c5 76 }\r
77 return jSplitPane;\r
78 }\r
79\r
80 /**\r
81 * This method initializes jPanel \r
82 * \r
83 * @return javax.swing.JPanel \r
84 */\r
4da2e625 85 private JPanel getJPanelTop() {\r
86 if (jPanelTop == null) {\r
a13899c5 87 jLabel = new JLabel();\r
88 jLabel.setText("Modules in Workspace");\r
4da2e625 89 jPanelTop = new JPanel();\r
90 jPanelTop.setLayout(new BorderLayout());\r
91 jPanelTop.add(jLabel, java.awt.BorderLayout.NORTH);\r
92 jPanelTop.add(getJScrollPaneAllModules(), java.awt.BorderLayout.CENTER);\r
93 jPanelTop.add(getJPanelTopSouth(), java.awt.BorderLayout.SOUTH);\r
a13899c5 94 }\r
4da2e625 95 return jPanelTop;\r
a13899c5 96 }\r
97\r
98 /**\r
99 * This method initializes jPanel1 \r
100 * \r
101 * @return javax.swing.JPanel \r
102 */\r
4da2e625 103 private JPanel getJPanelBottom() {\r
104 if (jPanelBottom == null) {\r
105 jLabelModulesAdded = new JLabel();\r
106 jLabelModulesAdded.setText("Modules Added");\r
107 jPanelBottom = new JPanel();\r
108 jPanelBottom.setLayout(new BorderLayout());\r
109 jPanelBottom.add(jLabelModulesAdded, java.awt.BorderLayout.NORTH);\r
110 jPanelBottom.add(getJPanelBottomSouth(), java.awt.BorderLayout.SOUTH);\r
111 jPanelBottom.add(getJScrollPaneFpdModules(), java.awt.BorderLayout.CENTER);\r
a13899c5 112 }\r
4da2e625 113 return jPanelBottom;\r
a13899c5 114 }\r
115\r
116 /**\r
117 * This method initializes jScrollPane \r
118 * \r
119 * @return javax.swing.JScrollPane \r
120 */\r
4da2e625 121 private JScrollPane getJScrollPaneAllModules() {\r
122 if (jScrollPaneAllModules == null) {\r
123 jScrollPaneAllModules = new JScrollPane();\r
124 jScrollPaneAllModules.setPreferredSize(new java.awt.Dimension(600,200));\r
125 jScrollPaneAllModules.setViewportView(getJTableAllModules());\r
a13899c5 126 }\r
4da2e625 127 return jScrollPaneAllModules;\r
a13899c5 128 }\r
129\r
130 /**\r
131 * This method initializes jTable \r
132 * \r
133 * @return javax.swing.JTable \r
134 */\r
4da2e625 135 private JTable getJTableAllModules() {\r
136 if (jTableAllModules == null) {\r
137 modelAllModules = new NonEditableTableModel();\r
add40ab2 138 TableSorter sorter = new TableSorter(modelAllModules);\r
139 jTableAllModules = new JTable(sorter);\r
140 sorter.setTableHeader(jTableAllModules.getTableHeader());\r
4da2e625 141 jTableAllModules.setRowHeight(20);\r
142 modelAllModules.addColumn("ModuleName");\r
143 modelAllModules.addColumn("ModuleVersion");\r
144 modelAllModules.addColumn("PackageName");\r
145 modelAllModules.addColumn("PackageVersion");\r
146 modelAllModules.addColumn("Path");\r
a13899c5 147 \r
4da2e625 148 jTableAllModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
a13899c5 149 }\r
4da2e625 150 return jTableAllModules;\r
a13899c5 151 }\r
152\r
153 /**\r
154 * This method initializes jPanel2 \r
155 * \r
156 * @return javax.swing.JPanel \r
157 */\r
4da2e625 158 private JPanel getJPanelTopSouth() {\r
159 if (jPanelTopSouth == null) {\r
a13899c5 160 FlowLayout flowLayout = new FlowLayout();\r
161 flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
4da2e625 162 jPanelTopSouth = new JPanel();\r
163 jPanelTopSouth.setLayout(flowLayout);\r
164 jPanelTopSouth.add(getJButtonAddModule(), null);\r
a13899c5 165 }\r
4da2e625 166 return jPanelTopSouth;\r
a13899c5 167 }\r
168\r
169 /**\r
170 * This method initializes jButton \r
171 * \r
172 * @return javax.swing.JButton \r
173 */\r
4da2e625 174 private JButton getJButtonAddModule() {\r
175 if (jButtonAddModule == null) {\r
176 jButtonAddModule = new JButton();\r
177 jButtonAddModule.setPreferredSize(new java.awt.Dimension(130,20));\r
178 jButtonAddModule.setText("Add a Module");\r
179 jButtonAddModule.addActionListener(new java.awt.event.ActionListener() {\r
a13899c5 180 public void actionPerformed(java.awt.event.ActionEvent e) {\r
4da2e625 181 int selectedRow = jTableAllModules.getSelectedRow();\r
a13899c5 182 if (selectedRow < 0){\r
183 return;\r
184 }\r
185 \r
add40ab2 186 TableSorter sorter = (TableSorter)jTableAllModules.getModel();\r
187 selectedRow = sorter.modelIndex(selectedRow);\r
4da2e625 188 String path = modelAllModules.getValueAt(selectedRow, 4)+"";\r
bf5abaff 189 ModuleIdentification mi = miList.get(selectedRow);\r
190 Vector<String> vArchs = null;\r
191 try {\r
192 vArchs = GlobalData.getModuleSupArchs(mi);\r
193 }\r
194 catch (Exception exp) {\r
195 JOptionPane.showMessageDialog(frame, exp.getMessage());\r
a13899c5 196 }\r
a13899c5 197 \r
bf5abaff 198 if (vArchs == null) {\r
199 JOptionPane.showMessageDialog(frame, "No supported Archs specified in MSA file.");\r
200 return;\r
a13899c5 201 }\r
af25df16 202 \r
bf5abaff 203 String archsAdded = "";\r
204 String mg = mi.getGuid();\r
205 String mv = mi.getVersion();\r
206 String pg = mi.getPackage().getGuid();\r
207 String pv = mi.getPackage().getVersion();\r
208 \r
209 ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
210 if (al == null) {\r
211 al = new ArrayList<String>();\r
212 fpdMsa.put(mg + mv + pg + pv, al);\r
213 }\r
214 for (int i = 0; i < al.size(); ++i) {\r
215 vArchs.remove(al.get(i));\r
216 }\r
217 //\r
218 // Archs this Module supported have already been added.\r
219 //\r
220 if (vArchs.size() == 0) {\r
221 JOptionPane.showMessageDialog(frame, "This Module Already Added.");\r
222 return;\r
af25df16 223 }\r
bf5abaff 224 //ToDo put Arch instead of null\r
34c614e1 225 boolean errorOccurred = false;\r
bf5abaff 226 for (int i = 0; i < vArchs.size(); ++i) {\r
227 String arch = vArchs.get(i);\r
228 al.add(arch);\r
229 archsAdded += arch + " ";\r
230 String[] row = {"", mv, "", pv, arch, path};\r
231 \r
232 if (mi != null) {\r
233 row[0] = mi.getName();\r
234 row[2] = mi.getPackage().getName();\r
235 \r
236 }\r
4da2e625 237 modelFpdModules.addRow(row);\r
bf5abaff 238 \r
239 docConsole.setSaved(false);\r
240 try{\r
241 //ToDo : specify archs need to add.\r
242 ffc.addFrameworkModulesPcdBuildDefs(mi, arch, null);\r
243 }\r
244 catch (Exception exception) {\r
34c614e1 245 JOptionPane.showMessageDialog(frame, "Adding " + row[0] + " with SupArch " + arch + ": "+ exception.getMessage());\r
246 errorOccurred = true;\r
bf5abaff 247 }\r
82961247 248 }\r
bf5abaff 249 \r
34c614e1 250 String s = "This Module with Arch "+ archsAdded;\r
251 if (errorOccurred) {\r
252 s += " Added with Error. Platform may NOT Be Built."; \r
253 }\r
254 else {\r
255 s += " Added Successfully.";\r
256 }\r
257 JOptionPane.showMessageDialog(frame, s);\r
4da2e625 258 jTableFpdModules.changeSelection(modelFpdModules.getRowCount()-1, 0, false, false);\r
82961247 259 }\r
a13899c5 260 });\r
261 }\r
4da2e625 262 return jButtonAddModule;\r
a13899c5 263 }\r
264\r
265 /**\r
266 * This method initializes jPanel3 \r
267 * \r
268 * @return javax.swing.JPanel \r
269 */\r
4da2e625 270 private JPanel getJPanelBottomSouth() {\r
271 if (jPanelBottomSouth == null) {\r
a13899c5 272 FlowLayout flowLayout1 = new FlowLayout();\r
273 flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);\r
4da2e625 274 jPanelBottomSouth = new JPanel();\r
275 jPanelBottomSouth.setLayout(flowLayout1);\r
276 jPanelBottomSouth.add(getJButtonSettings(), null);\r
277 jPanelBottomSouth.add(getJButtonRemoveModule(), null);\r
a13899c5 278 }\r
4da2e625 279 return jPanelBottomSouth;\r
a13899c5 280 }\r
281\r
282 /**\r
283 * This method initializes jScrollPane1 \r
284 * \r
285 * @return javax.swing.JScrollPane \r
286 */\r
4da2e625 287 private JScrollPane getJScrollPaneFpdModules() {\r
288 if (jScrollPaneFpdModules == null) {\r
289 jScrollPaneFpdModules = new JScrollPane();\r
290 jScrollPaneFpdModules.setPreferredSize(new java.awt.Dimension(453,200));\r
291 jScrollPaneFpdModules.setViewportView(getJTableFpdModules());\r
a13899c5 292 }\r
4da2e625 293 return jScrollPaneFpdModules;\r
a13899c5 294 }\r
295\r
296 /**\r
297 * This method initializes jTable1 \r
298 * \r
299 * @return javax.swing.JTable \r
300 */\r
4da2e625 301 private JTable getJTableFpdModules() {\r
302 if (jTableFpdModules == null) {\r
303 modelFpdModules = new NonEditableTableModel();\r
add40ab2 304 TableSorter sorter = new TableSorter(modelFpdModules);\r
305 jTableFpdModules = new JTable(sorter);\r
306 sorter.setTableHeader(jTableFpdModules.getTableHeader());\r
4da2e625 307 jTableFpdModules.setRowHeight(20);\r
308 modelFpdModules.addColumn("ModuleName");\r
309 modelFpdModules.addColumn("ModuleVersion"); \r
310 modelFpdModules.addColumn("PackageName");\r
311 modelFpdModules.addColumn("PackageVersion");\r
312 modelFpdModules.addColumn("SupportedArch");\r
313 modelFpdModules.addColumn("Path");\r
a13899c5 314 \r
4da2e625 315 jTableFpdModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
a13899c5 316 }\r
4da2e625 317 return jTableFpdModules;\r
a13899c5 318 }\r
319\r
320 /**\r
321 * This method initializes jButton1 \r
322 * \r
323 * @return javax.swing.JButton \r
324 */\r
4da2e625 325 private JButton getJButtonSettings() {\r
326 if (jButtonSettings == null) {\r
327 jButtonSettings = new JButton();\r
328 jButtonSettings.setPreferredSize(new java.awt.Dimension(130,20));\r
329 jButtonSettings.setText("Settings");\r
330 jButtonSettings.addActionListener(new java.awt.event.ActionListener() {\r
a13899c5 331 public void actionPerformed(java.awt.event.ActionEvent e) {\r
4da2e625 332 int selectedRow = jTableFpdModules.getSelectedRow();\r
a13899c5 333 if (selectedRow < 0){\r
334 return;\r
335 }\r
add40ab2 336 \r
337 TableSorter sorter = (TableSorter)jTableFpdModules.getModel();\r
338 selectedRow = sorter.modelIndex(selectedRow);\r
1dac04ab 339 try {\r
340 if (ffc.adjustPcd(selectedRow)) {\r
341 docConsole.setSaved(false);\r
342 }\r
343 }\r
344 catch (Exception exp) {\r
345 JOptionPane.showMessageDialog(frame, exp.getMessage());\r
346 return;\r
347 }\r
add40ab2 348 \r
a13899c5 349 if (settingDlg == null) {\r
350 settingDlg = new FpdModuleSA(ffc);\r
351 }\r
8f55ea73 352 \r
bf5abaff 353 String[] sa = new String[5];\r
354 ffc.getFrameworkModuleInfo(selectedRow, sa);\r
355 String mg = sa[0];\r
356 String mv = sa[1];\r
357 String pg = sa[2];\r
358 String pv = sa[3];\r
359 String arch = sa[4];\r
8f55ea73 360 settingDlg.setKey(mg + " " + mv + " " + pg + " " + pv + " " + arch, selectedRow, docConsole);\r
a13899c5 361 settingDlg.setVisible(true);\r
362 }\r
363 });\r
364 }\r
4da2e625 365 return jButtonSettings;\r
a13899c5 366 }\r
1dac04ab 367 \r
a13899c5 368\r
369 /**\r
370 * This method initializes jButton2 \r
371 * \r
372 * @return javax.swing.JButton \r
373 */\r
4da2e625 374 private JButton getJButtonRemoveModule() {\r
375 if (jButtonRemoveModule == null) {\r
376 jButtonRemoveModule = new JButton();\r
377 jButtonRemoveModule.setPreferredSize(new java.awt.Dimension(130,20));\r
378 jButtonRemoveModule.setText("Remove Module");\r
379 jButtonRemoveModule.addActionListener(new java.awt.event.ActionListener() {\r
a13899c5 380 public void actionPerformed(java.awt.event.ActionEvent e) {\r
4da2e625 381 int selectedRow = jTableFpdModules.getSelectedRow();\r
a13899c5 382 if (selectedRow < 0){\r
383 return;\r
384 }\r
add40ab2 385 \r
386 TableSorter sorter = (TableSorter)jTableFpdModules.getModel();\r
387 selectedRow = sorter.modelIndex(selectedRow);\r
388 \r
bf5abaff 389 String[] sa = new String[5];\r
390 ffc.getFrameworkModuleInfo(selectedRow, sa);\r
391 String mg = sa[0];\r
392 String mv = sa[1];\r
393 String pg = sa[2];\r
394 String pv = sa[3];\r
395 String arch = sa[4];\r
34c614e1 396 ModuleIdentification mi = GlobalData.getModuleId(sa[0] + " " + sa[1] + " " + sa[2] + " " + sa[3] + " " + sa[4]);\r
bf5abaff 397 mv = mi.getVersion();\r
398 pv = mi.getPackage().getVersion();\r
4da2e625 399 modelFpdModules.removeRow(selectedRow);\r
bf5abaff 400 if (arch == null) {\r
401 // if no arch specified in ModuleSA\r
402 fpdMsa.remove(mg+mv+pg+pv);\r
403 }\r
404 else {\r
405 ArrayList<String> al = fpdMsa.get(mg+mv+pg+pv);\r
406 al.remove(arch);\r
407 if (al.size() == 0) {\r
408 fpdMsa.remove(mg+mv+pg+pv);\r
409 }\r
410 }\r
411 \r
412 \r
d6d24759 413 docConsole.setSaved(false);\r
a13899c5 414 ffc.removeModuleSA(selectedRow);\r
415 }\r
416 });\r
417 }\r
4da2e625 418 return jButtonRemoveModule;\r
a13899c5 419 }\r
420\r
421 /**\r
422 * @param args\r
423 */\r
424 public static void main(String[] args) {\r
425 // TODO Auto-generated method stub\r
426 new FpdFrameworkModules().setVisible(true);\r
427 }\r
428\r
429 /**\r
430 * This is the default constructor\r
431 */\r
432 public FpdFrameworkModules() {\r
433 super();\r
434 initialize();\r
435 }\r
436\r
437 public FpdFrameworkModules(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd){\r
438 this();\r
439 init(fpd);\r
440 \r
441 }\r
442 \r
d6d24759 443 public FpdFrameworkModules(OpeningPlatformType opt) {\r
444 this(opt.getXmlFpd());\r
445 docConsole = opt;\r
446 }\r
447 \r
a13899c5 448 private void init(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
449 try {\r
450 GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db", System.getenv("WORKSPACE"));\r
451 }\r
452 catch(Exception e){\r
410e0e9f 453 JOptionPane.showMessageDialog(frame, "Error occurred when getting module data.");\r
a13899c5 454 }\r
455 \r
456 if (ffc == null){\r
457 ffc = new FpdFileContents(fpd);\r
458 ffc.initDynPcdMap();\r
459 }\r
460 \r
461 if (fpdMsa == null) {\r
bf5abaff 462 fpdMsa = new HashMap<String, ArrayList<String>>();\r
a13899c5 463 }\r
464 \r
465 if (ffc.getFrameworkModulesCount() > 0) {\r
466 String[][] saa = new String[ffc.getFrameworkModulesCount()][5];\r
467 ffc.getFrameworkModulesInfo(saa);\r
468 for (int i = 0; i < saa.length; ++i) {\r
34c614e1 469 ModuleIdentification mi = GlobalData.getModuleId(saa[i][0]+ " "+saa[i][1]+" "+saa[i][2]+" "+saa[i][3]);\r
bf5abaff 470 String[] row = {"", "", "", "", "", ""};\r
f3b0ed9a 471 if (mi != null) {\r
bf5abaff 472 row[0] = mi.getName();\r
473 row[1] = mi.getVersion();\r
474 row[2] = mi.getPackage().getName();\r
475 row[3] = mi.getPackage().getVersion();\r
476 row[4] = saa[i][4];\r
477 try{\r
478 row[5] = GlobalData.getMsaFile(mi).getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
479 }\r
480 catch (Exception e) {\r
481 JOptionPane.showMessageDialog(frame, "ShowFPDModules:" + e.getMessage());\r
482 }\r
483 }\r
4da2e625 484 modelFpdModules.addRow(row);\r
bf5abaff 485 ArrayList<String> al = fpdMsa.get(saa[i][0]+row[1]+saa[i][2]+row[3]);\r
486 if (al == null) {\r
487 al = new ArrayList<String>();\r
488 fpdMsa.put(saa[i][0]+row[1]+saa[i][2]+row[3], al);\r
a13899c5 489 }\r
bf5abaff 490 al.add(saa[i][4]);\r
491 \r
a13899c5 492 }\r
493 }\r
494 \r
495 showAllModules();\r
496 \r
497 }\r
498 \r
499 private void showAllModules() {\r
500 \r
501 if (miList == null) {\r
502 miList = new ArrayList<ModuleIdentification>();\r
503 }\r
504 Set<PackageIdentification> spi = GlobalData.getPackageList();\r
505 Iterator ispi = spi.iterator();\r
506 \r
507 while(ispi.hasNext()) {\r
508 PackageIdentification pi = (PackageIdentification)ispi.next();\r
509 String[] s = {"", "", "", "", ""};\r
bf5abaff 510 \r
a13899c5 511 Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
512 Iterator ismi = smi.iterator();\r
513 while(ismi.hasNext()) {\r
514 ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
515 s[0] = mi.getName();\r
bf5abaff 516 s[1] = mi.getVersion();\r
517 s[2] = pi.getName();\r
518 s[3] = pi.getVersion();\r
519 try {\r
520 s[4] = GlobalData.getMsaFile(mi).getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
521 }\r
522 catch (Exception e) {\r
523 JOptionPane.showMessageDialog(frame, "ShowAllModules:" + e.getMessage());\r
524 }\r
4da2e625 525 modelAllModules.addRow(s);\r
a13899c5 526 miList.add(mi);\r
527 }\r
528 }\r
529 }\r
530 /**\r
531 * This method initializes this\r
532 * \r
533 * @return void\r
534 */\r
535 private void initialize() {\r
536 this.setSize(633, 533);\r
537 this.setTitle("Framework Modules");\r
538 this.setContentPane(getJSplitPane());\r
539 this.setVisible(true);\r
540 \r
541 }\r
a13899c5 542\r
543} // @jve:decl-index=0:visual-constraint="10,10"\r
544\r
545class NonEditableTableModel extends DefaultTableModel {\r
44053733 546 /**\r
547 * \r
548 */\r
549 private static final long serialVersionUID = 1L;\r
550\r
a13899c5 551 public boolean isCellEditable(int row, int col) {\r
552 return false;\r
553 }\r
554}\r