/******************************************************************************* * Copyright (c) 2004, 2010 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * QNX Software Systems - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.ui.dialogs.cpaths; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.cdt.core.model.IPathEntry; /** * @deprecated as of CDT 4.0. This class was used for property pages * for 3.X style projects. */ @Deprecated public class CPElementSorter extends ViewerSorter { private static final int SOURCE = 0; private static final int PROJECT = 1; private static final int LIBRARY = 2; private static final int CONTAINER = 3; private static final int OTHER = 5; /* * @see ViewerSorter#category(Object) */ @Override public int category(Object obj) { if (obj instanceof CPElement) { switch ( ((CPElement)obj).getEntryKind()) { case IPathEntry.CDT_LIBRARY : return LIBRARY; case IPathEntry.CDT_PROJECT : return PROJECT; case IPathEntry.CDT_SOURCE : return SOURCE; case IPathEntry.CDT_CONTAINER : return CONTAINER; } } else if (obj instanceof CPElementGroup) { switch ( ((CPElementGroup)obj).getEntryKind()) { case IPathEntry.CDT_LIBRARY : return LIBRARY; case IPathEntry.CDT_PROJECT : return PROJECT; case IPathEntry.CDT_SOURCE : return SOURCE; case IPathEntry.CDT_CONTAINER : return CONTAINER; case -1 : if ( ((CPElementGroup)obj).getResource() instanceof IProject) { return PROJECT; } } } return OTHER; } @Override public void sort(Viewer viewer, Object[] elements) { // include paths and symbol definitions must not be sorted List<Object> sort = new ArrayList<Object>(elements.length); List<CPElement> includes = new ArrayList<CPElement>(elements.length); List<CPElement> syms = new ArrayList<CPElement>(elements.length); for (Object element : elements) { if (element instanceof CPElement) { CPElement cpelement = (CPElement)element; if (cpelement.getEntryKind() == IPathEntry.CDT_INCLUDE) { includes.add(cpelement); } else if (cpelement.getEntryKind() == IPathEntry.CDT_MACRO) { syms.add(cpelement); } else { sort.add(cpelement); } } else { sort.add(element); } } System.arraycopy(sort.toArray(), 0, elements, 0, sort.size()); super.sort(viewer, elements); System.arraycopy(includes.toArray(), 0, elements, sort.size(), includes.size()); System.arraycopy(syms.toArray(), 0, elements, sort.size() + includes.size(), syms.size()); } }