package org.openjump.core.ui.plugin.file.open; import java.awt.BorderLayout; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.swing.BorderFactory; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.openjump.core.ui.swing.wizard.WizardGroup; import org.openjump.core.ui.swing.wizard.WizardGroupListCellRenderer; import com.vividsolutions.jump.I18N; import com.vividsolutions.jump.workbench.WorkbenchContext; import com.vividsolutions.jump.workbench.ui.InputChangedListener; import com.vividsolutions.jump.workbench.ui.wizard.WizardDialog; import com.vividsolutions.jump.workbench.ui.wizard.WizardPanel; public class OpenDataTypePanel extends JPanel implements WizardPanel { public static final String KEY = OpenDataTypePanel.class.getName(); private static final String TITLE = I18N.get(KEY); private static final String INSTRUCTIONS = I18N.get(KEY + ".instructions"); private JList list; private Set<InputChangedListener> listeners = new LinkedHashSet<InputChangedListener>(); public OpenDataTypePanel(final WorkbenchContext workbenchContext, final WizardDialog dialog, final List<WizardGroup> wizards) { super(new BorderLayout()); list = new JList(wizards.toArray()); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setVisibleRowCount(-1); list.setLayoutOrientation(JList.HORIZONTAL_WRAP); list.setCellRenderer(new WizardGroupListCellRenderer()); list.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); list.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { for (InputChangedListener listener : listeners) { listener.inputChanged(); } } }); list.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { int index = list.locationToIndex(e.getPoint()); if (index != -1) { Rectangle bounds = list.getCellBounds(index, index); if (bounds.contains(e.getPoint())) { dialog.next(); } } } } }); JScrollPane scrollPane = new JScrollPane(list); add(scrollPane, BorderLayout.CENTER); } public void add(InputChangedListener listener) { listeners.add(listener); } public void enteredFromLeft(Map dataMap) { } public void exitingToRight() throws Exception { } public String getID() { return KEY; } public String getInstructions() { return INSTRUCTIONS; } public String getNextID() { WizardGroup wizard = getSlectedWizardGroup(); if (wizard != null) { return wizard.getFirstId(); } else { return null; } } public WizardGroup getSlectedWizardGroup() { if (list.isSelectionEmpty()) { return null; } else { return (WizardGroup)list.getSelectedValue(); } } public String getTitle() { return TITLE; } public boolean isInputValid() { return !list.isSelectionEmpty(); } public void remove(InputChangedListener listener) { listeners.remove(listener); } }