diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java
index 1a9e83e4b03..7e1633bdffa 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java
@@ -38,6 +38,7 @@ import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IStorageEditorInput;
+import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.part.Page;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
@@ -47,6 +48,7 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS
private WorkingCopy fInput;
private ProblemTreeViewer treeViewer;
private ListenerList selectionChangedListeners = new ListenerList();
+ private TogglePresentationAction fTogglePresentation;
private OpenIncludeAction fOpenIncludeAction;
private SearchForReferencesAction fSearchForReferencesAction;
@@ -55,6 +57,9 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS
super();
fEditor= editor;
fInput= null;
+
+ fTogglePresentation= new TogglePresentationAction();
+ fTogglePresentation.setEditor(editor);
fOpenIncludeAction= new OpenIncludeAction(this);
fSearchForReferencesAction= new SearchForReferencesAction(this);
@@ -147,6 +152,12 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS
Control control= treeViewer.getControl();
Menu menu= manager.createContextMenu(control);
control.setMenu(menu);
+
+ // register global actions
+ IPageSite site= getSite();
+ IActionBars bars= site.getActionBars();
+ bars.setGlobalActionHandler(ICEditorActionDefinitionIds.TOGGLE_PRESENTATION, fTogglePresentation);
+
//IFileEditorInput editorInput= (IFileEditorInput)fEditor.getEditorInput();
IEditorInput editorInput= (IEditorInput)fEditor.getEditorInput();
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java
index 3221baa8c9c..c37a2783a71 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java
@@ -87,6 +87,7 @@ public class CEditorActionContributor extends TextEditorActionContributor {
protected SelectionAction fShiftLeft;
protected SelectionAction fShiftRight;
private TextOperationAction caAction;
+ private TogglePresentationAction fTogglePresentation;
//private ToggleTextHoverAction fToggleTextHover;
private GotoErrorAction fPreviousError;
private GotoErrorAction fNextError;
@@ -108,6 +109,8 @@ public class CEditorActionContributor extends TextEditorActionContributor {
fAddInclude = new RetargetTextEditorAction(bundle, "AddIncludeOnSelection.");
fOpenOnSelection = new RetargetTextEditorAction(bundle, "OpenOnSelection.");
+ // actions that are "contributed" to editors, they are considered belonging to the active editor
+ fTogglePresentation= new TogglePresentationAction();
//fToggleTextHover= new ToggleTextHoverAction();
fPreviousError= new GotoErrorAction("Editor.PreviousError.", false); //$NON-NLS-1$
CPluginImages.setImageDescriptors(fPreviousError, CPluginImages.T_TOOL, CPluginImages.IMG_TOOL_GOTO_PREV_ERROR);
@@ -150,10 +153,10 @@ public class CEditorActionContributor extends TextEditorActionContributor {
public void contributeToToolBar(IToolBarManager tbm) {
super.contributeToToolBar(tbm);
tbm.add(new Separator());
- //tbm.add(fTogglePresentation);
+ tbm.add(fTogglePresentation);
//tbm.add(fToggleTextHover);
tbm.add(fNextError);
- tbm.add(fPreviousError);
+ tbm.add(fPreviousError);
}
/**
@@ -172,6 +175,8 @@ public class CEditorActionContributor extends TextEditorActionContributor {
fShiftLeft.setEditor(textEditor);
fNextError.setEditor(textEditor);
fPreviousError.setEditor(textEditor);
+ fTogglePresentation.setEditor(textEditor);
+
//caAction.setEditor(textEditor);
//caAction.update();
fContentAssist.setAction(getAction(textEditor, "ContentAssistProposal")); //$NON-NLS-1$
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorMessages.properties
index 970a4a2f325..593370bd747 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorMessages.properties
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorMessages.properties
@@ -88,11 +88,11 @@ RunToLine.error.title1=Run to Line
RunToLine.label=R&un to Line
RunToLine.tooltip=Run to line
-TogglePresentation.tooltip.checked=Show Complete Source
-TogglePresentation.tooltip.unchecked=Show Source of Selected Element Only
+TogglePresentation.label=Show Source of Selected Element Only
+TogglePresentation.tooltip=Show Source of Selected Element Only
-ToggleTextHover.tooltip.checked=Hide Text Hover
-ToggleTextHover.tooltip.unchecked=Show Text Hover
+ToggleTextHover.label=Show Text Hover
+ToggleTextHover.tooltip=Show Text Hover
NextError.label=Ne&xt Problem@Ctrl+P
NextError.tooltip=Go to Next Problem
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CTextEditorActionConstants.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CTextEditorActionConstants.java
index 96121b6af21..a19106d2852 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CTextEditorActionConstants.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CTextEditorActionConstants.java
@@ -20,7 +20,6 @@ public interface CTextEditorActionConstants extends IWorkbenchActionConstants {
*/
static final String STATUS_INPUT_MODE= "InputMode";
-
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java
index 89040d42e43..f7cf8e3eb1d 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java
@@ -40,6 +40,13 @@ public interface ICEditorActionDefinitionIds extends ITextEditorActionDefinition
* Action definition ID of the source -> add include action
* (value "org.eclipse.cdt.ui.edit.text.c.add.include"
).
*/
- public static final String ADD_INCLUDE= "org.eclipse.cdt.ui.edit.text.c.add.include"; //$NON-NLS-1$
+ public static final String ADD_INCLUDE= "org.eclipse.cdt.ui.edit.text.c.add.include"; //$NON-NLS-1$
+
+ /**
+ * Action definition ID of the toggle presentation toolbar button action
+ * (value "org.eclipse.cdt.ui.edit.text.java.toggle.presentation"
).
+ */
+ public static final String TOGGLE_PRESENTATION= "org.eclipse.cdt.ui.edit.text.c.toggle.presentation"; //$NON-NLS-1$
+
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/TogglePresentationAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/TogglePresentationAction.java
new file mode 100644
index 00000000000..352d3e923ce
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/TogglePresentationAction.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui.editor;
+
+
+
+import org.eclipse.cdt.internal.ui.CPluginImages;
+import org.eclipse.cdt.internal.ui.ICHelpContextIds;
+import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.cdt.ui.PreferenceConstants;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
+import org.eclipse.ui.help.WorkbenchHelp;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.TextEditorAction;
+
+
+/**
+ * A toolbar action which toggles the presentation model of the
+ * connected text editor. The editor shows either the highlight range
+ * only or always the whole document.
+ */
+public class TogglePresentationAction extends TextEditorAction implements IPropertyChangeListener {
+
+ private IPreferenceStore fStore;
+
+ /**
+ * Constructs and updates the action.
+ */
+ public TogglePresentationAction() {
+ super(CEditorMessages.getResourceBundle(), "TogglePresentation.", null); //$NON-NLS-1$
+ CPluginImages.setImageDescriptors(this, CPluginImages.T_LCL, CPluginImages.IMG_MENU_SEGMENT_EDIT);
+ setToolTipText(CEditorMessages.getString("TogglePresentation.tooltip")); //$NON-NLS-1$
+ setActionDefinitionId(ICEditorActionDefinitionIds.TOGGLE_PRESENTATION);
+ WorkbenchHelp.setHelp(this, ICHelpContextIds.TOGGLE_PRESENTATION_ACTION);
+ update();
+ }
+
+ /*
+ * @see IAction#actionPerformed
+ */
+ public void run() {
+
+ ITextEditor editor= getTextEditor();
+ if (editor == null)
+ return;
+
+ IRegion remembered= editor.getHighlightRange();
+ editor.resetHighlightRange();
+
+ boolean showAll= !editor.showsHighlightRangeOnly();
+ setChecked(showAll);
+
+ editor.showHighlightRangeOnly(showAll);
+ if (remembered != null)
+ editor.setHighlightRange(remembered.getOffset(), remembered.getLength(), true);
+
+ fStore.removePropertyChangeListener(this);
+ fStore.setValue(PreferenceConstants.EDITOR_SHOW_SEGMENTS, showAll);
+ fStore.addPropertyChangeListener(this);
+ }
+
+ /*
+ * @see TextEditorAction#update
+ */
+ public void update() {
+ ITextEditor editor= getTextEditor();
+ boolean checked= (editor != null && editor.showsHighlightRangeOnly());
+ setChecked(checked);
+ setEnabled(editor != null);
+ }
+
+ /*
+ * @see TextEditorAction#setEditor(ITextEditor)
+ */
+ public void setEditor(ITextEditor editor) {
+
+ super.setEditor(editor);
+
+ if (editor != null) {
+
+ if (fStore == null) {
+ fStore= CUIPlugin.getDefault().getPreferenceStore();
+ fStore.addPropertyChangeListener(this);
+ }
+ synchronizeWithPreference(editor);
+
+ } else if (fStore != null) {
+ fStore.removePropertyChangeListener(this);
+ fStore= null;
+ }
+
+ update();
+ }
+
+ /**
+ * Synchronizes the appearance of the editor with what the preference store tells him.
+ */
+ private void synchronizeWithPreference(ITextEditor editor) {
+
+ if (editor == null)
+ return;
+
+ boolean showSegments= fStore.getBoolean(PreferenceConstants.EDITOR_SHOW_SEGMENTS);
+ setChecked(showSegments);
+
+ if (editor.showsHighlightRangeOnly() != showSegments) {
+ IRegion remembered= editor.getHighlightRange();
+ editor.resetHighlightRange();
+ editor.showHighlightRangeOnly(showSegments);
+ if (remembered != null)
+ editor.setHighlightRange(remembered.getOffset(), remembered.getLength(), true);
+ }
+ }
+
+ /*
+ * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
+ */
+ public void propertyChange(PropertyChangeEvent event) {
+ if (event.getProperty().equals(PreferenceConstants.EDITOR_SHOW_SEGMENTS))
+ synchronizeWithPreference(getTextEditor());
+ }
+}