/*
* SK's Minecraft Launcher
* Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors
* Please see LICENSE.txt for license information.
*/
package com.skcraft.launcher.dialog;
import com.skcraft.launcher.Configuration;
import com.skcraft.launcher.Launcher;
import com.skcraft.launcher.swing.*;
import com.skcraft.launcher.persistence.Persistence;
import com.skcraft.launcher.util.SharedLocale;
import lombok.NonNull;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* A dialog to modify configuration options.
*/
public class ConfigurationDialog extends JDialog {
private final Configuration config;
private final ObjectSwingMapper mapper;
private final JPanel tabContainer = new JPanel(new BorderLayout());
private final JTabbedPane tabbedPane = new JTabbedPane();
private final FormPanel javaSettingsPanel = new FormPanel();
private final JTextField jvmPathText = new JTextField();
private final JTextField jvmArgsText = new JTextField();
private final JSpinner minMemorySpinner = new JSpinner();
private final JSpinner maxMemorySpinner = new JSpinner();
private final JSpinner permGenSpinner = new JSpinner();
private final FormPanel gameSettingsPanel = new FormPanel();
private final JSpinner widthSpinner = new JSpinner();
private final JSpinner heightSpinner = new JSpinner();
private final FormPanel proxySettingsPanel = new FormPanel();
private final JCheckBox useProxyCheck = new JCheckBox(SharedLocale.tr("options.useProxyCheck"));
private final JTextField proxyHostText = new JTextField();
private final JSpinner proxyPortText = new JSpinner();
private final JTextField proxyUsernameText = new JTextField();
private final JPasswordField proxyPasswordText = new JPasswordField();
private final FormPanel advancedPanel = new FormPanel();
private final JTextField gameKeyText = new JTextField();
private final LinedBoxPanel buttonsPanel = new LinedBoxPanel(true);
private final JButton okButton = new JButton(SharedLocale.tr("button.ok"));
private final JButton cancelButton = new JButton(SharedLocale.tr("button.cancel"));
private final JButton aboutButton = new JButton(SharedLocale.tr("options.about"));
private final JButton logButton = new JButton(SharedLocale.tr("options.launcherConsole"));
/**
* Create a new configuration dialog.
*
* @param owner the window owner
* @param launcher the launcher
*/
public ConfigurationDialog(Window owner, @NonNull Launcher launcher) {
super(owner, ModalityType.DOCUMENT_MODAL);
this.config = launcher.getConfig();
mapper = new ObjectSwingMapper(config);
setTitle(SharedLocale.tr("options.title"));
initComponents();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(new Dimension(400, 500));
setResizable(false);
setLocationRelativeTo(owner);
mapper.map(jvmPathText, "jvmPath");
mapper.map(jvmArgsText, "jvmArgs");
mapper.map(minMemorySpinner, "minMemory");
mapper.map(maxMemorySpinner, "maxMemory");
mapper.map(permGenSpinner, "permGen");
mapper.map(widthSpinner, "windowWidth");
mapper.map(heightSpinner, "widowHeight");
mapper.map(useProxyCheck, "proxyEnabled");
mapper.map(proxyHostText, "proxyHost");
mapper.map(proxyPortText, "proxyPort");
mapper.map(proxyUsernameText, "proxyUsername");
mapper.map(proxyPasswordText, "proxyPassword");
mapper.map(gameKeyText, "gameKey");
mapper.copyFromObject();
}
private void initComponents() {
javaSettingsPanel.addRow(new JLabel(SharedLocale.tr("options.jvmPath")), jvmPathText);
javaSettingsPanel.addRow(new JLabel(SharedLocale.tr("options.jvmArguments")), jvmArgsText);
javaSettingsPanel.addRow(Box.createVerticalStrut(15));
javaSettingsPanel.addRow(new JLabel(SharedLocale.tr("options.64BitJavaWarning")));
javaSettingsPanel.addRow(new JLabel(SharedLocale.tr("options.minMemory")), minMemorySpinner);
javaSettingsPanel.addRow(new JLabel(SharedLocale.tr("options.maxMemory")), maxMemorySpinner);
javaSettingsPanel.addRow(new JLabel(SharedLocale.tr("options.permGen")), permGenSpinner);
SwingHelper.removeOpaqueness(javaSettingsPanel);
tabbedPane.addTab(SharedLocale.tr("options.javaTab"), SwingHelper.alignTabbedPane(javaSettingsPanel));
gameSettingsPanel.addRow(new JLabel(SharedLocale.tr("options.windowWidth")), widthSpinner);
gameSettingsPanel.addRow(new JLabel(SharedLocale.tr("options.windowHeight")), heightSpinner);
SwingHelper.removeOpaqueness(gameSettingsPanel);
tabbedPane.addTab(SharedLocale.tr("options.minecraftTab"), SwingHelper.alignTabbedPane(gameSettingsPanel));
proxySettingsPanel.addRow(useProxyCheck);
proxySettingsPanel.addRow(new JLabel(SharedLocale.tr("options.proxyHost")), proxyHostText);
proxySettingsPanel.addRow(new JLabel(SharedLocale.tr("options.proxyPort")), proxyPortText);
proxySettingsPanel.addRow(new JLabel(SharedLocale.tr("options.proxyUsername")), proxyUsernameText);
proxySettingsPanel.addRow(new JLabel(SharedLocale.tr("options.proxyPassword")), proxyPasswordText);
SwingHelper.removeOpaqueness(proxySettingsPanel);
tabbedPane.addTab(SharedLocale.tr("options.proxyTab"), SwingHelper.alignTabbedPane(proxySettingsPanel));
advancedPanel.addRow(new JLabel(SharedLocale.tr("options.gameKey")), gameKeyText);
SwingHelper.removeOpaqueness(advancedPanel);
tabbedPane.addTab(SharedLocale.tr("options.advancedTab"), SwingHelper.alignTabbedPane(advancedPanel));
buttonsPanel.addElement(logButton);
buttonsPanel.addElement(aboutButton);
buttonsPanel.addGlue();
buttonsPanel.addElement(okButton);
buttonsPanel.addElement(cancelButton);
tabContainer.add(tabbedPane, BorderLayout.CENTER);
tabContainer.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
add(tabContainer, BorderLayout.CENTER);
add(buttonsPanel, BorderLayout.SOUTH);
SwingHelper.equalWidth(okButton, cancelButton);
cancelButton.addActionListener(ActionListeners.dispose(this));
aboutButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AboutDialog.showAboutDialog(ConfigurationDialog.this);
}
});
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
save();
}
});
logButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ConsoleFrame.showMessages();
}
});
}
/**
* Save the configuration and close the dialog.
*/
public void save() {
mapper.copyFromSwing();
Persistence.commitAndForget(config);
dispose();
}
}