package captor.windowsystem.main.menubar; import java.awt.Toolkit; import java.awt.event.KeyEvent; import java.util.Observable; import java.util.Observer; import javax.swing.Icon; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; import captor.lib.def.Constant; import captor.lib.intl.MyIntl; import captor.modelsystem.Model; import captor.windowsystem.help.HelpContents; import captor.windowsystem.util.IconUtil; /** * This class create and instantiate the menu bar located in the main window. * * @author Kicho */ public class SmartMenuBar extends JMenuBar implements Observer { public static final long serialVersionUID = 159; private JMenu file; private JMenu fileNew; private JMenuItem fileNewProject; private JMenuItem fileExit; private JMenuItem lastOpenProject1, lastOpenProject2, lastOpenProject3, lastOpenProject4; private JMenu project; private JMenuItem projectOpen; private JMenuItem projectClose; private JMenuItem projectSave; private JMenuItem projectSaveAs; private JMenuItem projectBuild; private JMenuItem projectClean; private JMenuItem projectValidate; private JMenuItem projectProperties; private JMenu tools; private JMenuItem metaModelValidator; private JMenu window; private JMenuItem windowNewWindow; private JMenu windowShowView; private JMenuItem windowConsole; private JMenuItem windowError; private JMenuItem windowWarning; private JMenuItem windowPreferences; private JMenu help; private JMenuItem helpContents; private JMenuItem helpAbout; private Model model; private WindowMenuListener windowMenuListener; private ProjectMenuListener projectMenuListener; private HelpMenuListener helpMenuListener; private FileMenuListener fileMenuListener; private ToolsMenuListener toolsMenuListener; public SmartMenuBar(Model model) { super(); this.model = model; create(); } //------------------------------------------------------------------------- public void create() { fileMenuListener = new FileMenuListener(model); windowMenuListener = new WindowMenuListener(model); projectMenuListener = new ProjectMenuListener(model); helpMenuListener = new HelpMenuListener(model); toolsMenuListener = new ToolsMenuListener(model); file = new JMenu (MyIntl.MENU_BAR_FILE); if ( MyIntl.LANG.equals("pt") ) file.setMnemonic('A'); else file.setMnemonic('F'); makeFileMenu(); //--------------------------------------------------------------------- project = new JMenu (MyIntl.MENU_BAR_PROJECT); project.setMnemonic('P'); projectOpen = new JMenuItem (MyIntl.SUBMENU_BAR_OPEN, KeyEvent.VK_O); projectOpen.setAccelerator(KeyStroke.getKeyStroke('O', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); projectOpen.setMnemonic('O'); insertIcon(projectOpen, "open.gif"); projectSave = new JMenuItem (MyIntl.SUBMENU_BAR_SAVE, KeyEvent.VK_S); projectSave.setAccelerator(KeyStroke.getKeyStroke('S', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); insertIcon(projectSave, "save.gif"); projectBuild = new JMenuItem (MyIntl.SUBMENU_BAR_BUILD, KeyEvent.VK_B); projectBuild.setAccelerator(KeyStroke.getKeyStroke('B', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); projectBuild.setMnemonic('B'); insertIcon(projectBuild, "build.gif"); projectSaveAs = new JMenuItem (MyIntl.SUBMENU_BAR_SAVEAS); insertIcon(projectSaveAs, "saveas.gif"); projectClose = new JMenuItem (MyIntl.SUBMENU_BAR_CLOSE); projectClose.setAccelerator(KeyStroke.getKeyStroke('W', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); projectClose.setMnemonic('C'); insertIcon(projectClose, "close.gif"); projectClean = new JMenuItem (MyIntl.SUBMENU_BAR_CLEAN); insertIcon(projectClean, "clean.gif"); projectValidate = new JMenuItem (MyIntl.SUBMENU_BAR_VALIDATE); insertIcon(projectValidate, "validateProject.gif"); projectValidate.setMnemonic('K'); projectValidate.setAccelerator(KeyStroke.getKeyStroke('K', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); projectProperties = new JMenuItem (MyIntl.SUBMENU_BAR_PROPERTIES); projectProperties.setAccelerator(KeyStroke.getKeyStroke('P', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); projectProperties.setMnemonic('P'); insertIcon(projectProperties, "properties.gif"); project.add(projectOpen); project.add(projectClose); project.addSeparator(); project.add(projectSave); project.add(projectSaveAs); project.addSeparator(); project.add(projectBuild); project.add(projectClean); project.add(projectValidate); project.addSeparator(); project.add(projectProperties); projectClean.addActionListener(projectMenuListener); projectValidate.addActionListener(projectMenuListener); projectBuild.addActionListener(projectMenuListener); projectOpen.addActionListener(projectMenuListener); projectProperties.addActionListener(projectMenuListener); projectSave.addActionListener(projectMenuListener); projectSaveAs.addActionListener(projectMenuListener); projectClose.addActionListener(projectMenuListener); //--------------------------------------------------------------------- tools = new JMenu (MyIntl.MENU_BAR_TOOLS); if ( MyIntl.LANG.equals("pt") ) tools.setMnemonic('F'); else tools.setMnemonic('T'); metaModelValidator = new JMenuItem (MyIntl.SUBMENU_BAR_METAMODEL_VALIDATOR); // insertIcon(metaModelValidator, "toolvalidator.jpg"); tools.add(metaModelValidator); insertIcon(metaModelValidator, "tools.gif"); metaModelValidator.addActionListener(toolsMenuListener); //--------------------------------------------------------------------- window = new JMenu (MyIntl.MENU_BAR_WINDOW); if ( MyIntl.LANG.equals("pt") ) window.setMnemonic('J'); else window.setMnemonic('W'); windowShowView = new JMenu (MyIntl.SUBMENU_BAR_SHOW_VIEW); insertIcon(windowShowView, "showview.jpg"); windowNewWindow = new JMenuItem (MyIntl.SUBMENU_BAR_NEW_WINDOW); insertIcon(windowNewWindow, "newwindow.gif"); windowError = new JMenuItem (MyIntl.SUBMENU_BAR_ERROR); insertIcon(windowError, "errorview.gif"); windowWarning = new JMenuItem (MyIntl.SUBMENU_BAR_WARNING); insertIcon(windowWarning, "warning.gif"); windowConsole = new JMenuItem (MyIntl.SUBMENU_BAR_CONSOLE); insertIcon(windowConsole, "console.gif"); windowPreferences = new JMenuItem (MyIntl.SUBMENU_BAR_PREFERENCES); insertIcon(windowPreferences, "preferences.jpg"); windowShowView.add(windowConsole); windowShowView.add(windowError); windowShowView.add(windowWarning); window.add(windowNewWindow); window.addSeparator(); window.add(windowShowView); window.addSeparator(); window.add(windowPreferences); windowWarning.addActionListener(windowMenuListener); windowConsole.addActionListener(windowMenuListener); windowError.addActionListener(windowMenuListener); windowNewWindow.addActionListener(windowMenuListener); windowPreferences.addActionListener(windowMenuListener); //--------------------------------------------------------------------- help = new JMenu (MyIntl.MENU_BAR_HELP); help.setMnemonic('H'); helpContents = new JMenuItem (MyIntl.SUBMENU_BAR_CONTENTS); insertIcon(helpContents, "help.gif"); helpAbout = new JMenuItem (MyIntl.SUBMENU_BAR_ABOUT); insertIcon(helpAbout, "about.jpg"); help.add(helpContents); help.addSeparator(); help.add(helpAbout); helpAbout.addActionListener(helpMenuListener); helpContents.addActionListener(new HelpContents(model)); //--------------------------------------------------------------------- this.add(file); this.add(project); this.add(tools); this.add(window); this.add(help); } //------------------------------------------------------------------------- public void insertIcon(JMenuItem jitem, String iconName) { Icon icon = IconUtil.getIcon(iconName); jitem.setIcon(icon); } //------------------------------------------------------------------------- public void update(Observable observable, Object obj) { if ( obj.equals(Constant.ADD_OPEN_PROJECT_TO_FILE_MENU) ) { makeFileMenu(); } } //------------------------------------------------------------------------- public void makeFileMenu() { file.removeAll(); fileNew = new JMenu (MyIntl.SUBMENU_BAR_NEW); fileNew.setMnemonic('N'); fileNewProject = new JMenuItem (MyIntl.SUBMENU_BAR_PROJECT, KeyEvent.VK_N); fileNewProject.setAccelerator(KeyStroke.getKeyStroke('N', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); insertIcon(fileNewProject, "newapplication.gif"); fileExit = new JMenuItem (MyIntl.SUBMENU_BAR_EXIT); fileExit.setMnemonic('E'); fileExit.setAccelerator(KeyStroke.getKeyStroke('Q', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); lastOpenProject1 = null; lastOpenProject2 = null; lastOpenProject3 = null; lastOpenProject4 = null; if ( ! model.getConfig().getGuiHiddenConfig().getLastOpenProject1().equals("") ) lastOpenProject1 = new JMenuItem (makeLastProjectName(model.getConfig().getGuiHiddenConfig().getLastOpenProject1())); if ( ! model.getConfig().getGuiHiddenConfig().getLastOpenProject2().equals("") ) lastOpenProject2 = new JMenuItem (makeLastProjectName(model.getConfig().getGuiHiddenConfig().getLastOpenProject2())); if ( ! model.getConfig().getGuiHiddenConfig().getLastOpenProject3().equals("") ) lastOpenProject3 = new JMenuItem (makeLastProjectName(model.getConfig().getGuiHiddenConfig().getLastOpenProject3())); if ( ! model.getConfig().getGuiHiddenConfig().getLastOpenProject4().equals("") ) lastOpenProject4 = new JMenuItem (makeLastProjectName(model.getConfig().getGuiHiddenConfig().getLastOpenProject4())); file.add (fileNew); fileNew.add(fileNewProject); if ( lastOpenProject1 != null || lastOpenProject2 != null || lastOpenProject3 != null || lastOpenProject4 != null ) file.addSeparator(); if ( lastOpenProject1 != null ) { lastOpenProject1.setActionCommand("lastOpenProject1"); lastOpenProject1.addActionListener(fileMenuListener); lastOpenProject1.setAccelerator(KeyStroke.getKeyStroke('L', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); file.add(lastOpenProject1); } if ( lastOpenProject2 != null ) { lastOpenProject2.setActionCommand("lastOpenProject2"); lastOpenProject2.addActionListener(fileMenuListener); file.add(lastOpenProject2); } if ( lastOpenProject3 != null ) { lastOpenProject3.setActionCommand("lastOpenProject3"); lastOpenProject3.addActionListener(fileMenuListener); file.add(lastOpenProject3); } if ( lastOpenProject4 != null ) { lastOpenProject4.setActionCommand("lastOpenProject4"); lastOpenProject4.addActionListener(fileMenuListener); file.add(lastOpenProject4); } file.addSeparator(); file.add (fileExit); fileExit.addActionListener(fileMenuListener); fileNewProject.addActionListener(fileMenuListener); } //------------------------------------------------------------------------- public String makeLastProjectName(String name) { int pos = name.lastIndexOf(System.getProperty("file.separator")); String ret = name.substring(pos + 1, name.length()); String aux = name; if ( (30 - ret.length()) < name.length() && (30 - ret.length()) > 1 ) aux = name.substring(0, (30 - ret.length())).concat("... "); ret = ret.concat(" [" + aux + "]"); if ( ret.length() > 50 ) return ret.substring(0, 50); return ret; } //------------------------------------------------------------------------- }