/*
* 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 calendarexportplugin;
import java.awt.BorderLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import util.ui.EnhancedPanelBuilder;
import util.ui.Localizer;
import util.ui.UiUtilities;
import util.ui.customizableitems.SelectableItemList;
import calendarexportplugin.exporter.ExporterIf;
import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.CellConstraints;
import devplugin.SettingsTab;
/**
* Settings Tab for Calendar Export
*
* @author bodo
*/
public class CalendarSettingsTab implements SettingsTab {
/** Translation */
private static final Localizer mLocalizer = Localizer.getLocalizerFor(CalendarSettingsTab.class);
/** Settings */
private CalendarExportSettings mSettings;
/** Length of Program */
private JCheckBox mNulltime;
private JTextField mCategorie;
private JComboBox mClassification;
private JComboBox mShowTime;
private CalendarExportPlugin mPlugin;
private JCheckBox mUseAlarm;
private JSpinner mAlarmMinutes;
private SelectableItemList mExporterList;
private JCheckBox mMarkItems;
/**
* Creates the Tab
*
* @param plugin Plugin-Instance
* @param settings Settings for this Plugin
*/
public CalendarSettingsTab(CalendarExportPlugin plugin, CalendarExportSettings settings) {
mPlugin = plugin;
mSettings = settings;
}
public JPanel createSettingsPanel() {
final EnhancedPanelBuilder pb = new EnhancedPanelBuilder(FormFactory.RELATED_GAP_COLSPEC.encode() + ","
+ FormFactory.PREF_COLSPEC.encode() + "," + FormFactory.RELATED_GAP_COLSPEC.encode() + ",default:grow,"
+ FormFactory.RELATED_GAP_COLSPEC.encode() + "," + FormFactory.PREF_COLSPEC.encode());
CellConstraints cc = new CellConstraints();
mCategorie = new JTextField(mSettings.getCategory());
String[] reservedValues = { mLocalizer.msg("Busy", "Busy"), mLocalizer.msg("Free", "Free") };
mShowTime = new JComboBox(reservedValues);
if (mSettings.isShowBusy()) {
mShowTime.setSelectedIndex(0);
}
else if (mSettings.isShowFree()) {
mShowTime.setSelectedIndex(1);
}
String[] classificationValues = { mLocalizer.msg("Public", "Public"), mLocalizer.msg("Private", "Private"),
mLocalizer.msg("Confidential", "Confidential") };
mClassification = new JComboBox(classificationValues);
if (mSettings.isClassificationPublic()) {
mClassification.setSelectedIndex(0);
}
else if (mSettings.isClassificationPrivate()) {
mClassification.setSelectedIndex(1);
}
else if (mSettings.isClassificationConfidential()) {
mClassification.setSelectedIndex(2);
}
mNulltime = new JCheckBox(mLocalizer.msg("nullTime", "Set length to 0 Minutes"));
if (mSettings.getNullTime()) {
mNulltime.setSelected(true);
}
pb.addRow();
pb.addLabel(mLocalizer.msg("Categorie", "Categorie") + ':', cc.xy(2,pb.getRow()));
pb.add(mCategorie, cc.xyw(4,pb.getRow(), pb.getColumnCount() - 3));
pb.addRow();
pb.addLabel(mLocalizer.msg("ShowTime", "Show Time as") + ':', cc.xy(2,pb.getRow()));
pb.add(mShowTime, cc.xyw(4,pb.getRow(), pb.getColumnCount() - 3));
pb.addRow();
pb.addLabel(mLocalizer.msg("Classification", "Classification") + ':', cc.xy(2,pb.getRow()));
pb.add(mClassification, cc.xyw(4,pb.getRow(), pb.getColumnCount() - 3));
mUseAlarm = new JCheckBox(mLocalizer.msg("reminder", "Use reminder"));
pb.addRow();
pb.add(mUseAlarm, cc.xy(2,pb.getRow()));
SpinnerModel model = new SpinnerNumberModel(0, 0, 1440, 1);
mAlarmMinutes = new JSpinner(model);
JPanel panel = new JPanel(new BorderLayout());
panel.add(mAlarmMinutes, BorderLayout.WEST);
final JLabel label = new JLabel(mLocalizer.msg("minutesBefore", "Minutes before start."));
label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
panel.add(label, BorderLayout.CENTER);
mUseAlarm.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
mAlarmMinutes.setEnabled(mUseAlarm.isSelected());
label.setEnabled(mUseAlarm.isSelected());
}
});
if (mSettings.getUseAlarm()) {
mUseAlarm.setSelected(true);
}
try {
mAlarmMinutes.setValue(mSettings.getAlarmMinutes());
} catch (Exception e) {
// empty
}
mAlarmMinutes.setEnabled(mUseAlarm.isSelected());
label.setEnabled(mUseAlarm.isSelected());
pb.add(panel, cc.xyw(4, pb.getRow(), 2));
pb.addRow();
pb.add(mNulltime, cc.xyw(2,pb.getRow(),4));
mMarkItems = new JCheckBox(mLocalizer.msg("markItems", "Mark items when exported"));
if (mSettings.getMarkItems()) {
mMarkItems.setSelected(true);
}
pb.addRow();
pb.add(mMarkItems, cc.xyw(2,pb.getRow(),4));
pb.addParagraph(mLocalizer.msg("interface", "Interface"));
mExporterList = new SelectableItemList(mPlugin.getExporterFactory().getActiveExporters(), mPlugin.getExporterFactory().getAllExporters());
pb.addRow("120");
pb.add(mExporterList, cc.xyw(2,pb.getRow(),3));
final JButton settings = new JButton(Localizer.getLocalization(Localizer.I18N_SETTINGS));
settings.setEnabled(false);
mExporterList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
Object[] ob = mExporterList.getListSelection();
if ((ob.length == 1) && (((ExporterIf)ob[0]).hasSettingsDialog())) {
settings.setEnabled(true);
} else {
settings.setEnabled(false);
}
}
});
settings.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object[] ob = mExporterList.getListSelection();
if (ob.length == 1) {
((ExporterIf)ob[0]).showSettingsDialog(mSettings);
}
}
});
pb.add(settings, cc.xy(6,pb.getRow(), CellConstraints.RIGHT, CellConstraints.TOP));
pb.addParagraph(mLocalizer.msg("formattings", "Formattings"));
JButton extended = new JButton(mLocalizer.msg("formattings", "Formattings"));
extended.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showExtendedDialog(pb.getPanel());
}
});
pb.addRow();
pb.add(extended, cc.xy(2,pb.getRow()));
return pb.getPanel();
}
/**
* Shows the Dialog with the extended Settings
* @param panel Parent-Panel
*/
private void showExtendedDialog(JPanel panel) {
Window parent = UiUtilities.getBestDialogParent(panel);
ExtendedDialog dialog = new ExtendedDialog(parent);
UiUtilities.centerAndShow(dialog);
}
public void saveSettings() {
mSettings.setNullTime(mNulltime.isSelected());
mSettings.setCategory(mCategorie.getText());
if (mShowTime.getSelectedIndex() == 1) {
mSettings.setReservation(Reservation.Free);
}
else {
mSettings.setReservation(Reservation.Busy);
}
switch (mClassification.getSelectedIndex()) {
case 1:
mSettings.setClassification(Classification.Private);
break;
case 2:
mSettings.setClassification(Classification.Confidential);
break;
default:
mSettings.setClassification(Classification.Public);
}
mSettings.setUseAlarm(mUseAlarm.isSelected());
mSettings.setAlarmMinutes((Integer)mAlarmMinutes.getValue());
mSettings.setMarkItems(mMarkItems.isSelected());
Object[] selection = mExporterList.getSelection();
ExporterIf[] exporter = new ExporterIf[selection.length];
for (int i=0;i<selection.length;i++) {
exporter[i] = (ExporterIf) selection[i];
}
mPlugin.getExporterFactory().setActiveExporters(exporter);
mSettings.setActiveExporters(mPlugin.getExporterFactory().getListOfActiveExporters());
}
public Icon getIcon() {
return mPlugin.createImageIcon("apps", "office-calendar", 16);
}
public String getTitle() {
return mLocalizer.msg("tabName", "Calendar Export");
}
}