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

keep the order of the sourceroots.

This commit is contained in:
Alain Magloire 2004-03-27 04:50:20 +00:00
parent 12a4c3d3df
commit a9d96b7796
2 changed files with 114 additions and 34 deletions

View file

@ -1,3 +1,8 @@
2004-03-26 Alain Magloire
Keep the order of the sourceroots when sorting the CElements.
* src/org/eclipse/cdt/ui/CElementSorter.java
2004-03-26 David Inglis 2004-03-26 David Inglis
WORKING PROGRESS new C Path entry UI - Project property page to add/remove/reorder WORKING PROGRESS new C Path entry UI - Project property page to add/remove/reorder

View file

@ -5,6 +5,7 @@ package org.eclipse.cdt.ui;
* All Rights Reserved. * All Rights Reserved.
*/ */
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IArchive; import org.eclipse.cdt.core.model.IArchive;
import org.eclipse.cdt.core.model.IArchiveContainer; import org.eclipse.cdt.core.model.IArchiveContainer;
@ -22,6 +23,7 @@ import org.eclipse.cdt.core.model.IMacro;
import org.eclipse.cdt.core.model.IMethod; import org.eclipse.cdt.core.model.IMethod;
import org.eclipse.cdt.core.model.IMethodDeclaration; import org.eclipse.cdt.core.model.IMethodDeclaration;
import org.eclipse.cdt.core.model.INamespace; import org.eclipse.cdt.core.model.INamespace;
import org.eclipse.cdt.core.model.ISourceRoot;
import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.model.IUsing; import org.eclipse.cdt.core.model.IUsing;
import org.eclipse.cdt.core.model.IVariable; import org.eclipse.cdt.core.model.IVariable;
@ -32,6 +34,7 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IStorage; import org.eclipse.core.resources.IStorage;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.viewers.ContentViewer; import org.eclipse.jface.viewers.ContentViewer;
import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProvider;
@ -51,24 +54,54 @@ import org.eclipse.ui.model.IWorkbenchAdapter;
public class CElementSorter extends ViewerSorter { public class CElementSorter extends ViewerSorter {
private static final int CMODEL = 0; private static final int CMODEL = 0;
private static final int PROJECT = 10; private static final int PROJECTS = 10;
private static final int BINARYCONTAINER = 11;
private static final int ARCHIVECONTAINER = 12;
private static final int SOURCEROOTS = 13;
private static final int CCONTAINERS = 14;
private static final int TRANSLATIONUNIT_HEADERS = 15;
private static final int TRANSLATIONUNIT_SOURCE = 16;
private static final int TRANSLATIONUNITS = 17;
private static final int BINARIES = 18;
private static final int ARCHIVES = 19;
private static final int LIBRARYREFERENCES = 20;
private static final int RESOURCES= 300; private static final int INCLUDES = 30;
private static final int RESOURCEFOLDERS= 210; private static final int MACROS = 31;
private static final int STORAGE= 400; private static final int NAMESPACES = 32;
private static final int USINGS = 33;
private static final int VARIABLEDECLARATIONS = 34;
private static final int FUNCTIONDECLARATIONS = 35;
private static final int VARIABLES = 36;
private static final int VARIABLES_RESERVED = 37;
private static final int VARIABLES_SYSTEM = 38;
private static final int FUNCTIONS = 39;
private static final int FUNCTIONS_RESERVED = 40;
private static final int FUNCTIONS_SYSTEM = 41;
private static final int METHODDECLARATIONS = 42;
private static final int CELEMENTS = 100;
private static final int CELEMENTS_RESERVED = 101;
private static final int CELEMENTS_SYSTEM = 102;
private static final int RESOURCEFOLDERS= 200;
private static final int RESOURCES= 201;
private static final int STORAGE= 202;
private static final int OTHERS= 500; private static final int OTHERS= 500;
public int category (Object element) { public int category (Object element) {
if (element instanceof ICModel) { if (element instanceof ICModel) {
return CMODEL; return CMODEL;
} else if (element instanceof ICProject) { } else if (element instanceof ICProject) {
return PROJECT; return PROJECTS;
} else if (element instanceof ISourceRoot) {
return SOURCEROOTS;
} else if (element instanceof IBinaryContainer) { } else if (element instanceof IBinaryContainer) {
return 20; return BINARYCONTAINER;
} else if (element instanceof IArchiveContainer) { } else if (element instanceof IArchiveContainer) {
return 30; return ARCHIVECONTAINER;
} else if (element instanceof ICContainer) { } else if (element instanceof ICContainer) {
return 40; return CCONTAINERS;
} else if (element instanceof ITranslationUnit) { } else if (element instanceof ITranslationUnit) {
IResource res = null; IResource res = null;
res = ((ITranslationUnit)element).getUnderlyingResource(); res = ((ITranslationUnit)element).getUnderlyingResource();
@ -78,71 +111,69 @@ public class CElementSorter extends ViewerSorter {
String[] headers = CoreModel.getDefault().getHeaderExtensions(); String[] headers = CoreModel.getDefault().getHeaderExtensions();
for (int i = 0; i < headers.length; i++) { for (int i = 0; i < headers.length; i++) {
if (ext.equals(headers[i])) { if (ext.equals(headers[i])) {
return 42; return TRANSLATIONUNIT_HEADERS;
} }
} }
String[] sources = CoreModel.getDefault().getSourceExtensions(); String[] sources = CoreModel.getDefault().getSourceExtensions();
for (int i = 0; i < sources.length; i++) { for (int i = 0; i < sources.length; i++) {
if (ext.equals(sources[i])) { if (ext.equals(sources[i])) {
return 47; return TRANSLATIONUNIT_SOURCE;
} }
} }
return 48;
} }
return 49;
} }
return 50; return TRANSLATIONUNITS;
} else if (element instanceof IInclude) { } else if (element instanceof IInclude) {
return 60; return INCLUDES;
} else if (element instanceof IMacro) { } else if (element instanceof IMacro) {
return 70; return MACROS;
} else if (element instanceof INamespace) { } else if (element instanceof INamespace) {
return 80; return NAMESPACES;
} else if (element instanceof IUsing) { } else if (element instanceof IUsing) {
return 90; return USINGS;
} else if (element instanceof IFunctionDeclaration && ! (element instanceof IFunction)) { } else if (element instanceof IFunctionDeclaration && ! (element instanceof IFunction)) {
return 100; return FUNCTIONDECLARATIONS;
} else if (element instanceof IMethodDeclaration && !(element instanceof IMethod)) { } else if (element instanceof IMethodDeclaration && !(element instanceof IMethod)) {
return 110; return METHODDECLARATIONS;
} else if (element instanceof IVariableDeclaration) { } else if (element instanceof IVariableDeclaration) {
return 120; return VARIABLEDECLARATIONS;
} else if (element instanceof IVariable) { } else if (element instanceof IVariable) {
String name = ((ICElement)element).getElementName(); String name = ((ICElement)element).getElementName();
if (name.startsWith("__")) { //$NON-NLS-1$ if (name.startsWith("__")) { //$NON-NLS-1$
return 122; return VARIABLES_SYSTEM;
} }
if (name.charAt(0) == '_') { if (name.charAt(0) == '_') {
return 124; return VARIABLES_RESERVED;
} }
return 130; return VARIABLES;
} else if (element instanceof IFunction) { } else if (element instanceof IFunction) {
String name = ((ICElement)element).getElementName(); String name = ((ICElement)element).getElementName();
if (name.startsWith("__")) { //$NON-NLS-1$ if (name.startsWith("__")) { //$NON-NLS-1$
return 132; return FUNCTIONS_SYSTEM;
} }
if (name.charAt(0) == '_') { if (name.charAt(0) == '_') {
return 134; return FUNCTIONS_RESERVED;
} }
return 140; return FUNCTIONS;
} else if (element instanceof IArchive) { } else if (element instanceof IArchive) {
return 150; return ARCHIVES;
} else if (element instanceof IBinary) { } else if (element instanceof IBinary) {
return 160; return BINARIES;
} else if (element instanceof ILibraryReference) { } else if (element instanceof ILibraryReference) {
return 170; return LIBRARYREFERENCES;
} else if (element instanceof ICElement) { } else if (element instanceof ICElement) {
String name = ((ICElement)element).getElementName(); String name = ((ICElement)element).getElementName();
if (name.startsWith("__")) { //$NON-NLS-1$ if (name.startsWith("__")) { //$NON-NLS-1$
return 172; return CELEMENTS_SYSTEM;
} }
if (name.charAt(0) == '_') { if (name.charAt(0) == '_') {
return 174; return CELEMENTS_RESERVED;
} }
return 180; return CELEMENTS;
} else if (element instanceof IFile) { } else if (element instanceof IFile) {
return RESOURCES; return RESOURCES;
} else if (element instanceof IProject) { } else if (element instanceof IProject) {
return PROJECT; return PROJECTS;
} else if (element instanceof IContainer) { } else if (element instanceof IContainer) {
return RESOURCEFOLDERS; return RESOURCEFOLDERS;
} else if (element instanceof IStorage) { } else if (element instanceof IStorage) {
@ -162,12 +193,33 @@ public class CElementSorter extends ViewerSorter {
// cat1 == cat2 // cat1 == cat2
if (cat1 == PROJECT) { if (cat1 == PROJECTS) {
IWorkbenchAdapter a1= (IWorkbenchAdapter)((IAdaptable)e1).getAdapter(IWorkbenchAdapter.class); IWorkbenchAdapter a1= (IWorkbenchAdapter)((IAdaptable)e1).getAdapter(IWorkbenchAdapter.class);
IWorkbenchAdapter a2= (IWorkbenchAdapter)((IAdaptable)e2).getAdapter(IWorkbenchAdapter.class); IWorkbenchAdapter a2= (IWorkbenchAdapter)((IAdaptable)e2).getAdapter(IWorkbenchAdapter.class);
return getCollator().compare(a1.getLabel(e1), a2.getLabel(e2)); return getCollator().compare(a1.getLabel(e1), a2.getLabel(e2));
} }
if (cat1 == SOURCEROOTS) {
ISourceRoot root1= getSourceRoot(e1);
ISourceRoot root2= getSourceRoot(e2);
if (root1 == null) {
if (root2 == null) {
return 0;
} else {
return 1;
}
} else if (root2 == null) {
return -1;
}
if (!root1.getPath().equals(root2.getPath())) {
int p1= getPathEntryIndex(root1);
int p2= getPathEntryIndex(root2);
if (p1 != p2) {
return p1 - p2;
}
}
}
// non - c resources are sorted using the label from the viewers label provider // non - c resources are sorted using the label from the viewers label provider
if (cat1 == RESOURCES || cat1 == RESOURCEFOLDERS || cat1 == STORAGE || cat1 == OTHERS) { if (cat1 == RESOURCES || cat1 == RESOURCEFOLDERS || cat1 == STORAGE || cat1 == OTHERS) {
return compareWithLabelProvider(viewer, e1, e2); return compareWithLabelProvider(viewer, e1, e2);
@ -189,6 +241,14 @@ public class CElementSorter extends ViewerSorter {
return getCollator().compare(name1, name2); return getCollator().compare(name1, name2);
} }
private ISourceRoot getSourceRoot(Object element) {
ICElement celement = (ICElement)element;
while (! (celement instanceof ISourceRoot) && celement != null) {
celement = celement.getParent();
}
return (ISourceRoot)celement;
}
private int compareWithLabelProvider(Viewer viewer, Object e1, Object e2) { private int compareWithLabelProvider(Viewer viewer, Object e1, Object e2) {
if (viewer == null || !(viewer instanceof ContentViewer)) { if (viewer == null || !(viewer instanceof ContentViewer)) {
IBaseLabelProvider prov = ((ContentViewer) viewer).getLabelProvider(); IBaseLabelProvider prov = ((ContentViewer) viewer).getLabelProvider();
@ -204,4 +264,19 @@ public class CElementSorter extends ViewerSorter {
return 0; // can't compare return 0; // can't compare
} }
private int getPathEntryIndex(ISourceRoot root) {
try {
IPath rootPath= root.getPath();
ISourceRoot[] roots= root.getCProject().getSourceRoots();
for (int i= 0; i < roots.length; i++) {
if (roots[i].getPath().equals(rootPath)) {
return i;
}
}
} catch (CModelException e) {
}
return Integer.MAX_VALUE;
}
} }