/* * Copyright (C) 2006 IsmAvatar <IsmAvatar@gmail.com> * Copyright (C) 2007 Quadduc <quadduc@gmail.com> * * This file is part of LateralGM. * LateralGM is free software and comes with ABSOLUTELY NO WARRANTY. * See LICENSE for details. */ package org.lateralgm.components; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io.File; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JSeparator; import org.lateralgm.main.LGM; import org.lateralgm.main.PrefsStore; import org.lateralgm.main.Util; import org.lateralgm.messages.Messages; public class GmMenuBar extends JMenuBar { private static final long serialVersionUID = 1L; private JMenuItem[] recentFiles = new JMenuItem[0]; private int recentFilesPos; private GmMenu fileMenu; public static final void setTextAndAlt(JMenuItem item, String input) { Matcher m = Pattern.compile("\t+([^\\s])$").matcher(input); //$NON-NLS-1$ if (m.find()) { int alt = m.group(1).toUpperCase(Locale.ENGLISH).charAt(0); item.setMnemonic(alt); item.setText(input.substring(0,m.start())); } else { item.setMnemonic(-1); item.setText(input); } } public void updateRecentFiles() { String[] recentList = PrefsStore.getRecentFiles().toArray(new String[0]); for (JMenuItem item : recentFiles) { fileMenu.remove(item); } recentFiles = new JMenuItem[recentList.length]; for (int i = 0; i < recentFiles.length; i++) { File file = new File(recentList[i]).getAbsoluteFile(); String number = Integer.toString(i + 1); JMenuItem item = new JMenuItem(String.format("%s %s [%s]",number,file.getName(), file.getParent()),number.codePointAt(0)); recentFiles[i] = item; item.setActionCommand("GmMenuBar.OPEN " + Util.urlEncode(file.toString())); //$NON-NLS-1$ item.addActionListener(LGM.listener); fileMenu.insert(item,recentFilesPos + i); } } public GmMenuBar() { GmMenu menu = new GmMenu(Messages.getString("GmMenuBar.MENU_FILE")); //$NON-NLS-1$ fileMenu = menu; add(menu); menu.addItem("GmMenuBar.NEW",KeyEvent.VK_N,InputEvent.CTRL_DOWN_MASK); //$NON-NLS-1$ menu.addItem("GmMenuBar.OPEN",KeyEvent.VK_O,InputEvent.CTRL_DOWN_MASK); //$NON-NLS-1$ menu.addItem("GmMenuBar.SAVE",KeyEvent.VK_S,InputEvent.CTRL_DOWN_MASK); //$NON-NLS-1$ menu.addItem("GmMenuBar.SAVEAS"); //$NON-NLS-1$ menu.add(new JSeparator()); // JCheckBoxMenuItem check = new JCheckBoxMenuItem(); // setTextAndAlt(check,Messages.getString("GmMenuBar.ADVANCED")); //$NON-NLS-1$ // menu.add(check); // menu.addItem("GmMenuBar.PREFERENCES"); //$NON-NLS-1$ // menu.add(new JSeparator()); recentFilesPos = menu.getMenuComponentCount(); menu.add(new JSeparator()); menu.addItem("GmMenuBar.EXIT",KeyEvent.VK_F4,InputEvent.ALT_DOWN_MASK); //$NON-NLS-1$ updateRecentFiles(); menu = new GmMenu(Messages.getString("GmMenuBar.MENU_EDIT")); //$NON-NLS-1$ add(menu); GmMenu sub = new GmMenu(Messages.getString("GmMenuBar.MENU_INSERT")); //$NON-NLS-1$ menu.add(sub); sub.addItem("GmMenuBar.INSERT_GROUP"); //$NON-NLS-1$ sub.add(new JSeparator()); sub.addItem("GmMenuBar.INSERT_SPRITE"); //$NON-NLS-1$ sub.addItem("GmMenuBar.INSERT_SOUND"); //$NON-NLS-1$ sub.addItem("GmMenuBar.INSERT_BACKGROUND"); //$NON-NLS-1$ sub.addItem("GmMenuBar.INSERT_PATH"); //$NON-NLS-1$ sub.addItem("GmMenuBar.INSERT_SCRIPT"); //$NON-NLS-1$ sub.addItem("GmMenuBar.INSERT_FONT"); //$NON-NLS-1$ sub.addItem("GmMenuBar.INSERT_TIMELINE"); //$NON-NLS-1$ sub.addItem("GmMenuBar.INSERT_OBJECT"); //$NON-NLS-1$ sub.addItem("GmMenuBar.INSERT_ROOM"); //$NON-NLS-1$ sub = new GmMenu(Messages.getString("GmMenuBar.MENU_ADD")); //$NON-NLS-1$ menu.add(sub); sub.addItem("GmMenuBar.ADD_GROUP"); //$NON-NLS-1$ sub.add(new JSeparator()); sub.addItem("GmMenuBar.ADD_SPRITE"); //$NON-NLS-1$ sub.addItem("GmMenuBar.ADD_SOUND"); //$NON-NLS-1$ sub.addItem("GmMenuBar.ADD_BACKGROUND"); //$NON-NLS-1$ sub.addItem("GmMenuBar.ADD_PATH"); //$NON-NLS-1$ sub.addItem("GmMenuBar.ADD_SCRIPT"); //$NON-NLS-1$ sub.addItem("GmMenuBar.ADD_FONT"); //$NON-NLS-1$ sub.addItem("GmMenuBar.ADD_TIMELINE"); //$NON-NLS-1$ sub.addItem("GmMenuBar.ADD_OBJECT"); //$NON-NLS-1$ sub.addItem("GmMenuBar.ADD_ROOM"); //$NON-NLS-1$ menu.add(new JSeparator()); menu.addItem("GmMenuBar.RENAME",KeyEvent.VK_F2,0); //$NON-NLS-1$ menu.addItem("GmMenuBar.DELETE",KeyEvent.VK_DELETE,InputEvent.SHIFT_DOWN_MASK); //$NON-NLS-1$ menu.addItem("GmMenuBar.DUPLICATE",KeyEvent.VK_INSERT,InputEvent.ALT_DOWN_MASK); //$NON-NLS-1$ menu.add(new JSeparator()); menu.addItem("GmMenuBar.PROPERTIES",KeyEvent.VK_ENTER,InputEvent.ALT_DOWN_MASK); //$NON-NLS-1$ menu = new GmMenu(Messages.getString("GmMenuBar.MENU_RESOURCES")); //$NON-NLS-1$ add(menu); menu.addItem("GmMenuBar.DEFRAGIDS"); //$NON-NLS-1$ menu.addItem("GmMenuBar.VERIFYNAMES"); //$NON-NLS-1$ menu.addItem("GmMenuBar.SYNTAXCHECK"); //$NON-NLS-1$ menu.add(new JSeparator()); menu.addItem("GmMenuBar.FIND", //$NON-NLS-1$ KeyEvent.VK_F,InputEvent.ALT_DOWN_MASK + InputEvent.CTRL_DOWN_MASK); menu.addItem("GmMenuBar.ANNOTATE"); //$NON-NLS-1$ menu.add(new JSeparator()); menu.addItem("GmMenuBar.EXPAND"); //$NON-NLS-1$ menu.addItem("GmMenuBar.COLLAPSE"); //$NON-NLS-1$ add(LGM.mdi.getMenu()); menu = new GmMenu(Messages.getString("GmMenuBar.MENU_HELP")); //$NON-NLS-1$ add(menu); menu.addItem("GmMenuBar.MANUAL",KeyEvent.VK_F1,0); //$NON-NLS-1$ menu.addItem("GmMenuBar.ABOUT"); //$NON-NLS-1$ } }