From 755accf2b151a2fb9ceeede74954d1ad76524a13 Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Tue, 20 Jul 2004 21:47:08 +0000 Subject: [PATCH] 2004-07-20 Alain Magloire Framework to do virtual grouping in the outliner for example group the includes. * icons/full/obj16/incc_obj.gif * src/org/eclipse/cdt/internal/ui/CPluginImages.java * src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties * src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java * src/org/eclipse/cdt/internal/ui/editor/CContentOutlineProvider.java * src/org/eclipse/cdt/internal/ui/editor/CEditor.java * src/org/eclipse/cdt/internal/ui/PreferenceConstants.java --- core/org.eclipse.cdt.ui/ChangeLog | 13 + .../icons/full/obj16/incc_obj.gif | Bin 0 -> 185 bytes .../cdt/internal/ui/CPluginImages.java | 6 +- .../ui/actions/ActionMessages.properties | 4 + .../ui/editor/CContentOutlinePage.java | 61 ++++- .../ui/editor/CContentOutlinerProvider.java | 224 ++++++++++++++++++ .../cdt/internal/ui/editor/CEditor.java | 9 +- .../eclipse/cdt/ui/PreferenceConstants.java | 14 +- 8 files changed, 317 insertions(+), 14 deletions(-) create mode 100644 core/org.eclipse.cdt.ui/icons/full/obj16/incc_obj.gif create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinerProvider.java diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index adae5ef5f5c..0ff881be894 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,16 @@ +2004-07-20 Alain Magloire + + Framework to do virtual grouping in the outliner + for example group the includes. + + * icons/full/obj16/incc_obj.gif + * src/org/eclipse/cdt/internal/ui/CPluginImages.java + * src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties + * src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java + * src/org/eclipse/cdt/internal/ui/editor/CContentOutlineProvider.java + * src/org/eclipse/cdt/internal/ui/editor/CEditor.java + * src/org/eclipse/cdt/internal/ui/PreferenceConstants.java + 2004-07-19 Chris Wiebe This patch cleans up code using the ToggleLinkingAction (subclass off AbstractToggleLinkingAction). diff --git a/core/org.eclipse.cdt.ui/icons/full/obj16/incc_obj.gif b/core/org.eclipse.cdt.ui/icons/full/obj16/incc_obj.gif new file mode 100644 index 0000000000000000000000000000000000000000..ea94702caff9d46b70fc7a6b341b6ada7bf0d612 GIT binary patch literal 185 zcmZ?wbhEHb6krfwIKsfNdh?kryDu(Ub7IN5lWVq~UAOJ*)P)CTEvbMZ)V_pB& z_GvqN=j@%k@@RhZ+RC2IO_R6hHm_lHtI|p7&hB6O|Nnmmyg>0M3nK%AD1#12706Bo zR ICElement.C_UNIT) + return null; + + ICElementDelta[] children= delta.getAffectedChildren(); + if (children == null || children.length == 0) + return null; + + for (int i= 0; i < children.length; i++) { + ICElementDelta d= findElement(unit, children[i]); + if (d != null) + return d; + } + + return null; + } + } + + /** + * VirtualGrouping + */ + public class IncludesContainer extends WorkbenchAdapter implements IAdaptable { + ITranslationUnit tu; + + public IncludesContainer(ITranslationUnit unit) { + 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 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; + } + + } + + /** + * + */ + 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); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#dispose() + */ + public void dispose() { + super.dispose(); + if (fListener != null) { + CoreModel.getDefault().removeElementChangedListener(fListener); + fListener= null; + } + } + + /* (non-Javadoc) + * @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) { + boolean isTU= (newInput instanceof ITranslationUnit); + + if (isTU && fListener == null) { + fListener= new ElementChangedListener(); + CoreModel.getDefault().addElementChangedListener(fListener); + root = (ITranslationUnit)newInput; + } else if (!isTU && fListener != null) { + CoreModel.getDefault().removeElementChangedListener(fListener); + fListener= null; + root = null; + } + } + +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java index b924f930d72..ca6c4be9e67 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java @@ -1036,8 +1036,11 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS * @see org.eclipse.cdt.internal.ui.editor.IReconcilingParticipant#reconciled() */ public void reconciled(boolean somethingHasChanged) { - if(somethingHasChanged && fOutlinePage != null) { - fOutlinePage.contentUpdated(); - } + // Do nothing the outliner is listeniner to the + // CoreModel WorkingCopy changes instead. + // It will allow more fined grained. + //if(somethingHasChanged && fOutlinePage != null) { + // fOutlinePage.contentUpdated(); + //} } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/PreferenceConstants.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/PreferenceConstants.java index 88a6a7892ef..a65754495f6 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/PreferenceConstants.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/PreferenceConstants.java @@ -269,9 +269,19 @@ public class PreferenceConstants { public static final String OPEN_TYPE_HIERARCHY_IN_VIEW_PART= "viewPart"; //$NON-NLS-1$ /** - * Returns the JDT-UI preference store. + * A named preference that controls if the C Browsing views are linked to the active editor. + *

+ * Value is of type Boolean. + *

* - * @return the JDT-UI preference store + * @see #LINK_PACKAGES_TO_EDITOR + */ + public static final String OUTLINE_GROUP_INCLUDES= "org.eclipse.cdt.ui.outline.groupincludes"; //$NON-NLS-1$ + + /** + * Returns the CDT-UI preference store. + * + * @return the CDT-UI preference store */ public static IPreferenceStore getPreferenceStore() { return CUIPlugin.getDefault().getPreferenceStore();