phex.gui.dialogs.configwizard.ConfigurationWizardDialog.java Source code

Java tutorial

Introduction

Here is the source code for phex.gui.dialogs.configwizard.ConfigurationWizardDialog.java

Source

/*
 *  PHEX - The pure-java Gnutella-servent.
 *  Copyright (C) 2001 - 2007 Phex Development Group
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program 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 for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * 
 *  Created on 22.11.2005
 *  --- CVS Information ---
 *  $Id$
 */
package phex.gui.dialogs.configwizard;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JSeparator;

import phex.common.bandwidth.BandwidthManager;
import phex.common.log.NLogger;
import phex.gui.common.DialogBanner;
import phex.gui.common.GUIRegistry;
import phex.gui.dialogs.options.OptionsDialog;
import phex.gui.prefs.UpdatePrefs;
import phex.servent.Servent;
import phex.utils.Localizer;

import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

public class ConfigurationWizardDialog extends JDialog {
    private static final int WELCOME_PAGE = 1;
    private static final int BANDWIDTH_PAGE = 2;
    private static final int DIRECTORY_PAGE = 3;
    private static final int CONTENTCOMMUNITY_PAGE = 4;
    private static final int SHARING_PAGE = 5;

    private static final int GOODBYE_PAGE = 6;

    private JPanel wizardContentPanel;

    private WelcomePanel welcomePanel;
    private BandwidthPanel bandwidthPanel;
    private DirectoryPanel directoryPanel;
    private SharingPanel sharingPanel;
    private ContentCommunityPanel contentCommunityPanel;
    private GoodbyePanel goodbyePanel;

    private int currentPage;
    private JButton finishBtn;
    private JButton backBtn;
    private JButton nextBtn;

    public ConfigurationWizardDialog() {
        super(GUIRegistry.getInstance().getMainFrame(), Localizer.getString("ConfigWizard_DialogTitle"), false);
        currentPage = WELCOME_PAGE;
        prepareComponent();
    }

    private void prepareComponent() {
        CloseEventHandler closeEventHandler = new CloseEventHandler();
        addWindowListener(closeEventHandler);

        Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());

        JPanel contentPanel = new JPanel();
        //JPanel contentPanel = new FormDebugPanel();
        contentPane.add(contentPanel, BorderLayout.CENTER);

        CellConstraints cc = new CellConstraints();
        FormLayout layout = new FormLayout("4dlu, fill:d:grow, 4dlu", // columns
                "p, p, 4dlu, fill:p:grow, 8dlu," + // rows
                        "p, 2dlu, p, 4dlu"); //btn rows
        PanelBuilder contentPB = new PanelBuilder(layout, contentPanel);
        int columnCount = layout.getColumnCount();
        int rowCount = layout.getRowCount();

        DialogBanner banner = new DialogBanner(Localizer.getString("ConfigWizard_BannerHeader"),
                Localizer.getString("ConfigWizard_BannerSubHeader"));
        contentPB.add(banner, cc.xywh(1, 1, columnCount, 1));

        contentPB.add(new JSeparator(), cc.xywh(1, 2, columnCount, 1));

        wizardContentPanel = new JPanel(new GridLayout(1, 1));
        //wizardContentPanel.setLayout(new BorderLayout());
        contentPB.add(wizardContentPanel, cc.xywh(2, 4, 1, 1));

        // button bar
        contentPB.add(new JSeparator(), cc.xywh(1, rowCount - 3, columnCount, 1));

        backBtn = new JButton(Localizer.getString("WizardDialog_Back"));
        backBtn.addActionListener(new BackBtnListener());

        nextBtn = new JButton(Localizer.getString("WizardDialog_Next"));
        nextBtn.setDefaultCapable(true);
        nextBtn.setRequestFocusEnabled(true);
        nextBtn.addActionListener(new NextBtnListener());

        finishBtn = new JButton(Localizer.getString("WizardDialog_Finish"));
        finishBtn.addActionListener(new FinishBtnListener());

        JButton cancelBtn = new JButton(Localizer.getString("WizardDialog_Cancel"));
        cancelBtn.addActionListener(closeEventHandler);

        JPanel btnPanel = ButtonBarFactory.buildWizardBar(backBtn, nextBtn, finishBtn, cancelBtn);
        contentPB.add(btnPanel, cc.xywh(2, rowCount - 1, columnCount - 2, 1));

        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        getRootPane().setDefaultButton(nextBtn);

        // set first panel to show...
        updatePage();
        pack();
        int height = Math.max(400, getHeight());
        setSize(height * 5 / 4, height);

        setLocationRelativeTo(getParent());
    }

    public void setFinishBtnEnabled(boolean state) {
        finishBtn.setEnabled(state);
    }

    private void closeDialog() {
        UpdatePrefs.ShowConfigWizard.set(Boolean.FALSE);
        setVisible(false);
        dispose();
    }

    private void updatePage() {
        wizardContentPanel.removeAll();
        JPanel newPage = null;
        switch (currentPage) {
        case WELCOME_PAGE:
            if (welcomePanel == null) {
                welcomePanel = new WelcomePanel(this);
            }
            newPage = welcomePanel;
            backBtn.setEnabled(false);
            nextBtn.setEnabled(true);
            break;
        case BANDWIDTH_PAGE:
            if (bandwidthPanel == null) {
                BandwidthManager bandwidthService = GUIRegistry.getInstance().getServent().getBandwidthService();
                bandwidthPanel = new BandwidthPanel(bandwidthService, this);
            }
            newPage = bandwidthPanel;
            backBtn.setEnabled(true);
            nextBtn.setEnabled(true);
            break;
        case DIRECTORY_PAGE:
            if (directoryPanel == null) {
                directoryPanel = new DirectoryPanel(this);
            }
            newPage = directoryPanel;
            backBtn.setEnabled(true);
            nextBtn.setEnabled(true);
            break;
        case SHARING_PAGE:
            if (sharingPanel == null) {
                sharingPanel = new SharingPanel(this);
            }
            newPage = sharingPanel;
            nextBtn.setEnabled(true);
            backBtn.setEnabled(true);
            break;
        case CONTENTCOMMUNITY_PAGE:
            if (contentCommunityPanel == null) {
                contentCommunityPanel = new ContentCommunityPanel(this);
            }
            newPage = contentCommunityPanel;
            nextBtn.setEnabled(true);
            backBtn.setEnabled(true);
            break;
        case GOODBYE_PAGE:
            if (goodbyePanel == null) {
                goodbyePanel = new GoodbyePanel(this);
            }
            newPage = goodbyePanel;
            nextBtn.setEnabled(false);
            backBtn.setEnabled(true);
            break;
        }
        wizardContentPanel.add(newPage, BorderLayout.CENTER);

        wizardContentPanel.doLayout();
        wizardContentPanel.revalidate();
        wizardContentPanel.repaint();

        // here we adjust the size of the dialog if necessary
        Dimension prefSize = getPreferredSize();
        Dimension currSize = getSize();
        if (prefSize.height > currSize.height) {
            int height = Math.max(prefSize.height, currSize.height);
            setSize(height * 5 / 4, height);
            doLayout();
        }
    }

    private final class NextBtnListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            try {
                switch (currentPage) {
                case WELCOME_PAGE:
                    currentPage = BANDWIDTH_PAGE;
                    break;
                case BANDWIDTH_PAGE:
                    currentPage = DIRECTORY_PAGE;
                    break;
                case DIRECTORY_PAGE:
                    if (!directoryPanel.checkInput()) {
                        currentPage = DIRECTORY_PAGE;
                    } else {
                        currentPage = CONTENTCOMMUNITY_PAGE;
                    }
                    break;
                case CONTENTCOMMUNITY_PAGE:
                    currentPage = SHARING_PAGE;
                    break;
                case SHARING_PAGE:
                    currentPage = GOODBYE_PAGE;
                    break;
                }
                updatePage();
            } catch (Throwable th) {
                NLogger.error(NextBtnListener.class, th, th);
            }
        }
    }

    private final class BackBtnListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            try {
                switch (currentPage) {
                case BANDWIDTH_PAGE:
                    currentPage = WELCOME_PAGE;
                    break;
                case DIRECTORY_PAGE:
                    currentPage = BANDWIDTH_PAGE;
                    break;
                case CONTENTCOMMUNITY_PAGE:
                    currentPage = DIRECTORY_PAGE;
                    break;
                case SHARING_PAGE:
                    currentPage = CONTENTCOMMUNITY_PAGE;
                    break;
                case GOODBYE_PAGE:
                    currentPage = SHARING_PAGE;
                    break;
                }
                updatePage();
            } catch (Throwable th) {
                NLogger.error(BackBtnListener.class, th, th);
            }
        }
    }

    private final class FinishBtnListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            try {
                if (bandwidthPanel != null) {
                    bandwidthPanel.saveSettings();
                }
                if (directoryPanel != null) {
                    if (!directoryPanel.checkInput()) {
                        currentPage = DIRECTORY_PAGE;
                        updatePage();
                        return;
                    }
                    directoryPanel.saveSettings();
                }
                if (contentCommunityPanel != null) {
                    contentCommunityPanel.saveSettings();
                }
                boolean openOptions = false;
                if (goodbyePanel != null) {
                    openOptions = goodbyePanel.isOpenOptionsSelected();
                }
                closeDialog();
                if (openOptions) {
                    OptionsDialog dialog = new OptionsDialog();
                    dialog.setVisible(true);
                }
            } catch (Throwable th) {
                NLogger.error(FinishBtnListener.class, th, th);
            }
        }
    }

    private final class CloseEventHandler extends WindowAdapter implements ActionListener {
        @Override
        public void windowClosing(WindowEvent evt) {
            closeDialog();
        }

        /**
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
         */
        public void actionPerformed(ActionEvent e) {
            closeDialog();
        }
    }
}