/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.dltk.tcl.activestatedebugger.preferences;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IPath;
import org.eclipse.dltk.core.IScriptFolder;
import org.eclipse.dltk.tcl.internal.ui.TclUI;
import org.eclipse.dltk.ui.DLTKPluginImages;
import org.eclipse.dltk.ui.DLTKUIPlugin;
import org.eclipse.dltk.ui.ScriptElementImageProvider;
import org.eclipse.dltk.ui.ScriptElementLabels;
import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider;
import org.eclipse.swt.graphics.Image;
/**
* Provides the labels for the Package Explorer.
* <p>
* It provides labels for the packages in hierarchical layout and in all other
* cases delegates it to its super class.
* </p>
*/
public class InstrumentationLabelProvider extends AppearanceAwareLabelProvider {
protected InstrumentationContentProvider fContentProvider;
private boolean fIsFlatLayout = false;
public InstrumentationLabelProvider(InstrumentationContentProvider cp) {
super(DEFAULT_TEXTFLAGS | ScriptElementLabels.P_COMPRESSED
| ScriptElementLabels.ALL_CATEGORY, DEFAULT_IMAGEFLAGS
| ScriptElementImageProvider.SMALL_ICONS, TclUI.getDefault()
.getPreferenceStore());
Assert.isNotNull(cp);
fContentProvider = cp;
}
private String getSpecificText(Object element) {
if (element instanceof PackageElement) {
return ((PackageElement) element).packageName;
} else if (element instanceof SourceElement) {
return ((SourceElement) element).path.toString();
}
if (!fIsFlatLayout && element instanceof IScriptFolder) {
IScriptFolder fragment = (IScriptFolder) element;
Object parent = fContentProvider
.getHierarchicalPackageParent(fragment);
if (parent instanceof IScriptFolder) {
return getNameDelta((IScriptFolder) parent, fragment);
} else if (parent instanceof IFolder) { // bug 152735
return getNameDelta((IFolder) parent, fragment);
}
}
return null;
}
@Override
public String getText(Object element) {
String text = getSpecificText(element);
if (text != null) {
return decorateText(text, element);
}
return super.getText(element);
}
private String getNameDelta(IScriptFolder parent, IScriptFolder fragment) {
String prefix = parent.getElementName()
+ IScriptFolder.PACKAGE_DELIMITER;
String fullName = fragment.getElementName();
if (fullName.startsWith(prefix)) {
return fullName.substring(prefix.length());
}
return fullName;
}
private String getNameDelta(IFolder parent, IScriptFolder fragment) {
IPath prefix = parent.getFullPath();
IPath fullPath = fragment.getPath();
if (prefix.isPrefixOf(fullPath)) {
StringBuffer buf = new StringBuffer();
for (int i = prefix.segmentCount(); i < fullPath.segmentCount(); i++) {
if (buf.length() > 0)
buf.append(IScriptFolder.PACKAGE_DELIMITER);
buf.append(fullPath.segment(i));
}
return buf.toString();
}
return fragment.getElementName();
}
public void setIsFlatLayout(boolean state) {
fIsFlatLayout = state;
}
@Override
public Image getImage(Object element) {
if (element instanceof PackageElement) {
return DLTKUIPlugin.getImageDescriptorRegistry().get(
DLTKPluginImages.DESC_OBJS_PACKAGE);
} else if (element instanceof SourceElement) {
return DLTKUIPlugin.getImageDescriptorRegistry().get(
DLTKPluginImages.DESC_OBJS_CUNIT);
}
return super.getImage(element);
}
}