Java tutorial
// The contents of this file are subject to the Mozilla Public License Version // 1.1 //(the "License"); you may not use this file except in compliance with the //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License //for the specific language governing rights and //limitations under the License. // //The Original Code is "The Columba Project" // //The Initial Developers of the Original Code are Frederik Dietz and Timo // Stich. //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. // //All Rights Reserved. package org.columba.core.gui.externaltools; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.KeyStroke; import javax.swing.SwingConstants; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.columba.api.plugin.IExtension; import org.columba.api.plugin.IExtensionHandler; import org.columba.api.plugin.IExtensionHandlerKeys; import org.columba.api.plugin.PluginHandlerNotFoundException; import org.columba.core.gui.base.ButtonWithMnemonic; import org.columba.core.gui.base.DoubleClickListener; import org.columba.core.gui.base.InfoViewerDialog; import org.columba.core.gui.base.SingleSideEtchedBorder; import org.columba.core.gui.util.DialogHeaderPanel; import org.columba.core.help.HelpManager; import org.columba.core.plugin.PluginManager; import org.columba.core.resourceloader.GlobalResourceLoader; import org.columba.core.resourceloader.IconKeys; import org.columba.core.resourceloader.ImageLoader; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; /** * Shows a list of external tools used in Columba. * <p> * Should be the central location to configure these tools * * @author fdietz */ @SuppressWarnings({ "serial", "serial" }) public class ExternalToolsDialog extends JDialog implements ActionListener, ListSelectionListener { private static final String RESOURCE_PATH = "org.columba.core.i18n.dialog"; IExtensionHandler handler; protected JButton helpButton; protected JButton closeButton; protected JButton configButton; protected JButton infoButton; protected JList list; protected String selection; /** * @throws java.awt.HeadlessException */ public ExternalToolsDialog() throws HeadlessException { super(new JFrame(), true); // TODO (@author fdietz): i18n setTitle("External Tools"); try { handler = PluginManager.getInstance() .getExtensionHandler(IExtensionHandlerKeys.ORG_COLUMBA_CORE_EXTERNALTOOLS); } catch (PluginHandlerNotFoundException e) { e.printStackTrace(); } initComponents(); pack(); setLocationRelativeTo(null); setVisible(true); } protected void initComponents() { JPanel mainPanel = new JPanel(new BorderLayout()); mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); // TODO (@author fdietz): i18n configButton = new ButtonWithMnemonic("Con&figure..."); configButton.setActionCommand("CONFIG"); configButton.addActionListener(this); configButton.setEnabled(false); // TODO (@author fdietz): i18n infoButton = new ButtonWithMnemonic("&Details..."); infoButton.setActionCommand("INFO"); infoButton.addActionListener(this); infoButton.setEnabled(false); String[] ids = handler.getPluginIdList(); list = new JList(ids); list.addListSelectionListener(this); list.addMouseListener(new DoubleClickListener() { public void doubleClick(MouseEvent ev) { actionPerformed(new ActionEvent(list, 0, "CONFIG")); } }); getContentPane().add(new DialogHeaderPanel( GlobalResourceLoader.getString(RESOURCE_PATH, "externaltools", "header_title"), GlobalResourceLoader.getString(RESOURCE_PATH, "externaltools", "header_description"), ImageLoader.getIcon(IconKeys.PREFERENCES)), BorderLayout.NORTH); getContentPane().add(createPanel(), BorderLayout.CENTER); getContentPane().add(createBottomPanel(), BorderLayout.SOUTH); getRootPane().setDefaultButton(closeButton); getRootPane().registerKeyboardAction(this, "CLOSE", KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); // associate with JavaHelp HelpManager.getInstance().enableHelpOnButton(helpButton, "extending_columba_2"); HelpManager.getInstance().enableHelpKey(getRootPane(), "extending_columba_2"); } private JPanel createPanel() { JPanel jpanel1 = new JPanel(); FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),3DLU,FILL:DEFAULT:NONE", "CENTER:DEFAULT:NONE,1DLU,FILL:DEFAULT:GROW(1.0),3DLU,CENTER:DEFAULT:NONE"); CellConstraints cc = new CellConstraints(); jpanel1.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); jpanel1.setLayout(formlayout1); JLabel jlabel1 = new JLabel(); jlabel1.setText("External Tools:"); jpanel1.add(jlabel1, cc.xy(1, 1)); JScrollPane scrollPane = new JScrollPane(list); scrollPane.setPreferredSize(new Dimension(250, 150)); jpanel1.add(scrollPane, cc.xy(1, 3)); jpanel1.add(createPanel1(), new CellConstraints(3, 3, 1, 1, CellConstraints.DEFAULT, CellConstraints.TOP)); return jpanel1; } private JPanel createPanel1() { JPanel jpanel1 = new JPanel(); FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE", "CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE"); CellConstraints cc = new CellConstraints(); jpanel1.setLayout(formlayout1); jpanel1.add(configButton, cc.xy(1, 1)); jpanel1.add(infoButton, cc.xy(1, 3)); return jpanel1; } private JPanel createBottomPanel() { JPanel bottomPanel = new JPanel(new BorderLayout()); bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 6, 0)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); closeButton = new ButtonWithMnemonic(GlobalResourceLoader.getString("global", "global", "close")); closeButton.setActionCommand("CLOSE"); //$NON-NLS-1$ closeButton.addActionListener(this); buttonPanel.add(closeButton); helpButton = new ButtonWithMnemonic(GlobalResourceLoader.getString("global", "global", "help")); buttonPanel.add(helpButton); bottomPanel.add(buttonPanel, BorderLayout.EAST); return bottomPanel; } public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); if (action.equals("CLOSE")) { setVisible(false); } else if (action.equals("CONFIG")) { new ExternalToolsWizardLauncher().launchWizard(selection, false); } else if (action.equals("INFO")) { AbstractExternalToolsPlugin plugin = null; try { IExtension extension = handler.getExtension(selection); plugin = (AbstractExternalToolsPlugin) extension.instanciateExtension(null); } catch (Exception e1) { e1.printStackTrace(); } String info = plugin.getDescription(); new InfoViewerDialog(info); } } /* * (non-Javadoc) * * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent) */ public void valueChanged(ListSelectionEvent e) { boolean enabled = !list.isSelectionEmpty(); configButton.setEnabled(enabled); infoButton.setEnabled(enabled); selection = (String) list.getSelectedValue(); } }