package org.geogebra.desktop.gui.menubar; import java.awt.event.ActionEvent; import java.util.Arrays; import javax.swing.AbstractAction; import javax.swing.JCheckBoxMenuItem; import javax.swing.JMenu; import org.geogebra.common.main.OptionType; import org.geogebra.common.main.settings.KeyboardSettings; import org.geogebra.desktop.gui.GuiManagerD; import org.geogebra.desktop.gui.layout.DockPanelD; import org.geogebra.desktop.gui.layout.LayoutD; import org.geogebra.desktop.gui.layout.panels.ConstructionProtocolDockPanel; import org.geogebra.desktop.gui.virtualkeyboard.VirtualKeyboardD; import org.geogebra.desktop.main.AppD; import org.geogebra.desktop.util.GuiResourcesD; @SuppressWarnings("serial") public class ViewMenuApplicationD extends ViewMenuD { private AbstractAction showKeyboardAction, showAlgebraInputAction; private JCheckBoxMenuItem cbShowKeyboard, cbShowInputBar; private ShowViewAction[] showViews; private JCheckBoxMenuItem[] cbViews; private AbstractAction showLayoutOptionsAction; /* * Checkbox for construction protocol view. */ private JCheckBoxMenuItem cbConsprot; /** * The "View" menu for the application. */ public ViewMenuApplicationD(AppD app, LayoutD layout) { super(app, layout); // TODO Auto-generated constructor stub } /** * Initialize the menu items. */ @Override protected void initItems() { if (!initialized) { return; } initViewItems(this); // show/hide keyboard if (!app.isApplet()) { cbShowKeyboard = new JCheckBoxMenuItem(showKeyboardAction); cbShowKeyboard.setIcon(app.getMenuIcon(GuiResourcesD.KEYBOARD)); KeyboardSettings kbs = app.getSettings().getKeyboard(); if (kbs.isShowKeyboardOnStart()) { cbShowKeyboard.setSelected(true); VirtualKeyboardD vk = ((GuiManagerD) app.getGuiManager()) .getVirtualKeyboard(); vk.setVisible(true); } add(cbShowKeyboard); } cbShowInputBar = new JCheckBoxMenuItem(showAlgebraInputAction); app.setEmptyIcon(cbShowInputBar); add(cbShowInputBar); addSeparator(); add(showLayoutOptionsAction); addSeparator(); super.initItems(); } /** * Initialize the actions, which used by applet only (and not by * application). */ @Override protected void initActions() { initViewActions(); // display the layout options dialog showLayoutOptionsAction = new AbstractAction( loc.getMenu("Layout") + " ...", app.getMenuIcon(GuiResourcesD.VIEW_PROPERTIES_16)) { public static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { app.getDialogManager().showPropertiesDialog(OptionType.LAYOUT, null); } }; showKeyboardAction = new AbstractAction(loc.getMenu("Keyboard")) { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { if (AppD.isVirtualKeyboardActive() && !((GuiManagerD) app.getGuiManager()) .showVirtualKeyboard()) { // if keyboard is active but hidden, just show it ((GuiManagerD) app.getGuiManager()).toggleKeyboard(true); update(); } else { AppD.setVirtualKeyboardActive( !AppD.isVirtualKeyboardActive()); ((GuiManagerD) app.getGuiManager()) .toggleKeyboard(AppD.isVirtualKeyboardActive()); update(); } } }; showAlgebraInputAction = new AbstractAction(loc.getMenu("InputField")) { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { app.setShowAlgebraInput(!app.showAlgebraInput(), true); app.updateContentPane(); } }; super.initActions(); } private void initViewActions() { if (!initialized) { return; } DockPanelD[] dockPanels = layout.getDockManager().getPanels(); Arrays.sort(dockPanels, new DockPanelD.MenuOrderComparator()); int viewsInMenu = 0; // count visible views first.. for (DockPanelD panel : dockPanels) { // skip panels with negative order by design if (panel.getMenuOrder() < 0) { continue; } ++viewsInMenu; } // construct array with menu items showViews = new ShowViewAction[viewsInMenu]; { int i = 0; ShowViewAction action; for (DockPanelD panel : dockPanels) { // skip panels with negative order by design if (panel.getMenuOrder() < 0) { continue; } action = new ShowViewAction(panel); showViews[i] = action; ++i; } } } private class ShowViewAction extends AbstractAction { private DockPanelD panel; private int viewId; private JCheckBoxMenuItem cb; public ShowViewAction(DockPanelD panel) { super(app.getLocalization().getMenu(panel.getViewTitle())); this.panel = panel; viewId = panel.getViewId(); } public void setCheckBox(JCheckBoxMenuItem cb) { this.cb = cb; } @Override public void actionPerformed(ActionEvent arg0) { ((GuiManagerD) app.getGuiManager()).setShowView( !((GuiManagerD) app.getGuiManager()).showView(viewId), viewId); // ensure check box is correctly selected/unselected for case where // hide aborted cb.setSelected(panel.isVisible()); } } @Override public void update() { if (!initialized) { return; } updateViews(); cbShowInputBar.setSelected(app.showAlgebraInput()); if (cbShowKeyboard != null) { cbShowKeyboard.setSelected(AppD.isVirtualKeyboardActive()); } // cbShowHandwriting.setSelected(Application.isHandwritingRecognitionActive()); // cbShowHandwritingAutoAdd.setSelected(Application.isHandwritingRecognitionAutoAdd()); // cbShowHandwritingTimedAdd.setSelected(Application.isHandwritingRecognitionTimedAdd()); // cbShowHandwritingTimedRecognise.setSelected(Application.isHandwritingRecognitionTimedRecognise()); // enable menus if necessary // menuInput.setEnabled(app.showAlgebraInput()); // menuToolBar.setEnabled(app.showToolBar()); } private void updateViews() { if (!initialized) { return; } DockPanelD[] dockPanels = layout.getDockManager().getPanels(); Arrays.sort(dockPanels, new DockPanelD.MenuOrderComparator()); // update views { int i = 0; for (DockPanelD panel : dockPanels) { // skip panels with negative order by design if (panel.getMenuOrder() < 0) { continue; } if (cbViews[i] == null) { return; } cbViews[i].setSelected(((GuiManagerD) app.getGuiManager()) .showView(panel.getViewId())); ++i; } } } private void initViewItems(JMenu menu) { if (!initialized) { return; } DockPanelD[] dockPanels = layout.getDockManager().getPanels(); Arrays.sort(dockPanels, new DockPanelD.MenuOrderComparator()); int viewsInMenu = 0; // count visible views first.. for (DockPanelD panel : dockPanels) { // skip panels with negative order by design if (panel.getMenuOrder() < 0) { continue; } ++viewsInMenu; } // construct array with menu items cbViews = new JCheckBoxMenuItem[viewsInMenu]; { int i = 0; JCheckBoxMenuItem cb; for (DockPanelD panel : dockPanels) { // skip panels with negative order by design if (panel.getMenuOrder() < 0) { continue; } cb = new JCheckBoxMenuItem(showViews[i]); showViews[i].setCheckBox(cb); cb.setIcon(panel.getIcon()); if (panel.hasMenuShortcut()) { setMenuShortCutShiftAccelerator(cb, panel.getMenuShortcut()); } menu.add(cb); cbViews[i] = cb; if (panel instanceof ConstructionProtocolDockPanel) { cbConsprot = cb; } ++i; } } } /** * Checkbox of Construction protocol view will be checked if visible is * true. Otherwise won't be checked. * * @param visible */ public void updateCPView(boolean selected) { if (cbConsprot != null) { cbConsprot.setSelected(selected); } } }