package com.baselet.plugin.gui; import java.util.Collection; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.part.EditorActionBarContributor; import com.baselet.control.constants.MenuConstants; import com.baselet.control.enums.Program; import com.baselet.element.interfaces.GridElement; import com.baselet.gui.CurrentGui; import com.baselet.plugin.gui.EclipseGUI.Pane; public class Contributor extends EditorActionBarContributor { public enum ActionName { COPY, CUT, PASTE, SELECTALL } private final MenuFactoryEclipse menuFactory = MenuFactoryEclipse.getInstance(); private IAction customnew; private IAction customedit; private IAction undoActionGlobal; private IAction redoActionGlobal; private IAction printActionGlobal; private IAction copyActionDiagram; private IAction cutActionDiagram; private IAction pasteActionDiagram; private IAction deleteActionDiagram; private IAction selectallActionDiagram; private IAction searchActionDiagram; private IAction copyActionPropPanel; private IAction cutActionPropPanel; private IAction pasteActionPropPanel; private IAction selectAllActionPropPanel; private IAction copyActionCustomPanel; private IAction cutActionCustomPanel; private IAction pasteActionCustomPanel; private IAction selectAllActionCustomPanel; private List<IAction> exportAsActionList; private boolean customPanelEnabled; private boolean custom_element_selected; private IMenuManager zoomMenu; public Contributor() { customPanelEnabled = false; custom_element_selected = false; } private Action createPanelAction(final Pane pane, final ActionName action) { Action copyActionPropPanel = new Action() { @Override public void run() { ((EclipseGUI) CurrentGui.getInstance().getGui()).panelDoAction(pane, action); } }; return copyActionPropPanel; } @Override public void init(IActionBars actionBars) { super.init(actionBars); customedit = menuFactory.createEditSelected(); customedit.setEnabled(false); undoActionGlobal = menuFactory.createUndo(); redoActionGlobal = menuFactory.createRedo(); printActionGlobal = menuFactory.createPrint(); cutActionDiagram = menuFactory.createCut(); cutActionDiagram.setEnabled(false); pasteActionDiagram = menuFactory.createPaste(); pasteActionDiagram.setEnabled(false); deleteActionDiagram = menuFactory.createDelete(); deleteActionDiagram.setEnabled(false); searchActionDiagram = menuFactory.createSearch(); copyActionDiagram = menuFactory.createCopy(); selectallActionDiagram = menuFactory.createSelectAll(); copyActionCustomPanel = createPanelAction(Pane.CUSTOMCODE, ActionName.COPY); cutActionCustomPanel = createPanelAction(Pane.CUSTOMCODE, ActionName.CUT); pasteActionCustomPanel = createPanelAction(Pane.CUSTOMCODE, ActionName.PASTE); selectAllActionCustomPanel = createPanelAction(Pane.CUSTOMCODE, ActionName.SELECTALL); copyActionPropPanel = createPanelAction(Pane.PROPERTY, ActionName.COPY); cutActionPropPanel = createPanelAction(Pane.PROPERTY, ActionName.CUT); pasteActionPropPanel = createPanelAction(Pane.PROPERTY, ActionName.PASTE); selectAllActionPropPanel = createPanelAction(Pane.PROPERTY, ActionName.SELECTALL); setGlobalActionHandlers(Pane.DIAGRAM); } @Override public void contributeToMenu(IMenuManager manager) { ((EclipseGUI) CurrentGui.getInstance().getGui()).setContributor(this); IMenuManager menu = new MenuManager(Program.getInstance().getProgramName().toString()); IMenuManager custom = new MenuManager(MenuConstants.CUSTOM_ELEMENTS); IMenuManager help = new MenuManager(MenuConstants.HELP); manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, menu); custom.add(customnew = menuFactory.createNewCustomElement()); custom.add(menuFactory.createNewCustomElementFromTemplate(this)); custom.add(new Separator()); custom.add(menuFactory.createCustomElementsTutorial()); help.add(menuFactory.createOnlineHelp()); help.add(menuFactory.createOnlineSampleDiagrams()); help.add(menuFactory.createVideoTutorial()); help.add(new Separator()); help.add(menuFactory.createProgramHomepage()); help.add(menuFactory.createRateProgram()); help.add(new Separator()); help.add(menuFactory.createAboutProgram()); menu.add(menuFactory.createGenerate()); menu.add(menuFactory.createGenerateOptions()); zoomMenu = menuFactory.createZoom(); menu.add(zoomMenu); exportAsActionList = menuFactory.createExportAsActions(); IMenuManager export = new MenuManager("Export as"); for (IAction action : exportAsActionList) { export.add(action); } menu.add(export); menu.add(menuFactory.createEditCurrentPalette()); menu.add(custom); menu.add(menuFactory.createMailTo()); menu.add(new Separator()); menu.add(help); menu.add(menuFactory.createOptions()); } public void setExportAsEnabled(boolean enabled) { // AB: We cannot disable the MenuManager, so we have to disable every entry in the export menu :P for (IAction action : exportAsActionList) { action.setEnabled(enabled); } } public void setPaste(boolean value) { pasteActionDiagram.setEnabled(value); } public void setCustomElementSelected(boolean selected) { custom_element_selected = selected; customedit.setEnabled(selected && !customPanelEnabled); } public void setElementsSelected(Collection<GridElement> selectedElements) { if (selectedElements.isEmpty()) { deleteActionDiagram.setEnabled(false); cutActionDiagram.setEnabled(false); } else { cutActionDiagram.setEnabled(true); deleteActionDiagram.setEnabled(true); } } public boolean isCustomPanelEnabled() { return customPanelEnabled; } public void setCustomPanelEnabled(boolean enable) { customPanelEnabled = enable; customedit.setEnabled(!enable && custom_element_selected); customnew.setEnabled(!enable); searchActionDiagram.setEnabled(!enable); } public void setGlobalActionHandlers(Pane focusedPane) { // Global actions which are always the same getActionBars().setGlobalActionHandler(ActionFactory.UNDO.getId(), undoActionGlobal); getActionBars().setGlobalActionHandler(ActionFactory.REDO.getId(), redoActionGlobal); getActionBars().setGlobalActionHandler(ActionFactory.PRINT.getId(), printActionGlobal); // Specific actions depending on the active pane} if (focusedPane == Pane.DIAGRAM) { getActionBars().setGlobalActionHandler(ActionFactory.COPY.getId(), copyActionDiagram); getActionBars().setGlobalActionHandler(ActionFactory.CUT.getId(), cutActionDiagram); getActionBars().setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteActionDiagram); getActionBars().setGlobalActionHandler(ActionFactory.DELETE.getId(), deleteActionDiagram); getActionBars().setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), selectallActionDiagram); getActionBars().setGlobalActionHandler(ActionFactory.FIND.getId(), searchActionDiagram); } else if (focusedPane == Pane.CUSTOMCODE) { getActionBars().setGlobalActionHandler(ActionFactory.COPY.getId(), copyActionCustomPanel); getActionBars().setGlobalActionHandler(ActionFactory.CUT.getId(), cutActionCustomPanel); getActionBars().setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteActionCustomPanel); getActionBars().setGlobalActionHandler(ActionFactory.DELETE.getId(), null); getActionBars().setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), selectAllActionCustomPanel); getActionBars().setGlobalActionHandler(ActionFactory.FIND.getId(), null); } else if (focusedPane == Pane.PROPERTY) { getActionBars().setGlobalActionHandler(ActionFactory.COPY.getId(), copyActionPropPanel); getActionBars().setGlobalActionHandler(ActionFactory.CUT.getId(), cutActionPropPanel); getActionBars().setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteActionPropPanel); getActionBars().setGlobalActionHandler(ActionFactory.DELETE.getId(), null); getActionBars().setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), selectAllActionPropPanel); getActionBars().setGlobalActionHandler(ActionFactory.FIND.getId(), null); } Display.getDefault().asyncExec(new Runnable() { @Override public void run() { getActionBars().updateActionBars(); } }); } public void updateZoomMenuRadioButton(int newGridSize) { for (IContributionItem item : zoomMenu.getItems()) { IAction action = ((ActionContributionItem) item).getAction(); int actionGridSize = Integer.parseInt(action.getText().substring(0, action.getText().length() - 2)); if (actionGridSize == newGridSize) { action.setChecked(true); } else { action.setChecked(false); } } } }