package husacct.control.presentation.menubar; import husacct.ServiceProvider; import husacct.common.enums.States; import husacct.common.locale.ILocaleService; import husacct.common.services.IServiceListener; import husacct.control.task.IStateChangeListener; import husacct.control.task.MainController; import husacct.control.task.WorkspaceController; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.util.List; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JSeparator; import javax.swing.KeyStroke; @SuppressWarnings("serial") public class FileMenu extends JMenu { private WorkspaceController workspaceController; private MainController mainController; private JMenuItem createWorkspaceItem; private JMenuItem openWorkspaceItem; private JMenuItem saveWorkspaceItem; private JMenuItem closeWorkspaceItem; private JMenuItem exitItem; private ILocaleService localeService = ServiceProvider.getInstance().getLocaleService(); public FileMenu(final MainController mainController){ super(); this.mainController = mainController; this.workspaceController = mainController.getWorkspaceController(); setText(localeService.getTranslatedString("File")); addComponents(); setListeners(); } private void addComponents(){ createWorkspaceItem = new JMenuItem(localeService.getTranslatedString("CreateWorkspace")); createWorkspaceItem.setMnemonic(getMnemonicKeycode("CreateWorkspaceMnemonic")); createWorkspaceItem.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_DOWN_MASK)); openWorkspaceItem = new JMenuItem(localeService.getTranslatedString("OpenWorkspace")); openWorkspaceItem.setMnemonic(getMnemonicKeycode("OpenWorkspaceMnemonic")); openWorkspaceItem.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_DOWN_MASK)); saveWorkspaceItem = new JMenuItem(localeService.getTranslatedString("SaveWorkspace")); saveWorkspaceItem.setMnemonic(getMnemonicKeycode("SaveWorkspaceMnemonic")); saveWorkspaceItem.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_DOWN_MASK)); closeWorkspaceItem = new JMenuItem(localeService.getTranslatedString("CloseWorkspace")); closeWorkspaceItem.setMnemonic(getMnemonicKeycode("CloseWorkspaceMnemonic")); JSeparator separator = new JSeparator(); exitItem = new JMenuItem(localeService.getTranslatedString("Exit")); exitItem.setMnemonic(getMnemonicKeycode("ExitMnemonic")); this.add(createWorkspaceItem); this.add(openWorkspaceItem); this.add(saveWorkspaceItem); this.add(closeWorkspaceItem); this.add(separator); this.add(exitItem); } private void setListeners(){ createWorkspaceItem.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ workspaceController.showCreateWorkspaceGui(); } }); openWorkspaceItem.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ workspaceController.showOpenWorkspaceGui(); } }); saveWorkspaceItem.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ workspaceController.showSaveWorkspaceGui(); } }); closeWorkspaceItem.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ workspaceController.closeWorkspace(); } }); exitItem.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ mainController.exit(); } }); mainController.getStateController().addStateChangeListener(new IStateChangeListener() { @Override public void changeState(List<States> states) { createWorkspaceItem.setEnabled(false); openWorkspaceItem.setEnabled(false); saveWorkspaceItem.setEnabled(false); closeWorkspaceItem.setEnabled(false); if(states.contains(States.OPENED)){ closeWorkspaceItem.setEnabled(true); saveWorkspaceItem.setEnabled(true); } if(states.contains(States.NONE) || states.contains(States.OPENED)){ createWorkspaceItem.setEnabled(true); openWorkspaceItem.setEnabled(true); } } }); final FileMenu fileMenu = this; localeService.addServiceListener(new IServiceListener() { @Override public void update() { fileMenu.setText(localeService.getTranslatedString("File")); createWorkspaceItem.setText(localeService.getTranslatedString("CreateWorkspace")); openWorkspaceItem.setText(localeService.getTranslatedString("OpenWorkspace")); saveWorkspaceItem.setText(localeService.getTranslatedString("SaveWorkspace")); closeWorkspaceItem.setText(localeService.getTranslatedString("CloseWorkspace")); exitItem.setText(localeService.getTranslatedString("Exit")); createWorkspaceItem.setMnemonic(getMnemonicKeycode("CreateWorkspaceMnemonic")); openWorkspaceItem.setMnemonic(getMnemonicKeycode("OpenWorkspaceMnemonic")); saveWorkspaceItem.setMnemonic(getMnemonicKeycode("SaveWorkspaceMnemonic")); closeWorkspaceItem.setMnemonic(getMnemonicKeycode("CloseWorkspaceMnemonic")); exitItem.setMnemonic(getMnemonicKeycode("ExitMnemonic")); } }); } public JMenuItem getCreateWorkspaceItem(){ return createWorkspaceItem; } public JMenuItem getOpenWorkspaceItem(){ return openWorkspaceItem; } public JMenuItem getSaveWorkspaceItem(){ return saveWorkspaceItem; } public JMenuItem getCloseWorkspace(){ return closeWorkspaceItem; } public JMenuItem getExitItem(){ return exitItem; } private int getMnemonicKeycode(String translatedString) { String mnemonicString = localeService.getTranslatedString(translatedString); int keyCode = KeyStroke.getKeyStroke(mnemonicString).getKeyCode(); return keyCode; } }