/******************************************************************************* * Copyright (c) 2012 Pivotal Software, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Pivotal Software, Inc. - initial API and implementation *******************************************************************************/ package org.springsource.ide.eclipse.dashboard.internal.ui.editors; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ICoolBarManager; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.SubActionBars; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.internal.WorkbenchImages; import org.eclipse.ui.internal.WorkbenchMessages; import org.eclipse.ui.part.MultiPageEditorActionBarContributor; import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds; /** * @author Wesley Coelho * @author Steffen Pingel * @author Leo Dos Santos * @author Christian Dupuis */ public class StsTaskEditorActionContributor extends MultiPageEditorActionBarContributor implements ISelectionChangedListener { private class GlobalAction extends Action { private final String actionId; public GlobalAction(String actionId) { this.actionId = actionId; } @Override public void run() { if (getEditor().getActivePageInstance() instanceof AbstractFormPage) { AbstractFormPage page = (AbstractFormPage) getEditor().getActivePageInstance(); page.doAction(actionId); updateSelectableActions(getEditorSelection()); } } public void selectionChanged(ISelection selection) { if (getEditor().getActivePageInstance() instanceof AbstractFormPage) { AbstractFormPage page = (AbstractFormPage) getEditor().getActivePageInstance(); setEnabled(page.canPerformAction(actionId)); } } } private SubActionBars sourceActionBars; private FormEditor editor; private final GlobalAction cutAction; private final GlobalAction undoAction; private final GlobalAction redoAction; private final GlobalAction copyAction; private final GlobalAction pasteAction; private final GlobalAction selectAllAction; public StsTaskEditorActionContributor() { cutAction = new GlobalAction(ActionFactory.CUT.getId()); cutAction.setText(WorkbenchMessages.Workbench_cut); cutAction.setToolTipText(WorkbenchMessages.Workbench_cutToolTip); cutAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_CUT)); cutAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_CUT)); cutAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED)); cutAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.CUT); pasteAction = new GlobalAction(ActionFactory.PASTE.getId()); pasteAction.setText(WorkbenchMessages.Workbench_paste); pasteAction.setToolTipText(WorkbenchMessages.Workbench_pasteToolTip); pasteAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE)); pasteAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE)); pasteAction.setDisabledImageDescriptor(WorkbenchImages .getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED)); pasteAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.PASTE); copyAction = new GlobalAction(ActionFactory.COPY.getId()); copyAction.setText(WorkbenchMessages.Workbench_copy); copyAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_COPY)); copyAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_COPY)); copyAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED)); copyAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.COPY); undoAction = new GlobalAction(ActionFactory.UNDO.getId()); undoAction.setText(WorkbenchMessages.Workbench_undo); undoAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO)); undoAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO)); undoAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO_DISABLED)); undoAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.UNDO); redoAction = new GlobalAction(ActionFactory.REDO.getId()); redoAction.setText(WorkbenchMessages.Workbench_redo); redoAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_REDO)); redoAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_REDO)); redoAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_REDO_DISABLED)); redoAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.REDO); selectAllAction = new GlobalAction(ActionFactory.SELECT_ALL.getId()); selectAllAction.setText(WorkbenchMessages.Workbench_selectAll); selectAllAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.SELECT_ALL); selectAllAction.setEnabled(true); } public void addClipboardActions(IMenuManager manager) { manager.add(undoAction); manager.add(redoAction); manager.add(new Separator()); manager.add(cutAction); manager.add(copyAction); manager.add(pasteAction); manager.add(selectAllAction); manager.add(new Separator()); } public void contextMenuAboutToShow(IMenuManager mng) { boolean addClipboard = this.getEditor().getActivePageInstance() != null && (this.getEditor().getActivePageInstance() instanceof AbstractFormPage); contextMenuAboutToShow(mng, addClipboard); } public void contextMenuAboutToShow(IMenuManager manager, boolean addClipboard) { if (editor != null) { updateSelectableActions(getEditorSelection()); } if (addClipboard) { addClipboardActions(manager); } } @Override public void contributeToCoolBar(ICoolBarManager cbm) { } @Override public void contributeToMenu(IMenuManager mm) { } @Override public void contributeToStatusLine(IStatusLineManager slm) { } @Override public void contributeToToolBar(IToolBarManager tbm) { } @Override public void dispose() { sourceActionBars.dispose(); super.dispose(); } public void forceActionsEnabled() { cutAction.setEnabled(true); copyAction.setEnabled(true); pasteAction.setEnabled(true); selectAllAction.setEnabled(true); undoAction.setEnabled(false); redoAction.setEnabled(false); } public FormEditor getEditor() { return editor; } public ISelection getEditorSelection() { if (editor != null && editor.getSite().getSelectionProvider() != null) { return editor.getSite().getSelectionProvider().getSelection(); } else { return StructuredSelection.EMPTY; } } public IStatusLineManager getStatusLineManager() { return getActionBars().getStatusLineManager(); } @Override public void init(IActionBars bars) { super.init(bars); sourceActionBars = new SubActionBars(bars); } @Override public void init(IActionBars bars, IWorkbenchPage page) { super.init(bars, page); registerGlobalHandlers(bars); } public void registerGlobalHandlers(IActionBars bars) { bars.setGlobalActionHandler(ActionFactory.CUT.getId(), cutAction); bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteAction); bars.setGlobalActionHandler(ActionFactory.COPY.getId(), copyAction); bars.setGlobalActionHandler(ActionFactory.UNDO.getId(), undoAction); bars.setGlobalActionHandler(ActionFactory.REDO.getId(), redoAction); bars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), selectAllAction); bars.updateActionBars(); } public void selectionChanged(SelectionChangedEvent event) { updateSelectableActions(event.getSelection()); } @Override public void setActiveEditor(IEditorPart targetEditor) { if (targetEditor instanceof FormEditor) { editor = (FormEditor) targetEditor; updateSelectableActions(getEditorSelection()); } } @Override public void setActivePage(IEditorPart newEditor) { if (getEditor() != null) { updateSelectableActions(getEditorSelection()); } } public void unregisterGlobalHandlers(IActionBars bars) { bars.setGlobalActionHandler(ActionFactory.CUT.getId(), null); bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), null); bars.setGlobalActionHandler(ActionFactory.COPY.getId(), null); bars.setGlobalActionHandler(ActionFactory.UNDO.getId(), null); bars.setGlobalActionHandler(ActionFactory.REDO.getId(), null); bars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), null); bars.updateActionBars(); } public void updateSelectableActions(ISelection selection) { if (editor != null) { cutAction.selectionChanged(selection); copyAction.selectionChanged(selection); pasteAction.selectionChanged(selection); undoAction.selectionChanged(selection); redoAction.selectionChanged(selection); selectAllAction.selectionChanged(selection); } } }