blob: c9cb7c9196f29767dbcd5c7c96fa70e6bb5b54b7 [file] [log] [blame]
/*
* Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
package com.sun.java.swing.ui;
import com.sun.java.swing.action.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.*;
// Referenced classes of package com.sun.java.swing.ui:
// CommonUI
public class WizardDlg extends JDialog
{
private class CancelListener
implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
if(cancelListener != null)
cancelListener.actionPerformed(evt);
setVisible(false);
}
private CancelListener()
{
}
}
private class FinishListener
implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
if(finishListener != null)
finishListener.actionPerformed(evt);
setVisible(false);
}
private FinishListener()
{
}
}
private class NextListener
implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
cardShowing++;
if(cardShowing > numCards)
cardShowing = numCards;
else
panesLayout.next(panesPanel);
if(nextListener != null)
nextListener.actionPerformed(evt);
enableBackNextButtons();
}
private NextListener()
{
}
}
private class BackListener
implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
cardShowing--;
if(cardShowing < 1)
cardShowing = 1;
else
panesLayout.previous(panesPanel);
if(backListener != null)
backListener.actionPerformed(evt);
enableBackNextButtons();
}
private BackListener()
{
}
}
public WizardDlg(JFrame frame, String title, Vector panels, Vector images)
{
super(frame, title, true);
this.title = title;
this.images = images;
Container pane = getContentPane();
pane.setLayout(new BorderLayout());
panesLayout = new CardLayout();
panesPanel = new JPanel(panesLayout);
pane.add(panesPanel, "Center");
pane.add(createButtonPanel(), "South");
setPanels(panels);
pack();
CommonUI.centerComponent(this);
}
public WizardDlg(JFrame frame, String title, Vector panels)
{
this(frame, title, panels, null);
}
public WizardDlg(String title, Vector panels)
{
this(new JFrame(), title, panels, null);
}
public void setPanels(Vector panels)
{
numCards = panels.size();
cardShowing = 1;
this.panels = panels;
panesPanel.removeAll();
for(int i = 0; i < numCards; i++)
panesPanel.add((JPanel)panels.elementAt(i), (new Integer(i)).toString());
validate();
enableBackNextButtons();
}
public void reset()
{
cardShowing = 1;
panesLayout.first(panesPanel);
enableBackNextButtons();
}
public void setWestPanel(JPanel panel)
{
Container pane = getContentPane();
pane.add(panel, "West");
}
public static void main(String args[])
{
JPanel p1 = new JPanel();
p1.add(new JButton("One"));
JPanel p2 = new JPanel();
p2.add(new JButton("Two"));
JPanel p3 = new JPanel();
p3.add(new JButton("Three"));
JPanel p4 = new JPanel();
p4.add(new JButton("Four"));
Vector panels = new Vector();
panels.addElement(p1);
panels.addElement(p2);
panels.addElement(p3);
panels.addElement(p4);
wizardDlg = new WizardDlg("Test Dialog", panels);
wizardDlg.addFinishListener(new ActionListener() {
public void actionPerformed(ActionEvent evt)
{
System.exit(0);
}
}
);
wizardDlg.addCancelListener(new ActionListener() {
public void actionPerformed(ActionEvent evt)
{
System.exit(0);
}
}
);
wizardDlg.setVisible(true);
}
private JPanel createButtonPanel()
{
JPanel panel = new JPanel();
backAction = new BackAction();
nextAction = new NextAction();
finishAction = new FinishAction();
cancelAction = new CancelAction();
backAction.setEnabled(false);
finishAction.setEnabled(false);
backAction.addActionListener(new BackListener());
nextAction.addActionListener(new NextListener());
finishAction.addActionListener(new FinishListener());
cancelAction.addActionListener(new CancelListener());
panel.add(CommonUI.createButton(backAction));
panel.add(CommonUI.createButton(nextAction));
panel.add(CommonUI.createButton(finishAction));
panel.add(CommonUI.createButton(cancelAction));
JPanel p2 = new JPanel(new BorderLayout());
p2.add(panel, "Center");
p2.add(new JSeparator(), "North");
return p2;
}
private void enableBackNextButtons()
{
if(cardShowing == 1)
{
backAction.setEnabled(false);
finishAction.setEnabled(false);
if(numCards > 1)
{
nextAction.setEnabled(true);
} else
{
finishAction.setEnabled(true);
nextAction.setEnabled(false);
}
} else
if(cardShowing == numCards)
{
nextAction.setEnabled(false);
finishAction.setEnabled(true);
if(numCards > 1)
backAction.setEnabled(true);
else
backAction.setEnabled(false);
} else
{
backAction.setEnabled(true);
nextAction.setEnabled(true);
finishAction.setEnabled(false);
}
setTitle();
}
private void setTitle()
{
JPanel panel = (JPanel)panels.elementAt(cardShowing - 1);
String newTitle = title;
String panelTitle = panel.getName();
if(panelTitle != null && panelTitle.equals(""))
{
newTitle = newTitle + " - ";
newTitle = newTitle + panelTitle;
}
super.setTitle(newTitle);
}
public synchronized void addFinishListener(ActionListener l)
{
finishListener = AWTEventMulticaster.add(finishListener, l);
}
public synchronized void removeFinishListener(ActionListener l)
{
finishListener = AWTEventMulticaster.remove(finishListener, l);
}
public synchronized void addCancelListener(ActionListener l)
{
cancelListener = AWTEventMulticaster.add(cancelListener, l);
}
public synchronized void removeCancelListener(ActionListener l)
{
cancelListener = AWTEventMulticaster.remove(cancelListener, l);
}
public synchronized void addNextListener(ActionListener l)
{
nextListener = AWTEventMulticaster.add(nextListener, l);
}
public synchronized void removeNextListener(ActionListener l)
{
nextListener = AWTEventMulticaster.remove(nextListener, l);
}
public synchronized void addBackListener(ActionListener l)
{
backListener = AWTEventMulticaster.add(backListener, l);
}
public synchronized void removeBackListener(ActionListener l)
{
backListener = AWTEventMulticaster.remove(backListener, l);
}
private CardLayout panesLayout;
private JPanel panesPanel;
private DelegateAction backAction;
private DelegateAction nextAction;
private DelegateAction finishAction;
private DelegateAction cancelAction;
private ActionListener finishListener;
private ActionListener cancelListener;
private ActionListener nextListener;
private ActionListener backListener;
private int numCards;
private int cardShowing;
private String title;
private Vector panels;
private Vector images;
private static WizardDlg wizardDlg;
}