package org.openjump.core.ui.swing.wizard;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;
import javax.swing.WindowConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.openjump.swing.listener.InvokeMethodActionListener;
import org.openjump.swing.listener.InvokeMethodListSelectionListener;
import com.vividsolutions.jts.util.Assert;
import com.vividsolutions.jump.I18N;
import com.vividsolutions.jump.workbench.WorkbenchContext;
import com.vividsolutions.jump.workbench.ui.ErrorHandler;
import com.vividsolutions.jump.workbench.ui.InputChangedListener;
import com.vividsolutions.jump.workbench.ui.wizard.CancelNextException;
import com.vividsolutions.jump.workbench.ui.wizard.WizardContext;
import com.vividsolutions.jump.workbench.ui.wizard.WizardDialog;
import com.vividsolutions.jump.workbench.ui.wizard.WizardPanel;
public class WizardGroupDialog extends WizardDialog implements WizardContext,
InputChangedListener {
private List<WizardGroup> wizards = new ArrayList<WizardGroup>();
private JList groupSelectList;
public WizardGroup currentWizard;
private WorkbenchContext workbenchContext;
public WizardGroupDialog(WorkbenchContext workbenchContext, Frame frame,
String title) {
super(frame, title, workbenchContext.getErrorHandler());
this.workbenchContext = workbenchContext;
initUi();
}
private void initUi() {
Container contentPane = getContentPane();
groupSelectList = new JList(new DefaultListModel());
groupSelectList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
groupSelectList.setVisibleRowCount(-1);
groupSelectList.setLayoutOrientation(JList.VERTICAL);
groupSelectList.setCellRenderer(new WizardGroupListCellRenderer());
groupSelectList.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
groupSelectList.addListSelectionListener(new InvokeMethodListSelectionListener(
this, "updateSelectedWizard"));
JScrollPane groupScrollPane = new JScrollPane(groupSelectList);
contentPane.add(groupScrollPane, BorderLayout.WEST);
}
public void addWizard(WizardGroup wizard) {
DefaultListModel model = (DefaultListModel)groupSelectList.getModel();
model.addElement(wizard);
}
public void addWizards(List<WizardGroup> wizards) {
for (WizardGroup wizard : wizards) {
addWizard(wizard);
}
}
public void updateSelectedWizard() {
WizardGroup selectedWizard = getSelectedWizard();
if (selectedWizard != null) {
if (currentWizard != selectedWizard) {
initSelectedWizard(selectedWizard);
}
}
}
private void initSelectedWizard(WizardGroup selectedWizard) {
currentWizard = selectedWizard;
currentWizard.initialize(workbenchContext, WizardGroupDialog.this);
setPanels(selectedWizard.getPanels());
setCurrentWizardPanel(currentWizard.getFirstId());
pack();
}
public WizardGroup getSelectedWizard() {
return (WizardGroup)groupSelectList.getSelectedValue();
}
public void setSelectedWizard(WizardGroup wizardGroup) {
if (wizardGroup != null) {
if (wizardGroup == currentWizard) {
initSelectedWizard(wizardGroup);
} else {
groupSelectList.setSelectedValue(wizardGroup, true);
}
} else {
groupSelectList.setSelectedIndex(0);
}
}
}