X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.ui%2Fsrc%2Forg%2Fsimantics%2Fui%2Fworkbench%2FResourceEditorActionContributor.java;fp=bundles%2Forg.simantics.ui%2Fsrc%2Forg%2Fsimantics%2Fui%2Fworkbench%2FResourceEditorActionContributor.java;h=1c864a58def4befae6bfbaba5879545c32a42a84;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/workbench/ResourceEditorActionContributor.java b/bundles/org.simantics.ui/src/org/simantics/ui/workbench/ResourceEditorActionContributor.java new file mode 100644 index 000000000..1c864a58d --- /dev/null +++ b/bundles/org.simantics.ui/src/org/simantics/ui/workbench/ResourceEditorActionContributor.java @@ -0,0 +1,308 @@ +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * 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: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.ui.workbench; + + +import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.action.IContributionManager; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IStatusLineManager; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.part.EditorActionBarContributor; + + + + + +/** + * Manages the installation and removal of global actions for + * the same type of editors. + *
+ * If instantiated and used as-is, this contributor connects to all of the workbench defined + * global editor actions the corresponding actions of the current editor. It also adds addition + * actions for searching and navigation (go to line) as well as a set of status fields.
+ *+ * Subclasses may override the following methods: + *
contributeToMenu
- extend to contribute to menucontributeToToolBar
- reimplement to contribute to tool barcontributeToStatusLine
- reimplement to contribute to status linesetActiveEditor
- extend to react to editor changesinit
method.
+ *
+ * @see org.eclipse.ui.IEditorActionBarContributor#init(org.eclipse.ui.IActionBars, org.eclipse.ui.IWorkbenchPage)
+ */
+ public ResourceEditorActionContributor() {
+
+// fFindNext= new RetargetTextEditorAction(EditorMessages.getBundleForConstructedKeys(), "Editor.FindNext."); //$NON-NLS-1$
+// fFindNext.setActionDefinitionId(IWorkbenchActionDefinitionIds.FIND_NEXT);
+// fFindPrevious= new RetargetTextEditorAction(EditorMessages.getBundleForConstructedKeys(), "Editor.FindPrevious."); //$NON-NLS-1$
+// fFindPrevious.setActionDefinitionId(IWorkbenchActionDefinitionIds.FIND_PREVIOUS);
+// fIncrementalFind= new RetargetTextEditorAction(EditorMessages.getBundleForConstructedKeys(), "Editor.FindIncremental."); //$NON-NLS-1$
+// fIncrementalFind.setActionDefinitionId(IWorkbenchActionDefinitionIds.FIND_INCREMENTAL);
+// fIncrementalFindReverse= new RetargetTextEditorAction(EditorMessages.getBundleForConstructedKeys(), "Editor.FindIncrementalReverse."); //$NON-NLS-1$
+// fIncrementalFindReverse.setActionDefinitionId(IWorkbenchActionDefinitionIds.FIND_INCREMENTAL_REVERSE);
+// fGotoLine= new RetargetTextEditorAction(EditorMessages.getBundleForConstructedKeys(), "Editor.GotoLine."); //$NON-NLS-1$
+// fGotoLine.setActionDefinitionId(ITextEditorActionDefinitionIds.LINE_GOTO);
+// fHippieCompletion= new RetargetTextEditorAction(EditorMessages.getBundleForConstructedKeys(), "Editor.HippieCompletion."); //$NON-NLS-1$
+// fHippieCompletion.setActionDefinitionId(ITextEditorActionDefinitionIds.HIPPIE_COMPLETION);
+
+// fStatusFields= new HashMap(3);
+// for (int i= 0; i < STATUS_FIELD_DEFS.length; i++) {
+// StatusFieldDef fieldDef= STATUS_FIELD_DEFS[i];
+// fStatusFields.put(fieldDef, new StatusLineContributionItem(fieldDef.category, fieldDef.visible, fieldDef.widthInChars));
+// }
+ }
+
+ /**
+ * Returns the active editor part.
+ *
+ * @return the active editor part
+ */
+ protected final IEditorPart getActiveEditorPart() {
+ return activeEditorPart;
+ }
+
+ /**
+ * Returns the action registered with the given text editor.
+ *
+ * @param editor the editor, or null
+ * @param actionId the action id
+ * @return the action, or null
if none
+ */
+ protected final IAction getAction(IResourceEditorPart editor, String actionId) {
+ return null;
+// return (editor == null || actionId == null ? null : editor.getAction(actionId));
+ }
+
+ /**
+ * The method installs the global action handlers for the given text editor.
+ * + * This method cannot be overridden by subclasses.
+ * + * @param part the active editor part + * @since 2.0 + */ + private void doSetActiveEditor(IEditorPart part) { + + if (activeEditorPart == part) + return; + +// if (fActiveEditorPart instanceof ITextEditorExtension) { +// ITextEditorExtension extension= (ITextEditorExtension) fActiveEditorPart; +// for (int i= 0; i < STATUS_FIELD_DEFS.length; i++) +// extension.setStatusField(null, STATUS_FIELD_DEFS[i].category); +// } + + activeEditorPart= part; + IResourceEditorPart editor = (part instanceof IResourceEditorPart) ? (IResourceEditorPart) part : null; + + IActionBars actionBars= getActionBars(); + for (int i= 0; i < ACTIONS.length; i++) + actionBars.setGlobalActionHandler(ACTIONS[i], getAction(editor, ACTIONS[i])); + +// fFindNext.setAction(getAction(editor, ITextEditorActionConstants.FIND_NEXT)); +// fFindPrevious.setAction(getAction(editor, ITextEditorActionConstants.FIND_PREVIOUS)); +// fIncrementalFind.setAction(getAction(editor, ITextEditorActionConstants.FIND_INCREMENTAL)); +// fIncrementalFindReverse.setAction(getAction(editor, ITextEditorActionConstants.FIND_INCREMENTAL_REVERSE)); +// fGotoLine.setAction(getAction(editor, ITextEditorActionConstants.GOTO_LINE)); +// fHippieCompletion.setAction(getAction(editor, ITextEditorActionConstants.HIPPIE_COMPLETION)); +// +// for (int i= 0; i < STATUS_FIELD_DEFS.length; i++) { +// if (fActiveEditorPart instanceof ITextEditorExtension) { +// StatusLineContributionItem statusField= (StatusLineContributionItem) fStatusFields.get(STATUS_FIELD_DEFS[i]); +// statusField.setActionHandler(getAction(editor, STATUS_FIELD_DEFS[i].actionId)); +// ITextEditorExtension extension= (ITextEditorExtension) fActiveEditorPart; +// extension.setStatusField(statusField, STATUS_FIELD_DEFS[i].category); +// } +// } + } + + /** + * TheBasicTextEditorActionContributor
implementation of this
+ * IEditorActionBarContributor
method installs the global
+ * action handler for the given text editor by calling a private helper
+ * method.
+ * + * Subclasses may extend.
+ * + * @param part {@inheritDoc} + */ + public void setActiveEditor(IEditorPart part) { + doSetActiveEditor(part); + } + + /* + * @see EditorActionBarContributor#contributeToMenu(IMenuManager) + */ + public void contributeToMenu(IMenuManager menu) { + +// IMenuManager editMenu= menu.findMenuUsingPath(IWorkbenchActionConstants.M_EDIT); +// if (editMenu != null) { +// editMenu.prependToGroup(IWorkbenchActionConstants.FIND_EXT, fIncrementalFindReverse); +// editMenu.prependToGroup(IWorkbenchActionConstants.FIND_EXT, fIncrementalFind); +// editMenu.prependToGroup(IWorkbenchActionConstants.FIND_EXT, fFindPrevious); +// editMenu.prependToGroup(IWorkbenchActionConstants.FIND_EXT, fFindNext); +// +// addOrInsert(editMenu, new Separator(ITextEditorActionConstants.GROUP_OPEN)); +// addOrInsert(editMenu, new Separator(ITextEditorActionConstants.GROUP_INFORMATION)); +// addOrInsert(editMenu, new Separator(ITextEditorActionConstants.GROUP_ASSIST)); +// addOrInsert(editMenu, new Separator(ITextEditorActionConstants.GROUP_GENERATE)); +// addOrInsert(editMenu, new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); +// +// editMenu.appendToGroup(ITextEditorActionConstants.GROUP_ASSIST, fHippieCompletion); +// } +// +// IMenuManager navigateMenu= menu.findMenuUsingPath(IWorkbenchActionConstants.M_NAVIGATE); +// if (navigateMenu != null) { +// navigateMenu.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, fGotoLine); +// } + } + + /** + * Theitem
is {@link IContributionManager#add(IContributionItem) added} to
+ * menu
if no item with the same id currently exists. If there already is an
+ * contribution item with the same id, the new item gets
+ * {@link IContributionManager#insertAfter(String, IContributionItem) inserted after} it.
+ *
+ * @param menu the contribution manager
+ * @param item the contribution item
+ * @since 3.2
+ */
+ @SuppressWarnings("unused")
+ private void addOrInsert(IContributionManager menu, IContributionItem item) {
+ String id= item.getId();
+ if (menu.find(id) == null)
+ menu.add(item);
+ else
+ menu.insertAfter(id, item);
+ }
+
+ /*
+ * @see EditorActionBarContributor#contributeToStatusLine(org.eclipse.jface.action.IStatusLineManager)
+ * @since 2.0
+ */
+ public void contributeToStatusLine(IStatusLineManager statusLineManager) {
+ super.contributeToStatusLine(statusLineManager);
+// for (int i= 0; i < STATUS_FIELD_DEFS.length; i++)
+// statusLineManager.add((IContributionItem)fStatusFields.get(STATUS_FIELD_DEFS[i]));
+ }
+
+ /*
+ * @see org.eclipse.ui.IEditorActionBarContributor#dispose()
+ * @since 2.0
+ */
+ public void dispose() {
+ doSetActiveEditor(null);
+ super.dispose();
+ }
+}