001 /*
002 * Copyright (c) 2005 Einar Pehrson <einar@pehrson.nu>.
003 *
004 * This file is part of
005 * CleanSheets - a spreadsheet application for the Java platform.
006 *
007 * CleanSheets is free software; you can redistribute it and/or modify
008 * it under the terms of the GNU General Public License as published by
009 * the Free Software Foundation; either version 2 of the License, or
010 * (at your option) any later version.
011 *
012 * CleanSheets is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015 * GNU General Public License for more details.
016 *
017 * You should have received a copy of the GNU General Public License
018 * along with CleanSheets; if not, write to the Free Software
019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020 */
021 package csheets.ui;
022
023 import java.awt.event.KeyEvent;
024
025 import javax.swing.Icon;
026 import javax.swing.ImageIcon;
027 import javax.swing.JCheckBoxMenuItem;
028 import javax.swing.JComponent;
029 import javax.swing.JMenu;
030 import javax.swing.JMenuBar;
031
032 import csheets.CleanSheets;
033 import csheets.ui.ctrl.ActionManager;
034 import csheets.ui.ctrl.UIController;
035 import csheets.ui.ext.CellDecorator;
036 import csheets.ui.ext.CellDecoratorAction;
037 import csheets.ui.ext.ComponentAction;
038 import csheets.ui.ext.SideBarAction;
039 import csheets.ui.ext.TableDecorator;
040 import csheets.ui.ext.TableDecoratorAction;
041 import csheets.ui.ext.UIExtension;
042
043 /**
044 * The menu bar.
045 * @author Einar Pehrson
046 */
047 @SuppressWarnings("serial")
048 public class MenuBar extends JMenuBar {
049
050 /**
051 * Creates the menu bar.
052 * @param app the CleanSheets application
053 * @param actionManager a manager for actions
054 * @param uiController the user interface controller
055 */
056 public MenuBar(CleanSheets app, ActionManager actionManager, UIController uiController) {
057 // Creates the file menu
058 JMenu fileMenu = addMenu("File", KeyEvent.VK_F);
059 fileMenu.add(actionManager.getAction("new"));
060 fileMenu.add(actionManager.getAction("open"));
061 fileMenu.add(new ReopenMenu(app, uiController));
062 fileMenu.add(actionManager.getAction("save"));
063 fileMenu.add(actionManager.getAction("saveas"));
064 fileMenu.addSeparator();
065 fileMenu.add(actionManager.getAction("print"));
066 fileMenu.addSeparator();
067 fileMenu.add(actionManager.getAction("close"));
068 fileMenu.add(actionManager.getAction("closeall"));
069 fileMenu.add(actionManager.getAction("exit"));
070
071 // Creates the edit menu
072 JMenu editMenu = addMenu("Edit", KeyEvent.VK_E);
073 editMenu.add(actionManager.getAction("undo"));
074 editMenu.add(actionManager.getAction("redo"));
075 editMenu.addSeparator();
076 editMenu.add(actionManager.getAction("cut"));
077 editMenu.add(actionManager.getAction("copy"));
078 editMenu.add(actionManager.getAction("paste"));
079 editMenu.addSeparator();
080 editMenu.add(actionManager.getAction("selectall"));
081 editMenu.add(actionManager.getAction("sort"));
082 editMenu.add(actionManager.getAction("search"));
083 editMenu.add(actionManager.getAction("clear"));
084 editMenu.addSeparator();
085 editMenu.add(actionManager.getAction("prefs"));
086
087 // Creates the view menu
088 JMenu viewMenu = addMenu("View", KeyEvent.VK_V);
089
090 JMenu sideBarMenu = (JMenu)viewMenu.add(new JMenu("Side Bars"));
091 sideBarMenu.setMnemonic(KeyEvent.VK_S);
092 sideBarMenu.setIcon(new ImageIcon(CleanSheets.class.getResource("res/img/sidebar.gif")));
093
094 JMenu toolBarMenu = (JMenu)viewMenu.add(new JMenu("Tool Bars"));
095 toolBarMenu.setMnemonic(KeyEvent.VK_T);
096 toolBarMenu.setIcon(new ImageIcon(CleanSheets.class.getResource("res/img/toolbar.gif")));
097
098 viewMenu.addSeparator();
099 JMenu cellDecMenu = (JMenu)viewMenu.add(new JMenu("Cell Decorators"));
100 cellDecMenu.setMnemonic(KeyEvent.VK_C);
101 cellDecMenu.setIcon(new BlankIcon(16));
102
103 JMenu tableDecMenu = (JMenu)viewMenu.add(new JMenu("Table Decorators"));
104 tableDecMenu.setMnemonic(KeyEvent.VK_C);
105 tableDecMenu.setIcon(new BlankIcon(16));
106
107 // Populates the view sub-menus
108 for (UIExtension extension : uiController.getExtensions()) {
109
110 CellDecorator cellDec = extension.getCellDecorator();
111 if (cellDec != null)
112 cellDecMenu.add(new JCheckBoxMenuItem(new CellDecoratorAction(
113 extension))).setSelected(cellDec.isEnabled());
114
115 TableDecorator tableDec = extension.getTableDecorator();
116 if (tableDec != null)
117 tableDecMenu.add(new JCheckBoxMenuItem(new TableDecoratorAction(
118 extension))).setSelected(tableDec.isEnabled());
119
120 JComponent sideBar = extension.getSideBar();
121 if (sideBar != null)
122 sideBarMenu.add(new JCheckBoxMenuItem(
123 new SideBarAction(extension, sideBar))
124 ).setSelected(sideBar.isEnabled());
125
126 JComponent toolBar = extension.getToolBar();
127 if (toolBar != null)
128 toolBarMenu.add(new JCheckBoxMenuItem(
129 new ComponentAction(extension, toolBar, "toolbar"))
130 ).setSelected(toolBar.isVisible());
131 }
132
133 // Creates the spreadsheet menu
134 JMenu sheetMenu = addMenu("Spreadsheet", KeyEvent.VK_S);
135 sheetMenu.add(actionManager.getAction("addsheet"));
136 sheetMenu.add(actionManager.getAction("removesheet"));
137 sheetMenu.add(actionManager.getAction("renamesheet"));
138 sheetMenu.addSeparator();
139 sheetMenu.add(actionManager.getAction("insertcolumn"));
140 sheetMenu.add(actionManager.getAction("removecolumn"));
141 sheetMenu.add(actionManager.getAction("insertrow"));
142 sheetMenu.add(actionManager.getAction("removerow"));
143
144 // Creates the extension menus
145 JMenu extensionsMenu = addMenu("Extensions", KeyEvent.VK_X);
146 for (UIExtension extension : uiController.getExtensions()) {
147 JMenu extensionMenu = extension.getMenu();
148 if (extensionMenu != null) {
149 // Updates icon
150 if (extensionMenu.getIcon() == null) {
151 Icon icon = extension.getIcon();
152 extensionMenu.setIcon(icon != null ? icon : new BlankIcon(16));
153 }
154
155 // Adds menu
156 extensionsMenu.add(extensionMenu);
157 }
158 }
159
160 // Creates the window menu
161 add(new WindowMenu(app, uiController));
162
163 // Creates the help menu
164 JMenu helpMenu = addMenu("Help", KeyEvent.VK_H);
165 helpMenu.add(actionManager.getAction("help"));
166 helpMenu.addSeparator();
167 helpMenu.add(actionManager.getAction("license"));
168 helpMenu.add(actionManager.getAction("about"));
169 }
170
171 /**
172 * Creates a menu and adds it to the menu bar.
173 * @param name The name of the menu.
174 * @param mnemonic The shortcut-key to access the menu.
175 * @return The menu created.
176 */
177 private JMenu addMenu(String name, int mnemonic) {
178 JMenu menu = new JMenu(name);
179 menu.setMnemonic(mnemonic);
180 return add(menu);
181 }
182 }