mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fix PR 40247
Overload the ViewSorter in CViewSorter not to use the labelProvider.
This commit is contained in:
parent
4123b94c18
commit
16f0fdb92f
2 changed files with 77 additions and 4 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2003-12-19 Alain Magloire
|
||||||
|
|
||||||
|
Fix for PR 40247.
|
||||||
|
We have to overload Eclipse ViewSorter.compare() it uses
|
||||||
|
the label provider, it adds ">" to the project name and
|
||||||
|
mixing the sorting.
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/internal/ui/cview/CViewSorter.java
|
||||||
|
|
||||||
2003-12-17 Hoda Amer
|
2003-12-17 Hoda Amer
|
||||||
Content Assist work: Completion Engine calling new lookups
|
Content Assist work: Completion Engine calling new lookups
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,13 @@ import org.eclipse.cdt.core.model.IUsing;
|
||||||
import org.eclipse.cdt.core.model.IVariable;
|
import org.eclipse.cdt.core.model.IVariable;
|
||||||
import org.eclipse.cdt.core.model.IVariableDeclaration;
|
import org.eclipse.cdt.core.model.IVariableDeclaration;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
import org.eclipse.jface.viewers.ContentViewer;
|
||||||
|
import org.eclipse.jface.viewers.IBaseLabelProvider;
|
||||||
|
import org.eclipse.jface.viewers.ILabelProvider;
|
||||||
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
import org.eclipse.jface.viewers.ViewerSorter;
|
import org.eclipse.jface.viewers.ViewerSorter;
|
||||||
|
import org.eclipse.ui.model.IWorkbenchAdapter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A sorter to sort the file and the folders in the C viewer in the following order:
|
* A sorter to sort the file and the folders in the C viewer in the following order:
|
||||||
|
@ -40,11 +46,15 @@ import org.eclipse.jface.viewers.ViewerSorter;
|
||||||
*/
|
*/
|
||||||
public class CViewSorter extends ViewerSorter {
|
public class CViewSorter extends ViewerSorter {
|
||||||
|
|
||||||
|
private static final int CMODEL = 0;
|
||||||
|
private static final int PROJECT = 10;
|
||||||
|
private static final int RESOURCE = 200;
|
||||||
|
|
||||||
public int category (Object element) {
|
public int category (Object element) {
|
||||||
if (element instanceof ICModel) {
|
if (element instanceof ICModel) {
|
||||||
return 0;
|
return CMODEL;
|
||||||
} else if (element instanceof ICProject) {
|
} else if (element instanceof ICProject) {
|
||||||
return 10;
|
return PROJECT;
|
||||||
} else if (element instanceof IBinaryContainer) {
|
} else if (element instanceof IBinaryContainer) {
|
||||||
return 20;
|
return 20;
|
||||||
} else if (element instanceof IArchiveContainer) {
|
} else if (element instanceof IArchiveContainer) {
|
||||||
|
@ -122,6 +132,60 @@ public class CViewSorter extends ViewerSorter {
|
||||||
}
|
}
|
||||||
return 180;
|
return 180;
|
||||||
}
|
}
|
||||||
return 200;
|
return RESOURCE;
|
||||||
}
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.viewers.ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
|
||||||
|
*/
|
||||||
|
public int compare(Viewer viewer, Object e1, Object e2) {
|
||||||
|
int cat1 = category(e1);
|
||||||
|
int cat2 = category(e2);
|
||||||
|
|
||||||
|
if (cat1 != cat2)
|
||||||
|
return cat1 - cat2;
|
||||||
|
|
||||||
|
// cat1 == cat2
|
||||||
|
|
||||||
|
if (cat1 == PROJECT) {
|
||||||
|
IWorkbenchAdapter a1= (IWorkbenchAdapter)((IAdaptable)e1).getAdapter(IWorkbenchAdapter.class);
|
||||||
|
IWorkbenchAdapter a2= (IWorkbenchAdapter)((IAdaptable)e2).getAdapter(IWorkbenchAdapter.class);
|
||||||
|
return getCollator().compare(a1.getLabel(e1), a2.getLabel(e2));
|
||||||
|
}
|
||||||
|
|
||||||
|
// non - c resources are sorted using the label from the viewers label provider
|
||||||
|
if (cat1 == RESOURCE) {
|
||||||
|
return compareWithLabelProvider(viewer, e1, e2);
|
||||||
|
}
|
||||||
|
|
||||||
|
String name1;
|
||||||
|
String name2;
|
||||||
|
|
||||||
|
if (e1 instanceof ICElement) {
|
||||||
|
name1 = ((ICElement)e1).getElementName();
|
||||||
|
} else {
|
||||||
|
name1 = e1.toString();
|
||||||
|
}
|
||||||
|
if (e2 instanceof ICElement) {
|
||||||
|
name2 = ((ICElement)e2).getElementName();
|
||||||
|
} else {
|
||||||
|
name2 = e2.toString();
|
||||||
|
}
|
||||||
|
return getCollator().compare(name1, name2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int compareWithLabelProvider(Viewer viewer, Object e1, Object e2) {
|
||||||
|
if (viewer == null || !(viewer instanceof ContentViewer)) {
|
||||||
|
IBaseLabelProvider prov = ((ContentViewer) viewer).getLabelProvider();
|
||||||
|
if (prov instanceof ILabelProvider) {
|
||||||
|
ILabelProvider lprov= (ILabelProvider) prov;
|
||||||
|
String name1 = lprov.getText(e1);
|
||||||
|
String name2 = lprov.getText(e2);
|
||||||
|
if (name1 != null && name2 != null) {
|
||||||
|
return getCollator().compare(name1, name2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0; // can't compare
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue