package com.kokakiwi.mclauncher.ui.simple;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import com.kokakiwi.mclauncher.api.LauncherAPI;
import com.kokakiwi.mclauncher.api.ui.Page;
import com.kokakiwi.mclauncher.core.TimeLine.Step;
import com.kokakiwi.mclauncher.ui.simple.components.LogoPanel;
import com.kokakiwi.mclauncher.ui.simple.components.NavigatorPanel;
import com.kokakiwi.mclauncher.ui.simple.components.TexturedPanel;
import com.kokakiwi.mclauncher.ui.simple.components.TransparentButton;
import com.kokakiwi.mclauncher.ui.simple.components.TransparentCheckbox;
import com.kokakiwi.mclauncher.ui.simple.components.TransparentLabel;
import com.kokakiwi.mclauncher.ui.simple.components.TransparentPanel;
import com.kokakiwi.mclauncher.utils.lang.Translater;
public class SimpleLoginPage implements Page
{
private LauncherAPI api;
private JPanel panel;
private final TransparentLabel statusText = new TransparentLabel("",
SwingConstants.CENTER);
private final JPanel loginBox = new TransparentPanel();
private final JTextField userName = new JTextField(20);
private final JPasswordField password = new JPasswordField(20);
private final JCheckBox rememberMe = new TransparentCheckbox(
Translater
.getString("login.rememberBox"));
public SimpleLoginPage()
{
userName.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e)
{
statusText.setText(null);
}
});
password.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e)
{
statusText.setText(null);
}
});
}
public Step getStep()
{
return Step.LOGIN;
}
public void fill(JPanel panel, LauncherAPI api)
{
this.panel = panel;
this.api = api;
userName.setText(api.getConfig().getString("username", ""));
password.setText(api.getConfig().getString("password", ""));
if (api.getLoginer().getStoredUsername() != null)
{
userName.setText(api.getLoginer().getStoredUsername());
password.setText(api.getLoginer().getStoredPassword());
rememberMe.setSelected(true);
}
panel.add(getNewsPanel(api), "Center");
panel.add(getLoginPanel(api), "South");
}
private NavigatorPanel getNewsPanel(LauncherAPI api)
{
NavigatorPanel panel = null;
try
{
panel = new NavigatorPanel(api, api.getConfig().getString(
"news.url"));
}
catch (final Exception e)
{
e.printStackTrace();
}
return panel;
}
private JPanel getLoginPanel(LauncherAPI api)
{
final JPanel panel = new TexturedPanel(api.getBackground());
panel.setLayout(new BorderLayout());
panel.setPreferredSize(new Dimension(100, 100));
panel.add(new LogoPanel(), "West");
panel.add(statusText, "Center");
buildLoginBox(false);
panel.add(center(loginBox), "East");
return panel;
}
private void buildLoginBox(boolean offline)
{
loginBox.removeAll();
loginBox.setLayout(new BorderLayout(0, 8));
final TransparentPanel titles = new TransparentPanel();
titles.setLayout(new GridLayout(0, 1, 0, 2));
titles.add(new TransparentLabel(Translater
.getString("login.usernameLabel") + " :", 4));
titles.add(new TransparentLabel(Translater
.getString("login.passwordLabel") + " :", 4));
titles.add(new TransparentLabel("", 4));
titles.setInsets(0, 0, 0, 4);
final TransparentPanel fields = new TransparentPanel();
fields.setLayout(new GridLayout(0, 1, 0, 2));
fields.add(userName);
fields.add(password);
fields.add(rememberMe);
final TransparentPanel buttons = new TransparentPanel();
buttons.setLayout(new GridLayout(0, 1, 0, 2));
if (offline)
{
final TransparentButton optionsButton = new TransparentButton(
Translater.getString("login.retryButton"));
optionsButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
buildLoginBox(false);
}
});
buttons.add(optionsButton);
final TransparentButton loginButton = new TransparentButton(
Translater.getString("login.offlineButton"));
loginButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
new OptionsDialog(api).setVisible(true);
}
});
buttons.add(loginButton);
}
else
{
final TransparentButton optionsButton = new TransparentButton(
Translater.getString("login.optionsButton"));
optionsButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
new OptionsDialog(api).setVisible(true);
}
});
buttons.add(optionsButton);
final TransparentButton loginButton = new TransparentButton(
Translater.getString("login.loginButton"));
loginButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
statusText.setText(Translater.getString("login.loginning"));
new Thread(new Runnable() {
public void run()
{
String result = null;
if (!api.getConfig()
.getBoolean("login.offlineMode"))
{
result = api.getLoginer().doLogin(
userName.getText(),
new String(password.getPassword()),
rememberMe.isSelected());
}
else
{
api.getLoginer().getLastLogin()
.setUsername(userName.getText());
api.getLoginer().getLastLogin()
.setSessionId("123456");
api.getLoginer().getLastLogin().setTimestamp(0);
api.getLoginer().getLastLogin()
.setDownloadTicket("12345");
if (rememberMe.isSelected())
{
try
{
api.getLoginer().storeLogin(userName.getText(), "lolilol");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
if (result == null)
{
api.getTimeLine().next();
}
else
{
statusText.setText(result);
if (!result.equalsIgnoreCase("Bad login"))
{
buildLoginBox(true);
}
}
}
}).start();
}
});
buttons.add(loginButton);
}
buttons.add(new TransparentPanel());
buttons.setInsets(0, 10, 0, 10);
loginBox.add(titles, "West");
loginBox.add(fields, "Center");
loginBox.add(buttons, "East");
panel.validate();
}
private Component center(Component c)
{
final TransparentPanel tp = new TransparentPanel(new GridBagLayout());
tp.add(c);
return tp;
}
}