00001 /* 00002 * MainMenuBar.java 00003 * 00004 * Copyright (C) 2005 Project SQUID, http://www.cs.helsinki.fi/group/squid/ 00005 * 00006 * This file is part of Ikayaki. 00007 * 00008 * Ikayaki is free software; you can redistribute it and/or modify 00009 * it under the terms of the GNU General Public License as published by 00010 * the Free Software Foundation; either version 2 of the License, or 00011 * (at your option) any later version. 00012 * 00013 * Ikayaki is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 * GNU General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU General Public License 00019 * along with Ikayaki; if not, write to the Free Software 00020 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00021 */ 00022 00023 package ikayaki.gui; 00024 00025 import ikayaki.Settings; 00026 00027 import javax.swing.*; 00028 import javax.swing.event.MenuEvent; 00029 import javax.swing.event.MenuListener; 00030 import java.awt.event.ActionEvent; 00031 import java.awt.event.ActionListener; 00032 import java.awt.event.KeyEvent; 00033 import java.io.File; 00034 00040 public class MainMenuBar extends JMenuBar { 00041 00042 private MainViewPanel main; 00043 00044 private JMenu fileMenu; 00045 private Action newProject; 00046 private Action openProject; 00047 private JMenu openRecentProjectMenu; 00048 private JMenu exportProjectMenu; 00049 private Action exportProjectToDAT; 00050 private Action exportProjectToDTD; 00051 private Action exportProjectToSRM; 00052 private Action print; 00053 private Action printPreview; 00054 private Action exit; 00055 00056 private JMenu measurementMenu; 00057 private Action autoStep; 00058 private Action singleStep; 00059 private Action pause; 00060 private Action abort; 00061 00062 private JMenu toolsMenu; 00063 private Action programSettings; 00064 private Action deviceSettings; 00065 00066 private JMenu helpMenu; 00067 private Action help; 00068 private Action about; 00069 00073 public MainMenuBar(MainViewPanel main) { 00074 this.main = main; 00075 initialize(); 00076 00077 fileMenu = new JMenu("File"); 00078 fileMenu.setMnemonic(KeyEvent.VK_F); 00079 fileMenu.add(newProject); 00080 fileMenu.add(openProject); 00081 { 00082 openRecentProjectMenu = new JMenu("Open Recent"); 00083 openRecentProjectMenu.setMnemonic(KeyEvent.VK_R); 00084 } 00085 fileMenu.add(openRecentProjectMenu); 00086 fileMenu.add(new JSeparator()); 00087 { 00088 exportProjectMenu = new JMenu("Export"); 00089 exportProjectMenu.setMnemonic(KeyEvent.VK_E); 00090 exportProjectMenu.add(exportProjectToDAT); 00091 exportProjectMenu.add(exportProjectToDTD); 00092 //exportProjectMenu.add(exportProjectToSRM); // TODO: support for SRM files is missing 00093 } 00094 fileMenu.add(exportProjectMenu); 00095 fileMenu.add(new JSeparator()); 00096 fileMenu.add(print); 00097 fileMenu.add(printPreview); 00098 fileMenu.add(new JSeparator()); 00099 fileMenu.add(exit); 00100 add(fileMenu); 00101 00102 measurementMenu = new JMenu("Measurement"); 00103 measurementMenu.setMnemonic(KeyEvent.VK_M); 00104 measurementMenu.add(autoStep); 00105 measurementMenu.add(singleStep); 00106 measurementMenu.add(pause); 00107 measurementMenu.add(abort); 00108 add(measurementMenu); 00109 00110 toolsMenu = new JMenu("Tools"); 00111 toolsMenu.setMnemonic(KeyEvent.VK_T); 00112 toolsMenu.add(programSettings); 00113 toolsMenu.add(deviceSettings); 00114 add(toolsMenu); 00115 00116 helpMenu = new JMenu("Help"); 00117 helpMenu.setMnemonic(KeyEvent.VK_H); 00118 helpMenu.add(help); 00119 helpMenu.add(about); 00120 add(helpMenu); 00121 00122 // rebuilding of the file menu 00123 fileMenu.addMenuListener(new MenuListener() { 00124 public void menuSelected(MenuEvent e) { 00125 00126 // enable/disable export menu 00127 exportProjectMenu.setEnabled(exportProjectToDAT.isEnabled() 00128 || exportProjectToDTD.isEnabled() 00129 || exportProjectToSRM.isEnabled()); 00130 00131 // rebuild project history 00132 openRecentProjectMenu.removeAll(); 00133 File[] files = Settings.getProjectHistory(); 00134 if (files.length == 0) { 00135 openRecentProjectMenu.setEnabled(false); 00136 } else { 00137 openRecentProjectMenu.setEnabled(true); 00138 00139 for (int i = 0; i < files.length; i++) { 00140 final File file = files[i]; 00141 JMenuItem item; 00142 if (i < 10) { 00143 int j = (i + 1) % 10; 00144 item = new JMenuItem(j + ": " + file.getAbsolutePath()); 00145 item.setMnemonic(KeyEvent.VK_0 + j); 00146 } else { 00147 item = new JMenuItem(file.getAbsolutePath()); 00148 } 00149 00150 item.addActionListener(new ActionListener() { 00151 public void actionPerformed(ActionEvent e) { 00152 MainMenuBar.this.main.loadProject(file); 00153 } 00154 }); 00155 openRecentProjectMenu.add(item); 00156 } 00157 } 00158 } 00159 00160 public void menuDeselected(MenuEvent e) { 00161 // DO NOTHING 00162 } 00163 00164 public void menuCanceled(MenuEvent e) { 00165 // DO NOTHING 00166 } 00167 }); 00168 } 00169 00173 private void initialize() { 00174 00175 /* File Menu */ 00176 newProject = main.getNewProjectAction(); 00177 openProject = main.getOpenProjectAction(); 00178 exportProjectToDAT = main.getExportProjectToDATAction(); 00179 exportProjectToDTD = main.getExportProjectToTDTAction(); 00180 exportProjectToSRM = main.getExportProjectToSRMAction(); 00181 print = main.getPrintAction(); 00182 printPreview = main.getPrintPreviewAction(); 00183 exit = main.getExitAction(); 00184 00185 /* Measurement Menu */ 00186 autoStep = main.getMeasurementControlsPanel().getAutoStepAction(); 00187 singleStep = main.getMeasurementControlsPanel().getSingleStepAction(); 00188 pause = main.getMeasurementControlsPanel().getPauseAction(); 00189 abort = main.getMeasurementControlsPanel().getAbortAction(); 00190 00191 /* Tools Menu */ 00192 programSettings = main.getProgramSettingsAction(); 00193 deviceSettings = main.getDeviceSettingsAction(); 00194 00195 /* Help Menu */ 00196 help = main.getHelpAction(); 00197 about = main.getAboutAction(); 00198 } 00199 }