package com.baselet.plugin.gui; import static com.baselet.control.constants.MenuConstants.ABOUT_PROGRAM; import static com.baselet.control.constants.MenuConstants.COPY; import static com.baselet.control.constants.MenuConstants.CUSTOM_ELEMENTS_TUTORIAL; import static com.baselet.control.constants.MenuConstants.CUT; import static com.baselet.control.constants.MenuConstants.DELETE; import static com.baselet.control.constants.MenuConstants.EDIT_CURRENT_PALETTE; import static com.baselet.control.constants.MenuConstants.EDIT_SELECTED; import static com.baselet.control.constants.MenuConstants.EXPORT_AS; import static com.baselet.control.constants.MenuConstants.GENERATE_CLASS; import static com.baselet.control.constants.MenuConstants.GENERATE_CLASS_OPTIONS; import static com.baselet.control.constants.MenuConstants.MAIL_TO; import static com.baselet.control.constants.MenuConstants.NEW_CE; import static com.baselet.control.constants.MenuConstants.NEW_FROM_TEMPLATE; import static com.baselet.control.constants.MenuConstants.ONLINE_HELP; import static com.baselet.control.constants.MenuConstants.ONLINE_SAMPLE_DIAGRAMS; import static com.baselet.control.constants.MenuConstants.OPTIONS; import static com.baselet.control.constants.MenuConstants.PASTE; import static com.baselet.control.constants.MenuConstants.PRINT; import static com.baselet.control.constants.MenuConstants.PROGRAM_HOMEPAGE; import static com.baselet.control.constants.MenuConstants.RATE_PROGRAM; import static com.baselet.control.constants.MenuConstants.REDO; import static com.baselet.control.constants.MenuConstants.SEARCH; import static com.baselet.control.constants.MenuConstants.SELECT_ALL; import static com.baselet.control.constants.MenuConstants.UNDO; import static com.baselet.control.constants.MenuConstants.VIDEO_TUTORIAL; import static com.baselet.control.constants.MenuConstants.ZOOM; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.SwingUtilities; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.baselet.control.Main; import com.baselet.control.constants.Constants; import com.baselet.diagram.CurrentDiagram; import com.baselet.diagram.DiagramHandler; import com.baselet.gui.CurrentGui; import com.baselet.gui.menu.MenuFactory; public class MenuFactoryEclipse extends MenuFactory { private static final Logger log = LoggerFactory.getLogger(MenuFactoryEclipse.class); private static MenuFactoryEclipse instance = null; public static MenuFactoryEclipse getInstance() { if (instance == null) { instance = new MenuFactoryEclipse(); } return instance; } @Override public void doAction(final String menuItem, final Object param) { log.info("doAction " + menuItem); DiagramHandler actualHandler = CurrentDiagram.getInstance().getDiagramHandler(); // Edit Palette cannot be put in a separate invokeLater thread, or otherwise getActivePage() will be null! if (menuItem.equals(EDIT_CURRENT_PALETTE)) { String paletteName = Main.getInstance().getPalette().getFileHandler().getFullPathName(); IFileStore fileStore = EFS.getLocalFileSystem().getStore(new File(paletteName).toURI()); if (!fileStore.fetchInfo().isDirectory() && fileStore.fetchInfo().exists()) { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { IDE.openEditorOnFileStore(page, fileStore); } catch (PartInitException e) { log.error("Cannot open palette file", e); } } } else if (menuItem.equals(SEARCH)) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { CurrentGui.getInstance().getGui().enableSearch(true); } }); } else if (menuItem.equals(ZOOM) && actualHandler != null) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { CurrentDiagram.getInstance().getDiagramHandler().setGridAndZoom((Integer) param); } }); } // If the action is not overwritten, it is part of the default actions else { log.debug("super.doAction"); super.doAction(menuItem, param); log.debug("super.doAction complete"); } log.debug("doAction complete"); } public Action createOptions() { return createAction(OPTIONS, null); } public Action createOnlineHelp() { return createAction(ONLINE_HELP, null); } public Action createOnlineSampleDiagrams() { return createAction(ONLINE_SAMPLE_DIAGRAMS, null); } public Action createVideoTutorial() { return createAction(VIDEO_TUTORIAL, null); } public Action createProgramHomepage() { return createAction(PROGRAM_HOMEPAGE, null); } public Action createMailTo() { return createAction(MAIL_TO, null); } public Action createRateProgram() { return createAction(RATE_PROGRAM, null); } public Action createAboutProgram() { return createAction(ABOUT_PROGRAM, null); } public Action createNewCustomElement() { return createAction(NEW_CE, null); } public Action createCustomElementsTutorial() { return createAction(CUSTOM_ELEMENTS_TUTORIAL, null); } public Action createUndo() { return createAction(UNDO, null); } public Action createRedo() { return createAction(REDO, null); } public Action createPrint() { return createAction(PRINT, null); } public Action createCopy() { return createAction(COPY, null); } public Action createCut() { return createAction(CUT, null); } public Action createPaste() { return createAction(PASTE, null); } public Action createDelete() { return createAction(DELETE, null); } public Action createSelectAll() { return createAction(SELECT_ALL, null); } public Action createSearch() { return createAction(SEARCH, null); } public Action createEditSelected() { return createAction(EDIT_SELECTED, null); } public Action createEditCurrentPalette() { return createAction(EDIT_CURRENT_PALETTE, null); } public List<IAction> createExportAsActions() { List<IAction> actions = new ArrayList<IAction>(); for (final String format : Constants.exportFormatList) { actions.add(createAction(format.toUpperCase() + "...", EXPORT_AS, format)); } return actions; } public IAction createGenerate() { return createAction(GENERATE_CLASS, null); } public IAction createGenerateOptions() { return createAction(GENERATE_CLASS_OPTIONS, null); } public IMenuManager createZoom() { final IMenuManager zoom = new MenuManager(ZOOM); for (String z : Constants.zoomValueList) { zoom.add(createAction(z, ZOOM, Integer.parseInt(z.substring(0, z.length() - 2)), IAction.AS_RADIO_BUTTON)); } return zoom; } private final List<Action> aList = new ArrayList<Action>(); public IMenuManager createNewCustomElementFromTemplate(final Contributor con) { IMenuManager menu = new MenuManager(NEW_FROM_TEMPLATE); for (String template : Main.getInstance().getTemplateNames()) { Action a = createAction(template, NEW_FROM_TEMPLATE, template); menu.add(a); aList.add(a); } menu.addMenuListener(new IMenuListener() { @Override public void menuAboutToShow(IMenuManager manager) { for (Action a : aList) { a.setEnabled(!con.isCustomPanelEnabled()); } } }); return menu; } private Action createAction(final String name, final String param) { return createAction(name, name, param); } private Action createAction(final String menuName, final String actionName, final Object param) { return createAction(menuName, actionName, param, IAction.AS_UNSPECIFIED); } private Action createAction(final String menuName, final String actionName, final Object param, int style) { return new Action(menuName, style) { @Override public void run() { doAction(actionName, param); } }; } }