/** * */ package icy.gui.dialog; import icy.file.FileUtil; import icy.plugin.PluginDescriptor; import icy.plugin.PluginLoader; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.ScrollPaneConstants; import javax.swing.border.EmptyBorder; /** * Dialog to let the user select the appropriate importer to open a file when several importers are * available. * * @author Stephane */ public class ImporterSelectionDialog extends ActionDialog { /** * */ private static final long serialVersionUID = -7233417975763216494L; JList importerList; JLabel pathLabel; public ImporterSelectionDialog(List<? extends Object> importers, String path) { super("Select importer"); initializeGui(); pathLabel.setText(" " + FileUtil.getFileName(path)); importerList.setListData(getItems(importers).toArray()); if (importers.size() > 0) importerList.setSelectedIndex(0); importerList.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // double click ? if ((e.getClickCount() == 2) && (e.getButton() == MouseEvent.BUTTON1)) { // have an item selected ? select it ! if (importerList.getSelectedIndex() != -1) getOkBtn().doClick(); } } }); setPreferredSize(new Dimension(360, 240)); pack(); setLocationRelativeTo(null); setVisible(true); } private void initializeGui() { setTitle("Importer selection"); importerList = new JList(); importerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane scrollPane = new JScrollPane(importerList); scrollPane.setPreferredSize(new Dimension(320, 80)); scrollPane.setMinimumSize(new Dimension(320, 80)); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); getMainPanel().add(scrollPane, BorderLayout.CENTER); JPanel panel = new JPanel(); panel.setBorder(new EmptyBorder(4, 0, 4, 0)); getMainPanel().add(panel, BorderLayout.NORTH); GridBagLayout gbl_panel = new GridBagLayout(); gbl_panel.columnWidths = new int[] {0, 0}; gbl_panel.rowHeights = new int[] {0, 0, 0}; gbl_panel.columnWeights = new double[] {1.0, Double.MIN_VALUE}; gbl_panel.rowWeights = new double[] {0.0, 0.0, Double.MIN_VALUE}; panel.setLayout(gbl_panel); JLabel newLabel = new JLabel(" Select the importer to open the following file:"); newLabel.setFont(new Font("Tahoma", Font.BOLD, 11)); GridBagConstraints gbc_newLabel = new GridBagConstraints(); gbc_newLabel.anchor = GridBagConstraints.WEST; gbc_newLabel.insets = new Insets(0, 0, 5, 0); gbc_newLabel.gridx = 0; gbc_newLabel.gridy = 0; panel.add(newLabel, gbc_newLabel); pathLabel = new JLabel(" "); pathLabel.setFont(new Font("Tahoma", Font.PLAIN, 11)); GridBagConstraints gbc_pathLabel = new GridBagConstraints(); gbc_pathLabel.anchor = GridBagConstraints.WEST; gbc_pathLabel.gridx = 0; gbc_pathLabel.gridy = 1; panel.add(pathLabel, gbc_pathLabel); } private List<ImporterPluginItem> getItems(List<? extends Object> importers) { final List<ImporterPluginItem> result = new ArrayList<ImporterPluginItem>(); for (Object importer : importers) { final PluginDescriptor plugin = PluginLoader.getPlugin(importer.getClass().getName()); if (plugin != null) result.add(new ImporterPluginItem(plugin, importer)); } return result; } public Object getSelectedImporter() { return ((ImporterPluginItem) importerList.getSelectedValue()).getImporter(); } private class ImporterPluginItem { final PluginDescriptor plugin; final Object importer; ImporterPluginItem(PluginDescriptor plugin, Object importer) { super(); this.plugin = plugin; this.importer = importer; } public Object getImporter() { return importer; } @Override public String toString() { return plugin.toString(); } } }