package org.rsbot.gui;
import org.rsbot.Configuration;
import org.rsbot.Configuration.OperatingSystem;
import org.rsbot.locale.Messages;
import org.rsbot.service.Preferences;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/**
* @author Paris
*/
public class SettingsManager extends JDialog {
private static final long serialVersionUID = 1657935322078534422L;
private static final String DEFAULT_PASSWORD = "\0\0\0\0\0\0\0\0";
private final Preferences preferences = Preferences.getInstance();
public Preferences getPreferences() {
return preferences;
}
public SettingsManager(final Frame owner) {
super(owner, Messages.OPTIONS, true);
preferences.load();
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setIconImage(Configuration.getImage(Configuration.Paths.Resources.ICON_WRENCH));
final JPanel panelOptions = new JPanel(new GridLayout(0, 1));
panelOptions.setBorder(BorderFactory.createTitledBorder("Display"));
final JPanel panelInternal = new JPanel(new GridLayout(0, 1));
panelInternal.setBorder(BorderFactory.createTitledBorder("Internal"));
final JCheckBox checkConfirmations = new JCheckBox(Messages.DISABLECONFIRMATIONS);
checkConfirmations.setToolTipText("Suppress confirmation messages");
checkConfirmations.setSelected(preferences.confirmations);
final JPanel panelShutdown = new JPanel(new GridLayout(1, 2));
final JCheckBox checkShutdown = new JCheckBox(Messages.AUTOSHUTDOWN);
checkShutdown.setToolTipText("Automatic system shutdown after specified period of inactivity");
checkShutdown.setSelected(preferences.shutdown);
panelShutdown.add(checkShutdown);
final SpinnerNumberModel modelShutdown = new SpinnerNumberModel(preferences.shutdownTime, 3, 60, 1);
final JSpinner valueShutdown = new JSpinner(modelShutdown);
panelShutdown.add(valueShutdown);
checkShutdown.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
valueShutdown.setEnabled(((JCheckBox) arg0.getSource()).isSelected());
}
});
checkShutdown.setEnabled(Configuration.getCurrentOperatingSystem() == OperatingSystem.WINDOWS);
valueShutdown.setEnabled(checkShutdown.isEnabled() && checkShutdown.isSelected());
panelOptions.add(checkConfirmations);
panelInternal.add(panelShutdown);
final GridLayout gridAction = new GridLayout(1, 2);
gridAction.setHgap(5);
final JPanel panelAction = new JPanel(gridAction);
final int pad = 6;
panelAction.setBorder(BorderFactory.createEmptyBorder(pad, pad, pad, pad));
panelAction.add(Box.createHorizontalGlue());
final JButton buttonOk = new JButton("OK");
buttonOk.setPreferredSize(new Dimension(85, 30));
buttonOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
setVisible(false);
preferences.confirmations = checkConfirmations.isSelected();
preferences.shutdown = checkShutdown.isSelected();
preferences.shutdownTime = modelShutdown.getNumber().intValue();
preferences.save();
dispose();
}
});
final JButton buttonCancel = new JButton("Cancel");
buttonCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
setVisible(false);
checkConfirmations.setSelected(preferences.confirmations);
checkShutdown.setSelected(preferences.shutdown);
modelShutdown.setValue(preferences.shutdownTime);
dispose();
}
});
panelAction.add(buttonOk);
panelAction.add(buttonCancel);
final JPanel panel = new JPanel(new GridLayout(0, 1));
panel.setBorder(panelAction.getBorder());
panel.add(panelOptions);
panel.add(panelInternal);
add(panel);
add(panelAction, BorderLayout.SOUTH);
getRootPane().setDefaultButton(buttonOk);
buttonOk.requestFocus();
pack();
setLocationRelativeTo(getOwner());
setResizable(false);
addWindowListener(new WindowListener() {
public void windowClosing(WindowEvent arg0) {
buttonCancel.doClick();
}
public void windowActivated(WindowEvent arg0) {
}
public void windowClosed(WindowEvent arg0) {
}
public void windowDeactivated(WindowEvent arg0) {
}
public void windowDeiconified(WindowEvent arg0) {
}
public void windowIconified(WindowEvent arg0) {
}
public void windowOpened(WindowEvent arg0) {
}
});
}
public void display() {
setVisible(true);
}
}