/* This file is part of Wattzap Community Edition. * * Wattzap Community Edtion is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Wattzap Community Edition is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Wattzap. If not, see <http://www.gnu.org/licenses/>. */ package com.wattzap; import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; import com.wattzap.controller.MenuItem; import com.wattzap.controller.MessageBus; import com.wattzap.controller.MessageCallback; import com.wattzap.controller.Messages; import com.wattzap.controller.SocialSharingController; import com.wattzap.controller.TrainingController; import com.wattzap.model.UserPreferences; import com.wattzap.view.AboutPanel; import com.wattzap.view.MainFrame; import com.wattzap.view.RouteFilePicker; import com.wattzap.view.prefs.Preferences; import com.wattzap.view.training.TrainingDisplay; import com.wattzap.view.training.TrainingPicker; /** * Main menu bar * * Externalize menu setup to this class. Registers for Locale change messages so * we can reinitialize text when language changes. * * (c) 2014-2016 David George / Wattzap.com * * @author David George * @date 25 November 2014 */ public class MenuBar implements MessageCallback { private final static UserPreferences userPrefs = UserPreferences.INSTANCE; public final static String SAVEROUTE = "save"; private final JMenu fileMenu; private final JMenu trainingMenu; private final JMenu socialMenu; private final JMenu appMenu; // Application Menu Items private JMenuItem prefMenuItem; private JMenuItem aboutMenuItem; private final JMenuItem quitMenuItem; // File Menu Items private final JMenuItem openMenuItem; private final JMenuItem saveRouteMenuItem; private MenuItem closeMenuItem; // Training private final JMenuItem trainMenuItem; private final JMenuItem analizeMenuItem; private final JMenuItem viewMenuItem; private final JMenuItem recoverMenuItem; private final JMenuItem saveMenuItem; // Social Menu Items public JMenuItem selfLoopsUploadItem; public MenuBar(MainFrame frame) { Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // Application Menu appMenu = new JMenu(); // Preferences Preferences preferences = new Preferences(); prefMenuItem = new JMenuItem(); prefMenuItem.setAccelerator(KeyStroke.getKeyStroke('P', Toolkit .getDefaultToolkit().getMenuShortcutKeyMask(), false)); prefMenuItem.addActionListener(preferences); // About Dialog aboutMenuItem = new JMenuItem(); // NOTE: Sets up timer for unregistered users. // TODO - choose between OS and non OS edtion AboutPanel about = new AboutPanel(); aboutMenuItem.addActionListener(about); quitMenuItem = new JMenuItem(); quitMenuItem.setAccelerator(KeyStroke.getKeyStroke('Q', Toolkit .getDefaultToolkit().getMenuShortcutKeyMask(), false)); quitMenuItem.addActionListener(frame); appMenu.add(prefMenuItem); appMenu.add(aboutMenuItem); appMenu.add(quitMenuItem); // Routes fileMenu = new JMenu(); openMenuItem = new JMenuItem(); fileMenu.add(openMenuItem); openMenuItem.setAccelerator(KeyStroke.getKeyStroke('O', Toolkit .getDefaultToolkit().getMenuShortcutKeyMask(), false)); RouteFilePicker picker = new RouteFilePicker(frame); openMenuItem.addActionListener(picker); saveRouteMenuItem = new JMenuItem(); saveRouteMenuItem.setActionCommand(SAVEROUTE); saveRouteMenuItem.addActionListener(picker); fileMenu.add(saveRouteMenuItem); closeMenuItem = new MenuItem(Messages.CLOSE); fileMenu.add(closeMenuItem); closeMenuItem.setAccelerator(KeyStroke.getKeyStroke('C', Toolkit .getDefaultToolkit().getMenuShortcutKeyMask(), false)); // Submenu: Training trainingMenu = new JMenu(); // menuBar.add(trainingMenu); TrainingDisplay trainingDisplay = new TrainingDisplay(screenSize); TrainingController trainingController = new TrainingController( trainingDisplay, frame); trainMenuItem = new JMenuItem(); if (userPrefs.isAntEnabled()) { trainMenuItem.setActionCommand(TrainingController.open); trainingMenu.add(trainMenuItem); TrainingPicker tPicker = new TrainingPicker(frame); trainMenuItem.addActionListener(tPicker); } analizeMenuItem = new JMenuItem(); analizeMenuItem.setAccelerator(KeyStroke.getKeyStroke('A', Toolkit .getDefaultToolkit().getMenuShortcutKeyMask(), false)); trainingMenu.add(analizeMenuItem); analizeMenuItem.setActionCommand(TrainingController.analyze); saveMenuItem = new JMenuItem(); saveMenuItem.setAccelerator(KeyStroke.getKeyStroke('S', Toolkit .getDefaultToolkit().getMenuShortcutKeyMask(), false)); saveMenuItem.setActionCommand(TrainingController.save); trainingMenu.add(saveMenuItem); viewMenuItem = new JMenuItem(); viewMenuItem.setAccelerator(KeyStroke.getKeyStroke('V', Toolkit .getDefaultToolkit().getMenuShortcutKeyMask(), false)); viewMenuItem.setActionCommand(TrainingController.view); trainingMenu.add(viewMenuItem); recoverMenuItem = new JMenuItem(); recoverMenuItem.setAccelerator(KeyStroke.getKeyStroke('R', Toolkit .getDefaultToolkit().getMenuShortcutKeyMask(), false)); recoverMenuItem.setActionCommand(TrainingController.recover); trainingMenu.add(recoverMenuItem); analizeMenuItem.addActionListener(trainingController); saveMenuItem.addActionListener(trainingController); recoverMenuItem.addActionListener(trainingController); viewMenuItem.addActionListener(trainingController); frame.add(trainingDisplay, "cell 0 0"); // Social socialMenu = new JMenu(); selfLoopsUploadItem = new JMenuItem(); socialMenu.add(selfLoopsUploadItem); SocialSharingController socialSharing = new SocialSharingController( trainingDisplay, frame); selfLoopsUploadItem.setActionCommand(SocialSharingController.selfLoopsUpload); selfLoopsUploadItem.addActionListener(socialSharing); JMenuBar menuBar = new JMenuBar(); menuBar.add(appMenu); menuBar.add(fileMenu); menuBar.add(trainingMenu); menuBar.add(socialMenu); frame.setJMenuBar(menuBar); doText(); MessageBus.INSTANCE.register(Messages.LOCALE, this); } /* * Setup menubar text, makes it easy to update menu if locale is changed */ private void doText() { appMenu.setText(userPrefs.getString("application")); prefMenuItem.setText(userPrefs.getString("preferences")); aboutMenuItem.setText(userPrefs.getString("about")); quitMenuItem.setText(userPrefs.getString("quit")); fileMenu.setText(userPrefs.getString("route")); openMenuItem.setText(userPrefs.getString("open")); closeMenuItem.setText(userPrefs.getString("close")); saveRouteMenuItem.setText(userPrefs.getString("saveroute")); trainingMenu.setText(userPrefs.getString("training")); analizeMenuItem.setText( userPrefs.getString("analyze")); viewMenuItem.setText( userPrefs.getString("view")); recoverMenuItem.setText( userPrefs.getString("recover")); saveMenuItem.setText( userPrefs.getString("save")); // socialMenu.setText("Social"); selfLoopsUploadItem.setText("SelfLoops Upload"); trainMenuItem.setText( userPrefs.getString("open")); } /** * Change text of menu bar if we get a LOCALE message */ @Override public void callback(Messages message, Object o) { switch (message) { case LOCALE: doText(); break; } } }