package com.hackerdude.apps.sqlide.dialogs; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.event.ActionEvent; import java.util.ArrayList; import javax.swing.AbstractListModel; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListCellRenderer; import javax.swing.ListModel; import javax.swing.event.ListSelectionListener; import com.hackerdude.apps.sqlide.RunningPlugins; import com.hackerdude.apps.sqlide.pluginapi.IDEPluginIF; import com.hackerdude.apps.sqlide.plugins.definitions.PluginDefinition; import com.hackerdude.apps.sqlide.plugins.definitions.PluginRegistry; public class PluginRegistryPanel extends JPanel { private ArrayList listSelectionListeners; private PluginDefinitionListModel selectedModel; public static final int LIST_TYPE_ALL_PLUGINS = 0; public static final int LIST_TYPE_NODE_CONTEXT = 1; public static final int LIST_TYPE_VISUAL_PLUGINS = 2; public static final int LIST_TYPE_BROWSER_EXTENSION = 3; public static final int LIST_TYPE_NON_VISUAL = 4; private ListCellRenderer pluginsCellRenderer = new PluginCellRenderer(); private PluginDefinitionListModel allPluginInstancesListModel = new PluginDefinitionListModel(LIST_TYPE_ALL_PLUGINS); private PluginDefinitionListModel nodeContextListModel = new PluginDefinitionListModel(LIST_TYPE_NODE_CONTEXT); private PluginDefinitionListModel visualPluginsListModel = new PluginDefinitionListModel(LIST_TYPE_VISUAL_PLUGINS); private PluginDefinitionListModel browserExtensionListModel = new PluginDefinitionListModel(LIST_TYPE_BROWSER_EXTENSION); private PluginDefinitionListModel nonVisualListModel = new PluginDefinitionListModel(LIST_TYPE_NON_VISUAL); public final ListModel[] PLUGIN_MODELS = { allPluginInstancesListModel, nodeContextListModel, visualPluginsListModel, browserExtensionListModel, nonVisualListModel }; BorderLayout borderLayout1 = new BorderLayout(); private JPanel pnlMainPanel = new JPanel(); private BorderLayout borderLayout2 = new BorderLayout(); private JScrollPane spPluginsRunning = new JScrollPane(); private JPanel pnlHeader = new JPanel(); private JLabel lblHeader = new JLabel(); private BorderLayout borderLayout3 = new BorderLayout(); private JList lstRunningPlugins = new JList(); private JPanel jPanel1 = new JPanel(); private JLabel lblPluginFilter = new JLabel(); private JComboBox jComboBox1 = new JComboBox(PLUGIN_MODELS); public PluginRegistryPanel() { try { jbInit(); lstRunningPlugins.setCellRenderer(pluginsCellRenderer); lstRunningPlugins.setModel(allPluginInstancesListModel); } catch(Exception ex) { ex.printStackTrace(); } } void jbInit() throws Exception { this.setLayout(borderLayout1); pnlMainPanel.setLayout(borderLayout2); lblHeader.setText("Plugins Installed"); pnlHeader.setLayout(borderLayout3); lblPluginFilter.setText("Plugins: "); jComboBox1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jComboBox1_actionPerformed(e); } }); this.add(pnlMainPanel, BorderLayout.CENTER); pnlMainPanel.add(spPluginsRunning, BorderLayout.CENTER); spPluginsRunning.getViewport().add(lstRunningPlugins, null); this.add(pnlHeader, BorderLayout.NORTH); pnlHeader.add(lblHeader, BorderLayout.CENTER); pnlMainPanel.add(jPanel1, BorderLayout.SOUTH); jPanel1.add(lblPluginFilter, null); jPanel1.add(jComboBox1, null); } public void setRunningPlugins(RunningPlugins runningPlugins) { // for ( int i=0; i< PLUGIN_MODELS.length; i++ ) { // ListModel plugin = PLUGIN_MODELS[i]; // if ( plugin instanceof PluginsListModel ) { // ((PluginsListModel)plugin).setRunningPlugins(runningPlugins); // } // } } class PluginCellRenderer extends JLabel implements ListCellRenderer { public PluginCellRenderer() { setOpaque(true); } public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { IDEPluginIF plugin = null; if ( value instanceof PluginDefinition ) { plugin = ((PluginDefinition)value).pluginInstance; } else { plugin = (IDEPluginIF)value; } setText(plugin.getPluginName()); setIcon(plugin.getPluginIcon()); setBackground(isSelected ? Color.red : Color.white); setForeground(isSelected ? Color.white : Color.black); return this; } } synchronized void jComboBox1_actionPerformed(ActionEvent e) { selectedModel = (PluginDefinitionListModel)jComboBox1.getSelectedItem(); lstRunningPlugins.setModel(selectedModel); } class PluginDefinitionListModel extends AbstractListModel { PluginDefinition[] pluginDefs; int listType; public PluginDefinitionListModel(int listType) { this.listType = listType; filterByType(); } public int getSize() { return pluginDefs==null?0:pluginDefs.length; } public Object getElementAt(int row) { return pluginDefs[row]; } public void filterByType() { switch ( listType ) { case LIST_TYPE_ALL_PLUGINS: pluginDefs = PluginRegistry.getInstance().getAllPluginDefinitions(); break; case LIST_TYPE_NODE_CONTEXT: pluginDefs = PluginRegistry.getInstance().getAllNodeContextPluginDefinitions(); break; case LIST_TYPE_VISUAL_PLUGINS: pluginDefs = PluginRegistry.getInstance().getAllVisualPluginDefinitions(); break; case LIST_TYPE_BROWSER_EXTENSION: pluginDefs = PluginRegistry.getInstance().getAllBrowserExtensionPluginDefinitions(); break; case LIST_TYPE_NON_VISUAL: pluginDefs = PluginRegistry.getInstance().getAllNonVisualPluginDefinitions(); break; } } public String toString() { switch( listType) { case LIST_TYPE_ALL_PLUGINS: return "All"; case LIST_TYPE_NODE_CONTEXT: return "Node Context"; case LIST_TYPE_VISUAL_PLUGINS: return "Visual"; case LIST_TYPE_BROWSER_EXTENSION: return "Browser Extension"; case LIST_TYPE_NON_VISUAL: return "Non Visual"; } return "unknown"; } } public void addListSelectionListener(ListSelectionListener listener) { lstRunningPlugins.getSelectionModel().addListSelectionListener(listener); } public void removeListSelectionListener(ListSelectionListener listener) { lstRunningPlugins.getSelectionModel().removeListSelectionListener(listener); } public synchronized Object getElementAt(int index) { if ( lstRunningPlugins.getModel().getSize() > index ) return lstRunningPlugins.getModel().getElementAt(index); else return null; } }