captureplugin.drivers.defaultdriver.configpanels.SettingsPanel.java Source code

Java tutorial

Introduction

Here is the source code for captureplugin.drivers.defaultdriver.configpanels.SettingsPanel.java

Source

/*
 * 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());
        }
    }

}