package com.moomoohk.MaceSwingerLauncher.panels;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SpringLayout;
import com.moomoohk.MaceSwingerLauncher.MainFrame;
import com.moomoohk.MaceSwingerLauncher.MainFrame.View;
import com.moomoohk.MaceSwingerLauncher.dialogs.ResponseDialog;
import com.moomoohk.MaceSwingerLauncher.utils.CryptoUtils;
import com.moomoohk.MaceSwingerLauncher.utils.LauncherUtils;
import com.moomoohk.MaceSwingerLauncher.utils.Resources;
import com.moomoohk.Mootilities.ExceptionHandling.ExceptionDisplayDialog;
import com.moomoohk.Mootilities.FileUtils.FileUtils;
public class SettingsPanel extends JPanel
{
private static final long serialVersionUID = 1L;
public int width = 350, height = 270;
public JButton btnForceUpdateGame;
public JButton btnDeleteGameFiles;
public JButton btnForceDownload;
public SettingsPanel()
{
setBorder(BorderFactory.createLineBorder(Resources.foreground));
setBackground(Resources.background.brighter().brighter());
SpringLayout springLayout = new SpringLayout();
setLayout(springLayout);
setSize(width, height);
final JCheckBox chckbxPlayAnimation = new JCheckBox("Play launcher start animation");
chckbxPlayAnimation.setFont(new Font(Resources.PTSans.getName(), Font.BOLD, 14));
chckbxPlayAnimation.setForeground(Resources.foreground);
chckbxPlayAnimation.addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent me)
{
chckbxPlayAnimation.requestFocus();
}
});
chckbxPlayAnimation.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
MainFrame.prefs.putBoolean("launcher animation", e.getStateChange() == 1);
}
});
springLayout.putConstraint(SpringLayout.NORTH, chckbxPlayAnimation, 10, SpringLayout.NORTH, this);
springLayout.putConstraint(SpringLayout.WEST, chckbxPlayAnimation, 10, SpringLayout.WEST, this);
springLayout.putConstraint(SpringLayout.EAST, chckbxPlayAnimation, 340, SpringLayout.WEST, this);
chckbxPlayAnimation.setCursor(new Cursor(Cursor.HAND_CURSOR));
add(chckbxPlayAnimation);
final JCheckBox chckbxFullscreen = new JCheckBox("Start game in fullscreen");
springLayout.putConstraint(SpringLayout.WEST, chckbxFullscreen, 0, SpringLayout.WEST, chckbxPlayAnimation);
springLayout.putConstraint(SpringLayout.SOUTH, chckbxFullscreen, -189, SpringLayout.SOUTH, this);
springLayout.putConstraint(SpringLayout.EAST, chckbxFullscreen, 0, SpringLayout.EAST, chckbxPlayAnimation);
chckbxFullscreen.setFont(new Font(Resources.PTSans.getName(), Font.BOLD, 14));
chckbxFullscreen.setForeground(Resources.foreground);
chckbxFullscreen.setCursor(new Cursor(Cursor.HAND_CURSOR));
chckbxFullscreen.addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent me)
{
chckbxFullscreen.requestFocus();
}
});
chckbxFullscreen.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
MainFrame.prefs.putBoolean("fullscreen", e.getStateChange() == 1);
}
});
add(chckbxFullscreen);
final JCheckBox chckbxSaveLoginCredentials = new JCheckBox("Save login credentials");
springLayout.putConstraint(SpringLayout.NORTH, chckbxFullscreen, 6, SpringLayout.SOUTH, chckbxSaveLoginCredentials);
springLayout.putConstraint(SpringLayout.SOUTH, chckbxSaveLoginCredentials, -214, SpringLayout.SOUTH, this);
springLayout.putConstraint(SpringLayout.NORTH, chckbxSaveLoginCredentials, 6, SpringLayout.SOUTH, chckbxPlayAnimation);
springLayout.putConstraint(SpringLayout.WEST, chckbxSaveLoginCredentials, 0, SpringLayout.WEST, chckbxPlayAnimation);
springLayout.putConstraint(SpringLayout.EAST, chckbxSaveLoginCredentials, 0, SpringLayout.EAST, chckbxPlayAnimation);
chckbxSaveLoginCredentials.setFont(new Font(Resources.PTSans.getName(), Font.BOLD, 14));
chckbxSaveLoginCredentials.setForeground(Resources.foreground);
chckbxSaveLoginCredentials.setCursor(new Cursor(Cursor.HAND_CURSOR));
add(chckbxSaveLoginCredentials);
btnForceUpdateGame = new JButton("Check for updates now");
springLayout.putConstraint(SpringLayout.NORTH, btnForceUpdateGame, 9, SpringLayout.SOUTH, chckbxFullscreen);
springLayout.putConstraint(SpringLayout.WEST, btnForceUpdateGame, 0, SpringLayout.WEST, chckbxPlayAnimation);
springLayout.putConstraint(SpringLayout.EAST, btnForceUpdateGame, 0, SpringLayout.EAST, chckbxPlayAnimation);
btnForceUpdateGame.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
LauncherUtils.initiateBootstrap(true);
}
});
btnForceUpdateGame.setFont(new Font(Resources.PTSans.getName(), Font.PLAIN, 14));
add(btnForceUpdateGame);
btnDeleteGameFiles = new JButton("Delete all game and launcher related files");
btnDeleteGameFiles.setToolTipText(Resources.saveDir);
springLayout.putConstraint(SpringLayout.WEST, btnDeleteGameFiles, 0, SpringLayout.WEST, chckbxPlayAnimation);
springLayout.putConstraint(SpringLayout.EAST, btnDeleteGameFiles, 0, SpringLayout.EAST, chckbxPlayAnimation);
btnDeleteGameFiles.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
if (new File(Resources.gamePath).exists())
{
if (JOptionPane.showConfirmDialog(MainFrame.mainFrame, "This cannot be undone.", "Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE) == JOptionPane.YES_OPTION)
{
btnDeleteGameFiles.setEnabled(false);
FileUtils.delete(new File(Resources.saveDir));
MainFrame.mainFrame.loginPanel.btnOffline.setEnabled(false);
JOptionPane.showMessageDialog(MainFrame.mainFrame, "Done", "", JOptionPane.PLAIN_MESSAGE);
}
}
else
new ResponseDialog(MainFrame.mainFrame, "Error:", "No game files to delete.").setVisible(true);
}
});
btnDeleteGameFiles.setFont(new Font(Resources.PTSans.getName(), Font.PLAIN, 14));
add(btnDeleteGameFiles);
JButton btnBackToMain = new JButton("Back to main menu");
springLayout.putConstraint(SpringLayout.SOUTH, btnDeleteGameFiles, -26, SpringLayout.NORTH, btnBackToMain);
springLayout.putConstraint(SpringLayout.NORTH, btnBackToMain, 225, SpringLayout.NORTH, this);
springLayout.putConstraint(SpringLayout.EAST, btnBackToMain, 0, SpringLayout.EAST, chckbxPlayAnimation);
springLayout.putConstraint(SpringLayout.WEST, btnBackToMain, 10, SpringLayout.WEST, this);
btnBackToMain.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
MainFrame.mainFrame.animateBetween(View.SETTINGS, View.MENU, null);
}
});
btnBackToMain.setFont(new Font(Resources.PTSans.getName(), Font.PLAIN, 14));
springLayout.putConstraint(SpringLayout.SOUTH, btnBackToMain, -10, SpringLayout.SOUTH, this);
add(btnBackToMain);
chckbxPlayAnimation.setSelected(MainFrame.prefs.getBoolean("launcher animation", true));
chckbxFullscreen.setSelected(MainFrame.prefs.getBoolean("fullscreen", true));
chckbxSaveLoginCredentials.setSelected(MainFrame.prefs.getBoolean("save login", false));
btnForceDownload = new JButton("Force download the game now");
btnForceDownload.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
LauncherUtils.downloadGame();
}
});
btnForceDownload.setFont(new Font(Resources.PTSans.getName(), Font.PLAIN, 14));
springLayout.putConstraint(SpringLayout.NORTH, btnForceDownload, 127, SpringLayout.NORTH, this);
springLayout.putConstraint(SpringLayout.SOUTH, btnForceDownload, -108, SpringLayout.SOUTH, this);
springLayout.putConstraint(SpringLayout.SOUTH, btnForceUpdateGame, -6, SpringLayout.NORTH, btnForceDownload);
springLayout.putConstraint(SpringLayout.NORTH, btnDeleteGameFiles, 6, SpringLayout.SOUTH, btnForceDownload);
springLayout.putConstraint(SpringLayout.WEST, btnForceDownload, 1, SpringLayout.WEST, chckbxPlayAnimation);
springLayout.putConstraint(SpringLayout.EAST, btnForceDownload, 0, SpringLayout.EAST, chckbxPlayAnimation);
add(btnForceDownload);
chckbxSaveLoginCredentials.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent ie)
{
MainFrame.prefs.putBoolean("save login", ie.getStateChange() == 1);
if (MainFrame.prefs.getBoolean("save login", false))
try
{
MainFrame.prefs.put("user", MainFrame.mainFrame.loginPanel.txtUser.getText());
MainFrame.prefs.put("pass", CryptoUtils.AESencrypt(new String(MainFrame.mainFrame.loginPanel.txtPassword.getPassword())));
}
catch (Exception e)
{
new ExceptionDisplayDialog(MainFrame.mainFrame, e).setVisible(true);
}
else
{
MainFrame.prefs.remove("user");
MainFrame.prefs.remove("pass");
MainFrame.mainFrame.loginPanel.txtUser.setText("");
MainFrame.mainFrame.loginPanel.txtPassword.setText("");
}
}
});
chckbxSaveLoginCredentials.addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent me)
{
chckbxSaveLoginCredentials.requestFocus();
}
});
}
}