001: /*
002: * $Header: /cvs/j3dfly/J3dFly/src/org/jdesktop/j3dfly/plugins/PluginPreferenceControlPanel.java,v 1.2 2007/01/26 19:31:28 paulby Exp $
003: *
004: * Sun Public License Notice
005: *
006: * The contents of this file are subject to the Sun Public License Version
007: * 1.0 (the "License"). You may not use this file except in compliance with
008: * the License. A copy of the License is available at http://www.sun.com/
009: *
010: * The Original Code is Java 3D(tm) Fly Through.
011: * The Initial Developer of the Original Code is Paul Byrne.
012: * Portions created by Paul Byrne are Copyright (C) 2002.
013: * All Rights Reserved.
014: *
015: * Contributor(s): Paul Byrne.
016: *
017: **/
018: package org.jdesktop.j3dfly.plugins;
019:
020: import javax.swing.table.DefaultTableModel;
021: import javax.swing.JOptionPane;
022: import java.util.Iterator;
023: import java.util.ArrayList;
024:
025: /**
026: * A GUI for manipulating the set of installed plugins and editing
027: * all plugins in the app.
028: *
029: * The table updates are not particularly efficient becuase we destroy and
030: * recreate the installed table whenever things change, this need optimizing
031: * later.
032: *
033: * @author Paul Byrne
034: * @version $Revision: 1.2 $
035: */
036: public class PluginPreferenceControlPanel extends javax.swing.JPanel
037: implements javax.swing.event.TableModelListener,
038: javax.swing.event.ListSelectionListener {
039:
040: private DefaultTableModel systemTableModel;
041: private DefaultTableModel userTableModel;
042: private DefaultTableModel fileTableModel;
043: private DefaultTableModel installedTableModel;
044:
045: private PluginPreferenceControl prefControl;
046:
047: /** Creates new form PluginPreferenceControlPanel */
048: public PluginPreferenceControlPanel(
049: PluginPreferenceControl prefControl) {
050: super ();
051: this .prefControl = prefControl;
052: initComponents();
053:
054: systemTableModel = (DefaultTableModel) systemPluginTable
055: .getModel();
056: systemTableModel.addTableModelListener(this );
057: systemPluginTable.getSelectionModel().addListSelectionListener(
058: this );
059: systemPluginTable.getSelectionModel().setSelectionMode(
060: javax.swing.ListSelectionModel.SINGLE_SELECTION);
061:
062: userTableModel = (DefaultTableModel) userPluginTable.getModel();
063: userTableModel.addTableModelListener(this );
064: userPluginTable.getSelectionModel().addListSelectionListener(
065: this );
066: userPluginTable.getSelectionModel().setSelectionMode(
067: javax.swing.ListSelectionModel.SINGLE_SELECTION);
068:
069: fileTableModel = (DefaultTableModel) filePluginTable.getModel();
070: fileTableModel.addTableModelListener(this );
071: filePluginTable.getSelectionModel().addListSelectionListener(
072: this );
073: filePluginTable.getSelectionModel().setSelectionMode(
074: javax.swing.ListSelectionModel.SINGLE_SELECTION);
075:
076: installedTableModel = (DefaultTableModel) installedPluginTable
077: .getModel();
078: installedTableModel.addTableModelListener(this );
079: installedPluginTable.getSelectionModel()
080: .addListSelectionListener(this );
081: installedPluginTable.getSelectionModel().setSelectionMode(
082: javax.swing.ListSelectionModel.SINGLE_SELECTION);
083:
084: saveSystemB
085: .setEnabled(prefControl.getSystemPrefsFileCanWrite());
086: saveUserB.setEnabled(prefControl.getUserPrefsFileCanWrite());
087: }
088:
089: void editPluginPreferences() {
090: updateTables();
091: }
092:
093: /**
094: * Update all the tables
095: */
096: void updateTables() {
097: setupPrefsTable(systemTableModel, prefControl
098: .getSystemPluginPrefs());
099: setupPrefsTable(userTableModel, prefControl
100: .getUserPluginPrefs());
101: setupPrefsTable(fileTableModel, prefControl
102: .getFilePluginPrefs());
103:
104: setupInstalledTable(prefControl.getInstalledPlugins());
105: }
106:
107: private void setupPrefsTable(DefaultTableModel tableModel,
108: ArrayList pluginPrefs) {
109: Iterator it = pluginPrefs.iterator();
110: tableModel.setRowCount(0); // Delete all old data
111: while (it.hasNext()) {
112: addRow(tableModel, (PluginPreference) it.next());
113: }
114: }
115:
116: private void addRow(DefaultTableModel tableModel,
117: PluginPreference pref) {
118: tableModel.addRow(new Object[] { pref.getName(),
119: pref.getDescription(), new Boolean(pref.isEnabled()),
120: new Boolean(pref.isInstalled()) });
121: }
122:
123: private void setupInstalledTable(ArrayList pluginPrefs) {
124: Iterator it = pluginPrefs.iterator();
125: installedTableModel.setRowCount(0); // Delete old data
126: while (it.hasNext()) {
127: PluginPreference pref = ((J3dFlyPlugin) it.next())
128: .getPluginPreference();
129: installedTableModel.addRow(new Object[] { pref.getName(),
130: pref.getDescription(),
131: new Boolean(pref.isEnabled()),
132: pref.getInstalledFromStr() });
133: }
134: installedTableModel.fireTableRowsUpdated(0, pluginPrefs.size());
135: }
136:
137: /** This method is called from within the constructor to
138: * initialize the form.
139: * WARNING: Do NOT modify this code. The content of this method is
140: * always regenerated by the Form Editor.
141: */
142: private void initComponents() {//GEN-BEGIN:initComponents
143: java.awt.GridBagConstraints gridBagConstraints;
144:
145: jPanel1 = new javax.swing.JPanel();
146: tablePanel = new javax.swing.JPanel();
147: prefsTab = new javax.swing.JTabbedPane();
148: installedScrollPane = new javax.swing.JScrollPane();
149: installedPluginTable = new javax.swing.JTable();
150: systemScrollPane = new javax.swing.JScrollPane();
151: systemPluginTable = new javax.swing.JTable();
152: userScrollPane = new javax.swing.JScrollPane();
153: userPluginTable = new javax.swing.JTable();
154: fileScrollPane = new javax.swing.JScrollPane();
155: filePluginTable = new javax.swing.JTable();
156: controlsPanel = new javax.swing.JPanel();
157: pluginControlsSP = new javax.swing.JScrollPane();
158: pluginControlsPanel = new javax.swing.JPanel();
159: southPanel = new javax.swing.JPanel();
160: saveSystemB = new javax.swing.JButton();
161: saveUserB = new javax.swing.JButton();
162: loadPluginB = new javax.swing.JButton();
163:
164: setLayout(new java.awt.BorderLayout());
165:
166: jPanel1.setLayout(new java.awt.GridBagLayout());
167:
168: jPanel1.setBorder(new javax.swing.border.EtchedBorder());
169: tablePanel.setLayout(new java.awt.BorderLayout());
170:
171: tablePanel.setMinimumSize(new java.awt.Dimension(458, 200));
172: tablePanel.setPreferredSize(new java.awt.Dimension(458, 200));
173: prefsTab.setPreferredSize(new java.awt.Dimension(458, 130));
174: prefsTab
175: .addChangeListener(new javax.swing.event.ChangeListener() {
176: public void stateChanged(
177: javax.swing.event.ChangeEvent evt) {
178: prefsTabStateChanged(evt);
179: }
180: });
181:
182: installedScrollPane.setMinimumSize(new java.awt.Dimension(453,
183: 100));
184: installedPluginTable
185: .setModel(new javax.swing.table.DefaultTableModel(
186: new Object[][] {
187:
188: }, new String[] { "Name", "Description",
189: "Enabled", "Installed From" }) {
190: Class[] types = new Class[] {
191: java.lang.String.class,
192: java.lang.String.class,
193: java.lang.Boolean.class,
194: java.lang.String.class };
195: boolean[] canEdit = new boolean[] { false, false,
196: true, true };
197:
198: public Class getColumnClass(int columnIndex) {
199: return types[columnIndex];
200: }
201:
202: public boolean isCellEditable(int rowIndex,
203: int columnIndex) {
204: return canEdit[columnIndex];
205: }
206: });
207: installedScrollPane.setViewportView(installedPluginTable);
208:
209: prefsTab.addTab("Installed", null, installedScrollPane, "");
210:
211: systemScrollPane
212: .setMinimumSize(new java.awt.Dimension(453, 100));
213: systemPluginTable
214: .setModel(new javax.swing.table.DefaultTableModel(
215: new Object[][] {
216:
217: }, new String[] { "Name", "Description",
218: "Enabled", "Installed" }) {
219: Class[] types = new Class[] {
220: java.lang.String.class,
221: java.lang.String.class,
222: java.lang.Boolean.class,
223: java.lang.Boolean.class };
224: boolean[] canEdit = new boolean[] { false, false,
225: true, true };
226:
227: public Class getColumnClass(int columnIndex) {
228: return types[columnIndex];
229: }
230:
231: public boolean isCellEditable(int rowIndex,
232: int columnIndex) {
233: return canEdit[columnIndex];
234: }
235: });
236: systemScrollPane.setViewportView(systemPluginTable);
237:
238: prefsTab.addTab("System", null, systemScrollPane, "");
239:
240: userScrollPane.setMinimumSize(new java.awt.Dimension(453, 100));
241: userPluginTable
242: .setModel(new javax.swing.table.DefaultTableModel(
243: new Object[][] {
244:
245: }, new String[] { "Name", "Description",
246: "Enabled", "Installed" }) {
247: Class[] types = new Class[] {
248: java.lang.String.class,
249: java.lang.String.class,
250: java.lang.Boolean.class,
251: java.lang.Boolean.class };
252: boolean[] canEdit = new boolean[] { false, false,
253: true, true };
254:
255: public Class getColumnClass(int columnIndex) {
256: return types[columnIndex];
257: }
258:
259: public boolean isCellEditable(int rowIndex,
260: int columnIndex) {
261: return canEdit[columnIndex];
262: }
263: });
264: userScrollPane.setViewportView(userPluginTable);
265:
266: prefsTab.addTab("User", null, userScrollPane, "");
267:
268: fileScrollPane.setMinimumSize(new java.awt.Dimension(453, 100));
269: filePluginTable
270: .setModel(new javax.swing.table.DefaultTableModel(
271: new Object[][] {
272:
273: }, new String[] { "Name", "Description",
274: "Enabled", "Installed" }) {
275: Class[] types = new Class[] {
276: java.lang.String.class,
277: java.lang.String.class,
278: java.lang.Boolean.class,
279: java.lang.Boolean.class };
280: boolean[] canEdit = new boolean[] { false, false,
281: true, true };
282:
283: public Class getColumnClass(int columnIndex) {
284: return types[columnIndex];
285: }
286:
287: public boolean isCellEditable(int rowIndex,
288: int columnIndex) {
289: return canEdit[columnIndex];
290: }
291: });
292: fileScrollPane.setViewportView(filePluginTable);
293:
294: prefsTab.addTab("File", null, fileScrollPane, "");
295:
296: tablePanel.add(prefsTab, java.awt.BorderLayout.CENTER);
297:
298: gridBagConstraints = new java.awt.GridBagConstraints();
299: gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
300: gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
301: gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
302: gridBagConstraints.weighty = 1.0;
303: jPanel1.add(tablePanel, gridBagConstraints);
304:
305: controlsPanel.setLayout(new java.awt.BorderLayout());
306:
307: controlsPanel.setMinimumSize(new java.awt.Dimension(150, 150));
308: controlsPanel
309: .setPreferredSize(new java.awt.Dimension(300, 140));
310: pluginControlsSP
311: .setMinimumSize(new java.awt.Dimension(150, 150));
312: pluginControlsSP.setPreferredSize(new java.awt.Dimension(300,
313: 140));
314: pluginControlsSP.setViewportView(pluginControlsPanel);
315:
316: controlsPanel.add(pluginControlsSP,
317: java.awt.BorderLayout.CENTER);
318:
319: gridBagConstraints = new java.awt.GridBagConstraints();
320: gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
321: gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
322: gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
323: gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
324: gridBagConstraints.weightx = 1.0;
325: gridBagConstraints.weighty = 1.0;
326: jPanel1.add(controlsPanel, gridBagConstraints);
327:
328: add(jPanel1, java.awt.BorderLayout.CENTER);
329:
330: saveSystemB.setText("Save System Settings");
331: saveSystemB
332: .addActionListener(new java.awt.event.ActionListener() {
333: public void actionPerformed(
334: java.awt.event.ActionEvent evt) {
335: saveSystemBActionPerformed(evt);
336: }
337: });
338:
339: southPanel.add(saveSystemB);
340:
341: saveUserB.setText("Save User Settings");
342: saveUserB
343: .addActionListener(new java.awt.event.ActionListener() {
344: public void actionPerformed(
345: java.awt.event.ActionEvent evt) {
346: saveUserBActionPerformed(evt);
347: }
348: });
349:
350: southPanel.add(saveUserB);
351:
352: loadPluginB.setText("Load Plugin");
353: loadPluginB
354: .setToolTipText("Load a new Plugin Class to the current set of plugins");
355: loadPluginB.setEnabled(false);
356: loadPluginB
357: .addActionListener(new java.awt.event.ActionListener() {
358: public void actionPerformed(
359: java.awt.event.ActionEvent evt) {
360: loadPluginBActionPerformed(evt);
361: }
362: });
363:
364: southPanel.add(loadPluginB);
365:
366: add(southPanel, java.awt.BorderLayout.SOUTH);
367:
368: }//GEN-END:initComponents
369:
370: /**
371: * User has changed which table they are viewing
372: */
373: private void prefsTabStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_prefsTabStateChanged
374: // Add your handling code here:
375: switch (prefsTab.getSelectedIndex()) {
376: case 0: // Installed
377: loadPluginB.setEnabled(false);
378: break;
379: case 1: // System
380: case 2: // User
381: case 3: // File
382: loadPluginB.setEnabled(true);
383: break;
384: }
385: }//GEN-LAST:event_prefsTabStateChanged
386:
387: /**
388: * Ask the user for the fully qualified class name of a plugin and
389: * add it's preference to the current preference Table, either SYSTEM,
390: * USER or FILE.
391: */
392: private void loadPluginBActionPerformed(
393: java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadPluginBActionPerformed
394: boolean finished = false;
395:
396: do {
397: Object[] defaultPlugins = {
398: "org.jdesktop.j3dfly.plugins.ViewingPlatformWarpPlugin",
399: "other..." };
400:
401: String className = (String) JOptionPane.showInputDialog(
402: null, "Please select the plugin",
403: "Plugin Selection", JOptionPane.QUESTION_MESSAGE,
404: (javax.swing.Icon) null, defaultPlugins,
405: (Object) null);
406: // User pressed cancel
407: if (className == null)
408: return;
409:
410: if (className == "other...") {
411: className = JOptionPane.showInputDialog(null,
412: "Enter plugins full classname");
413: }
414:
415: try {
416: Class pluginClass = ClassLoader.getSystemClassLoader()
417: .loadClass(className);
418:
419: if (J3dFlyPlugin.class.isAssignableFrom(pluginClass)) {
420: J3dFlyPlugin plugin = (J3dFlyPlugin) pluginClass
421: .newInstance();
422: PluginPreference pref = (PluginPreference) plugin
423: .getPluginPreferenceClass().newInstance();
424: plugin = null;
425:
426: switch (prefsTab.getSelectedIndex()) {
427: case 1:
428: prefControl.addSystemPluginPref(pref);
429: pref.setContext(prefControl.getContext());
430: pref.setInstalledFrom(PluginPreference.SYSTEM);
431: break;
432: case 2:
433: prefControl.addUserPluginPref(pref);
434: addRow(userTableModel, pref);
435: pref.setContext(prefControl.getContext());
436: pref.setInstalledFrom(PluginPreference.USER);
437: break;
438: case 3:
439: prefControl.addFilePluginPref(pref);
440: addRow(fileTableModel, pref);
441: pref.setContext(prefControl.getContext());
442: pref.setInstalledFrom(PluginPreference.FILE);
443: break;
444: }
445: pref.setInstalled(true);
446: setupInstalledTable(prefControl
447: .getInstalledPlugins());
448: finished = true;
449: } else {
450: if (JOptionPane.showConfirmDialog(null,
451: "Try Again ?",
452: "Class is not a J3dFly plugin",
453: JOptionPane.YES_NO_OPTION,
454: JOptionPane.QUESTION_MESSAGE) == JOptionPane.NO_OPTION)
455: finished = true;
456: }
457: } catch (Exception e) {
458: if (JOptionPane.showConfirmDialog(null, "Try Again ?",
459: "Failed to Load Class",
460: JOptionPane.YES_NO_OPTION,
461: JOptionPane.QUESTION_MESSAGE) == JOptionPane.NO_OPTION)
462: finished = true;
463: }
464: } while (!finished);
465:
466: }//GEN-LAST:event_loadPluginBActionPerformed
467:
468: private void saveUserBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveUserBActionPerformed
469: // Add your handling code here:
470: prefControl.savePluginUserPreferences();
471: }//GEN-LAST:event_saveUserBActionPerformed
472:
473: private void saveSystemBActionPerformed(
474: java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveSystemBActionPerformed
475: // Add your handling code here:
476: if (javax.swing.JOptionPane
477: .showConfirmDialog(
478: null,
479: "Overwriting the System Preferences will alter the features of this application, ensure you have backed up the original file. Proceed ?",
480: "Warning",
481: javax.swing.JOptionPane.YES_NO_OPTION,
482: javax.swing.JOptionPane.WARNING_MESSAGE) == javax.swing.JOptionPane.YES_OPTION)
483: prefControl.savePluginSystemPreferences();
484: }//GEN-LAST:event_saveSystemBActionPerformed
485:
486: public void tableChanged(javax.swing.event.TableModelEvent evt) {
487: if (evt.getType() != javax.swing.event.TableModelEvent.UPDATE)
488: return;
489:
490: if (evt.getSource() == systemTableModel)
491: pluginToolChanged(evt, systemTableModel, prefControl
492: .getSystemPluginPrefs());
493: else if (evt.getSource() == userTableModel)
494: pluginToolChanged(evt, userTableModel, prefControl
495: .getUserPluginPrefs());
496: else if (evt.getSource() == fileTableModel)
497: pluginToolChanged(evt, fileTableModel, prefControl
498: .getFilePluginPrefs());
499: else if (evt.getSource() == installedTableModel)
500: installedTableChanged(evt);
501: }
502:
503: public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
504: if (evt.getValueIsAdjusting())
505: return;
506:
507: if (evt.getSource() == systemPluginTable.getSelectionModel()
508: && systemPluginTable.getSelectedRow() != -1)
509: showControls((PluginPreference) prefControl
510: .getSystemPluginPrefs().get(
511: systemPluginTable.getSelectedRow()));
512: else if (evt.getSource() == userPluginTable.getSelectionModel()
513: && userPluginTable.getSelectedRow() != -1)
514: showControls((PluginPreference) prefControl
515: .getUserPluginPrefs().get(
516: userPluginTable.getSelectedRow()));
517: else if (evt.getSource() == filePluginTable.getSelectionModel()
518: && filePluginTable.getSelectedRow() != -1)
519: showControls((PluginPreference) prefControl
520: .getFilePluginPrefs().get(
521: filePluginTable.getSelectedRow()));
522: else if (evt.getSource() == installedPluginTable
523: .getSelectionModel()
524: && installedPluginTable.getSelectedRow() != -1) {
525: showControls(((J3dFlyPlugin) prefControl
526: .getInstalledPlugins().get(
527: installedPluginTable.getSelectedRow()))
528: .getPluginPreference());
529: }
530: }
531:
532: private void installedTableChanged(
533: javax.swing.event.TableModelEvent evt) {
534: if (evt.getColumn() == 2) {
535: // Enabled Column
536: Boolean bool = (Boolean) installedTableModel.getValueAt(evt
537: .getFirstRow(), evt.getColumn());
538: PluginPreference pref = ((J3dFlyPlugin) prefControl
539: .getInstalledPlugins().get(evt.getFirstRow()))
540: .getPluginPreference();
541: if (pref.isInstalled()) {
542: pref.setEnabled(bool.booleanValue());
543: switch (pref.getInstalledFrom()) {
544: case PluginPreference.SYSTEM:
545: setupPrefsTable(systemTableModel, prefControl
546: .getSystemPluginPrefs());
547: break;
548: case PluginPreference.USER:
549: setupPrefsTable(userTableModel, prefControl
550: .getUserPluginPrefs());
551: break;
552: case PluginPreference.FILE:
553: setupPrefsTable(fileTableModel, prefControl
554: .getFilePluginPrefs());
555: break;
556: }
557: }
558:
559: }
560: }
561:
562: private void pluginToolChanged(
563: javax.swing.event.TableModelEvent evt,
564: DefaultTableModel currentTableModel, ArrayList prefs) {
565: if (evt.getColumn() == 2) {
566: // Enabled Column
567: Boolean bool = (Boolean) currentTableModel.getValueAt(evt
568: .getFirstRow(), evt.getColumn());
569: PluginPreference pref = (PluginPreference) prefs.get(evt
570: .getFirstRow());
571: if (pref.isInstalled()) {
572: pref.setEnabled(bool.booleanValue());
573: // Update the Installed Table
574: setupInstalledTable(prefControl.getInstalledPlugins());
575: }
576:
577: } else if (evt.getColumn() == 3) {
578: // Installed Column
579: Boolean bool = (Boolean) currentTableModel.getValueAt(evt
580: .getFirstRow(), evt.getColumn());
581: PluginPreference pref = (PluginPreference) prefs.get(evt
582: .getFirstRow());
583: pref.setInstalled(bool.booleanValue());
584:
585: // Update the Installed Table
586: setupInstalledTable(prefControl.getInstalledPlugins());
587: } else if (evt.getColumn() == 4) {
588: // Has File Preference Column
589: Boolean bool = (Boolean) currentTableModel.getValueAt(evt
590: .getFirstRow(), evt.getColumn());
591: PluginPreference pref = (PluginPreference) prefs.get(evt
592: .getFirstRow());
593:
594: if (bool.booleanValue()) {
595: // Ensure plugin is installed and enabled
596: if (!((Boolean) currentTableModel.getValueAt(evt
597: .getFirstRow(), 3)).booleanValue()) {
598: pref.setInstalled(true);
599: systemTableModel.setValueAt(new Boolean(true), evt
600: .getFirstRow(), 3);
601: }
602: if (!((Boolean) currentTableModel.getValueAt(evt
603: .getFirstRow(), 2)).booleanValue()) {
604: pref.setEnabled(true);
605: currentTableModel.setValueAt(new Boolean(true), evt
606: .getFirstRow(), 2);
607: }
608: }
609: }
610: }
611:
612: private void showControls(PluginPreference pref) {
613: pluginControlsSP.getViewport().setView(null);
614:
615: if (pref.isInstalled()) {
616: if (pref.getPlugin() != null) {
617: pluginControlsSP.getViewport().setView(
618: pref.getPlugin().getControlPanel());
619: //pluginControlsPanel.validate();
620: //System.out.println( "Showing controls "+pref.getPlugin().getControlPanel() );
621: }
622: }
623: }
624:
625: // Variables declaration - do not modify//GEN-BEGIN:variables
626: private javax.swing.JTable filePluginTable;
627: private javax.swing.JPanel pluginControlsPanel;
628: private javax.swing.JPanel southPanel;
629: private javax.swing.JPanel jPanel1;
630: private javax.swing.JButton saveSystemB;
631: private javax.swing.JScrollPane fileScrollPane;
632: private javax.swing.JScrollPane installedScrollPane;
633: private javax.swing.JPanel controlsPanel;
634: private javax.swing.JTable systemPluginTable;
635: private javax.swing.JButton loadPluginB;
636: private javax.swing.JScrollPane pluginControlsSP;
637: private javax.swing.JScrollPane systemScrollPane;
638: private javax.swing.JButton saveUserB;
639: private javax.swing.JPanel tablePanel;
640: private javax.swing.JTable userPluginTable;
641: private javax.swing.JTabbedPane prefsTab;
642: private javax.swing.JTable installedPluginTable;
643: private javax.swing.JScrollPane userScrollPane;
644: // End of variables declaration//GEN-END:variables
645:
646: }
|