Java tutorial
/* * CapturePlugin by Andreas Hessel (Vidrec@gmx.de), Bodo Tasche * * 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 captureplugin.drivers.defaultdriver.configpanels; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.TimeZone; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JSpinner; import javax.swing.JTextField; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import util.ui.Localizer; import util.ui.ProgramReceiveTargetSelectionPanel; import util.ui.ScrollableJPanel; import util.ui.UiUtilities; import captureplugin.CapturePlugin; import captureplugin.drivers.defaultdriver.DeviceConfig; import com.jgoodies.forms.builder.PanelBuilder; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; /** * Creates the Settings-Panel * * @author bodum */ public class SettingsPanel extends ScrollableJPanel implements ActionListener, ChangeListener { /** Translator */ private static final Localizer mLocalizer = Localizer.getLocalizerFor(SettingsPanel.class); /** GUI */ private JSpinner mPreTimeSpinner; private JSpinner mPostTimeTextField; private JTextField mUserName = new JTextField(); private JPasswordField mUserPwd = new JPasswordField(); private JSpinner mMaxTimeout; private JSpinner mMaxSimult; /** Settings */ private DeviceConfig mData; private JCheckBox mCheckReturn, mShowOnError, mShowTitleAndTimeDialog, mOldPrograms, mUseTime, mDeleteRemovedPrograms; private JComboBox mTimeZones; private JLabel mTimeZoneLabel; private ProgramReceiveTargetSelectionPanel mProgramReceiveTargetSelection; /** * Creates the SettingsPanel * @param data Settings */ public SettingsPanel(DeviceConfig data) { mData = data; createPanel(); } /** * creates a JPanel for getting the time offsets */ private void createPanel() { CellConstraints cc = new CellConstraints(); PanelBuilder pb = new PanelBuilder(new FormLayout("5dlu,12dlu,pref:grow,5dlu,pref:grow,5dlu", "pref,5dlu,pref,1dlu,pref,10dlu,pref,5dlu,pref,1dlu," + "pref,10dlu,pref,5dlu,pref,1dlu,pref,7dlu,pref,pref," + "pref,pref,pref,7dlu,pref,pref,10dlu,pref"), this); pb.setDefaultDialogBorder(); mPreTimeSpinner = new JSpinner(new SpinnerNumberModel(mData.getPreTime(), 0, null, 1)); mPostTimeTextField = new JSpinner(new SpinnerNumberModel(mData.getPostTime(), 0, null, 1)); mUserName.setText(mData.getUsername()); mUserPwd.setText(mData.getPassword()); mMaxSimult = new JSpinner(new SpinnerNumberModel(mData.getMaxSimultanious(), 1, null, 1)); mMaxTimeout = new JSpinner(new SpinnerNumberModel(mData.getTimeout(), -1, 999, 1)); mCheckReturn = new JCheckBox(mLocalizer.msg("CheckError", "Check if returns Error"), mData.useReturnValue()); mShowOnError = new JCheckBox(mLocalizer.msg("ShowResultOnError", "Show Result-Dialog only on Error"), mData.getDialogOnlyOnError()); mShowTitleAndTimeDialog = new JCheckBox( mLocalizer.msg("showTitleAndTime", "Show title and time settings dialog"), mData.getShowTitleAndTimeDialog()); mDeleteRemovedPrograms = new JCheckBox( mLocalizer.msg("autoDeletePrograms", "Automatically delete programs that were removed during a data update"), mData.getDeleteRemovedPrograms()); mOldPrograms = new JCheckBox(mLocalizer.msg("OnlyFuture", "Only allow Programs that are in the future"), mData.getOnlyFuturePrograms()); mUseTime = new JCheckBox(mLocalizer.msg("useSystemTimezone", "Use timezone provided by OS"), !mData.useTimeZone()); String[] zoneIds = new String[0]; try { zoneIds = TimeZone.getAvailableIDs(); } catch (Exception e) { e.printStackTrace(); } mTimeZones = new JComboBox(zoneIds); mTimeZones.setEnabled(mData.useTimeZone() && mTimeZones.getItemCount() > 0); for (int i = 0; i < zoneIds.length; i++) { if (zoneIds[i].equals(mData.getTimeZone().getID())) { mTimeZones.setSelectedIndex(i); break; } } pb.addSeparator(mLocalizer.msg("TimeSettings", "Timesettings"), cc.xyw(1, 1, 6)); pb.addLabel(mLocalizer.msg("Earlier", "Number of minutes to start erlier"), cc.xyw(2, 3, 2)); pb.add(mPreTimeSpinner, cc.xy(5, 3)); pb.addLabel(mLocalizer.msg("Later", "Number of minutes to stop later"), cc.xyw(2, 5, 2)); pb.add(mPostTimeTextField, cc.xy(5, 5)); pb.addSeparator(mLocalizer.msg("User", "User"), cc.xyw(1, 7, 6)); pb.addLabel(mLocalizer.msg("Username", "Username") + ":", cc.xyw(2, 9, 2)); pb.add(mUserName, cc.xy(5, 9)); pb.addLabel(mLocalizer.msg("Password", "Password") + ":", cc.xyw(2, 11, 2)); pb.add(mUserPwd, cc.xy(5, 11)); pb.addSeparator(mLocalizer.msg("Additional", "Additional"), cc.xyw(1, 13, 6)); pb.addLabel(mLocalizer.msg("MaxSimult", "Maximum simultaneous recordings") + ":", cc.xyw(2, 15, 2)); pb.add(mMaxSimult, cc.xy(5, 15)); pb.addLabel(mLocalizer.msg("Timeout", "Wait sec. until Timeout (-1 = disabled)") + ":", cc.xyw(2, 17, 2)); pb.add(mMaxTimeout, cc.xy(5, 17)); pb.add(mCheckReturn, cc.xyw(2, 19, 4)); pb.add(mShowOnError, cc.xyw(2, 20, 4)); pb.add(mShowTitleAndTimeDialog, cc.xyw(2, 21, 4)); pb.add(mDeleteRemovedPrograms, cc.xyw(2, 22, 4)); pb.add(mOldPrograms, cc.xyw(2, 23, 4)); pb.add(mUseTime, cc.xyw(2, 25, 4)); JPanel timeZonePanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); mTimeZoneLabel = new JLabel(mLocalizer.msg("Timezone", "Timezone") + ": "); mTimeZoneLabel.setEnabled(mTimeZones.isEnabled()); timeZonePanel.add(mTimeZoneLabel); timeZonePanel.add(mTimeZones); pb.add(timeZonePanel, cc.xyw(3, 26, 3)); mProgramReceiveTargetSelection = new ProgramReceiveTargetSelectionPanel( UiUtilities.getLastModalChildOf(CapturePlugin.getInstance().getSuperFrame()), mData.getProgramReceiveTargets(), null, CapturePlugin.getInstance(), true, mLocalizer.msg("sendToTitle", "Send scheduled programs to:")); mProgramReceiveTargetSelection.addChangeListener(this); pb.add(mProgramReceiveTargetSelection, cc.xyw(1, 28, 5)); // add ChangeListener to the spinners mPreTimeSpinner.addChangeListener(this); mPostTimeTextField.addChangeListener(this); mMaxSimult.addChangeListener(this); mMaxTimeout.addChangeListener(this); // add ActionListener to the check boxes mCheckReturn.addActionListener(this); mShowOnError.addActionListener(this); mShowTitleAndTimeDialog.addActionListener(this); mDeleteRemovedPrograms.addActionListener(this); mOldPrograms.addActionListener(this); mUseTime.addActionListener(this); mUserName.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e) { mData.setUserName(mUserName.getText()); } }); mUserPwd.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e) { mData.setPassword(new String(mUserPwd.getPassword())); } }); mTimeZones.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { mData.setTimeZone(TimeZone.getTimeZone((String) mTimeZones.getSelectedItem())); } }); } public void actionPerformed(ActionEvent e) { if (e.getSource().equals(mCheckReturn)) { mData.setUseReturnValue(mCheckReturn.isSelected()); } else if (e.getSource().equals(mShowOnError)) { mData.setDialogOnlyOnError(mShowOnError.isSelected()); } else if (e.getSource().equals(mShowTitleAndTimeDialog)) { mData.setShowTitleAndTimeDialog(mShowTitleAndTimeDialog.isSelected()); } else if (e.getSource().equals(mDeleteRemovedPrograms)) { mData.setDeleteRemovedPrograms(mDeleteRemovedPrograms.isSelected()); } else if (e.getSource().equals(mOldPrograms)) { mData.setOnlyFuturePrograms(mOldPrograms.isSelected()); } else if (e.getSource().equals(mUseTime)) { mData.setUseTimeZone(!mUseTime.isSelected()); mTimeZones.setEnabled(!mUseTime.isSelected()); mTimeZoneLabel.setEnabled(mTimeZones.isEnabled()); } } public void stateChanged(ChangeEvent e) { if (e.getSource().equals(mMaxSimult)) { mData.setMaxSimultanious((Integer) mMaxSimult.getValue()); } else if (e.getSource().equals(mMaxTimeout)) { mData.setTimeout((Integer) mMaxTimeout.getValue()); } else if (e.getSource().equals(mPreTimeSpinner)) { mData.setPreTime((Integer) mPreTimeSpinner.getValue()); } else if (e.getSource().equals(mPostTimeTextField)) { mData.setPostTime((Integer) mPostTimeTextField.getValue()); } else if (e.getSource().equals(mProgramReceiveTargetSelection)) { mData.setProgramReceiveTargets(mProgramReceiveTargetSelection.getCurrentSelection()); } } }