/*
* Copyright 2010-2015 Institut Pasteur.
*
* This file is part of Icy.
*
* Icy 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 3 of the License, or
* (at your option) any later version.
*
* Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>.
*/
package icy.gui.preferences;
import icy.gui.dialog.MessageDialog;
import icy.gui.util.GuiUtil;
import icy.gui.util.LookAndFeelUtil;
import icy.main.Icy;
import icy.math.MathUtil;
import icy.preferences.ApplicationPreferences;
import icy.preferences.GeneralPreferences;
import icy.system.SystemUtil;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
/**
* @author stephane
*/
public class GeneralPreferencePanel extends PreferencePanel
{
private static final long serialVersionUID = -5376356916415550024L;
public static final String NODE_NAME = "General";
/**
* gui
*/
final JCheckBox exitConfirm;
private final JCheckBox sequencePersistence;
private final JCheckBox saveNewSequence;
final JCheckBox autoUpdateCheckBox;
private final JCheckBox alwaysOnTopCheckBox;
private final JCheckBox usageStatistics;
private final JSpinner maxMemoryMBSpinner;
private final JSpinner uiFontSizeSpinner;
private final JButton reenableAllToolTipButton;
private final JButton reenableAllConfirmButton;
/**
* @param parent
*/
GeneralPreferencePanel(PreferenceFrame parent)
{
super(parent, NODE_NAME, PreferenceFrame.NODE_NAME);
exitConfirm = new JCheckBox("Show confirmation when exiting application");
sequencePersistence = new JCheckBox("Enable sequence persistence");
sequencePersistence
.setToolTipText("Enable the XML persistence for sequence (file is automatically loaded/saved when sequence is opened/closed)");
saveNewSequence = new JCheckBox("Ask to save new sequence when closing them");
autoUpdateCheckBox = new JCheckBox("Enable application update");
autoUpdateCheckBox.setToolTipText("Enable automatic update for application as soon a new version is available");
alwaysOnTopCheckBox = new JCheckBox("Application window always on top");
usageStatistics = new JCheckBox("Usage statistics report");
usageStatistics
.setToolTipText("Report is 100% anonymous, very light on network trafic and help developers so keep it enabled please :)");
final int maxMemLimit = (int) MathUtil.prevMultiple(ApplicationPreferences.getMaxMemoryMBLimit(), 32);
maxMemoryMBSpinner = new JSpinner(new SpinnerNumberModel(128, 64, maxMemLimit, 32));
maxMemoryMBSpinner.setToolTipText("Change the maximum memory available for application");
uiFontSizeSpinner = new JSpinner(new SpinnerNumberModel(7, 7, 24, 1));
uiFontSizeSpinner.setToolTipText("");
reenableAllToolTipButton = new JButton("Reactivate tooltips");
reenableAllToolTipButton.setToolTipText("All hidden tooltips will be made visible again");
reenableAllToolTipButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
// clear the saved tool tips preference to re-enable them
GeneralPreferences.getPreferencesToolTips().removeChildren();
GeneralPreferences.getPreferencesToolTips().clear();
MessageDialog.showDialog("All tooltips are now enabled again !");
}
});
reenableAllConfirmButton = new JButton("Reactivate confirmations");
reenableAllConfirmButton.setToolTipText("All hidden confimation dialogs be made visible again");
reenableAllConfirmButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
// clear the saved tool tips preference to re-enable them
GeneralPreferences.getPreferencesConfirms().removeChildren();
GeneralPreferences.getPreferencesConfirms().clear();
exitConfirm.setSelected(true);
MessageDialog.showDialog("All confirmation dialogs are now enabled again !");
}
});
load();
String maxMemoryMess;
final JPanel topPanel = new JPanel();
topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.PAGE_AXIS));
topPanel.add(GuiUtil.createLineBoxPanel(alwaysOnTopCheckBox, Box.createHorizontalGlue()));
topPanel.add(Box.createVerticalStrut(6));
topPanel.add(GuiUtil.createLineBoxPanel(exitConfirm, Box.createHorizontalGlue()));
topPanel.add(Box.createVerticalStrut(6));
topPanel.add(GuiUtil.createLineBoxPanel(autoUpdateCheckBox, Box.createHorizontalGlue()));
topPanel.add(Box.createVerticalStrut(6));
topPanel.add(GuiUtil.createLineBoxPanel(sequencePersistence, Box.createHorizontalGlue()));
topPanel.add(Box.createVerticalStrut(6));
topPanel.add(GuiUtil.createLineBoxPanel(saveNewSequence, Box.createHorizontalGlue()));
topPanel.add(Box.createVerticalStrut(6));
topPanel.add(GuiUtil.createLineBoxPanel(usageStatistics, Box.createHorizontalGlue()));
topPanel.add(Box.createVerticalStrut(18));
topPanel.add(GuiUtil.createLineBoxPanel(new JLabel(" GUI font size "), uiFontSizeSpinner,
Box.createHorizontalGlue()));
topPanel.add(Box.createVerticalStrut(12));
maxMemoryMess = " MB (max = " + maxMemLimit + " MB";
if (SystemUtil.is32bits() && ((SystemUtil.getTotalMemory() / (1024 * 1024)) >= 1500))
maxMemoryMess += " - use 64bit JVM to allow more)";
else
maxMemoryMess += ")";
topPanel.add(GuiUtil.createLineBoxPanel(new JLabel(" Max memory "), maxMemoryMBSpinner, new JLabel(
maxMemoryMess), Box.createHorizontalGlue()));
topPanel.add(Box.createVerticalStrut(6));
final JPanel bottomPanel = new JPanel();
bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.PAGE_AXIS));
bottomPanel.add(GuiUtil.createLineBoxPanel(reenableAllToolTipButton, Box.createHorizontalStrut(8),
reenableAllConfirmButton, Box.createHorizontalGlue()));
bottomPanel.add(Box.createVerticalStrut(6));
mainPanel.setLayout(new BorderLayout());
mainPanel.add(topPanel, BorderLayout.NORTH);
mainPanel.add(Box.createGlue(), BorderLayout.CENTER);
mainPanel.add(bottomPanel, BorderLayout.SOUTH);
mainPanel.validate();
}
@Override
protected void load()
{
maxMemoryMBSpinner.setValue(Integer.valueOf(ApplicationPreferences.getMaxMemoryMB()));
uiFontSizeSpinner.setValue(Integer.valueOf(GeneralPreferences.getGuiFontSize()));
exitConfirm.setSelected(GeneralPreferences.getExitConfirm());
sequencePersistence.setSelected(GeneralPreferences.getSequencePersistence());
saveNewSequence.setSelected(GeneralPreferences.getSaveNewSequence());
autoUpdateCheckBox.setSelected(GeneralPreferences.getAutomaticUpdate());
alwaysOnTopCheckBox.setSelected(GeneralPreferences.getAlwaysOnTop());
usageStatistics.setSelected(GeneralPreferences.getUsageStatisticsReport());
}
@Override
protected void save()
{
int intValue;
boolean booleanValue;
intValue = ((Integer) maxMemoryMBSpinner.getValue()).intValue();
// launcher setting modified, restart needed
if (ApplicationPreferences.getMaxMemoryMB() != intValue)
getPreferenceFrame().setNeedRestart();
ApplicationPreferences.setMaxMemoryMB(intValue);
intValue = ((Integer) uiFontSizeSpinner.getValue()).intValue();
LookAndFeelUtil.setFontSize(intValue);
GeneralPreferences.setGuiFontSize(intValue);
GeneralPreferences.setExitConfirm(exitConfirm.isSelected());
GeneralPreferences.setSequencePersistence(sequencePersistence.isSelected());
GeneralPreferences.setSaveNewSequence(saveNewSequence.isSelected());
GeneralPreferences.setAutomaticUpdate(autoUpdateCheckBox.isSelected());
GeneralPreferences.setUsageStatisticsReport(usageStatistics.isSelected());
booleanValue = alwaysOnTopCheckBox.isSelected();
Icy.getMainInterface().setAlwaysOnTop(booleanValue);
GeneralPreferences.setAlwaysOnTop(booleanValue);
}
}