package org.geogebra.desktop.gui.menubar; import java.awt.Event; import java.awt.Toolkit; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.KeyStroke; import javax.swing.UIManager; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; import org.geogebra.desktop.main.AppD; import org.geogebra.desktop.main.LocalizationD; /** * The base class for the sub-menus. * * @author Florian Sonner */ abstract class BaseMenu extends JMenu implements MenuListener { private static final long serialVersionUID = 2394839950861976156L; /** * An instance of the application. */ protected AppD app; protected boolean initialized = false; /** localization */ protected LocalizationD loc; /** * Construct a new sub-menu and assign the application attribute. * * @param app * @param key * The title of this menu */ public BaseMenu(AppD app, String key) { super(app.getLocalization().getMenu(key)); this.app = app; this.loc = app.getLocalization(); // don't add any menu items until menu is opened // makes GeoGebra load faster addMenuListener(this); } /** * Update this menu. */ public abstract void update(); /** * Set the shortcut for a menu item. * * @param mi * @param acc */ protected void setMenuShortCutAccelerator(JMenuItem mi, char acc) { KeyStroke ks = KeyStroke.getKeyStroke(acc, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()); mi.setAccelerator(ks); } /** * Set the shortcut for a menu item which requires SHIFT to be pressed as * well. * * @param mi * @param acc */ protected void setMenuShortCutShiftAccelerator(JMenuItem mi, char acc) { KeyStroke ks = KeyStroke.getKeyStroke(acc, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() + Event.SHIFT_MASK); mi.setAccelerator(ks); } /** * Set the shortcut for a menu item which requires SHIFT + ALT to be pressed * as well. * * @param mi * @param acc */ protected void setMenuShortCutShiftAltAccelerator(JMenuItem mi, char acc) { KeyStroke ks = KeyStroke.getKeyStroke(acc, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() + Event.SHIFT_MASK + Event.ALT_MASK); mi.setAccelerator(ks); } @Override final public void menuDeselected(MenuEvent e) { // nothing to do here } @Override final public void menuCanceled(MenuEvent e) { // nothing to do here } @Override public void menuSelected(MenuEvent e) { if (getItemCount() == 0) { // UIManager.put("Menu.acceleratorFont", app.getPlainFont()); UIManager.put("MenuItem.acceleratorFont", app.getPlainFont()); initialized = true; // AbstractApplication.debug("building menu"); initActions(); initItems(); update(); GeoGebraMenuBar.setMenuFontRecursive(this, app.getPlainFont()); } } protected abstract void initActions(); protected abstract void initItems(); }