package com.kokakiwi.mclauncher.ui.simple;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import com.kokakiwi.mclauncher.api.LauncherAPI;
import com.kokakiwi.mclauncher.ui.simple.components.TransparentLabel;
import com.kokakiwi.mclauncher.utils.lang.Translater;
public class OptionsDialog extends JDialog
{
private static final long serialVersionUID = -2663368148236524858L;
private final LauncherAPI api;
public OptionsDialog(final LauncherAPI api)
{
super(api.getFrame());
this.api = api;
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event)
{
setVisible(false);
}
});
setTitle(Translater.getString("options.windowTitle"));
setModalityType(ModalityType.TOOLKIT_MODAL);
final JPanel panel = new JPanel(new BorderLayout());
final JLabel label = new JLabel("Launcher options", 0);
label.setBorder(new EmptyBorder(0, 0, 16, 0));
label.setFont(new Font("Default", 1, 16));
panel.add(label, "North");
final JPanel optionsPanel = new JPanel(new BorderLayout());
final JPanel labelPanel = new JPanel(new GridLayout(0, 1));
final JPanel fieldPanel = new JPanel(new GridLayout(0, 1));
optionsPanel.add(labelPanel, "West");
optionsPanel.add(fieldPanel, "Center");
// FORCE UPDATE
final JCheckBox forceUpdate = new JCheckBox(
Translater.getString("options.forceUpdateFalse"));
if (api.getConfig().has("force-update"))
{
forceUpdate.setSelected(true);
forceUpdate
.setText(Translater.getString("options.forceUpdateTrue"));
}
forceUpdate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if (!forceUpdate.isSelected())
{
api.getConfig().set("force-update", false);
forceUpdate.setText(Translater
.getString("options.forceUpdateFalse"));
}
else
{
api.getConfig().set("force-update", true);
forceUpdate.setText(Translater
.getString("options.forceUpdateTrue"));
}
}
});
labelPanel.add(new JLabel(Translater
.getString("options.forceUpdateFalse") + " :"));
fieldPanel.add(forceUpdate);
// OFFLINE MODE
final JCheckBox offlineModeToggle = new JCheckBox(
Translater.getString("options.onlineMode"));
final boolean offlineMode = api.getConfig().getBoolean(
"login.offlineMode");
if (offlineMode)
{
offlineModeToggle.setSelected(true);
offlineModeToggle.setText(Translater
.getString("options.offlineMode"));
}
offlineModeToggle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if (offlineModeToggle.isSelected())
{
offlineModeToggle.setText(Translater
.getString("options.offlineMode"));
api.getConfig().set("login.offlineMode", true);
}
else
{
offlineModeToggle.setText(Translater
.getString("options.onlineMode"));
api.getConfig().set("login.offlineMode", false);
}
}
});
labelPanel.add(new JLabel(Translater.getString("options.offlineMode")
+ " :"));
fieldPanel.add(offlineModeToggle);
// GAME LOCATION
final TransparentLabel dirLink = new TransparentLabel(api
.getMinecraftDirectory().toString()) {
private static final long serialVersionUID = 0L;
public void paint(Graphics g)
{
super.paint(g);
int x = 0;
int y = 0;
final FontMetrics fm = g.getFontMetrics();
final int width = fm.stringWidth(getText());
final int height = fm.getHeight();
if (getAlignmentX() == 2.0F)
{
x = 0;
}
else if (getAlignmentX() == 0.0F)
{
x = getBounds().width / 2 - width / 2;
}
else if (getAlignmentX() == 4.0F)
{
x = getBounds().width - width;
}
y = getBounds().height / 2 + height / 2 - 1;
g.drawLine(x + 2, y, x + width - 2, y);
}
public void update(Graphics g)
{
paint(g);
}
};
dirLink.setCursor(Cursor.getPredefinedCursor(12));
dirLink.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent arg0)
{
try
{
if (Desktop.isDesktopSupported())
{
Desktop.getDesktop().open(api.getMinecraftDirectory());
}
}
catch (final Exception e)
{
e.printStackTrace();
}
}
});
dirLink.setForeground(new Color(2105599));
labelPanel.add(new JLabel(Translater
.getString("options.gameLocationLabel") + " : "));
fieldPanel.add(dirLink);
// MODS DIALOG
//@formatter:off
/* labelPanel.add(new JLabel(Translater.getString("options.mods.title")
+ " : "));
JButton modsButton = new JButton(
Translater.getString("options.mods.title"));
modsButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
new ModsDialog(OptionsDialog.this).setVisible(true);
}
});
fieldPanel.add(modsButton); */
//@formatter:on
panel.add(optionsPanel, "Center");
final JPanel buttonsPanel = new JPanel(new BorderLayout());
buttonsPanel.add(new JPanel(), "Center");
final JButton doneButton = new JButton(
Translater.getString("options.done"));
doneButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae)
{
setVisible(false);
}
});
buttonsPanel.add(doneButton, "East");
buttonsPanel.setBorder(new EmptyBorder(16, 0, 0, 0));
panel.add(buttonsPanel, "South");
getContentPane().add(panel);
panel.setBorder(new EmptyBorder(16, 24, 24, 24));
pack();
setLocationRelativeTo(api.getFrame());
}
public LauncherAPI getApi()
{
return api;
}
}