package org.wildstang.wildrank.desktop; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import org.wildstang.wildrank.desktop.modes.MainMenu; import org.wildstang.wildrank.desktop.modes.Mode; import org.wildstang.wildrank.desktop.modes.Setup; import org.wildstang.wildrank.desktop.utils.Logger; public class GlobalAppHandler implements ActionListener { private static GlobalAppHandler instance; private static JFrame window; private static JPanel content; private static AppData appData; private static JPanel backBar; private static JButton back; private static Mode mode; public static void main(String[] args) { getInstance().setMode(new Setup()); } public static GlobalAppHandler getInstance() { if (instance == null) { instance = new GlobalAppHandler(); } return instance; } public GlobalAppHandler() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Logger.getInstance().printToSystem(true); Logger.getInstance().log("Created!"); window = new JFrame("WildRank: Desktop"); appData = new AppData(null, null, null); content = new JPanel(); content.setLayout(new GridBagLayout()); content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); window.setMinimumSize(new Dimension(500, 300)); window.setLocationRelativeTo(null); window.setResizable(true); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); backBar = new JPanel(); backBar.setLayout(new BorderLayout()); backBar.setPreferredSize(new Dimension(350, 30)); back = new JButton("Back to Main Menu"); back.addActionListener(GlobalAppHandler.this); backBar.add(back, BorderLayout.WEST); window.getContentPane().setLayout(new BorderLayout()); window.getContentPane().add(backBar, BorderLayout.NORTH); window.getContentPane().add(content, BorderLayout.CENTER); window.setVisible(true); } }); } private void initializeNewMode() { mode.initialize(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (mode instanceof MainMenu) { back.setEnabled(false); } else { back.setEnabled(true); } window.setVisible(true); mode.getModePanel().repaint(); } }); } public void setMode(Mode newMode) { mode = newMode; initializeNewMode(); } public AppData getAppData() { return appData; } public JPanel getGlobalPanel() { return content; } public JFrame getWindow() { return window; } public void refreshPanel() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { content.repaint(); window.pack(); window.setLocationRelativeTo(null); window.setVisible(true); } }); } @Override public void actionPerformed(ActionEvent event) { if (event.getSource() == back) { setMode(new MainMenu()); } } public void disableBackButton() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { back.setEnabled(false); } }); } public void enableBackButton() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { back.setEnabled(true); } }); } }