package cryodex; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.File; import javax.swing.JCheckBoxMenuItem; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import cryodex.CryodexController.Modules; import cryodex.export.PlayerExport; import cryodex.modules.Module; import cryodex.widget.AboutPanel; public class MenuBar extends JMenuBar { private static final long serialVersionUID = 1L; private JMenu fileMenu; private JMenu viewMenu; private JMenu helpMenu; private JCheckBoxMenuItem showTableNumbers; private JCheckBoxMenuItem showQuickFind; private static MenuBar instance; public static MenuBar getInstance() { if (instance == null) { instance = new MenuBar(); instance.resetMenuBar(); } return instance; } private MenuBar() { this.add(getFileMenu()); this.add(getViewMenu()); for (final Module m : CryodexController.getModules()) { this.add(m.getMenu().getMenu()); } this.add(getHelpMenu()); } public JMenu getFileMenu() { if (fileMenu == null) { fileMenu = new JMenu("File"); fileMenu.setMnemonic('F'); JMenuItem loadSaveFile = new JMenuItem("Load from save file"); loadSaveFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { CryodexController.loadFromSaveFile(); } }); JMenuItem chooseSaveLocation = new JMenuItem("Choose temporary save location"); chooseSaveLocation.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { CryodexController.chooseSaveLocation(); } }); JMenuItem importPlayers = new JMenuItem("Import Players"); importPlayers.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(Main.getInstance(), "Import format is CSV with quotation marks. Legal columns are as follows.\n\n" + "\"Name\",\"First Name\",\"Last Name\",\"Email Address\",\"Group\",\"Squad\"\n" + "\"Chris Brown\",\"Chris\",\"Brown\",\"chris.brown.spe@gmail.com\",\"Fort Wayne\",\"584074\""); PlayerImport.importPlayers(); } }); JMenuItem exportPlayers = new JMenuItem("Export Players"); exportPlayers.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { PlayerExport.exportPlayersDetail(); } }); JMenuItem exit = new JMenuItem("Exit"); exit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Main.getInstance().dispose(); } }); fileMenu.add(loadSaveFile); fileMenu.add(chooseSaveLocation); fileMenu.add(importPlayers); fileMenu.add(exportPlayers); fileMenu.add(exit); } return fileMenu; } public JMenu getViewMenu() { if (viewMenu == null) { viewMenu = new JMenu("View"); viewMenu.setMnemonic('V'); showTableNumbers = new JCheckBoxMenuItem("Show Table Numbers"); showTableNumbers.setSelected(true); showTableNumbers.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { CryodexController.getOptions().setShowTableNumbers(showTableNumbers.isSelected()); } }); showQuickFind = new JCheckBoxMenuItem("Show Quick Table Search"); showQuickFind.setSelected(false); showQuickFind.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { CryodexController.getOptions().setShowQuickFind(showQuickFind.isSelected()); } }); final JCheckBoxMenuItem showRegistrationPanel = new JCheckBoxMenuItem("Show Registration Panel"); showRegistrationPanel.setSelected(true); showRegistrationPanel.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent arg0) { Main.getInstance().getRegisterPane().remove(Main.getInstance().getRegisterPanel()); if (showRegistrationPanel.isSelected()) { Main.getInstance().getRegisterPane().add(Main.getInstance().getRegisterPanel()); } Main.getInstance().validate(); Main.getInstance().repaint(); } }); viewMenu.add(showQuickFind); viewMenu.add(showTableNumbers); viewMenu.add(showRegistrationPanel); for (final Module m : CryodexController.getModules()) { final JCheckBoxMenuItem moduleItem = new JCheckBoxMenuItem(Modules.getNameByModule(m)); moduleItem.setSelected(m.isModuleEnabled()); moduleItem.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent arg0) { m.setModuleEnabled(moduleItem.isSelected()); Modules moduleEnum = Modules.getEnumByName(Modules.getNameByModule(m)); if (moduleItem.isSelected()) { CryodexController.getOptions().getNonVisibleModules().remove(moduleEnum); } else { CryodexController.getOptions().getNonVisibleModules().add(moduleEnum); } CryodexController.saveData(); } }); m.setViewMenuItem(moduleItem); viewMenu.add(moduleItem); } } return viewMenu; } @Override public JMenu getHelpMenu() { if (helpMenu == null) { helpMenu = new JMenu("Help"); helpMenu.setMnemonic('H'); JMenuItem about = new JMenuItem("About"); about.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { AboutPanel.showAboutPanel(); } }); JMenuItem whereIsSave = new JMenuItem("Where is my save file?"); whereIsSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { File file = CryodexController.getSaveFile(); if (file.exists()) { JOptionPane.showMessageDialog(Main.getInstance(), "<html>Save file can be found at <b>" + file.getAbsolutePath() + "</b></html>"); } else { File path = new File(CryodexController.getSavePath()); if (path.exists() == false) { JOptionPane.showMessageDialog(Main.getInstance(), "Save location could not be determined. Check permissions to allow a Java application to save a file."); } else if (file.exists() == false) { JOptionPane.showMessageDialog(Main.getInstance(), "<html>A save file could not be found. It should be called <b>" + CryodexController.getSaveFilename() + "</b> and should be located in folder <b>" + path.getAbsolutePath() + "</b></html>"); } } } }); helpMenu.add(about); helpMenu.add(whereIsSave); } return helpMenu; } public void resetMenuBar() { showTableNumbers.setSelected(CryodexController.getOptions().isShowTableNumbers()); showQuickFind.setSelected(CryodexController.getOptions().isShowQuickFind()); for (Module m : CryodexController.getModules()) { m.getMenu().resetMenuBar(); } } public void updateTournamentOptions(CryodexOptions options) { options.setShowTableNumbers(showTableNumbers.isSelected()); options.setShowQuickFind(showQuickFind.isSelected()); } }