1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

2004-08-04 Alain Magloire

Implementation of Grouping for includes.
	* src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java
	* src/org/eclipse/cdt/internal/ui/ICHelpContextIds.java
	* src/org/eclipse/cdt/internal/ui/cview/CView.java
	* src/org/eclipse/cdt/internal/ui/cview/CViewContentProvider.java
	* src/org/eclipse/cdt/internal/ui/cview/IncludeRefContainer.java
	* src/org/eclipse/cdt/internal/ui/cview/LibraryRefContainer.java
	* src/org/eclipse/cdt/internal/ui/editor/CContentOutlinerProvider.java
	* src/org/eclipse/cdt/internal/ui/preferences/AppearancePreferencePage.java
	* src/org/eclipse/cdt/internal/ui/preferences/CPluginPreferencePage.java
	* src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties
	* src/org/eclipse/cdt/ui/CElementGrouping.java
	* src/org/eclipse/cdt/ui/CElementSorter.java
	* src/org/eclipse/cdt/ui/IncludesGrouping.java
	* src/org/eclipse/cdt/ui/PreferenceConstants.java
This commit is contained in:
Alain Magloire 2004-08-04 17:05:39 +00:00
parent 16d71675fa
commit e4e81a75b2
17 changed files with 484 additions and 163 deletions

View file

@ -1,3 +1,21 @@
2004-08-04 Alain Magloire
Implementation of Grouping for includes.
* src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java
* src/org/eclipse/cdt/internal/ui/ICHelpContextIds.java
* src/org/eclipse/cdt/internal/ui/cview/CView.java
* src/org/eclipse/cdt/internal/ui/cview/CViewContentProvider.java
* src/org/eclipse/cdt/internal/ui/cview/IncludeRefContainer.java
* src/org/eclipse/cdt/internal/ui/cview/LibraryRefContainer.java
* src/org/eclipse/cdt/internal/ui/editor/CContentOutlinerProvider.java
* src/org/eclipse/cdt/internal/ui/preferences/AppearancePreferencePage.java
* src/org/eclipse/cdt/internal/ui/preferences/CPluginPreferencePage.java
* src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties
* src/org/eclipse/cdt/ui/CElementGrouping.java
* src/org/eclipse/cdt/ui/CElementSorter.java
* src/org/eclipse/cdt/ui/IncludesGrouping.java
* src/org/eclipse/cdt/ui/PreferenceConstants.java
2004-08-03 Tanya Wolff
Fix for 71033: English "Find Refs" in Workbench Key preferences.

View file

@ -236,4 +236,5 @@ annotationHoverDescription= Shows the description of the selected annotation.
problemHover= Problem Description
problemHoverDescription= Shows the description of the selected problem.
#
appearancePrefName= Appearance

View file

@ -403,6 +403,12 @@
category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage"
name="%CDTSearch.name"
id="org.eclipse.cdt.ui.preferences.CSearchPreferencePage"/>
<page
name="%appearancePrefName"
category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage"
class="org.eclipse.cdt.internal.ui.preferences.AppearancePreferencePage"
id="org.eclipse.cdt.ui.preferences.AppearancePreferencePage">
</page>
<!--page
name="%WorkInProgress.name"
category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage"

View file

