Java tutorial
/* * TV-Browser * Copyright (C) 04-2003 Martin Oberhauser (martin@tvbrowser.org) * * 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. * * CVS information: * $RCSfile$ * $Source$ * $Date: 2010-06-28 19:33:48 +0200 (Mon, 28 Jun 2010) $ * $Author: bananeweizen $ * $Revision: 6662 $ */ package tvbrowser.ui.configassistant; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.WindowConstants; import tvbrowser.core.Settings; import tvbrowser.core.tvdataservice.TvDataServiceProxy; import tvbrowser.core.tvdataservice.TvDataServiceProxyManager; import util.ui.Localizer; import util.ui.UiUtilities; import util.ui.WindowClosingIf; import com.jgoodies.forms.factories.Borders; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; /** * This is the Main-Class for the Config Assistent */ public class ConfigAssistant extends JDialog implements ActionListener, PrevNextButtons, WindowClosingIf { private JButton mNextBt, mBackBt, mCancelBt; transient private CardPanel mCurCardPanel, mFinishedPanel; private JPanel mCardPn; private static final util.ui.Localizer mLocalizer = util.ui.Localizer.getLocalizerFor(ConfigAssistant.class); public ConfigAssistant(JFrame parent) { super(parent, true); UiUtilities.registerForClosing(this); setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { close(); } }); File tvDataDir = new File(Settings.propTVDataDirectory.getString().trim()); Settings.propTVDataDirectory.setString(tvDataDir.toString().replaceAll("\\\\", "/")); TvDataServiceProxyManager.getInstance().setTvDataDir(tvDataDir); setTitle(mLocalizer.msg("title", "Setup assistant")); JPanel contentPane = (JPanel) getContentPane(); contentPane.setLayout(new FormLayout("fill:250px:grow", "fill:pref:grow, 1px, pref")); JPanel centerPanel = new JPanel(new BorderLayout()); mCardPn = new JPanel(new CardLayout()); mBackBt = new JButton("<< " + Localizer.getLocalization(Localizer.I18N_BACK)); mNextBt = new JButton(Localizer.getLocalization(Localizer.I18N_NEXT) + " >>"); mCancelBt = new JButton(Localizer.getLocalization(Localizer.I18N_CANCEL)); mBackBt.setEnabled(false); mBackBt.addActionListener(this); mNextBt.addActionListener(this); mCancelBt.addActionListener(this); CardPanel welcomePanel = new WelcomeCardPanel(this); CardPanel networkPanel = new NetworkCardPanel(this); CardPanel networkSuccessPanel = new NetworkSuccessPanel(this); CardPanel subscribeChannelPanel = new SubscribeChannelCardPanel(this); mFinishedPanel = new FinishCardPanel(this); mCardPn.add(welcomePanel.getPanel(), welcomePanel.toString()); mCardPn.add(networkPanel.getPanel(), networkPanel.toString()); mCardPn.add(networkSuccessPanel.getPanel(), networkSuccessPanel.toString()); mCardPn.add(mFinishedPanel.getPanel(), mFinishedPanel.toString()); mCardPn.add(subscribeChannelPanel.getPanel(), subscribeChannelPanel.toString()); boolean dynamicChannelList = isDynamicChannelListSupported(); welcomePanel.setNext(networkPanel); if (dynamicChannelList) { networkPanel.setNext(networkSuccessPanel); networkSuccessPanel.setNext(subscribeChannelPanel); subscribeChannelPanel.setPrev(networkSuccessPanel); subscribeChannelPanel.setNext(mFinishedPanel); mFinishedPanel.setPrev(subscribeChannelPanel); } else { networkPanel.setNext(networkSuccessPanel); networkSuccessPanel.setNext(subscribeChannelPanel); subscribeChannelPanel.setNext(mFinishedPanel); mFinishedPanel.setPrev(subscribeChannelPanel); } mCurCardPanel = welcomePanel; FormLayout layout = new FormLayout("fill:pref:grow, pref, 3dlu, pref, 3dlu, pref", "pref"); layout.setColumnGroups(new int[][] { { 2, 4, 6 } }); JPanel buttonPanel = new JPanel(layout); buttonPanel.setBorder(Borders.DLU4_BORDER); CellConstraints cc = new CellConstraints(); buttonPanel.add(mBackBt, cc.xy(2, 1)); buttonPanel.add(mNextBt, cc.xy(4, 1)); buttonPanel.add(mCancelBt, cc.xy(6, 1)); centerPanel.add(mCardPn, BorderLayout.CENTER); contentPane.add(centerPanel, cc.xy(1, 1)); JPanel black = new JPanel(); black.setBackground(mCancelBt.getForeground()); contentPane.add(black, cc.xy(1, 2)); contentPane.add(buttonPanel, cc.xy(1, 3)); setSize(700, 500); } private boolean isDynamicChannelListSupported() { TvDataServiceProxy[] services = TvDataServiceProxyManager.getInstance().getDataServices(); for (TvDataServiceProxy service : services) { if (service.supportsDynamicChannelList()) { return true; } } return false; } public void actionPerformed(final ActionEvent e) { new Thread(new Runnable() { public void run() { boolean next = mNextBt.isEnabled(); boolean back = mBackBt.isEnabled(); boolean cancel = mCancelBt.isEnabled(); mNextBt.setEnabled(false); mBackBt.setEnabled(false); mCancelBt.setEnabled(false); Object o = e.getSource(); if (o == mBackBt) { if (mCurCardPanel == mFinishedPanel) { mCancelBt.setVisible(true); mNextBt.setText(Localizer.getLocalization(Localizer.I18N_NEXT) + " >>"); } if (!mCurCardPanel.onPrev()) { mNextBt.setEnabled(next); mBackBt.setEnabled(back); mCancelBt.setEnabled(cancel); return; } mCurCardPanel = mCurCardPanel.getPrev(); CardLayout cl = (CardLayout) mCardPn.getLayout(); mCurCardPanel.onShow(); cl.show(mCardPn, mCurCardPanel.toString()); mCancelBt.setEnabled(true); } else if (o == mNextBt) { if (mCurCardPanel == mFinishedPanel) { tvbrowser.core.Settings.propShowAssistant.setBoolean(false); setVisible(false); } else { if (!mCurCardPanel.onNext()) { mNextBt.setEnabled(next); mBackBt.setEnabled(back); mCancelBt.setEnabled(cancel); return; } mCurCardPanel = mCurCardPanel.getNext(); CardLayout cl = (CardLayout) mCardPn.getLayout(); mCurCardPanel.onShow(); cl.show(mCardPn, mCurCardPanel.toString()); mCancelBt.setEnabled(true); if (mCurCardPanel == mFinishedPanel) { mCancelBt.setVisible(false); mNextBt.setText(mLocalizer.msg("finish", "Finish")); mNextBt.setEnabled(true); mBackBt.setEnabled(true); } } } else if (o == mCancelBt) { cancel(); mNextBt.setEnabled(next); mBackBt.setEnabled(back); mCancelBt.setEnabled(cancel); } } }).start(); } private void cancel() { JCheckBox notShowAgain = new JCheckBox(mLocalizer.msg("notShowAgain", "Don't show assistant again.")); notShowAgain.setSelected(!tvbrowser.core.Settings.propShowAssistant.getBoolean()); Object[] values = { mLocalizer.msg("cancelDlg", "message"), notShowAgain }; Object[] buttons = { mLocalizer.msg("button.1", "Close assistant"), mLocalizer.msg("button.2", "Continue configuration") }; int selectedValue = JOptionPane.showOptionDialog(this, values, mLocalizer.msg("cancelDlg.title", "title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, buttons, buttons[1]); if (selectedValue == 0) { tvbrowser.core.Settings.propShowAssistant.setBoolean(!notShowAgain.isSelected()); setVisible(false); } } public void enablePrevButton() { mBackBt.setEnabled(true); } public void enableNextButton() { mNextBt.setEnabled(true); } public void disablePrevButton() { mBackBt.setEnabled(false); } public void disableNextButton() { mNextBt.setEnabled(false); } public void close() { if (mCurCardPanel == mFinishedPanel) { tvbrowser.core.Settings.propShowAssistant.setBoolean(false); setVisible(false); } else { cancel(); } } }