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.getCheckWellFormedAction());
138         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/status/software-update-available.png"));
139         menu.add(item);
140 
141         item = MenuHelper.createMenuItem("Check Fully-Formally Proved"'F');
142         item.setToolTipText(
143             "Check if all propositions have formal correct proofss within selected QEDEQ modules. "
144             "This includes dependency checking.");
145         item.addActionListener(controller.getCheckFormallyProvedAction());
146         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/run.png"));
147         menu.add(item);
148 
149         return menu;
150     }
151 
152 
153     /**
154      * Create "Plugins" menu.
155      *
156      @return  Menu.
157      */
158     private JMenu createTransformMenu() {
159         final JMenu menu = MenuHelper.createMenu("Process"'P');
160         JMenuItem item;
161         item = MenuHelper.createMenuItem("Plugin Preferences"'S');
162         item.addActionListener(controller.getPluginPreferencesAction());
163         item.setToolTipText("Set parameters for specific plugins.");
164         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/categories/preferences-desktop.png"));
165         menu.add(item);
166 
167         item = MenuHelper.createMenuItem("View Processes"'V');
168         item.addActionListener(controller.getProcessViewAction());
169         item.setToolTipText("Show all processes and their stage.");
170         item.setIcon(GuiHelper.readImageIcon("oil/" + resolution + "/apps/utilities-system-monitor.png"));
171         menu.add(item);
172 
173         menu.addSeparator();
174 
175         final JMenuItem[] pluginMenu = controller.getPluginMenuEntries();
176         for (int i = 0; i < pluginMenu.length; i++) {
177             menu.add(pluginMenu[i]);
178         }
179 
180         menu.addSeparator();
181 
182         item = MenuHelper.createMenuItem("Remove Plugin Results"'R');
183         item.addActionListener(controller.getRemovePluginResultsAction());
184         item.setToolTipText(
185             "Remove all warnings and errors that were produced by all plugin executions for the selected module.");
186         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/edit-clear.png"));
187         menu.add(item);
188 
189         menu.addSeparator();
190 
191         item = MenuHelper.createMenuItem("Terminate All Processes"'T');
192         item.addActionListener(controller.getTerminateAllAction());
193         item.setToolTipText(
194             "Terminate all currently running processes.");
195         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/process-stop.png"));
196         menu.add(item);
197 
198         return menu;
199     }
200 
201 
202     /**
203      * Create "Tools" menu.
204      *
205      @return  Menu.
206      */
207     private JMenu createToolsMenu() {
208         JMenuItem item;
209 
210         JMenu menu = MenuHelper.createMenu("Tools"'o');
211 
212         item = MenuHelper.createMenuItem("LaTeX to QEDEQ"'L');
213         item.addActionListener(controller.getLatexParserAction());
214         item.setToolTipText("Enter LaTeX formulas and transform them into QEDEQ syntax.");
215         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/format-indent-more.png"));
216         menu.add(item);
217 
218         item = MenuHelper.createMenuItem("Text to QEDEQ"'T');
219         item.addActionListener(controller.getTextParserAction());
220         item.setToolTipText("Enter text formulas and transform them into QEDEQ syntax.");
221         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/format-indent-more.png"));
222         menu.add(item);
223 
224         item = MenuHelper.createMenuItem("Proof Text to QEDEQ"'R');
225         item.addActionListener(controller.getProofTextParserAction());
226         item.setToolTipText("Enter proof text and transform it into QEDEQ syntax.");
227         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/actions/format-indent-more.png"));
228         menu.add(item);
229 
230         item = MenuHelper.createMenuItem("Preferences"'P');
231         item.addActionListener(controller.getPreferencesAction());
232         item.setToolTipText("Edit various application parameters.");
233         item.setIcon(GuiHelper.readImageIcon("tango/" + resolution + "/categories/preferences-system.png"));
234         menu.add(item);
235 
236         return menu;
237     }
238 
239 
240     /**
241      * Create help menu.
242      *
243      @return  Help menu.
244      */
245     private JMenu createHelpMenu() {
246         JMenu menu = MenuHelper.createMenu("Help"'H');
247 
248         JMenuItem item;
249         item = MenuHelper.createMenuItem("Help Contents",
250             GuiHelper.readImageIcon("tango/" + resolution + "/apps/help-browser.png")'H');
251         item.setToolTipText("Integrated help system.");
252         item.addActionListener(controller.getHelpAction());
253         menu.add(item);
254         if (!MenuHelper.isAboutInOSMenu()) {
255             menu.addSeparator();
256             item = MenuHelper.createMenuItem("About",
257                 GuiHelper.readImageIcon("qedeq/" + resolution  + "/qedeq.png")'a');
258             item.addActionListener(controller.getAboutAction());
259             menu.add(item);
260         }
261         return menu;
262     }
263 
264 }