@ -22,7 +22,9 @@ import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.ISourceRoot;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.ui.CElementGrouping;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.IncludesGrouping;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@ -57,15 +59,17 @@ public class BaseCElementContentProvider implements ITreeContentProvider {
protected boolean fProvideMembers= false;
protected boolean fProvideWorkingCopy= false;
protected boolean fIncludesGrouping= false;
public BaseCElementContentProvider() {
this(false, false);
}
public BaseCElementContentProvider(boolean provideMembers, boolean provideWorkingCopy) {
fProvideMembers= provideMembers;
fProvideMembers= provideMembers;
fProvideWorkingCopy= provideWorkingCopy;
}
/**
* Returns whether the members are provided when asking
* for a TU's or ClassFile's children.
@ -98,13 +102,22 @@ public class BaseCElementContentProvider implements ITreeContentProvider {
return fProvideWorkingCopy;
}
/* (non-Cdoc)
* Method declared on IStructuredContentProvider.
/**
* Can elements be group.
* @return
*/
public Object[] getElements(Object parent) {
return getChildren(parent);
public boolean areIncludesGroup() {
return fIncludesGrouping;
}
/**
* Allow Elements to be group.
* @param b
*/
public void setIncludesGrouping(boolean b) {
fIncludesGrouping = b;
}
/* (non-Cdoc)
* Method declared on IContentProvider.
*/
@ -117,6 +130,13 @@ public class BaseCElementContentProvider implements ITreeContentProvider {
public void dispose() {
}
/* (non-Cdoc)
* Method declared on IStructuredContentProvider.
*/
public Object[] getElements(Object parent) {
return getChildren(parent);
}
/* (non-Cdoc)
* Method declared on ITreeContentProvider.
*/
@ -131,26 +151,22 @@ public class BaseCElementContentProvider implements ITreeContentProvider {
return getSourceRoots((ICProject)element);
} else if (element instanceof ICContainer) {
return getCResources((ICContainer)element);
} else if (element instanceof IBinaryContainer) {
return NO_CHILDREN; // we deal with this in the CVIewContentProvider
} else if (element instanceof IArchiveContainer) {
return NO_CHILDREN; // we deal with this in the CViewContentProvider
} else if (element instanceof ITranslationUnit) {
// if we want to get the chidren of a translation unit
if (fProvideMembers) {
// if we want to use the working copy of it
if(fProvideWorkingCopy){
ITranslationUnit tu = (ITranslationUnit)element;
if (fProvideWorkingCopy){
// if it is not already a working copy
if(!(element instanceof IWorkingCopy)){
if (!(element instanceof IWorkingCopy)){
// if it has a valid working copy
ITranslationUnit tu = (ITranslationUnit)element;
IWorkingCopy copy = tu.findSharedWorkingCopy(CUIPlugin.getDefault().getBufferFactory());
if(copy != null) {
return ((IParent)copy).getChildren();
if (copy != null) {
tu = copy;
}
}
}
return ((IParent)element).getChildren();
return getTranslationUnitChildren(tu);
}
} else if (element instanceof IParent) {
return ((IParent)element).getChildren();
@ -158,6 +174,8 @@ public class BaseCElementContentProvider implements ITreeContentProvider {
return getResources((IProject)element);
} else if (element instanceof IFolder) {
return getResources((IFolder)element);
} else if (element instanceof CElementGrouping) {
return ((CElementGrouping)element).getChildren(element);
}
} catch (CModelException e) {
//CUIPlugin.getDefault().log(e);
@ -192,16 +210,6 @@ public class BaseCElementContentProvider implements ITreeContentProvider {
return true;
}
if (element instanceof IBinaryContainer) {
try {
IBinaryContainer cont = (IBinaryContainer)element;
IBinary[] bins = getExecutables(cont);
return (bins != null) && bins.length > 0;
} catch (CModelException e) {
return false;
}
}
if (element instanceof IParent) {
// when we have C children return true, else we fetch all the children
if (((IParent)element).hasChildren()) {
@ -297,6 +305,26 @@ public class BaseCElementContentProvider implements ITreeContentProvider {
return objects;
}
protected Object[] getTranslationUnitChildren(ITranslationUnit unit) throws CModelException {
if (fIncludesGrouping) {
boolean hasInclude = false;
ICElement[] children = unit.getChildren();
ArrayList list = new ArrayList(children.length);
for (int i = 0; i < children.length; i++) {
if (children[i].getElementType() != ICElement.C_INCLUDE) {
list.add(children[i]);
} else {
hasInclude = true;
}
}
if (hasInclude) {
list.add (0, new IncludesGrouping(unit));
}
return list.toArray();
}
return unit.getChildren();
}
protected Object[] getCResources(ICContainer container) throws CModelException {
Object[] objects = null;
Object[] children = container.getChildren();
@ -419,27 +447,6 @@ public class BaseCElementContentProvider implements ITreeContentProvider {
return true;
}
protected IBinary[] getExecutables(ICProject cproject) throws CModelException {
IBinaryContainer container = cproject.getBinaryContainer();
return getExecutables(container);
}
protected IBinary[] getExecutables(IBinaryContainer container) throws CModelException {
ICElement[] celements = container.getChildren();
ArrayList list = new ArrayList(celements.length);
for (int i = 0; i < celements.length; i++) {
if (celements[i] instanceof IBinary) {
IBinary bin = (IBinary)celements[i];
if (bin.isExecutable() || bin.isSharedLib()) {
list.add(bin);
}
}
}
IBinary[] bins = new IBinary[list.size()];
list.toArray(bins);
return bins;
}
protected IBinary[] getBinaries(ICProject cproject) throws CModelException {
IBinaryContainer container = cproject.getBinaryContainer();
return getBinaries(container);

View file

@ -68,6 +68,8 @@ public interface ICHelpContextIds {
public static final String PROJECT_REFERENCES = PREFIX + "std_prop_references"; //$NON-NLS-1$
public static final String PROJECT_INCLUDE_PATHS_SYMBOLS = PREFIX + "std_prop_include"; //$NON-NLS-1$
public static final String APPEARANCE_PREFERENCE_PAGE = PREFIX + "appearance_preference_page_context";
// Console view
public static final String CLEAR_CONSOLE_ACTION = PREFIX + "clear_console_action_context"; //$NON-NLS-1$
public static final String CLEAR_CONSOLE_VIEW = PREFIX + "clear_console_view_context"; //$NON-NLS-1$

View file

@ -35,7 +35,6 @@ import org.eclipse.cdt.internal.ui.preferences.CPluginPreferencePage;
import org.eclipse.cdt.internal.ui.util.EditorUtility;
import org.eclipse.cdt.internal.ui.util.ProblemTreeViewer;
import org.eclipse.cdt.ui.CElementContentProvider;
import org.eclipse.cdt.ui.CElementLabelProvider;
import org.eclipse.cdt.ui.CElementSorter;
import org.eclipse.cdt.ui.CLocalSelectionTransfer;
import org.eclipse.cdt.ui.CUIPlugin;
@ -52,6 +51,7 @@ import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
@ -408,7 +408,7 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha
* Sets the content provider for the viewer.
*/
void initContentProvider(TreeViewer viewer) {
CElementContentProvider provider = createContentProvider();
IContentProvider provider = createContentProvider();
viewer.setContentProvider(provider);
}
@ -557,12 +557,15 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha
return new ProblemTreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
}
protected CElementContentProvider createContentProvider() {
boolean showCUChildren = CPluginPreferencePage.showCompilationUnitChildren();
return new CViewContentProvider(showCUChildren, true);
protected IContentProvider createContentProvider() {
boolean showCUChildren = PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.PREF_SHOW_CU_CHILDREN);
boolean groupIncludes = PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.CVIEW_GROUP_INCLUDES);
CViewContentProvider provider = new CViewContentProvider(showCUChildren, true);
provider.setIncludesGrouping(groupIncludes);
return provider;
}
protected CElementLabelProvider createLabelProvider() {
protected ILabelProvider createLabelProvider() {
return new CViewLabelProvider();
}
@ -809,8 +812,11 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha
String property = event.getProperty();
if (property.equals(PreferenceConstants.PREF_SHOW_CU_CHILDREN)) {
boolean showCUChildren = CPluginPreferencePage.showCompilationUnitChildren();
((CElementContentProvider) viewer.getContentProvider()).setProvideMembers(showCUChildren);
boolean showCUChildren = PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.PREF_SHOW_CU_CHILDREN);
IContentProvider provider = viewer.getContentProvider();
if (provider instanceof CElementContentProvider) {
((CElementContentProvider) provider).setProvideMembers(showCUChildren);
}
refreshViewer = true;
} else if (property.equals(PreferenceConstants.PREF_LINK_TO_EDITOR)) {
CViewActionGroup group = getActionGroup();
@ -818,6 +824,13 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha
boolean enable = isLinkingEnabled();
((MainActionGroup)group).toggleLinkingAction.setChecked(enable);
}
} else if (property.equals(PreferenceConstants.CVIEW_GROUP_INCLUDES)) {
boolean groupIncludes = PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.CVIEW_GROUP_INCLUDES);
IContentProvider provider = viewer.getContentProvider();
if (provider instanceof CElementContentProvider) {
((CElementContentProvider) provider).setIncludesGrouping(groupIncludes);
}
refreshViewer = true;
}
if (refreshViewer) {

View file

@ -12,7 +12,9 @@
package org.eclipse.cdt.internal.ui.cview;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.IArchive;
import org.eclipse.cdt.core.model.IArchiveContainer;
import org.eclipse.cdt.core.model.IBinary;
import org.eclipse.cdt.core.model.IBinaryContainer;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IIncludeReference;
@ -36,6 +38,7 @@ public class CViewContentProvider extends CElementContentProvider {
*/
public CViewContentProvider(boolean provideMembers, boolean provideWorkingCopy) {
super(provideMembers, provideWorkingCopy);
setIncludesGrouping(true);
}
@ -49,7 +52,7 @@ public class CViewContentProvider extends CElementContentProvider {
if (element instanceof ICProject) {
extras = getProjectChildren((ICProject)element);
} else if (element instanceof IBinaryContainer) {
extras = getExecutables((IBinaryContainer)element);
extras = getBinaries((IBinaryContainer)element);
} else if (element instanceof IArchiveContainer) {
extras = getArchives((IArchiveContainer)element);
} else if (element instanceof LibraryRefContainer) {
@ -76,7 +79,7 @@ public class CViewContentProvider extends CElementContentProvider {
extras = new Object[] {archive};
}
IBinaryContainer bin = cproject.getBinaryContainer();
if (getExecutables(bin).length > 0) {
if (getBinaries(bin).length > 0) {
Object[] o = new Object[] {bin};
if (extras != null && extras.length > 0) {
extras = concatenate(extras, o);
@ -130,4 +133,27 @@ public class CViewContentProvider extends CElementContentProvider {
}
return parent;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
public boolean hasChildren(Object element) {
if (element instanceof IBinaryContainer) {
try {
IBinaryContainer cont = (IBinaryContainer)element;
IBinary[] bins = getBinaries(cont);
return (bins != null) && bins.length > 0;
} catch (CModelException e) {
return false;
}
} else if (element instanceof IArchiveContainer) {
try {
IArchiveContainer cont = (IArchiveContainer)element;
IArchive[] ars = getArchives(cont);
return (ars != null) && ars.length > 0;
} catch (CModelException e) {
return false;
}
}
return super.hasChildren(element);
}
}

View file

@ -17,8 +17,8 @@ import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IIncludeReference;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.ui.CElementGrouping;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.model.IWorkbenchAdapter;
@ -26,7 +26,7 @@ import org.eclipse.ui.model.IWorkbenchAdapter;
/**
* IncludeRefContainer
*/
public class IncludeRefContainer implements IAdaptable, IWorkbenchAdapter{
public class IncludeRefContainer extends CElementGrouping {
private Object[] EMPTY = new Object[0];
ICProject fCProject;
@ -35,6 +35,7 @@ public class IncludeRefContainer implements IAdaptable, IWorkbenchAdapter{
*
*/
public IncludeRefContainer(ICProject cproject) {
super(INCLUDE_REF_CONTAINER);
fCProject = cproject;
}

View file

@ -17,8 +17,8 @@ import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.ILibraryReference;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.ui.CElementGrouping;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.model.IWorkbenchAdapter;
@ -26,7 +26,7 @@ import org.eclipse.ui.model.IWorkbenchAdapter;
/**
* VirtualGrouping
*/
public class LibraryRefContainer implements IAdaptable, IWorkbenchAdapter {
public class LibraryRefContainer extends CElementGrouping {
private Object[] EMPTY = new Object[0];
private ICProject fCProject;
@ -35,6 +35,7 @@ public class LibraryRefContainer implements IAdaptable, IWorkbenchAdapter {
*
*/
public LibraryRefContainer(ICProject cproject) {
super(LIBRARY_REF_CONTAINER);
fCProject = cproject;
}

View file

@ -10,9 +10,6 @@
***********************************************************************/
package org.eclipse.cdt.internal.ui.editor;
import java.util.ArrayList;
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;
@ -20,12 +17,10 @@ import org.eclipse.cdt.core.model.ICElementDelta;
import org.eclipse.cdt.core.model.IElementChangedListener;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.ui.BaseCElementContentProvider;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.cdt.ui.PreferenceConstants;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.model.WorkbenchAdapter;
/*
* CContentOutlinerProvider
@ -35,6 +30,7 @@ public class CContentOutlinerProvider extends BaseCElementContentProvider {
CContentOutlinePage fOutliner;
ITranslationUnit root;
private ElementChangedListener fListener;
private IPropertyChangeListener fPropertyListener;
/**
* The element change listener of the java outline viewer.
@ -98,55 +94,25 @@ public class CContentOutlinerProvider extends BaseCElementContentProvider {
}
}
/**
* VirtualGrouping
*/
public class IncludesContainer extends WorkbenchAdapter implements IAdaptable {
ITranslationUnit tu;
public IncludesContainer(ITranslationUnit unit) {
tu = unit;
}
class PropertyListener implements IPropertyChangeListener {
/* (non-Javadoc)
* @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
* @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
public Object[] getChildren(Object object) {
try {
return tu.getChildrenOfType(ICElement.C_INCLUDE).toArray();
} catch (CModelException e) {
public void propertyChange(PropertyChangeEvent event) {
String prop = event.getProperty();
if (prop.equals(PreferenceConstants.OUTLINE_GROUP_INCLUDES)) {
Object newValue = event.getNewValue();
if (newValue instanceof Boolean) {
boolean value = ((Boolean)newValue).booleanValue();
if (areIncludesGroup() != value) {
setIncludesGrouping(value);
if (fOutliner != null) {
fOutliner.contentUpdated();
}
}
}
}
return NO_CHILDREN;
}
/* (non-Javadoc)
* @see org.eclipse.ui.model.IWorkbenchAdapter#getLabel(java.lang.Object)
*/
public String getLabel(Object object) {
return "include statements";
}
/* (non-Javadoc)
* @see org.eclipse.ui.model.IWorkbenchAdapter#getImageDescriptor(java.lang.Object)
*/
public ImageDescriptor getImageDescriptor(Object object) {
return CPluginImages.DESC_OBJS_INCCONT;
}
/* (non-Javadoc)
* @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
*/
public Object getParent(Object object) {
return tu;
}
/*
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
*/
public Object getAdapter(Class clas) {
if (clas == IWorkbenchAdapter.class)
return this;
return null;
}
}
@ -157,40 +123,7 @@ public class CContentOutlinerProvider extends BaseCElementContentProvider {
public CContentOutlinerProvider(CContentOutlinePage outliner) {
super(true, true);
fOutliner = outliner;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
public Object[] getChildren(Object element) {
if (element instanceof ITranslationUnit) {
ITranslationUnit unit = (ITranslationUnit)element;
try {
if (fOutliner != null && fOutliner.isIncludesGroupingEnabled()) {
boolean hasInclude = false;
ICElement[] children = unit.getChildren();
ArrayList list = new ArrayList(children.length);
for (int i = 0; i < children.length; i++) {
if (children[i].getElementType() != ICElement.C_INCLUDE) {
list.add(children[i]);
} else {
hasInclude = true;
}
}
if (hasInclude) {
list.add (0, new IncludesContainer(unit));
}
return list.toArray();
}
} catch (CModelException e) {
return NO_CHILDREN;
}
} else if (element instanceof IncludesContainer) {
IncludesContainer includes = (IncludesContainer)element;
return includes.getChildren(element);
}
return super.getChildren(element);
setIncludesGrouping(PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.OUTLINE_GROUP_INCLUDES));
}
/* (non-Javadoc)
@ -201,7 +134,11 @@ public class CContentOutlinerProvider extends BaseCElementContentProvider {
if (fListener != null) {
CoreModel.getDefault().removeElementChangedListener(fListener);
fListener= null;
}
}
if (fPropertyListener != null) {
PreferenceConstants.getPreferenceStore().removePropertyChangeListener(fPropertyListener);
fPropertyListener = null;
}
}
/* (non-Javadoc)
@ -211,9 +148,11 @@ public class CContentOutlinerProvider extends BaseCElementContentProvider {
boolean isTU= (newInput instanceof ITranslationUnit);
if (isTU && fListener == null) {
root = (ITranslationUnit)newInput;
fListener= new ElementChangedListener();
CoreModel.getDefault().addElementChangedListener(fListener);
root = (ITranslationUnit)newInput;
fPropertyListener = new PropertyListener();
PreferenceConstants.getPreferenceStore().addPropertyChangeListener(fPropertyListener);
} else if (!isTU && fListener != null) {
CoreModel.getDefault().removeElementChangedListener(fListener);
fListener= null;

View file

@ -0,0 +1,169 @@
/*******************************************************************************
* 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.preferences;
import org.eclipse.core.runtime.IStatus;
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.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.help.WorkbenchHelp;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants;
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
import org.eclipse.cdt.internal.ui.dialogs.StatusUtil;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.Separator;
public class AppearancePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private static final String SHOW_TU_CHILDREN= PreferenceConstants.PREF_SHOW_CU_CHILDREN;
private static final String OUTLINE_GROUP_INCLUDES = PreferenceConstants.OUTLINE_GROUP_INCLUDES;
private static final String CVIEW_GROUP_INCLUDES = PreferenceConstants.CVIEW_GROUP_INCLUDES;
private SelectionButtonDialogField fShowTUChildren;
private SelectionButtonDialogField fOutlineGroupIncludes;
private SelectionButtonDialogField fCViewGroupIncludes;
public AppearancePreferencePage() {
setPreferenceStore(PreferenceConstants.getPreferenceStore());
setDescription(PreferencesMessages.getString("AppearancePreferencePage.description")); //$NON-NLS-1$
IDialogFieldListener listener= new IDialogFieldListener() {
public void dialogFieldChanged(DialogField field) {
doDialogFieldChanged(field);
}
};
fShowTUChildren= new SelectionButtonDialogField(SWT.CHECK);
fShowTUChildren.setDialogFieldListener(listener);
fShowTUChildren.setLabelText(PreferencesMessages.getString("AppearancePreferencePage.showTUChildren.label")); //$NON-NLS-1$
fOutlineGroupIncludes= new SelectionButtonDialogField(SWT.CHECK);
fOutlineGroupIncludes.setDialogFieldListener(listener);
fOutlineGroupIncludes.setLabelText(PreferencesMessages.getString("AppearancePreferencePage.outlineGroupIncludes.label")); //$NON-NLS-1$
fCViewGroupIncludes= new SelectionButtonDialogField(SWT.CHECK);
fCViewGroupIncludes.setDialogFieldListener(listener);
fCViewGroupIncludes.setLabelText(PreferencesMessages.getString("AppearancePreferencePage.cviewGroupIncludes.label")); //$NON-NLS-1$
}
private void initFields() {
IPreferenceStore prefs= getPreferenceStore();
fShowTUChildren.setSelection(prefs.getBoolean(SHOW_TU_CHILDREN));
fCViewGroupIncludes.setSelection(prefs.getBoolean(CVIEW_GROUP_INCLUDES));
fOutlineGroupIncludes.setSelection(prefs.getBoolean(OUTLINE_GROUP_INCLUDES));
}
/*
* @see PreferencePage#createControl(Composite)
*/
public void createControl(Composite parent) {
super.createControl(parent);
WorkbenchHelp.setHelp(getControl(), ICHelpContextIds.APPEARANCE_PREFERENCE_PAGE);
}
/*
* @see PreferencePage#createContents(Composite)
*/
protected Control createContents(Composite parent) {
initializeDialogUnits(parent);
int nColumns= 1;
Composite result= new Composite(parent, SWT.NONE);
GridLayout layout= new GridLayout();
layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
layout.marginWidth= 0;
layout.numColumns= nColumns;
result.setLayout(layout);
fShowTUChildren.doFillIntoGrid(result, nColumns);
fCViewGroupIncludes.doFillIntoGrid(result, nColumns);
fOutlineGroupIncludes.doFillIntoGrid(result, nColumns);
new Separator().doFillIntoGrid(result, nColumns);
new Separator().doFillIntoGrid(result, nColumns);
String noteTitle= PreferencesMessages.getString("AppearancePreferencePage.note"); //$NON-NLS-1$
String noteMessage= PreferencesMessages.getString("AppearancePreferencePage.preferenceOnlyEffectiveForNewPerspectives"); //$NON-NLS-1$
Composite noteControl= createNoteComposite(JFaceResources.getDialogFont(), result, noteTitle, noteMessage);
GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan= 2;
noteControl.setLayoutData(gd);
initFields();
Dialog.applyDialogFont(result);
return result;
}
private void doDialogFieldChanged(DialogField field) {
updateStatus(getValidationStatus());
}
private IStatus getValidationStatus(){
return new StatusInfo();
}
private void updateStatus(IStatus status) {
setValid(!status.matches(IStatus.ERROR));
StatusUtil.applyToStatusLine(this, status);
}
/*
* @see IWorkbenchPreferencePage#init(IWorkbench)
*/
public void init(IWorkbench workbench) {
}
/*
* @see IPreferencePage#performOk()
*/
public boolean performOk() {
IPreferenceStore prefs= getPreferenceStore();
prefs.setValue(SHOW_TU_CHILDREN, fShowTUChildren.isSelected());
prefs.setValue(CVIEW_GROUP_INCLUDES, fCViewGroupIncludes.isSelected());
prefs.setValue(OUTLINE_GROUP_INCLUDES, fOutlineGroupIncludes.isSelected());
CUIPlugin.getDefault().savePluginPreferences();
return super.performOk();
}
/*
* @see PreferencePage#performDefaults()
*/
protected void performDefaults() {
IPreferenceStore prefs= getPreferenceStore();
fShowTUChildren.setSelection(prefs.getDefaultBoolean(SHOW_TU_CHILDREN));
fCViewGroupIncludes.setSelection(prefs.getDefaultBoolean(CVIEW_GROUP_INCLUDES));
fOutlineGroupIncludes.setSelection(prefs.getDefaultBoolean(OUTLINE_GROUP_INCLUDES));
super.performDefaults();
}
}

View file

@ -24,7 +24,6 @@ public class CPluginPreferencePage extends FieldEditorPreferencePage implements
private static final String LINK_TO_EDITOR_LABEL= "CBasePreferencePage.linkToEditor.label"; //$NON-NLS-1$
private static final String SHOW_CU_CHILDREN_LABEL= "CBasePreferencePage.CUChildren.label"; //$NON-NLS-1$
private static final String USE_STRUCTURAL_PARSE_MODE_LABEL= "CBasePreferencePage.OutlineView.structuralParseMode.label"; //$NON-NLS-1$
public CPluginPreferencePage() {
@ -49,8 +48,6 @@ public class CPluginPreferencePage extends FieldEditorPreferencePage implements
BooleanFieldEditor linkEditor= new BooleanFieldEditor(PreferenceConstants.PREF_LINK_TO_EDITOR, CUIPlugin.getResourceString(LINK_TO_EDITOR_LABEL), parent);
addField(linkEditor);
BooleanFieldEditor showCUChildrenEditor= new BooleanFieldEditor(PreferenceConstants.PREF_SHOW_CU_CHILDREN, CUIPlugin.getResourceString(SHOW_CU_CHILDREN_LABEL), parent);
addField(showCUChildrenEditor);
BooleanFieldEditor useStructuralParseMode= new BooleanFieldEditor(PreferenceConstants.PREF_USE_STRUCTURAL_PARSE_MODE, CUIPlugin.getResourceString(USE_STRUCTURAL_PARSE_MODE_LABEL), parent);
addField(useStructuralParseMode);
@ -65,10 +62,6 @@ public class CPluginPreferencePage extends FieldEditorPreferencePage implements
CUIPlugin.getDefault().getPreferenceStore().setValue(PreferenceConstants.PREF_LINK_TO_EDITOR, enable);
}
public static boolean showCompilationUnitChildren() {
return CUIPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.PREF_SHOW_CU_CHILDREN);
}
public static boolean useStructuralParseMode() {
return CUIPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.PREF_USE_STRUCTURAL_PARSE_MODE);
}
@ -85,6 +78,7 @@ public class CPluginPreferencePage extends FieldEditorPreferencePage implements
*/
public static void initDefaults(IPreferenceStore prefs) {
prefs.setDefault(PreferenceConstants.PREF_LINK_TO_EDITOR, false);
// The field is under Appearance page/preference
prefs.setDefault(PreferenceConstants.PREF_SHOW_CU_CHILDREN, true);
prefs.setDefault(PreferenceConstants.PREF_USE_STRUCTURAL_PARSE_MODE, CCorePlugin.getDefault().useStructuralParseMode());
prefs.setDefault(PreferenceConstants.EDITOR_SHOW_SEGMENTS, false);

View file

@ -181,4 +181,11 @@ CEditorPreferencePage.Navigation.CacheTypesInBackground=Cache types in backgroun
CEditorPreferencePage.behaviourPage.EditorGroup=Editor
CEditorPreferencePage.behaviourPage.EnableEditorProblemAnnotation=Enable editor problem annotation
#Appearance Preferences
AppearancePreferencePage.description= Appearance of C elements in viewers:
#AppearancePreferencePage.methodreturntype.label= Show &method return types
AppearancePreferencePage.showTUChildren.label= Show translation unit members
AppearancePreferencePage.cviewGroupIncludes.label= Group the includes in the C/C++ projects view
AppearancePreferencePage.outlineGroupIncludes.label= Group the includes in the outliner
AppearancePreferencePage.note=Note:
AppearancePreferencePage.preferenceOnlyEffectiveForNewPerspectives=This preference may only take effect on new perspectives

View file

@ -0,0 +1,70 @@
/*******************************************************************************
* 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:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.model.WorkbenchAdapter;
/**
*/
public class CElementGrouping extends WorkbenchAdapter implements IAdaptable {
public final static int INCLUDES_GROUPING = 0x00001;
public final static int NAMESPACE_GROUPING = 0x00010;
public final static int CLASS_GROUPING = 0x00100;
public final static int LIBRARY_REF_CONTAINER = 0x01000;
public final static int INCLUDE_REF_CONTAINER = 0x10000;
int type;
public CElementGrouping(int type) {
this.type = type;
}
public int getType() {
return type;
}
/* (non-Javadoc)
* @see org.eclipse.ui.model.IWorkbenchAdapter#getLabel(java.lang.Object)
*/
public String getLabel(Object object) {
switch (type) {
case INCLUDES_GROUPING:
return "include directives";
}
return super.getLabel(object);
}
/* (non-Javadoc)
* @see org.eclipse.ui.model.IWorkbenchAdapter#getImageDescriptor(java.lang.Object)
*/
public ImageDescriptor getImageDescriptor(Object object) {
switch (type) {
case INCLUDES_GROUPING:
return CPluginImages.DESC_OBJS_INCCONT;
}
return super.getImageDescriptor(object);
}
/*
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
*/
public Object getAdapter(Class clas) {
if (clas == IWorkbenchAdapter.class)
return this;
return null;
}
}

View file

@ -180,6 +180,15 @@ public class CElementSorter extends ViewerSorter {
return LIBRARYREFCONTAINER;
} else if (element instanceof IncludeRefContainer) {
return INCLUDEREFCONTAINER;
} else if (element instanceof CElementGrouping) {
int type = ((CElementGrouping)element).getType();
if (type == CElementGrouping.INCLUDES_GROUPING) {
return INCLUDES;
} else if (type == CElementGrouping.CLASS_GROUPING) {
return VARIABLES;
} else if (type == CElementGrouping.NAMESPACE_GROUPING) {
return NAMESPACES;
}
}
return OTHERS;
}

View file

@ -0,0 +1,48 @@
/*******************************************************************************
* 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:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ITranslationUnit;
/**
* IncludesGrouping
*/
public class IncludesGrouping extends CElementGrouping {
ITranslationUnit tu;
public IncludesGrouping(ITranslationUnit unit) {
super(CElementGrouping.INCLUDES_GROUPING);
tu = unit;
}
/* (non-Javadoc)
* @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
*/
public Object[] getChildren(Object object) {
try {
return tu.getChildrenOfType(ICElement.C_INCLUDE).toArray();
} catch (CModelException e) {
}
return super.getChildren(object);
}
/* (non-Javadoc)
* @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
*/
public Object getParent(Object object) {
return tu;
}
}

View file

@ -50,7 +50,7 @@ public class PreferenceConstants {
public static final String PREF_LINK_TO_EDITOR= "org.eclipse.cdt.ui.editor.linkToEditor"; //$NON-NLS-1$
/**
* A named preference that speficies whether children of a translation unit are shown in the package explorer.
* A named preference that speficies whether children of a translation unit are shown in the CView.
* <p>
* Value is of type <code>Boolean</code>.
* </p>
@ -269,7 +269,7 @@ public class PreferenceConstants {
public static final String OPEN_TYPE_HIERARCHY_IN_VIEW_PART= "viewPart"; //$NON-NLS-1$
/**
* A named preference that controls if the C Browsing views are linked to the active editor.
* A named preference that controls if the Outline view.
* <p>
* Value is of type <code>Boolean</code>.
* </p>
@ -278,6 +278,16 @@ public class PreferenceConstants {
*/
public static final String OUTLINE_GROUP_INCLUDES= "org.eclipse.cdt.ui.outline.groupincludes"; //$NON-NLS-1$
/**
* A named preference that controls if the CView.
* <p>
* Value is of type <code>Boolean</code>.
* </p>
*
* @see #LINK_PACKAGES_TO_EDITOR
*/
public static final String CVIEW_GROUP_INCLUDES= "org.eclipse.cdt.ui.cview.groupincludes"; //$NON-NLS-1$
/**
* Returns the CDT-UI preference store.
*
@ -286,7 +296,7 @@ public class PreferenceConstants {
public static IPreferenceStore getPreferenceStore() {
return CUIPlugin.getDefault().getPreferenceStore();
}
/**
* Initializes the given preference store with the default values.
*