mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
2004-08-24 Alain Magloire
Implementation for PR 69118: Folding. Framework taken from the JDT folding adapted to C * src/org/eclipse/cdt/internal/ui/action/ActionMessages.java * src/org/eclipse/cdt/internal/ui/action/FoldingActionGroup.java * src/org/eclipse/cdt/internal/ui/editor/CEditor.java * src/org/eclipse/cdt/internal/ui/preference/CEditorPreferencePage.java * src/org/eclipse/cdt/internal/ui/preference/FoldingConfigurationBlock.java * src/org/eclipse/cdt/internal/ui/preference/PreferencesMessages.properties * src/org/eclipse/cdt/internal/ui/text/folding/CFoldingStructureProviderDescriptor.java * src/org/eclipse/cdt/internal/ui/text/folding/CFoldingStructureProviderRegistry.java * src/org/eclipse/cdt/internal/ui/text/folding/DefaultCFoldingPreferenceBlock.java * src/org/eclipse/cdt/internal/ui/text/folding/DefaultCFoldingStructureProvider.java * src/org/eclipse/cdt/internal/ui/text/folding/EmptyCFoldingPrefernceBlock.java * src/org/eclipse/cdt/internal/ui/text/folding/FoldingMessages.java * src/org/eclipse/cdt/internal/ui/text/folding/FoldingMessages.properties * src/org/eclipse/cdt/ui/CUIPlugin.java * src/org/eclipse/cdt/ui/PreferenceConstants.java * src/org/eclipse/cdt/ui/text/folding/ICFoldingPreferenceBlock.java * src/org/eclipse/cdt/ui/text/folding/ICFoldingStructureProvider.java * plugin.properties * plugin.xml
This commit is contained in:
parent
c56740a804
commit
7288ace27a
20 changed files with 1916 additions and 14 deletions
|
@ -1,3 +1,34 @@
|
||||||
|
2004-08-24 Alain Magloire
|
||||||
|
|
||||||
|
Implementation for PR 69118: Folding.
|
||||||
|
Framework taken from the JDT folding adapted to C
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/internal/ui/action/ActionMessages.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/action/FoldingActionGroup.java
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/internal/ui/editor/CEditor.java
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/internal/ui/preference/CEditorPreferencePage.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/preference/FoldingConfigurationBlock.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/preference/PreferencesMessages.properties
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/internal/ui/text/folding/CFoldingStructureProviderDescriptor.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/text/folding/CFoldingStructureProviderRegistry.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/text/folding/DefaultCFoldingPreferenceBlock.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/text/folding/DefaultCFoldingStructureProvider.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/text/folding/EmptyCFoldingPrefernceBlock.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/text/folding/FoldingMessages.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/text/folding/FoldingMessages.properties
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/ui/CUIPlugin.java
|
||||||
|
* src/org/eclipse/cdt/ui/PreferenceConstants.java
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/ui/text/folding/ICFoldingPreferenceBlock.java
|
||||||
|
* src/org/eclipse/cdt/ui/text/folding/ICFoldingStructureProvider.java
|
||||||
|
|
||||||
|
* plugin.properties
|
||||||
|
* plugin.xml
|
||||||
|
|
||||||
2004-08-24 Chris Wiebe
|
2004-08-24 Chris Wiebe
|
||||||
|
|
||||||
fix sorting bug
|
fix sorting bug
|
||||||
|
|
|
@ -245,3 +245,9 @@ problemHoverDescription= Shows the description of the selected problem.
|
||||||
|
|
||||||
#
|
#
|
||||||
appearancePrefName= Appearance
|
appearancePrefName= Appearance
|
||||||
|
|
||||||
|
#--- folding
|
||||||
|
foldingStructureProvidersExtensionPoint= Folding Structure Providers
|
||||||
|
defaultFoldingStructureProviderName= Default C Folding
|
||||||
|
Folding.label= F&olding
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,9 @@
|
||||||
<extension-point id="CElementFilters" name="%elementFiltersName"/>
|
<extension-point id="CElementFilters" name="%elementFiltersName"/>
|
||||||
<extension-point id="BinaryParserPage" name="%binaryParserPage"/>
|
<extension-point id="BinaryParserPage" name="%binaryParserPage"/>
|
||||||
<extension-point id="PathContainerPage" name="%pathContainerPage" schema="schema/PathContainerPage.exsd"/>
|
<extension-point id="PathContainerPage" name="%pathContainerPage" schema="schema/PathContainerPage.exsd"/>
|
||||||
|
<extension-point id="foldingStructureProviders" name="%foldingStructureProvidersExtensionPoint"/>
|
||||||
|
<!--extension-point id="foldingStructureProviders" name="%foldingStructureProvidersExtensionPoint" schema="schema/foldingStructureProviders.exsd"/-->
|
||||||
|
|
||||||
<!-- =========================================================================== -->
|
<!-- =========================================================================== -->
|
||||||
<!-- Extension point: org.eclipse.cdt.ui.textHovers -->
|
<!-- Extension point: org.eclipse.cdt.ui.textHovers -->
|
||||||
<!-- Extension Implementation: must implement org.eclipse.jface.text.ITextHover -->
|
<!-- Extension Implementation: must implement org.eclipse.jface.text.ITextHover -->
|
||||||
|
@ -928,4 +931,16 @@
|
||||||
point="org.eclipse.core.runtime.preferences">
|
point="org.eclipse.core.runtime.preferences">
|
||||||
<initializer class="org.eclipse.cdt.ui.CUIPreferenceInitializer"/>
|
<initializer class="org.eclipse.cdt.ui.CUIPreferenceInitializer"/>
|
||||||
</extension>
|
</extension>
|
||||||
|
|
||||||
|
<!-- Default folding -->
|
||||||
|
<extension
|
||||||
|
point= "org.eclipse.cdt.ui.foldingStructureProviders">
|
||||||
|
<provider
|
||||||
|
id="org.eclipse.cdt.ui.text.defaultFoldingProvider"
|
||||||
|
name= "%defaultFoldingStructureProviderName"
|
||||||
|
class="org.eclipse.cdt.internal.ui.text.folding.DefaultCFoldingStructureProvider"
|
||||||
|
preferencesClass="org.eclipse.cdt.internal.ui.text.folding.DefaultCFoldingPreferenceBlock">
|
||||||
|
</provider>
|
||||||
|
</extension>
|
||||||
|
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
|
@ -35,6 +35,17 @@ public class ActionMessages {
|
||||||
// no instance
|
// no instance
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the resource bundle managed by the receiver.
|
||||||
|
*
|
||||||
|
* @return the resource bundle
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public static ResourceBundle getResourceBundle() {
|
||||||
|
return fgResourceBundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the resource string associated with the given key in the resource bundle. If there isn't
|
* Returns the resource string associated with the given key in the resource bundle. If there isn't
|
||||||
* any value under the given key, the key is returned.
|
* any value under the given key, the key is returned.
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 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.actions;
|
||||||
|
|
||||||
|
import org.eclipse.jface.action.IMenuManager;
|
||||||
|
|
||||||
|
import org.eclipse.jface.text.ITextViewer;
|
||||||
|
import org.eclipse.jface.text.source.projection.IProjectionListener;
|
||||||
|
import org.eclipse.jface.text.source.projection.ProjectionViewer;
|
||||||
|
|
||||||
|
import org.eclipse.ui.actions.ActionGroup;
|
||||||
|
import org.eclipse.ui.editors.text.IFoldingCommandIds;
|
||||||
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
|
import org.eclipse.ui.texteditor.TextOperationAction;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Groups the JDT folding actions.
|
||||||
|
*
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public class FoldingActionGroup extends ActionGroup {
|
||||||
|
private ProjectionViewer fViewer;
|
||||||
|
|
||||||
|
private TextOperationAction fToggle;
|
||||||
|
private TextOperationAction fExpand;
|
||||||
|
private TextOperationAction fCollapse;
|
||||||
|
private TextOperationAction fExpandAll;
|
||||||
|
|
||||||
|
private IProjectionListener fProjectionListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new projection action group for <code>editor</code>. If the
|
||||||
|
* supplied viewer is not an instance of <code>ProjectionViewer</code>, the
|
||||||
|
* action group is disabled.
|
||||||
|
*
|
||||||
|
* @param editor the text editor to operate on
|
||||||
|
* @param viewer the viewer of the editor
|
||||||
|
*/
|
||||||
|
public FoldingActionGroup(ITextEditor editor, ITextViewer viewer) {
|
||||||
|
if (viewer instanceof ProjectionViewer) {
|
||||||
|
fViewer= (ProjectionViewer) viewer;
|
||||||
|
|
||||||
|
fProjectionListener= new IProjectionListener() {
|
||||||
|
|
||||||
|
public void projectionEnabled() {
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void projectionDisabled() {
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
fViewer.addProjectionListener(fProjectionListener);
|
||||||
|
|
||||||
|
fToggle= new TextOperationAction(ActionMessages.getResourceBundle(), "Projection.Toggle.", editor, ProjectionViewer.TOGGLE, true); //$NON-NLS-1$
|
||||||
|
fToggle.setChecked(true);
|
||||||
|
fToggle.setActionDefinitionId(IFoldingCommandIds.FOLDING_TOGGLE);
|
||||||
|
editor.setAction("FoldingToggle", fToggle); //$NON-NLS-1$
|
||||||
|
|
||||||
|
fExpandAll= new TextOperationAction(ActionMessages.getResourceBundle(), "Projection.ExpandAll.", editor, ProjectionViewer.EXPAND_ALL, true); //$NON-NLS-1$
|
||||||
|
fExpandAll.setActionDefinitionId(IFoldingCommandIds.FOLDING_EXPAND_ALL);
|
||||||
|
editor.setAction("FoldingExpandAll", fExpandAll); //$NON-NLS-1$
|
||||||
|
|
||||||
|
fExpand= new TextOperationAction(ActionMessages.getResourceBundle(), "Projection.Expand.", editor, ProjectionViewer.EXPAND, true); //$NON-NLS-1$
|
||||||
|
fExpand.setActionDefinitionId(IFoldingCommandIds.FOLDING_EXPAND);
|
||||||
|
editor.setAction("FoldingExpand", fExpand); //$NON-NLS-1$
|
||||||
|
|
||||||
|
fCollapse= new TextOperationAction(ActionMessages.getResourceBundle(), "Projection.Collapse.", editor, ProjectionViewer.COLLAPSE, true); //$NON-NLS-1$
|
||||||
|
fCollapse.setActionDefinitionId(IFoldingCommandIds.FOLDING_COLLAPSE);
|
||||||
|
editor.setAction("FoldingCollapse", fCollapse); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns <code>true</code> if the group is enabled.
|
||||||
|
* <pre>
|
||||||
|
* Invariant: isEnabled() <=> fViewer and all actions are != null.
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @return <code>true</code> if the group is enabled
|
||||||
|
*/
|
||||||
|
protected boolean isEnabled() {
|
||||||
|
return fViewer != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.ui.actions.ActionGroup#dispose()
|
||||||
|
*/
|
||||||
|
public void dispose() {
|
||||||
|
if (isEnabled()) {
|
||||||
|
fViewer.removeProjectionListener(fProjectionListener);
|
||||||
|
fViewer= null;
|
||||||
|
}
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the actions.
|
||||||
|
*/
|
||||||
|
protected void update() {
|
||||||
|
if (isEnabled()) {
|
||||||
|
fToggle.update();
|
||||||
|
fToggle.setChecked(fViewer.getProjectionAnnotationModel() != null);
|
||||||
|
fExpand.update();
|
||||||
|
fExpandAll.update();
|
||||||
|
fCollapse.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fills the menu with all folding actions.
|
||||||
|
*
|
||||||
|
* @param manager the menu manager for the folding submenu
|
||||||
|
*/
|
||||||
|
public void fillMenu(IMenuManager manager) {
|
||||||
|
if (isEnabled()) {
|
||||||
|
update();
|
||||||
|
manager.add(fToggle);
|
||||||
|
manager.add(fExpandAll);
|
||||||
|
manager.add(fExpand);
|
||||||
|
manager.add(fCollapse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.ui.actions.ActionGroup#updateActionBars()
|
||||||
|
*/
|
||||||
|
public void updateActionBars() {
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,6 +21,7 @@ import org.eclipse.cdt.core.model.ISourceReference;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
||||||
import org.eclipse.cdt.internal.ui.IContextMenuConstants;
|
import org.eclipse.cdt.internal.ui.IContextMenuConstants;
|
||||||
|
import org.eclipse.cdt.internal.ui.actions.FoldingActionGroup;
|
||||||
import org.eclipse.cdt.internal.ui.browser.typehierarchy.OpenTypeHierarchyAction;
|
import org.eclipse.cdt.internal.ui.browser.typehierarchy.OpenTypeHierarchyAction;
|
||||||
import org.eclipse.cdt.internal.ui.editor.asm.AsmTextTools;
|
import org.eclipse.cdt.internal.ui.editor.asm.AsmTextTools;
|
||||||
import org.eclipse.cdt.internal.ui.search.actions.OpenDeclarationsAction;
|
import org.eclipse.cdt.internal.ui.search.actions.OpenDeclarationsAction;
|
||||||
|
@ -31,8 +32,10 @@ import org.eclipse.cdt.internal.ui.text.CTextTools;
|
||||||
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.IWorkingCopyManager;
|
import org.eclipse.cdt.ui.IWorkingCopyManager;
|
||||||
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
import org.eclipse.cdt.ui.actions.RefactoringActionGroup;
|
import org.eclipse.cdt.ui.actions.RefactoringActionGroup;
|
||||||
import org.eclipse.cdt.ui.actions.ShowInCViewAction;
|
import org.eclipse.cdt.ui.actions.ShowInCViewAction;
|
||||||
|
import org.eclipse.cdt.ui.text.folding.ICFoldingStructureProvider;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -58,8 +61,10 @@ import org.eclipse.jface.text.source.IOverviewRuler;
|
||||||
import org.eclipse.jface.text.source.ISharedTextColors;
|
import org.eclipse.jface.text.source.ISharedTextColors;
|
||||||
import org.eclipse.jface.text.source.ISourceViewer;
|
import org.eclipse.jface.text.source.ISourceViewer;
|
||||||
import org.eclipse.jface.text.source.IVerticalRuler;
|
import org.eclipse.jface.text.source.IVerticalRuler;
|
||||||
import org.eclipse.jface.text.source.SourceViewer;
|
|
||||||
import org.eclipse.jface.text.source.SourceViewerConfiguration;
|
import org.eclipse.jface.text.source.SourceViewerConfiguration;
|
||||||
|
import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel;
|
||||||
|
import org.eclipse.jface.text.source.projection.ProjectionSupport;
|
||||||
|
import org.eclipse.jface.text.source.projection.ProjectionViewer;
|
||||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
||||||
|
@ -73,6 +78,7 @@ import org.eclipse.swt.widgets.Display;
|
||||||
import org.eclipse.ui.IEditorActionBarContributor;
|
import org.eclipse.ui.IEditorActionBarContributor;
|
||||||
import org.eclipse.ui.IEditorInput;
|
import org.eclipse.ui.IEditorInput;
|
||||||
import org.eclipse.ui.IFileEditorInput;
|
import org.eclipse.ui.IFileEditorInput;
|
||||||
|
import org.eclipse.ui.IPageLayout;
|
||||||
import org.eclipse.ui.IPartService;
|
import org.eclipse.ui.IPartService;
|
||||||
import org.eclipse.ui.IViewPart;
|
import org.eclipse.ui.IViewPart;
|
||||||
import org.eclipse.ui.IWorkbenchPage;
|
import org.eclipse.ui.IWorkbenchPage;
|
||||||
|
@ -84,6 +90,7 @@ import org.eclipse.ui.help.WorkbenchHelp;
|
||||||
import org.eclipse.ui.ide.IDE;
|
import org.eclipse.ui.ide.IDE;
|
||||||
import org.eclipse.ui.part.EditorActionBarContributor;
|
import org.eclipse.ui.part.EditorActionBarContributor;
|
||||||
import org.eclipse.ui.part.IShowInSource;
|
import org.eclipse.ui.part.IShowInSource;
|
||||||
|
import org.eclipse.ui.part.IShowInTargetList;
|
||||||
import org.eclipse.ui.part.ShowInContext;
|
import org.eclipse.ui.part.ShowInContext;
|
||||||
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
|
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
|
||||||
import org.eclipse.ui.texteditor.ContentAssistAction;
|
import org.eclipse.ui.texteditor.ContentAssistAction;
|
||||||
|
@ -144,6 +151,22 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
/** Preference key for hyperlink enablement */
|
/** Preference key for hyperlink enablement */
|
||||||
public final static String HYPERLINK_ENABLED = "hyperlinkEnable"; //$NON-NLS-1$
|
public final static String HYPERLINK_ENABLED = "hyperlinkEnable"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This editor's projection support
|
||||||
|
*/
|
||||||
|
private ProjectionSupport fProjectionSupport;
|
||||||
|
/**
|
||||||
|
* This editor's projection model updater
|
||||||
|
*/
|
||||||
|
private ICFoldingStructureProvider fProjectionModelUpdater;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The action group for folding.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private FoldingActionGroup fFoldingGroup;
|
||||||
|
|
||||||
|
|
||||||
private class PropertyChangeListener implements org.eclipse.core.runtime.Preferences.IPropertyChangeListener, org.eclipse.jface.util.IPropertyChangeListener {
|
private class PropertyChangeListener implements org.eclipse.core.runtime.Preferences.IPropertyChangeListener, org.eclipse.jface.util.IPropertyChangeListener {
|
||||||
/*
|
/*
|
||||||
* @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
|
* @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
|
||||||
|
@ -193,6 +216,10 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
fCEditorErrorTickUpdater.setAnnotationModel(getDocumentProvider().getAnnotationModel(input));
|
fCEditorErrorTickUpdater.setAnnotationModel(getDocumentProvider().getAnnotationModel(input));
|
||||||
}
|
}
|
||||||
setOutlinePageInput(fOutlinePage, input);
|
setOutlinePageInput(fOutlinePage, input);
|
||||||
|
|
||||||
|
if (fProjectionModelUpdater != null) {
|
||||||
|
fProjectionModelUpdater.initialize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -237,6 +264,21 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
if (IContentOutlinePage.class.equals(required)) {
|
if (IContentOutlinePage.class.equals(required)) {
|
||||||
return getOutlinePage();
|
return getOutlinePage();
|
||||||
}
|
}
|
||||||
|
if (required == IShowInTargetList.class) {
|
||||||
|
return new IShowInTargetList() {
|
||||||
|
public String[] getShowInTargetIds() {
|
||||||
|
return new String[] { CUIPlugin.CVIEW_ID, IPageLayout.ID_OUTLINE, IPageLayout.ID_RES_NAV };
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (ProjectionAnnotationModel.class.equals(required)) {
|
||||||
|
if (fProjectionSupport != null) {
|
||||||
|
Object adapter= fProjectionSupport.getAdapter(getSourceViewer(), required);
|
||||||
|
if (adapter != null)
|
||||||
|
return adapter;
|
||||||
|
}
|
||||||
|
}
|
||||||
return super.getAdapter(required);
|
return super.getAdapter(required);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -290,6 +332,20 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PreferenceConstants.EDITOR_FOLDING_PROVIDER.equals(property)) {
|
||||||
|
if (asv instanceof ProjectionViewer) {
|
||||||
|
ProjectionViewer projectionViewer= (ProjectionViewer) asv;
|
||||||
|
if (fProjectionModelUpdater != null)
|
||||||
|
fProjectionModelUpdater.uninstall();
|
||||||
|
// either freshly enabled or provider changed
|
||||||
|
fProjectionModelUpdater= CUIPlugin.getDefault().getFoldingStructureProviderRegistry().getCurrentFoldingProvider();
|
||||||
|
if (fProjectionModelUpdater != null) {
|
||||||
|
fProjectionModelUpdater.install(this, projectionViewer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
IContentAssistant c= asv.getContentAssistant();
|
IContentAssistant c= asv.getContentAssistant();
|
||||||
if (c instanceof ContentAssistant)
|
if (c instanceof ContentAssistant)
|
||||||
ContentAssistPreference.changeConfiguration((ContentAssistant) c, getPreferenceStore(), event);
|
ContentAssistPreference.changeConfiguration((ContentAssistant) c, getPreferenceStore(), event);
|
||||||
|
@ -428,6 +484,16 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
|
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
|
|
||||||
|
if (fProjectionModelUpdater != null) {
|
||||||
|
fProjectionModelUpdater.uninstall();
|
||||||
|
fProjectionModelUpdater= null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fProjectionSupport != null) {
|
||||||
|
fProjectionSupport.dispose();
|
||||||
|
fProjectionSupport= null;
|
||||||
|
}
|
||||||
|
|
||||||
if (fCEditorErrorTickUpdater != null) {
|
if (fCEditorErrorTickUpdater != null) {
|
||||||
fCEditorErrorTickUpdater.setAnnotationModel(null);
|
fCEditorErrorTickUpdater.setAnnotationModel(null);
|
||||||
fCEditorErrorTickUpdater.dispose();
|
fCEditorErrorTickUpdater.dispose();
|
||||||
|
@ -440,7 +506,6 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
IPreferenceStore preferenceStore = getPreferenceStore();
|
IPreferenceStore preferenceStore = getPreferenceStore();
|
||||||
preferenceStore.removePropertyChangeListener(fPropertyChangeListener);
|
preferenceStore.removePropertyChangeListener(fPropertyChangeListener);
|
||||||
fPropertyChangeListener = null;
|
fPropertyChangeListener = null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fSelectionUpdateListener != null) {
|
if (fSelectionUpdateListener != null) {
|
||||||
|
@ -518,6 +583,8 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
protected void createActions() {
|
protected void createActions() {
|
||||||
super.createActions();
|
super.createActions();
|
||||||
|
|
||||||
|
fFoldingGroup= new FoldingActionGroup(this, getSourceViewer());
|
||||||
|
|
||||||
// Default text editing menu items
|
// Default text editing menu items
|
||||||
|
|
||||||
IAction action = new TextOperationAction(CEditorMessages.getResourceBundle(), "Comment.", this, ITextOperationTarget.PREFIX); //$NON-NLS-1$
|
IAction action = new TextOperationAction(CEditorMessages.getResourceBundle(), "Comment.", this, ITextOperationTarget.PREFIX); //$NON-NLS-1$
|
||||||
|
@ -603,6 +670,11 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isFoldingEnabled() {
|
||||||
|
return CUIPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_FOLDING_ENABLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The <code>AbstractTextEditor</code> implementation of this
|
* The <code>AbstractTextEditor</code> implementation of this
|
||||||
* <code>IWorkbenchPart</code> method creates the vertical ruler and
|
* <code>IWorkbenchPart</code> method creates the vertical ruler and
|
||||||
|
@ -614,6 +686,27 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
*/
|
*/
|
||||||
public void createPartControl(Composite parent) {
|
public void createPartControl(Composite parent) {
|
||||||
super.createPartControl(parent);
|
super.createPartControl(parent);
|
||||||
|
|
||||||
|
ProjectionViewer projectionViewer= (ProjectionViewer) getSourceViewer();
|
||||||
|
|
||||||
|
fProjectionSupport= new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
|
||||||
|
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error"); //$NON-NLS-1$
|
||||||
|
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning"); //$NON-NLS-1$
|
||||||
|
// fProjectionSupport.setHoverControlCreator(new IInformationControlCreator() {
|
||||||
|
// public IInformationControl createInformationControl(Shell shell) {
|
||||||
|
// return new CustomSourceInformationControl(shell, IDocument.DEFAULT_CONTENT_TYPE);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
fProjectionSupport.install();
|
||||||
|
|
||||||
|
fProjectionModelUpdater= CUIPlugin.getDefault().getFoldingStructureProviderRegistry().getCurrentFoldingProvider();
|
||||||
|
if (fProjectionModelUpdater != null)
|
||||||
|
fProjectionModelUpdater.install(this, projectionViewer);
|
||||||
|
|
||||||
|
if (isFoldingEnabled())
|
||||||
|
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
|
||||||
|
|
||||||
|
|
||||||
WorkbenchHelp.setHelp(parent, ICHelpContextIds.CEDITOR_VIEW);
|
WorkbenchHelp.setHelp(parent, ICHelpContextIds.CEDITOR_VIEW);
|
||||||
fSelectionUpdateListener = new ISelectionChangedListener() {
|
fSelectionUpdateListener = new ISelectionChangedListener() {
|
||||||
private Runnable fRunnable = new Runnable() {
|
private Runnable fRunnable = new Runnable() {
|
||||||
|
@ -831,7 +924,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
* Adapted source viewer for CEditor
|
* Adapted source viewer for CEditor
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class AdaptedSourceViewer extends SourceViewer implements ITextViewerExtension {
|
public class AdaptedSourceViewer extends ProjectionViewer implements ITextViewerExtension {
|
||||||
|
|
||||||
private List fTextConverters;
|
private List fTextConverters;
|
||||||
private String fDisplayLanguage;
|
private String fDisplayLanguage;
|
||||||
|
@ -975,6 +1068,43 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
return textTools.affectsBehavior(event) || asmTools.affectsBehavior(event);
|
return textTools.affectsBehavior(event) || asmTools.affectsBehavior(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the folding action group, or <code>null</code> if there is none.
|
||||||
|
*
|
||||||
|
* @return the folding action group, or <code>null</code> if there is none
|
||||||
|
*/
|
||||||
|
protected FoldingActionGroup getFoldingActionGroup() {
|
||||||
|
return fFoldingGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.ui.texteditor.AbstractTextEditor#performRevert()
|
||||||
|
*/
|
||||||
|
protected void performRevert() {
|
||||||
|
ProjectionViewer projectionViewer= (ProjectionViewer) getSourceViewer();
|
||||||
|
projectionViewer.setRedraw(false);
|
||||||
|
try {
|
||||||
|
|
||||||
|
boolean projectionMode= projectionViewer.isProjectionMode();
|
||||||
|
if (projectionMode) {
|
||||||
|
projectionViewer.disableProjection();
|
||||||
|
if (fProjectionModelUpdater != null)
|
||||||
|
fProjectionModelUpdater.uninstall();
|
||||||
|
}
|
||||||
|
|
||||||
|
super.performRevert();
|
||||||
|
|
||||||
|
if (projectionMode) {
|
||||||
|
if (fProjectionModelUpdater != null)
|
||||||
|
fProjectionModelUpdater.install(this, projectionViewer);
|
||||||
|
projectionViewer.enableProjection();
|
||||||
|
}
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
projectionViewer.setRedraw(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles a property change event describing a change
|
* Handles a property change event describing a change
|
||||||
* of the C core's preferences and updates the preference
|
* of the C core's preferences and updates the preference
|
||||||
|
|
|
@ -67,12 +67,12 @@ import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
|
||||||
public class CEditorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
|
public class CEditorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
|
||||||
|
|
||||||
protected final String[][] fListModel = new String[][] { { PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.MultiLine"), ICColorConstants.C_MULTI_LINE_COMMENT }, { //$NON-NLS-1$
|
protected final String[][] fListModel = new String[][] { { PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.MultiLine"), ICColorConstants.C_MULTI_LINE_COMMENT }, { //$NON-NLS-1$
|
||||||
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.singleLine"), ICColorConstants.C_SINGLE_LINE_COMMENT }, { //$NON-NLS-1$
|
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.singleLine"), ICColorConstants.C_SINGLE_LINE_COMMENT }, { //$NON-NLS-1$
|
||||||
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.keywords"), ICColorConstants.C_KEYWORD }, { //$NON-NLS-1$
|
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.keywords"), ICColorConstants.C_KEYWORD }, { //$NON-NLS-1$
|
||||||
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.builtInTypes"), ICColorConstants.C_TYPE }, { //$NON-NLS-1$
|
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.builtInTypes"), ICColorConstants.C_TYPE }, { //$NON-NLS-1$
|
||||||
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.strings"), ICColorConstants.C_STRING }, { //$NON-NLS-1$
|
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.strings"), ICColorConstants.C_STRING }, { //$NON-NLS-1$
|
||||||
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.others"), ICColorConstants.C_DEFAULT }, { //$NON-NLS-1$
|
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.others"), ICColorConstants.C_DEFAULT }, { //$NON-NLS-1$
|
||||||
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags"), PreferenceConstants.EDITOR_TASK_TAG_COLOR } //$NON-NLS-1$
|
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags"), PreferenceConstants.EDITOR_TASK_TAG_COLOR } //$NON-NLS-1$
|
||||||
};
|
};
|
||||||
|
|
||||||
protected final String[][] fAppearanceColorListModel = new String[][] { { PreferencesMessages.getString("CEditorPreferencePage.behaviorPage.lineNumberColor"), AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR, null }, //$NON-NLS-1$
|
protected final String[][] fAppearanceColorListModel = new String[][] { { PreferencesMessages.getString("CEditorPreferencePage.behaviorPage.lineNumberColor"), AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR, null }, //$NON-NLS-1$
|
||||||
|
@ -82,7 +82,6 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
||||||
{PreferencesMessages.getString("CEditorPreferencePage.behaviorPage.linkedPositionColor"), CEditor.LINKED_POSITION_COLOR, null }, //$NON-NLS-1$
|
{PreferencesMessages.getString("CEditorPreferencePage.behaviorPage.linkedPositionColor"), CEditor.LINKED_POSITION_COLOR, null }, //$NON-NLS-1$
|
||||||
{PreferencesMessages.getString("CEditorPreferencePage.behaviorPage.selectionForegroundColor"), AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_FOREGROUND_COLOR, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_FOREGROUND_DEFAULT_COLOR}, //$NON-NLS-1$
|
{PreferencesMessages.getString("CEditorPreferencePage.behaviorPage.selectionForegroundColor"), AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_FOREGROUND_COLOR, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_FOREGROUND_DEFAULT_COLOR}, //$NON-NLS-1$
|
||||||
{PreferencesMessages.getString("CEditorPreferencePage.behaviorPage.selectionBackgroundColor"), AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_BACKGROUND_COLOR, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_BACKGROUND_DEFAULT_COLOR}, //$NON-NLS-1$
|
{PreferencesMessages.getString("CEditorPreferencePage.behaviorPage.selectionBackgroundColor"), AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_BACKGROUND_COLOR, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_BACKGROUND_DEFAULT_COLOR}, //$NON-NLS-1$
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
protected OverlayPreferenceStore fOverlayStore;
|
protected OverlayPreferenceStore fOverlayStore;
|
||||||
|
@ -136,6 +135,8 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
||||||
protected ColorEditor fAppearanceColorEditor;
|
protected ColorEditor fAppearanceColorEditor;
|
||||||
private Button fAppearanceColorDefault;
|
private Button fAppearanceColorDefault;
|
||||||
private CEditorHoverConfigurationBlock fCEditorHoverConfigurationBlock;
|
private CEditorHoverConfigurationBlock fCEditorHoverConfigurationBlock;
|
||||||
|
private FoldingConfigurationBlock fFoldingConfigurationBlock;
|
||||||
|
|
||||||
|
|
||||||
public CEditorPreferencePage() {
|
public CEditorPreferencePage() {
|
||||||
setDescription(CUIPlugin.getResourceString("CEditorPreferencePage.description")); //$NON-NLS-1$
|
setDescription(CUIPlugin.getResourceString("CEditorPreferencePage.description")); //$NON-NLS-1$
|
||||||
|
@ -827,6 +828,7 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
||||||
initializeDefaultColors();
|
initializeDefaultColors();
|
||||||
|
|
||||||
fCEditorHoverConfigurationBlock= new CEditorHoverConfigurationBlock(this, fOverlayStore);
|
fCEditorHoverConfigurationBlock= new CEditorHoverConfigurationBlock(this, fOverlayStore);
|
||||||
|
fFoldingConfigurationBlock= new FoldingConfigurationBlock(fOverlayStore);
|
||||||
|
|
||||||
fOverlayStore.load();
|
fOverlayStore.load();
|
||||||
fOverlayStore.start();
|
fOverlayStore.start();
|
||||||
|
@ -855,6 +857,9 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
||||||
item.setImage(CPluginImages.get(CPluginImages.IMG_OBJS_TUNIT));
|
item.setImage(CPluginImages.get(CPluginImages.IMG_OBJS_TUNIT));
|
||||||
item.setControl(fCEditorHoverConfigurationBlock.createControl(folder));
|
item.setControl(fCEditorHoverConfigurationBlock.createControl(folder));
|
||||||
|
|
||||||
|
item= new TabItem(folder, SWT.NONE);
|
||||||
|
item.setText(PreferencesMessages.getString("CEditorPreferencePage.folding.title")); //$NON-NLS-1$
|
||||||
|
item.setControl(fFoldingConfigurationBlock.createControl(folder));
|
||||||
|
|
||||||
item = new TabItem(folder, SWT.NONE);
|
item = new TabItem(folder, SWT.NONE);
|
||||||
item.setText(PreferencesMessages.getString("CEditorPreferencePage.Navigation")); //$NON-NLS-1$
|
item.setText(PreferencesMessages.getString("CEditorPreferencePage.Navigation")); //$NON-NLS-1$
|
||||||
|
@ -910,6 +915,8 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
fFoldingConfigurationBlock.initialize();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeFields() {
|
private void initializeFields() {
|
||||||
|
@ -958,6 +965,7 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
||||||
*/
|
*/
|
||||||
public boolean performOk() {
|
public boolean performOk() {
|
||||||
fCEditorHoverConfigurationBlock.performOk();
|
fCEditorHoverConfigurationBlock.performOk();
|
||||||
|
fFoldingConfigurationBlock.performOk();
|
||||||
fOverlayStore.propagate();
|
fOverlayStore.propagate();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -973,6 +981,7 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
||||||
handleAppearanceColorListSelection();
|
handleAppearanceColorListSelection();
|
||||||
|
|
||||||
fCEditorHoverConfigurationBlock.performDefaults();
|
fCEditorHoverConfigurationBlock.performDefaults();
|
||||||
|
fFoldingConfigurationBlock.performDefaults();
|
||||||
|
|
||||||
super.performDefaults();
|
super.performDefaults();
|
||||||
|
|
||||||
|
@ -984,6 +993,8 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
||||||
*/
|
*/
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
|
|
||||||
|
fFoldingConfigurationBlock.dispose();
|
||||||
|
|
||||||
if (fCTextTools != null) {
|
if (fCTextTools != null) {
|
||||||
fCTextTools = null;
|
fCTextTools = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,349 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 QNX Software Systems 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.preferences;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.text.folding.CFoldingStructureProviderDescriptor;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.folding.CFoldingStructureProviderRegistry;
|
||||||
|
import org.eclipse.cdt.internal.ui.util.PixelConverter;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
|
import org.eclipse.cdt.ui.text.folding.ICFoldingPreferenceBlock;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.jface.text.Assert;
|
||||||
|
import org.eclipse.jface.viewers.ComboViewer;
|
||||||
|
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredContentProvider;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
import org.eclipse.jface.viewers.LabelProvider;
|
||||||
|
import org.eclipse.jface.viewers.SelectionChangedEvent;
|
||||||
|
import org.eclipse.jface.viewers.StructuredSelection;
|
||||||
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.custom.StackLayout;
|
||||||
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
import org.eclipse.swt.events.SelectionListener;
|
||||||
|
import org.eclipse.swt.graphics.Image;
|
||||||
|
import org.eclipse.swt.layout.FillLayout;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Button;
|
||||||
|
import org.eclipse.swt.widgets.Combo;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Control;
|
||||||
|
import org.eclipse.swt.widgets.Label;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configures C Editor folding preferences.
|
||||||
|
*
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
class FoldingConfigurationBlock {
|
||||||
|
|
||||||
|
private static class ErrorPreferences implements ICFoldingPreferenceBlock {
|
||||||
|
private String fMessage;
|
||||||
|
|
||||||
|
protected ErrorPreferences(String message) {
|
||||||
|
fMessage= message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.ICFoldingPreferences#createControl(org.eclipse.swt.widgets.Group)
|
||||||
|
*/
|
||||||
|
public Control createControl(Composite composite) {
|
||||||
|
Composite inner= new Composite(composite, SWT.NONE);
|
||||||
|
inner.setLayout(new FillLayout(SWT.VERTICAL));
|
||||||
|
|
||||||
|
Label label= new Label(inner, SWT.CENTER);
|
||||||
|
label.setText(fMessage);
|
||||||
|
|
||||||
|
return inner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void performOk() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void performDefaults() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispose() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/** The overlay preference store. */
|
||||||
|
protected final OverlayPreferenceStore fStore;
|
||||||
|
|
||||||
|
/* The controls */
|
||||||
|
private Combo fProviderCombo;
|
||||||
|
protected Button fFoldingCheckbox;
|
||||||
|
private ComboViewer fProviderViewer;
|
||||||
|
protected Map fProviderDescriptors;
|
||||||
|
private Composite fGroup;
|
||||||
|
private Map fProviderPreferences;
|
||||||
|
private Map fProviderControls;
|
||||||
|
private StackLayout fStackLayout;
|
||||||
|
|
||||||
|
|
||||||
|
public FoldingConfigurationBlock(OverlayPreferenceStore store) {
|
||||||
|
Assert.isNotNull(store);
|
||||||
|
fStore= store;
|
||||||
|
fStore.addKeys(createOverlayStoreKeys());
|
||||||
|
fProviderDescriptors= createListModel();
|
||||||
|
fProviderPreferences= new HashMap();
|
||||||
|
fProviderControls= new HashMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map createListModel() {
|
||||||
|
CFoldingStructureProviderRegistry reg= CUIPlugin.getDefault().getFoldingStructureProviderRegistry();
|
||||||
|
reg.reloadExtensions();
|
||||||
|
CFoldingStructureProviderDescriptor[] descs= reg.getFoldingProviderDescriptors();
|
||||||
|
Map map= new HashMap();
|
||||||
|
for (int i= 0; i < descs.length; i++) {
|
||||||
|
map.put(descs[i].getId(), descs[i]);
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
|
||||||
|
|
||||||
|
ArrayList overlayKeys= new ArrayList();
|
||||||
|
|
||||||
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_ENABLED));
|
||||||
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, PreferenceConstants.EDITOR_FOLDING_PROVIDER));
|
||||||
|
|
||||||
|
OverlayPreferenceStore.OverlayKey[] keys= new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
|
||||||
|
overlayKeys.toArray(keys);
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates page for folding preferences.
|
||||||
|
*
|
||||||
|
* @param parent the parent composite
|
||||||
|
* @return the control for the preference page
|
||||||
|
*/
|
||||||
|
Control createControl(Composite parent) {
|
||||||
|
|
||||||
|
Composite composite= new Composite(parent, SWT.NULL);
|
||||||
|
// assume parent page uses griddata
|
||||||
|
GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_FILL);
|
||||||
|
composite.setLayoutData(gd);
|
||||||
|
GridLayout layout= new GridLayout();
|
||||||
|
layout.numColumns= 2;
|
||||||
|
PixelConverter pc= new PixelConverter(composite);
|
||||||
|
layout.verticalSpacing= pc.convertHeightInCharsToPixels(1) / 2;
|
||||||
|
composite.setLayout(layout);
|
||||||
|
|
||||||
|
|
||||||
|
/* check box for new editors */
|
||||||
|
fFoldingCheckbox= new Button(composite, SWT.CHECK);
|
||||||
|
fFoldingCheckbox.setText(PreferencesMessages.getString("FoldingConfigurationBlock.enable")); //$NON-NLS-1$
|
||||||
|
gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING);
|
||||||
|
fFoldingCheckbox.setLayoutData(gd);
|
||||||
|
fFoldingCheckbox.addSelectionListener(new SelectionListener() {
|
||||||
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
boolean enabled= fFoldingCheckbox.getSelection();
|
||||||
|
fStore.setValue(PreferenceConstants.EDITOR_FOLDING_ENABLED, enabled);
|
||||||
|
updateCheckboxDependencies();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void widgetDefaultSelected(SelectionEvent e) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Label label= new Label(composite, SWT.CENTER);
|
||||||
|
gd= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
|
||||||
|
label.setLayoutData(gd);
|
||||||
|
|
||||||
|
/* list */
|
||||||
|
Composite comboComp= new Composite(composite, SWT.NONE);
|
||||||
|
gd= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
|
||||||
|
GridLayout gridLayout= new GridLayout(2, false);
|
||||||
|
gridLayout.marginWidth= 0;
|
||||||
|
comboComp.setLayout(gridLayout);
|
||||||
|
|
||||||
|
Label comboLabel= new Label(comboComp, SWT.CENTER);
|
||||||
|
gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER);
|
||||||
|
comboLabel.setLayoutData(gd);
|
||||||
|
comboLabel.setText(PreferencesMessages.getString("FoldingConfigurationBlock.combo_caption")); //$NON-NLS-1$
|
||||||
|
|
||||||
|
label= new Label(composite, SWT.CENTER);
|
||||||
|
gd= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
|
||||||
|
label.setLayoutData(gd);
|
||||||
|
|
||||||
|
fProviderCombo= new Combo(comboComp, SWT.READ_ONLY | SWT.DROP_DOWN);
|
||||||
|
gd= new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_CENTER);
|
||||||
|
fProviderCombo.setLayoutData(gd);
|
||||||
|
|
||||||
|
/* list viewer */
|
||||||
|
fProviderViewer= new ComboViewer(fProviderCombo);
|
||||||
|
fProviderViewer.setContentProvider(new IStructuredContentProvider() {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
|
||||||
|
*/
|
||||||
|
public void dispose() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
|
||||||
|
*/
|
||||||
|
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
|
||||||
|
*/
|
||||||
|
public Object[] getElements(Object inputElement) {
|
||||||
|
return fProviderDescriptors.values().toArray();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
fProviderViewer.setLabelProvider(new LabelProvider() {
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
|
||||||
|
*/
|
||||||
|
public Image getImage(Object element) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
|
||||||
|
*/
|
||||||
|
public String getText(Object element) {
|
||||||
|
return ((CFoldingStructureProviderDescriptor) element).getName();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
fProviderViewer.addSelectionChangedListener(new ISelectionChangedListener() {
|
||||||
|
|
||||||
|
public void selectionChanged(SelectionChangedEvent event) {
|
||||||
|
IStructuredSelection sel= (IStructuredSelection) event.getSelection();
|
||||||
|
if (!sel.isEmpty()) {
|
||||||
|
fStore.setValue(PreferenceConstants.EDITOR_FOLDING_PROVIDER, ((CFoldingStructureProviderDescriptor) sel.getFirstElement()).getId());
|
||||||
|
updateListDependencies();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
fProviderViewer.setInput(fProviderDescriptors);
|
||||||
|
fProviderViewer.refresh();
|
||||||
|
|
||||||
|
Composite groupComp= new Composite(composite, SWT.NONE);
|
||||||
|
gd= new GridData(GridData.FILL_BOTH);
|
||||||
|
gd.horizontalSpan= 2;
|
||||||
|
groupComp.setLayoutData(gd);
|
||||||
|
gridLayout= new GridLayout(1, false);
|
||||||
|
gridLayout.marginWidth= 0;
|
||||||
|
groupComp.setLayout(gridLayout);
|
||||||
|
|
||||||
|
/* contributed provider preferences. */
|
||||||
|
fGroup= new Composite(groupComp, SWT.NONE);
|
||||||
|
gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING);
|
||||||
|
fGroup.setLayoutData(gd);
|
||||||
|
fStackLayout= new StackLayout();
|
||||||
|
fGroup.setLayout(fStackLayout);
|
||||||
|
|
||||||
|
return composite;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateCheckboxDependencies() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateListDependencies() {
|
||||||
|
String id= fStore.getString(PreferenceConstants.EDITOR_FOLDING_PROVIDER);
|
||||||
|
CFoldingStructureProviderDescriptor desc= (CFoldingStructureProviderDescriptor) fProviderDescriptors.get(id);
|
||||||
|
ICFoldingPreferenceBlock prefs;
|
||||||
|
|
||||||
|
if (desc == null) {
|
||||||
|
// safety in case there is no such descriptor
|
||||||
|
String message= PreferencesMessages.getString("FoldingConfigurationBlock.error.not_exist"); //$NON-NLS-1$
|
||||||
|
CUIPlugin.getDefault().log(new Status(IStatus.WARNING, CUIPlugin.getPluginId(), IStatus.OK, message, null));
|
||||||
|
prefs= new ErrorPreferences(message);
|
||||||
|
} else {
|
||||||
|
prefs= (ICFoldingPreferenceBlock) fProviderPreferences.get(id);
|
||||||
|
if (prefs == null) {
|
||||||
|
try {
|
||||||
|
prefs= desc.createPreferences();
|
||||||
|
fProviderPreferences.put(id, prefs);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CUIPlugin.getDefault().log(e);
|
||||||
|
prefs= new ErrorPreferences(e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Control control= (Control) fProviderControls.get(id);
|
||||||
|
if (control == null) {
|
||||||
|
control= prefs.createControl(fGroup);
|
||||||
|
if (control == null) {
|
||||||
|
String message= PreferencesMessages.getString("FoldingConfigurationBlock.info.no_preferences"); //$NON-NLS-1$
|
||||||
|
control= new ErrorPreferences(message).createControl(fGroup);
|
||||||
|
} else {
|
||||||
|
fProviderControls.put(id, control);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fStackLayout.topControl= control;
|
||||||
|
control.pack();
|
||||||
|
fGroup.layout();
|
||||||
|
fGroup.getParent().layout();
|
||||||
|
|
||||||
|
prefs.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void initialize() {
|
||||||
|
restoreFromPreferences();
|
||||||
|
}
|
||||||
|
|
||||||
|
void performOk() {
|
||||||
|
for (Iterator it= fProviderPreferences.values().iterator(); it.hasNext();) {
|
||||||
|
ICFoldingPreferenceBlock prefs= (ICFoldingPreferenceBlock) it.next();
|
||||||
|
prefs.performOk();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void performDefaults() {
|
||||||
|
restoreFromPreferences();
|
||||||
|
for (Iterator it= fProviderPreferences.values().iterator(); it.hasNext();) {
|
||||||
|
ICFoldingPreferenceBlock prefs= (ICFoldingPreferenceBlock) it.next();
|
||||||
|
prefs.performDefaults();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispose() {
|
||||||
|
for (Iterator it= fProviderPreferences.values().iterator(); it.hasNext();) {
|
||||||
|
ICFoldingPreferenceBlock prefs= (ICFoldingPreferenceBlock) it.next();
|
||||||
|
prefs.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restoreFromPreferences() {
|
||||||
|
boolean enabled= fStore.getBoolean(PreferenceConstants.EDITOR_FOLDING_ENABLED);
|
||||||
|
fFoldingCheckbox.setSelection(enabled);
|
||||||
|
updateCheckboxDependencies();
|
||||||
|
|
||||||
|
String id= fStore.getString(PreferenceConstants.EDITOR_FOLDING_PROVIDER);
|
||||||
|
Object provider= fProviderDescriptors.get(id);
|
||||||
|
if (provider != null) {
|
||||||
|
fProviderViewer.setSelection(new StructuredSelection(provider), true);
|
||||||
|
updateListDependencies();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -189,3 +189,11 @@ AppearancePreferencePage.cviewGroupIncludes.label= Group the includes in the C/C
|
||||||
AppearancePreferencePage.outlineGroupIncludes.label= Group the includes in the outliner
|
AppearancePreferencePage.outlineGroupIncludes.label= Group the includes in the outliner
|
||||||
AppearancePreferencePage.note=Note:
|
AppearancePreferencePage.note=Note:
|
||||||
AppearancePreferencePage.preferenceOnlyEffectiveForNewPerspectives=This preference may only take effect on new perspectives
|
AppearancePreferencePage.preferenceOnlyEffectiveForNewPerspectives=This preference may only take effect on new perspectives
|
||||||
|
|
||||||
|
#Folding
|
||||||
|
CEditorPreferencePage.folding.title= &Folding
|
||||||
|
|
||||||
|
FoldingConfigurationBlock.enable= Enable folding when &opening a new editor
|
||||||
|
FoldingConfigurationBlock.combo_caption= Select folding to &use:
|
||||||
|
FoldingConfigurationBlock.info.no_preferences= The selected folding provider did not provide a preference control
|
||||||
|
FoldingConfigurationBlock.error.not_exist= The selected folding provider does not exist
|
||||||
|
|
|
@ -0,0 +1,115 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 QNX Software Systems 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.text.folding;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.ui.text.folding.ICFoldingPreferenceBlock;
|
||||||
|
import org.eclipse.cdt.ui.text.folding.ICFoldingStructureProvider;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
|
import org.eclipse.jface.text.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a contribution to the folding provider extension point.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final class CFoldingStructureProviderDescriptor {
|
||||||
|
|
||||||
|
/* extension point attribute names */
|
||||||
|
|
||||||
|
private static final String PREFERENCES_CLASS= "preferencesClass"; //$NON-NLS-1$
|
||||||
|
private static final String CLASS= "class"; //$NON-NLS-1$
|
||||||
|
private static final String NAME= "name"; //$NON-NLS-1$
|
||||||
|
private static final String ID= "id"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/** The identifier of the extension. */
|
||||||
|
private String fId;
|
||||||
|
/** The name of the extension. */
|
||||||
|
private String fName;
|
||||||
|
/** The class name of the provided <code>ICFoldingStructureProvider</code>. */
|
||||||
|
private String fClass;
|
||||||
|
/**
|
||||||
|
* <code>true</code> if the extension specifies a custom
|
||||||
|
* <code>ICFoldingPreferenceBlock</code>.
|
||||||
|
*/
|
||||||
|
private boolean fHasPreferences;
|
||||||
|
/** The configuration element of this extension. */
|
||||||
|
private IConfigurationElement fElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new descriptor.
|
||||||
|
*
|
||||||
|
* @param element the configuration element to read
|
||||||
|
*/
|
||||||
|
CFoldingStructureProviderDescriptor(IConfigurationElement element) {
|
||||||
|
fElement= element;
|
||||||
|
fId= element.getAttributeAsIs(ID);
|
||||||
|
Assert.isLegal(fId != null);
|
||||||
|
|
||||||
|
fName= element.getAttribute(NAME);
|
||||||
|
if (fName == null)
|
||||||
|
fName= fId;
|
||||||
|
|
||||||
|
fClass= element.getAttributeAsIs(CLASS);
|
||||||
|
Assert.isLegal(fClass != null);
|
||||||
|
|
||||||
|
if (element.getAttributeAsIs(PREFERENCES_CLASS) == null)
|
||||||
|
fHasPreferences= false;
|
||||||
|
else
|
||||||
|
fHasPreferences= true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a folding provider as described in the extension's xml.
|
||||||
|
*
|
||||||
|
* @return a new instance of the folding provider described by this
|
||||||
|
* descriptor
|
||||||
|
* @throws CoreException if creation fails
|
||||||
|
*/
|
||||||
|
public ICFoldingStructureProvider createProvider() throws CoreException {
|
||||||
|
ICFoldingStructureProvider prov= (ICFoldingStructureProvider) fElement.createExecutableExtension(CLASS);
|
||||||
|
return prov;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a preferences object as described in the extension's xml.
|
||||||
|
*
|
||||||
|
* @return a new instance of the reference provider described by this
|
||||||
|
* descriptor
|
||||||
|
* @throws CoreException if creation fails
|
||||||
|
*/
|
||||||
|
public ICFoldingPreferenceBlock createPreferences() throws CoreException {
|
||||||
|
if (fHasPreferences) {
|
||||||
|
ICFoldingPreferenceBlock prefs= (ICFoldingPreferenceBlock) fElement.createExecutableExtension(PREFERENCES_CLASS);
|
||||||
|
return prefs;
|
||||||
|
}
|
||||||
|
return new EmptyCFoldingPreferenceBlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the identifier of the described extension.
|
||||||
|
*
|
||||||
|
* @return Returns the id
|
||||||
|
*/
|
||||||
|
public String getId() {
|
||||||
|
return fId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name of the described extension.
|
||||||
|
*
|
||||||
|
* @return Returns the name
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return fName;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 QNX Software Systems 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.text.folding;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
|
import org.eclipse.cdt.ui.text.folding.ICFoldingStructureProvider;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
|
import org.eclipse.core.runtime.IExtensionRegistry;
|
||||||
|
import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
|
public class CFoldingStructureProviderRegistry {
|
||||||
|
|
||||||
|
private static final String EXTENSION_POINT= "foldingStructureProviders"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/** The map of descriptors, indexed by their identifiers. */
|
||||||
|
private Map fDescriptors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
*/
|
||||||
|
public CFoldingStructureProviderRegistry() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of <code>ICFoldingProviderDescriptor</code> describing
|
||||||
|
* all extension to the <code>foldingProviders</code> extension point.
|
||||||
|
*
|
||||||
|
* @return the list of extensions to the
|
||||||
|
* <code>quickDiffReferenceProvider</code> extension point.
|
||||||
|
*/
|
||||||
|
public CFoldingStructureProviderDescriptor[] getFoldingProviderDescriptors() {
|
||||||
|
synchronized (this) {
|
||||||
|
ensureRegistered();
|
||||||
|
return (CFoldingStructureProviderDescriptor[]) fDescriptors.values().toArray(new CFoldingStructureProviderDescriptor[fDescriptors.size()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the folding provider with identifier <code>id</code> or
|
||||||
|
* <code>null</code> if no such provider is registered.
|
||||||
|
*
|
||||||
|
* @param id the identifier for which a provider is wanted
|
||||||
|
* @return the corresponding provider, or <code>null</code> if none can be
|
||||||
|
* found
|
||||||
|
*/
|
||||||
|
public CFoldingStructureProviderDescriptor getFoldingProviderDescriptor(String id) {
|
||||||
|
synchronized (this) {
|
||||||
|
ensureRegistered();
|
||||||
|
return (CFoldingStructureProviderDescriptor) fDescriptors.get(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates and returns the provider that is currently configured in the
|
||||||
|
* preferences.
|
||||||
|
*
|
||||||
|
* @return the current provider according to the preferences
|
||||||
|
*/
|
||||||
|
public ICFoldingStructureProvider getCurrentFoldingProvider() {
|
||||||
|
String id= CUIPlugin.getDefault().getPreferenceStore().getString(PreferenceConstants.EDITOR_FOLDING_PROVIDER);
|
||||||
|
CFoldingStructureProviderDescriptor desc= getFoldingProviderDescriptor(id);
|
||||||
|
if (desc != null) {
|
||||||
|
try {
|
||||||
|
return desc.createProvider();
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CUIPlugin.getDefault().log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that the extensions are read and stored in
|
||||||
|
* <code>fDescriptors</code>.
|
||||||
|
*/
|
||||||
|
private void ensureRegistered() {
|
||||||
|
if (fDescriptors == null)
|
||||||
|
reloadExtensions();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads all extensions.
|
||||||
|
* <p>
|
||||||
|
* This method can be called more than once in
|
||||||
|
* order to reload from a changed extension registry.
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public void reloadExtensions() {
|
||||||
|
IExtensionRegistry registry= Platform.getExtensionRegistry();
|
||||||
|
Map map= new HashMap();
|
||||||
|
|
||||||
|
IConfigurationElement[] elements= registry.getConfigurationElementsFor(CUIPlugin.getPluginId(), EXTENSION_POINT);
|
||||||
|
for (int i= 0; i < elements.length; i++) {
|
||||||
|
CFoldingStructureProviderDescriptor desc= new CFoldingStructureProviderDescriptor(elements[i]);
|
||||||
|
map.put(desc.getId(), desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
synchronized(this) {
|
||||||
|
fDescriptors= Collections.unmodifiableMap(map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,150 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 QNX Software Systems 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.text.folding;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.preferences.OverlayPreferenceStore;
|
||||||
|
import org.eclipse.cdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
|
import org.eclipse.cdt.ui.text.folding.ICFoldingPreferenceBlock;
|
||||||
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
import org.eclipse.swt.events.SelectionListener;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Button;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Control;
|
||||||
|
import org.eclipse.swt.widgets.Label;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public class DefaultCFoldingPreferenceBlock implements ICFoldingPreferenceBlock {
|
||||||
|
|
||||||
|
private IPreferenceStore fStore;
|
||||||
|
protected OverlayPreferenceStore fOverlayStore;
|
||||||
|
private OverlayKey[] fKeys;
|
||||||
|
protected Map fCheckBoxes= new HashMap();
|
||||||
|
|
||||||
|
private SelectionListener fCheckBoxListener= new SelectionListener() {
|
||||||
|
public void widgetDefaultSelected(SelectionEvent e) {
|
||||||
|
}
|
||||||
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
Button button= (Button) e.widget;
|
||||||
|
fOverlayStore.setValue((String) fCheckBoxes.get(button), button.getSelection());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
public DefaultCFoldingPreferenceBlock() {
|
||||||
|
fStore= CUIPlugin.getDefault().getPreferenceStore();
|
||||||
|
fKeys= createKeys();
|
||||||
|
fOverlayStore= new OverlayPreferenceStore(fStore, fKeys);
|
||||||
|
}
|
||||||
|
|
||||||
|
private OverlayKey[] createKeys() {
|
||||||
|
ArrayList overlayKeys= new ArrayList();
|
||||||
|
|
||||||
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_MACROS));
|
||||||
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_FUNCTIONS));
|
||||||
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_METHODS));
|
||||||
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_STRUCTURES));
|
||||||
|
|
||||||
|
return (OverlayKey[]) overlayKeys.toArray(new OverlayKey[overlayKeys.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jdt.internal.ui.text.folding.ICFoldingPreferences#createControl(org.eclipse.swt.widgets.Group)
|
||||||
|
*/
|
||||||
|
public Control createControl(Composite composite) {
|
||||||
|
fOverlayStore.load();
|
||||||
|
fOverlayStore.start();
|
||||||
|
|
||||||
|
Composite inner= new Composite(composite, SWT.NONE);
|
||||||
|
GridLayout layout= new GridLayout(1, true);
|
||||||
|
layout.verticalSpacing= 3;
|
||||||
|
layout.marginWidth= 0;
|
||||||
|
inner.setLayout(layout);
|
||||||
|
|
||||||
|
Label label= new Label(inner, SWT.LEFT);
|
||||||
|
label.setText(FoldingMessages.getString("DefaultCFoldingPreferenceBlock.title")); //$NON-NLS-1$
|
||||||
|
|
||||||
|
addCheckBox(inner, FoldingMessages.getString("DefaultCFoldingPreferenceBlock.macros"), PreferenceConstants.EDITOR_FOLDING_MACROS, 0); //$NON-NLS-1$
|
||||||
|
addCheckBox(inner, FoldingMessages.getString("DefaultCFoldingPreferenceBlock.functions"), PreferenceConstants.EDITOR_FOLDING_FUNCTIONS, 0); //$NON-NLS-1$
|
||||||
|
addCheckBox(inner, FoldingMessages.getString("DefaultCFoldingPreferenceBlock.methods"), PreferenceConstants.EDITOR_FOLDING_METHODS, 0); //$NON-NLS-1$
|
||||||
|
addCheckBox(inner, FoldingMessages.getString("DefaultCFoldingPreferenceBlock.structures"), PreferenceConstants.EDITOR_FOLDING_STRUCTURES, 0); //$NON-NLS-1$
|
||||||
|
|
||||||
|
return inner;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Button addCheckBox(Composite parent, String label, String key, int indentation) {
|
||||||
|
Button checkBox= new Button(parent, SWT.CHECK);
|
||||||
|
checkBox.setText(label);
|
||||||
|
|
||||||
|
GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
|
||||||
|
gd.horizontalIndent= indentation;
|
||||||
|
gd.horizontalSpan= 1;
|
||||||
|
gd.grabExcessVerticalSpace= false;
|
||||||
|
checkBox.setLayoutData(gd);
|
||||||
|
checkBox.addSelectionListener(fCheckBoxListener);
|
||||||
|
|
||||||
|
fCheckBoxes.put(checkBox, key);
|
||||||
|
|
||||||
|
return checkBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initializeFields() {
|
||||||
|
Iterator it= fCheckBoxes.keySet().iterator();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
Button b= (Button) it.next();
|
||||||
|
String key= (String) fCheckBoxes.get(b);
|
||||||
|
b.setSelection(fOverlayStore.getBoolean(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.AbstractCFoldingPreferences#performOk()
|
||||||
|
*/
|
||||||
|
public void performOk() {
|
||||||
|
fOverlayStore.propagate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.AbstractCFoldingPreferences#initialize()
|
||||||
|
*/
|
||||||
|
public void initialize() {
|
||||||
|
initializeFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.AbstractCFoldingPreferences#performDefaults()
|
||||||
|
*/
|
||||||
|
public void performDefaults() {
|
||||||
|
fOverlayStore.loadDefaults();
|
||||||
|
initializeFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.AbstractCFoldingPreferences#dispose()
|
||||||
|
*/
|
||||||
|
public void dispose() {
|
||||||
|
fOverlayStore.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,477 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 QNX Software Systems 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.text.folding;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
|
import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||||
|
import org.eclipse.cdt.core.model.IParent;
|
||||||
|
import org.eclipse.cdt.core.model.ISourceRange;
|
||||||
|
import org.eclipse.cdt.core.model.ISourceReference;
|
||||||
|
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
import org.eclipse.cdt.ui.IWorkingCopyManager;
|
||||||
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
|
import org.eclipse.cdt.ui.text.folding.ICFoldingStructureProvider;
|
||||||
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
|
import org.eclipse.jface.text.BadLocationException;
|
||||||
|
import org.eclipse.jface.text.IDocument;
|
||||||
|
import org.eclipse.jface.text.Position;
|
||||||
|
import org.eclipse.jface.text.source.Annotation;
|
||||||
|
import org.eclipse.jface.text.source.IAnnotationModel;
|
||||||
|
import org.eclipse.jface.text.source.projection.IProjectionListener;
|
||||||
|
import org.eclipse.jface.text.source.projection.ProjectionAnnotation;
|
||||||
|
import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel;
|
||||||
|
import org.eclipse.jface.text.source.projection.ProjectionViewer;
|
||||||
|
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||||
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public class DefaultCFoldingStructureProvider implements IProjectionListener, ICFoldingStructureProvider {
|
||||||
|
|
||||||
|
private static class CProjectionAnnotation extends ProjectionAnnotation {
|
||||||
|
|
||||||
|
private ICElement fCElement;
|
||||||
|
private boolean fIsComment;
|
||||||
|
|
||||||
|
public CProjectionAnnotation(ICElement element, boolean isCollapsed, boolean isComment) {
|
||||||
|
super(isCollapsed);
|
||||||
|
fCElement= element;
|
||||||
|
fIsComment= isComment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICElement getElement() {
|
||||||
|
return fCElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setElement(ICElement element) {
|
||||||
|
fCElement= element;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isComment() {
|
||||||
|
return fIsComment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsComment(boolean isComment) {
|
||||||
|
fIsComment= isComment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ElementChangedListener implements IElementChangedListener {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jdt.core.IElementChangedListener#elementChanged(org.eclipse.jdt.core.ElementChangedEvent)
|
||||||
|
*/
|
||||||
|
public void elementChanged(ElementChangedEvent e) {
|
||||||
|
ICElementDelta delta= findElement(fInput, e.getDelta());
|
||||||
|
if (delta != null)
|
||||||
|
processDelta(delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ICElementDelta findElement(ICElement target, ICElementDelta delta) {
|
||||||
|
|
||||||
|
if (delta == null || target == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
ICElement element= delta.getElement();
|
||||||
|
|
||||||
|
if (element.getElementType() > ICElement.C_UNIT)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (target.equals(element))
|
||||||
|
return delta;
|
||||||
|
|
||||||
|
ICElementDelta[] children= delta.getAffectedChildren();
|
||||||
|
if (children == null || children.length == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
for (int i= 0; i < children.length; i++) {
|
||||||
|
ICElementDelta d= findElement(target, children[i]);
|
||||||
|
if (d != null)
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private IDocument fCachedDocument;
|
||||||
|
|
||||||
|
private ITextEditor fEditor;
|
||||||
|
private ProjectionViewer fViewer;
|
||||||
|
protected ICElement fInput;
|
||||||
|
private IElementChangedListener fElementListener;
|
||||||
|
|
||||||
|
private boolean fAllowCollapsing= false;
|
||||||
|
private boolean fCollapseMacros= false;
|
||||||
|
private boolean fCollapseFunctions= true;
|
||||||
|
private boolean fCollapseStructures= true;
|
||||||
|
private boolean fCollapseMethods= false;
|
||||||
|
|
||||||
|
public DefaultCFoldingStructureProvider() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void install(ITextEditor editor, ProjectionViewer viewer) {
|
||||||
|
if (editor instanceof CEditor) {
|
||||||
|
fEditor= editor;
|
||||||
|
fViewer= viewer;
|
||||||
|
fViewer.addProjectionListener(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void uninstall() {
|
||||||
|
if (isInstalled()) {
|
||||||
|
projectionDisabled();
|
||||||
|
fViewer.removeProjectionListener(this);
|
||||||
|
fViewer= null;
|
||||||
|
fEditor= null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean isInstalled() {
|
||||||
|
return fEditor != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.text.source.projection.IProjectionListener#projectionEnabled()
|
||||||
|
*/
|
||||||
|
public void projectionEnabled() {
|
||||||
|
// http://home.ott.oti.com/teams/wswb/anon/out/vms/index.html
|
||||||
|
// projectionEnabled messages are not always paired with projectionDisabled
|
||||||
|
// i.e. multiple enabled messages may be sent out.
|
||||||
|
// we have to make sure that we disable first when getting an enable
|
||||||
|
// message.
|
||||||
|
projectionDisabled();
|
||||||
|
|
||||||
|
if (fEditor instanceof CEditor) {
|
||||||
|
initialize();
|
||||||
|
fElementListener= new ElementChangedListener();
|
||||||
|
CoreModel.getDefault().addElementChangedListener(fElementListener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.text.source.projection.IProjectionListener#projectionDisabled()
|
||||||
|
*/
|
||||||
|
public void projectionDisabled() {
|
||||||
|
fCachedDocument= null;
|
||||||
|
if (fElementListener != null) {
|
||||||
|
CoreModel.getDefault().removeElementChangedListener(fElementListener);
|
||||||
|
fElementListener= null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initialize() {
|
||||||
|
|
||||||
|
if (!isInstalled())
|
||||||
|
return;
|
||||||
|
|
||||||
|
initializePreferences();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
IDocumentProvider provider= fEditor.getDocumentProvider();
|
||||||
|
fCachedDocument= provider.getDocument(fEditor.getEditorInput());
|
||||||
|
fAllowCollapsing= true;
|
||||||
|
|
||||||
|
if (fEditor instanceof CEditor) {
|
||||||
|
IWorkingCopyManager manager= CUIPlugin.getDefault().getWorkingCopyManager();
|
||||||
|
fInput= manager.getWorkingCopy(fEditor.getEditorInput());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fInput != null) {
|
||||||
|
ProjectionAnnotationModel model= (ProjectionAnnotationModel) fEditor.getAdapter(ProjectionAnnotationModel.class);
|
||||||
|
if (model != null) {
|
||||||
|
|
||||||
|
if (fInput instanceof IWorkingCopy) {
|
||||||
|
IWorkingCopy unit= (IWorkingCopy) fInput;
|
||||||
|
synchronized (unit) {
|
||||||
|
try {
|
||||||
|
unit.reconcile();
|
||||||
|
} catch (CModelException x) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map additions= computeAdditions((IParent) fInput);
|
||||||
|
model.removeAllAnnotations();
|
||||||
|
model.replaceAnnotations(null, additions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
fCachedDocument= null;
|
||||||
|
fAllowCollapsing= false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initializePreferences() {
|
||||||
|
IPreferenceStore store= CUIPlugin.getDefault().getPreferenceStore();
|
||||||
|
fCollapseFunctions= store.getBoolean(PreferenceConstants.EDITOR_FOLDING_FUNCTIONS);
|
||||||
|
fCollapseStructures= store.getBoolean(PreferenceConstants.EDITOR_FOLDING_STRUCTURES);
|
||||||
|
fCollapseMacros= store.getBoolean(PreferenceConstants.EDITOR_FOLDING_MACROS);
|
||||||
|
fCollapseMethods= store.getBoolean(PreferenceConstants.EDITOR_FOLDING_METHODS);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map computeAdditions(IParent parent) {
|
||||||
|
Map map= new HashMap();
|
||||||
|
try {
|
||||||
|
computeAdditions(parent.getChildren(), map);
|
||||||
|
} catch (CModelException x) {
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void computeAdditions(ICElement[] elements, Map map) throws CModelException {
|
||||||
|
for (int i= 0; i < elements.length; i++) {
|
||||||
|
ICElement element= elements[i];
|
||||||
|
|
||||||
|
computeAdditions(element, map);
|
||||||
|
|
||||||
|
if (element instanceof IParent) {
|
||||||
|
IParent parent= (IParent) element;
|
||||||
|
computeAdditions(parent.getChildren(), map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void computeAdditions(ICElement element, Map map) {
|
||||||
|
|
||||||
|
boolean createProjection= false;
|
||||||
|
|
||||||
|
boolean collapse= false;
|
||||||
|
switch (element.getElementType()) {
|
||||||
|
|
||||||
|
case ICElement.C_STRUCT:
|
||||||
|
case ICElement.C_CLASS:
|
||||||
|
collapse= fAllowCollapsing && fCollapseStructures;
|
||||||
|
createProjection= true;
|
||||||
|
break;
|
||||||
|
case ICElement.C_MACRO:
|
||||||
|
collapse= fAllowCollapsing && fCollapseMacros;
|
||||||
|
createProjection= true;
|
||||||
|
break;
|
||||||
|
case ICElement.C_FUNCTION:
|
||||||
|
collapse= fAllowCollapsing && fCollapseFunctions;
|
||||||
|
createProjection= true;
|
||||||
|
break;
|
||||||
|
case ICElement.C_METHOD:
|
||||||
|
collapse= fAllowCollapsing && fCollapseMethods;
|
||||||
|
createProjection= true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (createProjection) {
|
||||||
|
Position position= createProjectionPosition(element);
|
||||||
|
if (position != null) {
|
||||||
|
map.put(new CProjectionAnnotation(element, collapse, false), position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Position createProjectionPosition(ICElement element) {
|
||||||
|
|
||||||
|
if (fCachedDocument == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (element instanceof ISourceReference) {
|
||||||
|
ISourceReference reference= (ISourceReference) element;
|
||||||
|
ISourceRange range= reference.getSourceRange();
|
||||||
|
|
||||||
|
int start= fCachedDocument.getLineOfOffset(range.getStartPos());
|
||||||
|
int end= fCachedDocument.getLineOfOffset(range.getStartPos() + range.getLength());
|
||||||
|
if (start != end) {
|
||||||
|
int offset= fCachedDocument.getLineOffset(start);
|
||||||
|
int endOffset= fCachedDocument.getLineOffset(end + 1);
|
||||||
|
return new Position(offset, endOffset - offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (BadLocationException x) {
|
||||||
|
} catch (CModelException e) {
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void processDelta(ICElementDelta delta) {
|
||||||
|
|
||||||
|
if (!isInstalled())
|
||||||
|
return;
|
||||||
|
|
||||||
|
ProjectionAnnotationModel model= (ProjectionAnnotationModel) fEditor.getAdapter(ProjectionAnnotationModel.class);
|
||||||
|
if (model == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
IDocumentProvider provider= fEditor.getDocumentProvider();
|
||||||
|
fCachedDocument= provider.getDocument(fEditor.getEditorInput());
|
||||||
|
fAllowCollapsing= false;
|
||||||
|
|
||||||
|
Map additions= new HashMap();
|
||||||
|
List deletions= new ArrayList();
|
||||||
|
List updates= new ArrayList();
|
||||||
|
|
||||||
|
Map updated= computeAdditions((IParent) fInput);
|
||||||
|
Map previous= createAnnotationMap(model);
|
||||||
|
|
||||||
|
|
||||||
|
Iterator e= updated.keySet().iterator();
|
||||||
|
while (e.hasNext()) {
|
||||||
|
CProjectionAnnotation annotation= (CProjectionAnnotation) e.next();
|
||||||
|
ICElement element= annotation.getElement();
|
||||||
|
Position position= (Position) updated.get(annotation);
|
||||||
|
|
||||||
|
List annotations= (List) previous.get(element);
|
||||||
|
if (annotations == null) {
|
||||||
|
|
||||||
|
additions.put(annotation, position);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
Iterator x= annotations.iterator();
|
||||||
|
while (x.hasNext()) {
|
||||||
|
CProjectionAnnotation a= (CProjectionAnnotation) x.next();
|
||||||
|
if (annotation.isComment() == a.isComment()) {
|
||||||
|
Position p= model.getPosition(a);
|
||||||
|
if (p != null && !position.equals(p)) {
|
||||||
|
p.setOffset(position.getOffset());
|
||||||
|
p.setLength(position.getLength());
|
||||||
|
updates.add(a);
|
||||||
|
}
|
||||||
|
x.remove();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (annotations.isEmpty())
|
||||||
|
previous.remove(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
e= previous.values().iterator();
|
||||||
|
while (e.hasNext()) {
|
||||||
|
List list= (List) e.next();
|
||||||
|
int size= list.size();
|
||||||
|
for (int i= 0; i < size; i++)
|
||||||
|
deletions.add(list.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
match(model, deletions, additions, updates);
|
||||||
|
|
||||||
|
Annotation[] removals= new Annotation[deletions.size()];
|
||||||
|
deletions.toArray(removals);
|
||||||
|
Annotation[] changes= new Annotation[updates.size()];
|
||||||
|
updates.toArray(changes);
|
||||||
|
model.modifyAnnotations(removals, additions, changes);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
fCachedDocument= null;
|
||||||
|
fAllowCollapsing= true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void match(ProjectionAnnotationModel model, List deletions, Map additions, List changes) {
|
||||||
|
if (deletions.isEmpty() || (additions.isEmpty() && changes.isEmpty()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
List newDeletions= new ArrayList();
|
||||||
|
List newChanges= new ArrayList();
|
||||||
|
|
||||||
|
Iterator deletionIterator= deletions.iterator();
|
||||||
|
outer: while (deletionIterator.hasNext()) {
|
||||||
|
CProjectionAnnotation deleted= (CProjectionAnnotation) deletionIterator.next();
|
||||||
|
Position deletedPosition= model.getPosition(deleted);
|
||||||
|
if (deletedPosition == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Iterator changesIterator= changes.iterator();
|
||||||
|
while (changesIterator.hasNext()) {
|
||||||
|
CProjectionAnnotation changed= (CProjectionAnnotation) changesIterator.next();
|
||||||
|
if (deleted.isComment() == changed.isComment()) {
|
||||||
|
Position changedPosition= model.getPosition(changed);
|
||||||
|
if (changedPosition == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (deletedPosition.getOffset() == changedPosition.getOffset()) {
|
||||||
|
|
||||||
|
deletedPosition.setLength(changedPosition.getLength());
|
||||||
|
deleted.setElement(changed.getElement());
|
||||||
|
|
||||||
|
deletionIterator.remove();
|
||||||
|
newChanges.add(deleted);
|
||||||
|
|
||||||
|
changesIterator.remove();
|
||||||
|
newDeletions.add(changed);
|
||||||
|
|
||||||
|
continue outer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Iterator additionsIterator= additions.keySet().iterator();
|
||||||
|
while (additionsIterator.hasNext()) {
|
||||||
|
CProjectionAnnotation added= (CProjectionAnnotation) additionsIterator.next();
|
||||||
|
if (deleted.isComment() == added.isComment()) {
|
||||||
|
Position addedPosition= (Position) additions.get(added);
|
||||||
|
|
||||||
|
if (deletedPosition.getOffset() == addedPosition.getOffset()) {
|
||||||
|
|
||||||
|
deletedPosition.setLength(addedPosition.getLength());
|
||||||
|
deleted.setElement(added.getElement());
|
||||||
|
|
||||||
|
deletionIterator.remove();
|
||||||
|
newChanges.add(deleted);
|
||||||
|
|
||||||
|
additionsIterator.remove();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deletions.addAll(newDeletions);
|
||||||
|
changes.addAll(newChanges);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map createAnnotationMap(IAnnotationModel model) {
|
||||||
|
Map map= new HashMap();
|
||||||
|
Iterator e= model.getAnnotationIterator();
|
||||||
|
while (e.hasNext()) {
|
||||||
|
Object annotation= e.next();
|
||||||
|
if (annotation instanceof CProjectionAnnotation) {
|
||||||
|
CProjectionAnnotation c= (CProjectionAnnotation) annotation;
|
||||||
|
List list= (List) map.get(c.getElement());
|
||||||
|
if (list == null) {
|
||||||
|
list= new ArrayList(2);
|
||||||
|
map.put(c.getElement(), list);
|
||||||
|
}
|
||||||
|
list.add(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 QNX Software Systems 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.text.folding;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.ui.text.folding.ICFoldingPreferenceBlock;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Control;
|
||||||
|
import org.eclipse.swt.widgets.Label;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Empty preference block for extensions to the
|
||||||
|
* <code>org.eclipse.jdt.ui.javaFoldingStructureProvider</code> extension
|
||||||
|
* point that do not specify their own.
|
||||||
|
*
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public class EmptyCFoldingPreferenceBlock implements ICFoldingPreferenceBlock {
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.ICFoldingPreferences#createControl(org.eclipse.swt.widgets.Group)
|
||||||
|
*/
|
||||||
|
public Control createControl(Composite composite) {
|
||||||
|
Composite inner= new Composite(composite, SWT.NONE);
|
||||||
|
inner.setLayout(new GridLayout(3, false));
|
||||||
|
|
||||||
|
Label label= new Label(inner, SWT.CENTER);
|
||||||
|
GridData gd= new GridData(GridData.FILL_BOTH);
|
||||||
|
gd.widthHint= 30;
|
||||||
|
label.setLayoutData(gd);
|
||||||
|
|
||||||
|
label= new Label(inner, SWT.CENTER);
|
||||||
|
label.setText(FoldingMessages.getString("EmptyCFoldingPreferenceBlock.emptyCaption")); //$NON-NLS-1$
|
||||||
|
gd= new GridData(GridData.CENTER);
|
||||||
|
label.setLayoutData(gd);
|
||||||
|
|
||||||
|
label= new Label(inner, SWT.CENTER);
|
||||||
|
gd= new GridData(GridData.FILL_BOTH);
|
||||||
|
gd.widthHint= 30;
|
||||||
|
label.setLayoutData(gd);
|
||||||
|
|
||||||
|
return inner;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.ICFoldingPreferenceBlock#initialize()
|
||||||
|
*/
|
||||||
|
public void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.ICFoldingPreferenceBlock#performOk()
|
||||||
|
*/
|
||||||
|
public void performOk() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.ICFoldingPreferenceBlock#performDefaults()
|
||||||
|
*/
|
||||||
|
public void performDefaults() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.ui.text.folding.ICFoldingPreferenceBlock#dispose()
|
||||||
|
*/
|
||||||
|
public void dispose() {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 QNX Software Systems 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.text.folding;
|
||||||
|
|
||||||
|
import java.util.MissingResourceException;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
class FoldingMessages {
|
||||||
|
|
||||||
|
private static final String BUNDLE_NAME= FoldingMessages.class.getName();
|
||||||
|
|
||||||
|
private static final ResourceBundle RESOURCE_BUNDLE= ResourceBundle.getBundle(BUNDLE_NAME);
|
||||||
|
|
||||||
|
private FoldingMessages() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getString(String key) {
|
||||||
|
try {
|
||||||
|
return RESOURCE_BUNDLE.getString(key);
|
||||||
|
} catch (MissingResourceException e) {
|
||||||
|
return '!' + key + '!';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
###############################################################################
|
||||||
|
# Copyright (c) 2000, 2004 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
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
|
||||||
|
DefaultCFoldingPreferenceBlock.title= Initially fold these region types:
|
||||||
|
DefaultCFoldingPreferenceBlock.macros= &Macros
|
||||||
|
DefaultCFoldingPreferenceBlock.functions= &Functions
|
||||||
|
DefaultCFoldingPreferenceBlock.methods= &Methods
|
||||||
|
DefaultCFoldingPreferenceBlock.structures= &Structures
|
||||||
|
|
||||||
|
EmptyCFoldingPreferenceBlock.emptyCaption=
|
|
@ -41,6 +41,7 @@ import org.eclipse.cdt.internal.ui.editor.asm.AsmTextTools;
|
||||||
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
||||||
import org.eclipse.cdt.internal.ui.text.PreferencesAdapter;
|
import org.eclipse.cdt.internal.ui.text.PreferencesAdapter;
|
||||||
import org.eclipse.cdt.internal.ui.text.c.hover.CEditorTextHoverDescriptor;
|
import org.eclipse.cdt.internal.ui.text.c.hover.CEditorTextHoverDescriptor;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.folding.CFoldingStructureProviderRegistry;
|
||||||
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
|
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
|
||||||
import org.eclipse.cdt.internal.ui.util.ProblemMarkerManager;
|
import org.eclipse.cdt.internal.ui.util.ProblemMarkerManager;
|
||||||
import org.eclipse.cdt.internal.ui.util.Util;
|
import org.eclipse.cdt.internal.ui.util.Util;
|
||||||
|
@ -54,7 +55,6 @@ import org.eclipse.core.runtime.IExtensionPoint;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Platform;
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.jface.action.Action;
|
|
||||||
import org.eclipse.jface.action.GroupMarker;
|
import org.eclipse.jface.action.GroupMarker;
|
||||||
import org.eclipse.jface.action.IMenuManager;
|
import org.eclipse.jface.action.IMenuManager;
|
||||||
import org.eclipse.jface.action.Separator;
|
import org.eclipse.jface.action.Separator;
|
||||||
|
@ -104,6 +104,13 @@ public class CUIPlugin extends AbstractUIPlugin {
|
||||||
private ImageDescriptorRegistry fImageDescriptorRegistry;
|
private ImageDescriptorRegistry fImageDescriptorRegistry;
|
||||||
private CEditorTextHoverDescriptor[] fCEditorTextHoverDescriptors;
|
private CEditorTextHoverDescriptor[] fCEditorTextHoverDescriptors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The extension point registry for the <code>org.eclipse.jdt.ui.javaFoldingStructureProvider</code>
|
||||||
|
* extension point.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private CFoldingStructureProviderRegistry fFoldingStructureProviderRegistry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The combined preference store.
|
* The combined preference store.
|
||||||
* @since 3.0
|
* @since 3.0
|
||||||
|
@ -707,4 +714,17 @@ public class CUIPlugin extends AbstractUIPlugin {
|
||||||
return (String[]) CActions.toArray(new String[CActions.size()]);
|
return (String[]) CActions.toArray(new String[CActions.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the registry of the extensions to the <code>org.eclipse.jdt.ui.javaFoldingStructureProvider</code>
|
||||||
|
* extension point.
|
||||||
|
*
|
||||||
|
* @return the registry of contributed <code>IJavaFoldingStructureProvider</code>
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public synchronized CFoldingStructureProviderRegistry getFoldingStructureProviderRegistry() {
|
||||||
|
if (fFoldingStructureProviderRegistry == null)
|
||||||
|
fFoldingStructureProviderRegistry= new CFoldingStructureProviderRegistry();
|
||||||
|
return fFoldingStructureProviderRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -288,6 +288,64 @@ public class PreferenceConstants {
|
||||||
*/
|
*/
|
||||||
public static final String CVIEW_GROUP_INCLUDES= "org.eclipse.cdt.ui.cview.groupincludes"; //$NON-NLS-1$
|
public static final String CVIEW_GROUP_INCLUDES= "org.eclipse.cdt.ui.cview.groupincludes"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A named preference that controls whether folding is enabled in the C editor.
|
||||||
|
* <p>
|
||||||
|
* Value is of type <code>Boolean</code>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final String EDITOR_FOLDING_ENABLED= "editor_folding_enabled"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A named preference that stores the configured folding provider.
|
||||||
|
* <p>
|
||||||
|
* Value is of type <code>String</code>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final String EDITOR_FOLDING_PROVIDER= "editor_folding_provider"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A named preference that stores the value for Structure folding for the default folding provider.
|
||||||
|
* <p>
|
||||||
|
* Value is of type <code>Boolean</code>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public static final String EDITOR_FOLDING_STRUCTURES= "editor_folding_default_structures"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A named preference that stores the value for functions folding for the default folding provider.
|
||||||
|
* <p>
|
||||||
|
* Value is of type <code>Boolean</code>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public static final String EDITOR_FOLDING_FUNCTIONS= "editor_folding_default_functions"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A named preference that stores the value for method folding for the default folding provider.
|
||||||
|
* <p>
|
||||||
|
* Value is of type <code>Boolean</code>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public static final String EDITOR_FOLDING_METHODS= "editor_folding_default_methods"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A named preference that stores the value for macros folding for the default folding provider.
|
||||||
|
* <p>
|
||||||
|
* Value is of type <code>Boolean</code>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public static final String EDITOR_FOLDING_MACROS= "editor_folding_default_macros"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the CDT-UI preference store.
|
* Returns the CDT-UI preference store.
|
||||||
*
|
*
|
||||||
|
@ -318,5 +376,14 @@ public class PreferenceConstants {
|
||||||
store.setDefault(PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIER_MASKS, "org.eclipse.cdt.ui.BestMatchHover;0;org.eclipse.cdt.ui.CSourceHover;" + SWT.MOD1); //$NON-NLS-1$
|
store.setDefault(PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIER_MASKS, "org.eclipse.cdt.ui.BestMatchHover;0;org.eclipse.cdt.ui.CSourceHover;" + SWT.MOD1); //$NON-NLS-1$
|
||||||
//store.setDefault(PreferenceConstants.EDITOR_SHOW_TEXT_HOVER_AFFORDANCE, true);
|
//store.setDefault(PreferenceConstants.EDITOR_SHOW_TEXT_HOVER_AFFORDANCE, true);
|
||||||
|
|
||||||
|
// folding
|
||||||
|
store.setDefault(PreferenceConstants.EDITOR_FOLDING_ENABLED, false);
|
||||||
|
store.setDefault(PreferenceConstants.EDITOR_FOLDING_PROVIDER, "org.eclipse.cdt.ui.text.defaultFoldingProvider"); //$NON-NLS-1$
|
||||||
|
store.setDefault(PreferenceConstants.EDITOR_FOLDING_FUNCTIONS, false);
|
||||||
|
store.setDefault(PreferenceConstants.EDITOR_FOLDING_STRUCTURES, true);
|
||||||
|
store.setDefault(PreferenceConstants.EDITOR_FOLDING_METHODS, false);
|
||||||
|
store.setDefault(PreferenceConstants.EDITOR_FOLDING_MACROS, true);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 QNX Software Systems 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.ui.text.folding;
|
||||||
|
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Control;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contributors to the <code>org.eclipse.jdt.ui.foldingStructureProvider</code> extension point
|
||||||
|
* can specify an implementation of this interface to be displayed on the C > Editor > Folding
|
||||||
|
* preference page.
|
||||||
|
* <p>
|
||||||
|
* Clients may implement this interface.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ICFoldingPreferenceBlock {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the control that will be displayed on the C > Editor > Folding
|
||||||
|
* preference page.
|
||||||
|
*
|
||||||
|
* @param parent the parent composite to which to add the preferences control
|
||||||
|
* @return the control that was added to <code>parent</code>
|
||||||
|
*/
|
||||||
|
Control createControl(Composite parent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called after creating the control. Implementations should load the
|
||||||
|
* preferences values and update the controls accordingly.
|
||||||
|
*/
|
||||||
|
void initialize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the <code>OK</code> button is pressed on the preference
|
||||||
|
* page. Implementations should commit the configured preference settings
|
||||||
|
* into their form of preference storage.
|
||||||
|
*/
|
||||||
|
void performOk();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the <code>Defaults</code> button is pressed on the
|
||||||
|
* preference page. Implementation should reset any preference settings to
|
||||||
|
* their default values and adjust the controls accordingly.
|
||||||
|
*/
|
||||||
|
void performDefaults();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the preference page is being disposed. Implementations should
|
||||||
|
* free any resources they are holding on to.
|
||||||
|
*/
|
||||||
|
void dispose();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2004 QNX Software Systems 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.ui.text.folding;
|
||||||
|
|
||||||
|
import org.eclipse.jface.text.source.projection.ProjectionViewer;
|
||||||
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contributors to the
|
||||||
|
* <code>org.eclipse.jdt.ui.foldingStructureProvider</code> extension
|
||||||
|
* point must specify an implementation of this interface which will create and
|
||||||
|
* maintain {@link org.eclipse.jface.text.source.projection.ProjectionAnnotation} objects
|
||||||
|
* that define folded regions in the the {@link org.eclipse.jface.text.source.projection.ProjectionViewer}.
|
||||||
|
* <p>
|
||||||
|
* Clients may implement this interface.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ICFoldingStructureProvider {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs this structure provider on the given editor and viewer.
|
||||||
|
* Implementations should listen to the projection events generated by
|
||||||
|
* <code>viewer</code> and enable / disable generation of projection
|
||||||
|
* structure accordingly.
|
||||||
|
*
|
||||||
|
* @param editor the editor that this provider works on
|
||||||
|
* @param viewer the projection viewer that displays the annotations created
|
||||||
|
* by this structure provider
|
||||||
|
*/
|
||||||
|
public abstract void install(ITextEditor editor, ProjectionViewer viewer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstalls this structure provider. Any references to editors or viewers
|
||||||
|
* should be cleared.
|
||||||
|
*/
|
||||||
|
public abstract void uninstall();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (Re-)initializes the structure provided by the receiver.
|
||||||
|
*/
|
||||||
|
public abstract void initialize();
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue