blob: 6c7fb1f3ef5119cc994bbcf7a999f18ff3151362 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2005 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
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
package org.eclipse.wst.dtd.ui.views.contentoutline;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.wst.dtd.core.internal.DTDFile;
import org.eclipse.wst.dtd.core.internal.DTDNode;
import org.eclipse.wst.dtd.core.internal.NodeList;
class DTDLabelProvider extends LabelProvider {
public DTDLabelProvider() {
super();
}
/**
* Returns the image for the label of the given element.
*
* @param element
* the element for which to provide the label image
* @return the image used to label the element, or <code>null</code> if
* these is no image for the given object
*/
public Image getImage(Object element) {
Image image = null;
if (element instanceof DTDNode) {
image = ((DTDNode) element).getImage();
}
else if (element instanceof NodeList) {
image = ((NodeList) element).getImage();
}
else if (element instanceof DTDFile) {
image = ((DTDFile) element).getImage();
}
else {
image = super.getImage(element);
}
return image;
}
/**
* Returns the text for the label of the given element.
*
* @param element
* the element for which to provide the label text
* @return the text string used to label the element, or <code>null</code>
* if these is no text label for the given object
*/
public String getText(Object element) {
if (element instanceof DTDNode) {
String name = ((DTDNode) element).getName();
// strip leading whitespace (useful for multi-line comments)
int firstSignificantCharacter = 0;
int lastVisibleCharacter = name.length() - 1;
for (firstSignificantCharacter = 0; firstSignificantCharacter < name.length(); firstSignificantCharacter++) {
if (!Character.isWhitespace(name.charAt(firstSignificantCharacter)))
break;
}
// keep only the first line of text in a multi-line name
if (firstSignificantCharacter < lastVisibleCharacter) {
for (lastVisibleCharacter = firstSignificantCharacter + 1; lastVisibleCharacter < name.length(); lastVisibleCharacter++) {
char character = name.charAt(lastVisibleCharacter);
if (character == '\r' || character == '\n')
break;
}
}
if (firstSignificantCharacter > 0 && firstSignificantCharacter < name.length() - 1) {
name = name.substring(firstSignificantCharacter, lastVisibleCharacter);
}
return name;
}
else if (element instanceof NodeList) {
// return ((NodeList) element).getListType();
return ((NodeList) element).getName();
}
else if (element instanceof DTDFile) {
return ((DTDFile) element).getName();
}
return super.getText(element);
}
}