QedeqMenuBar.java
001 /* This file is part of the project "Hilbert II" - http://www.qedeq.org
002  *
003  * Copyright 2000-2013,  Michael Meyling <mime@qedeq.org>.
004  *
005  * "Hilbert II" is free software; you can redistribute
006  * it and/or modify it under the terms of the GNU General Public
007  * License as published by the Free Software Foundation; either
008  * version 2 of the License, or (at your option) any later version.
009  *
010  * This program is distributed in the hope that it will be useful,
011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013  * GNU General Public License for more details.
014  */
015 
016 package org.qedeq.gui.se.main;
017 
018 import javax.swing.JMenu;
019 import javax.swing.JMenuBar;
020 import javax.swing.JMenuItem;
021 
022 import org.qedeq.gui.se.control.QedeqController;
023 import org.qedeq.gui.se.pane.QedeqGuiConfig;
024 import org.qedeq.gui.se.util.GuiHelper;
025 import org.qedeq.gui.se.util.MenuHelper;
026 
027 import com.jgoodies.looks.Options;
028 import com.jgoodies.looks.plastic.PlasticLookAndFeel;
029 import com.jgoodies.looks.windows.WindowsLookAndFeel;
030 
031 /**
032  * Menu bar and pull-down menus.
033  *
034  @author  Michael Meyling
035  */
036 public class QedeqMenuBar extends JMenuBar {
037 
038     /** Reference to controller. */
039     private QedeqController controller;
040 
041     /** Icon resolution. Currently supported: "16x16", "22x22" and "32x32". */
042     private String resolution = QedeqGuiConfig.getInstance().getIconSize();
043 
044     /**
045      * Constructor.
046      *
047      @param   controller  Controller reference.
048      @param   options     GUI options to create look specific design.
049      */
050     public QedeqMenuBar(final QedeqController controller, final GuiOptions options) {
051         this.controller = controller;
052 
053         putClientProperty(Options.HEADER_STYLE_KEY,
054                               options.getMenuBarHeaderStyle());
055         putClientProperty(PlasticLookAndFeel.BORDER_STYLE_KEY,
056                               options.getMenuBarPlasticBorderStyle());
057         putClientProperty(WindowsLookAndFeel.BORDER_STYLE_KEY,
058                               options.getMenuBarWindowsBorderStyle());
059         putClientProperty(PlasticLookAndFeel.IS_3D_KEY,
060                               options.getMenuBar3DHint());
061 
062         add(createFileMenu());
063         add(createCheckMenu());
064         add(createTransformMenu());
065         add(createToolsMenu());
066         add(createHelpMenu());
067     }
068 
069     /**
070      * Create "File" menu.
071      *
072      @return  Created menu.
073      */
074     private JMenu createFileMenu() {
075         JMenuItem item;
076 
077         JMenu menu = MenuHelper.createMenu("File"'F');
078 
079         item = MenuHelper.createMenuItem("Load from Web"'W');
080         item.setToolTipText("Load QEDEQ module from anywhere in the Web");
081         item.addActionListener(controller.getAddAction());
082         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/list-add.png"));
083         menu.add(item);
084 
085         item = MenuHelper.createMenuItem("Load local File"'F');
086         item.setToolTipText("Load QEDEQ module from file system");
087         item.addActionListener(controller.getAddFileAction());
088         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/document-open.png"));
089         menu.add(item);
090 
091         item = MenuHelper.createMenuItem("Load all from QEDEQ.org"'Q');
092         item.setToolTipText("Load main set of QEDEQ modules from project home page");
093         item.addActionListener(controller.getAddAllModulesFromQedeqAction());
094         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/go-home.png"));
095         menu.add(item);
096 
097         menu.addSeparator();
098 
099         item = MenuHelper.createMenuItem("Remove module"'R');
100         item.setToolTipText("Unload selected QEDEQ modules. Changes status of dependent modules. "
101             "Local module buffer is not affected.");
102         item.addActionListener(controller.getRemoveModuleAction());
103         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/edit-cut.png"));
104         menu.add(item);
105 
106         item = MenuHelper.createMenuItem("Clear Buffer"'C');
107         item.setToolTipText("Unload all QEDEQ modules and clear the local module buffer.");
108         item.addActionListener(controller.getRemoveLocalBufferAction());
109         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/edit-delete.png"));
110         menu.add(item);
111 
112         if (!MenuHelper.isQuitInOSMenu()) {
113             menu.addSeparator();
114             item = MenuHelper.createMenuItem("Exit"'E');
115             item.setToolTipText("Leave application");
116             item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/system-log-out.png"));
117             item.addActionListener(controller.getExitAction());
118             menu.add(item);
119         }
120         return menu;
121     }
122 
123 
124     /**
125      * Create "Check" menu.
126      *
127      @return  Menu.
128      */
129     private JMenu createCheckMenu() {
130         JMenuItem item;
131 
132         JMenu menu = MenuHelper.createMenu("Check"'C');
133 
134         item = MenuHelper.createMenuItem("Check Well-Formedness"'W');
135         item.setToolTipText(
136             "Check if all formulas are well formed within selected QEDEQ modules. This includes dependency checking.");
137         item.addActionListener(controller.getCheckLogicAction());
138         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/run.png"));
139         menu.add(item);
140 
141         return menu;
142     }
143 
144 
145     /**
146      * Create "Plugins" menu.
147      *
148      @return  Menu.
149      */
150     private JMenu createTransformMenu() {
151         final JMenu menu = MenuHelper.createMenu("Plugins"'P');
152         JMenuItem item;
153         item = MenuHelper.createMenuItem("Plugin Preferences"'S');
154         item.addActionListener(controller.getPluginPreferencesAction());
155         item.setToolTipText("Set parameters for specific plugins.");
156         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/categories/preferences-desktop.png"));
157         menu.add(item);
158 
159         item = MenuHelper.createMenuItem("Threads"'T');
160         item.addActionListener(controller.getProcessViewAction());
161         item.setToolTipText("Show all plugin exections. Can stop running plugin threads.");
162         item.setIcon(GuiHelper.readImageIcon("oil/" + resolution + "/apps/utilities-system-monitor.png"));
163         menu.add(item);
164 
165         menu.addSeparator();
166         final JMenuItem[] pluginMenu = controller.getPluginMenuEntries();
167         for (int i = 0; i < pluginMenu.length; i++) {
168             menu.add(pluginMenu[i]);
169         }
170 
171         menu.addSeparator();
172 
173         item = MenuHelper.createMenuItem("Remove Plugin Results"'R');
174         item.addActionListener(controller.getRemovePluginResultsAction());
175         item.setToolTipText(
176             "Remove all warnings and errors that were produced by all plugin executions for the selected module.");
177         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/edit-clear.png"));
178         menu.add(item);
179 
180         menu.addSeparator();
181 
182         item = MenuHelper.createMenuItem("Terminate Threads"'T');
183         item.addActionListener(controller.getTerminateAllAction());
184         item.setToolTipText(
185             "Terminate all currently running plugin processes.");
186         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/process-stop.png"));
187         menu.add(item);
188 
189         return menu;
190     }
191 
192 
193     /**
194      * Create "Tools" menu.
195      *
196      @return  Menu.
197      */
198     private JMenu createToolsMenu() {
199         JMenuItem item;
200 
201         JMenu menu = MenuHelper.createMenu("Tools"'o');
202 
203         item = MenuHelper.createMenuItem("LaTeX to QEDEQ"'L');
204         item.addActionListener(controller.getLatexParserAction());
205         item.setToolTipText("Enter LaTeX formulas and transform them into QEDEQ syntax.");
206         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/format-indent-more.png"));
207         menu.add(item);
208 
209         item = MenuHelper.createMenuItem("Text to QEDEQ"'T');
210         item.addActionListener(controller.getTextParserAction());
211         item.setToolTipText("Enter text formulas and transform them into QEDEQ syntax.");
212         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/format-indent-more.png"));
213         menu.add(item);
214 
215         item = MenuHelper.createMenuItem("Proof Text to QEDEQ"'R');
216         item.addActionListener(controller.getProofTextParserAction());
217         item.setToolTipText("Enter proof text and transform it into QEDEQ syntax.");
218         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/format-indent-more.png"));
219         menu.add(item);
220 
221         item = MenuHelper.createMenuItem("Preferences"'P');
222         item.addActionListener(controller.getPreferencesAction());
223         item.setToolTipText("Edit various application parameters.");
224         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/categories/preferences-system.png"));
225         menu.add(item);
226 
227         return menu;
228     }
229 
230 
231     /**
232      * Create help menu.
233      *
234      @return  Help menu.
235      */
236     private JMenu createHelpMenu() {
237         JMenu menu = MenuHelper.createMenu("Help"'H');
238 
239         JMenuItem item;
240         item = MenuHelper.createMenuItem("Help Contents",
241             GuiHelper.readImageIcon("tango/" + resolution + "/apps/help-browser.png")'H');
242         item.setToolTipText("Integrated help system.");
243         item.addActionListener(controller.getHelpAction());
244         menu.add(item);
245         if (!MenuHelper.isAboutInOSMenu()) {
246             menu.addSeparator();
247             item = MenuHelper.createMenuItem("About",
248                 GuiHelper.readImageIcon("qedeq/" + resolution  + "/qedeq.png")'a');
249             item.addActionListener(controller.getAboutAction());
250             menu.add(item);
251         }
252         return menu;
253     }
254 
255 }