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()); + } +}