package fr.lyrgard.hexScape.gui.desktop; import java.awt.CardLayout; import java.awt.EventQueue; import java.awt.Toolkit; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.UIManager; import javax.swing.UIManager.LookAndFeelInfo; import com.google.common.eventbus.Subscribe; import fr.lyrgard.hexScape.bus.GuiMessageBus; import fr.lyrgard.hexScape.gui.desktop.navigation.ViewEnum; import fr.lyrgard.hexScape.gui.desktop.view.AbstractView; import fr.lyrgard.hexScape.gui.desktop.view.common.View3d; import fr.lyrgard.hexScape.gui.desktop.view.game.GameView; import fr.lyrgard.hexScape.gui.desktop.view.home.HomeView; import fr.lyrgard.hexScape.gui.desktop.view.room.RoomView; import fr.lyrgard.hexScape.message.DisconnectedFromServerMessage; import fr.lyrgard.hexScape.message.ErrorMessage; import fr.lyrgard.hexScape.message.InfoMessage; import fr.lyrgard.hexScape.message.WarningMessage; import fr.lyrgard.hexScape.model.CurrentUserInfo; public class HexScapeFrame extends JFrame { private static final long serialVersionUID = 7043232675085791117L; private static HexScapeFrame instance; public static HexScapeFrame getInstance() { return instance; } private View3d view3d; private final CardLayout layout = new CardLayout(); private final Map<ViewEnum, AbstractView> viewsMap = new HashMap<ViewEnum, AbstractView>(); public HexScapeFrame(final View3d view3d) { super("HexScape"); this.view3d = view3d; instance = this; try { for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (Exception e) { e.printStackTrace(); } setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(layout); viewsMap.put(ViewEnum.HOME, new HomeView()); viewsMap.put(ViewEnum.ROOM, new RoomView()); viewsMap.put(ViewEnum.GAME, new GameView(view3d)); for (Entry<ViewEnum, AbstractView> entry : viewsMap.entrySet()) { add(entry.getValue(), entry.getKey().name()); } showView(ViewEnum.HOME); //setJMenuBar(new MenuBar()); setExtendedState(JFrame.MAXIMIZED_BOTH); // aligns itself with windows task bar // set maximum screen setSize((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(), (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()); setVisible(true); GuiMessageBus.register(this); } public void showView(ViewEnum view) { layout.show(getContentPane(), view.name()); viewsMap.get(view).refresh(); validate(); //setExtendedState(JFrame.MAXIMIZED_BOTH); } @Subscribe public void onDisconnectedFromServer(DisconnectedFromServerMessage message) { if (message.getUserId().equals(CurrentUserInfo.getInstance().getId())) { EventQueue.invokeLater(new Runnable() { public void run() { showView(ViewEnum.HOME); } }); } } @Subscribe public void onMessage(final InfoMessage message) { EventQueue.invokeLater(new Runnable() { public void run() { String messageContent = message.getMessage(); int messageType = JOptionPane.INFORMATION_MESSAGE; String title = "Message"; JOptionPane.showMessageDialog(null, messageContent, title, messageType); } }); } @Subscribe public void onMessage(final WarningMessage message) { EventQueue.invokeLater(new Runnable() { public void run() { String messageContent = message.getMessage(); int messageType = JOptionPane.WARNING_MESSAGE; String title = "Warning"; JOptionPane.showMessageDialog(null, messageContent, title, messageType); } }); } @Subscribe public void onMessage(final ErrorMessage message) { EventQueue.invokeLater(new Runnable() { public void run() { String messageContent = message.getMessage(); int messageType = JOptionPane.ERROR_MESSAGE; String title = "Error"; JOptionPane.showMessageDialog(null, messageContent, title, messageType); } }); } public View3d getView3d() { return view3d; } }