/** * Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.navigator.sorter; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.python.pydev.navigator.PythonLabelProvider; import org.python.pydev.navigator.elements.ISortedElement; import org.python.pydev.navigator.elements.PythonNode; import org.python.pydev.shared_core.structure.TreeNode; /** * @author Fabio Zadrozny */ public class PythonModelSorter extends ViewerSorter { private PythonLabelProvider labelProvider; public PythonModelSorter() { labelProvider = new PythonLabelProvider(); } @Override public int category(Object element) { if (element instanceof TreeNode) { return ISortedElement.RANK_TREE_NODE; } if (element instanceof ISortedElement) { ISortedElement iSortedElement = (ISortedElement) element; return iSortedElement.getRank(); } if (element instanceof IContainer) { return ISortedElement.RANK_REGULAR_FOLDER; } if (element instanceof IFile) { return ISortedElement.RANK_REGULAR_FILE; } if (element instanceof IResource) { return ISortedElement.RANK_REGULAR_RESOURCE; } return ISortedElement.UNKNOWN_ELEMENT; } @SuppressWarnings("unchecked") @Override public int compare(Viewer viewer, Object e1, Object e2) { if (e1 instanceof PythonNode && e2 instanceof PythonNode) { return 0; //we don't want to sort it... just show it in the order it is found in the file } //Could be super.compare, but we don't have a way to override getLabel, so, copying the whole code. int cat1 = category(e1); int cat2 = category(e2); if (cat1 != cat2) { return cat1 - cat2; } String name1 = getLabel(viewer, e1); String name2 = getLabel(viewer, e2); // use the comparator to compare the strings int compare = getComparator().compare(name1, name2); return compare; } private String getLabel(Viewer viewer, Object e1) { String text = labelProvider.getText(e1); return text; } }