blob: 3b689b26893be2a8fa52c43100a64e3f9b9d3b04 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 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.debug.internal.ui.viewers.model;
import org.eclipse.debug.internal.core.commands.Request;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.TreeItem;
/**
* @since 3.3
*/
class LabelUpdate extends Request implements ILabelUpdate {
private TreePath fElementPath;
private String[] fColumnIds;
private RGB[] fBackgrounds;
private RGB[] fForegrounds;
private ImageDescriptor[] fImageDescriptors;
private String[] fLabels;
private FontData[] fFontDatas;
private TreeModelLabelProvider fProvider;
private TreeItem fItem;
private int fNumColumns;
/**
* Label/Image cache keys
* TODO: workaround for bug 159461
*/
static String PREV_LABEL_KEY = "PREV_LABEL_KEY"; //$NON-NLS-1$
static String PREV_IMAGE_KEY = "PREV_IMAGE_KEY"; //$NON-NLS-1$
/**
* @param element element the label is for
* @param provider label provider to callback to
* @param columnId column identifier or <code>null</code>
*/
public LabelUpdate(TreePath elementPath, TreeItem item, TreeModelLabelProvider provider, String[] columnIds) {
fElementPath = elementPath;
fProvider = provider;
fColumnIds = columnIds;
fItem = item;
fNumColumns = 1;
if (columnIds != null) {
fNumColumns = columnIds.length;
}
fLabels = new String[fNumColumns];
fProvider.updateStarted(this);
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate#getColumnIds()
*/
public String[] getColumnIds() {
return fColumnIds;
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate#getElement()
*/
public TreePath getElementPath() {
return fElementPath;
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate#setBackground(org.eclipse.swt.graphics.RGB, int)
*/
public void setBackground(RGB background, int columnIndex) {
if (background == null) {
return;
}
if (fBackgrounds == null) {
fBackgrounds = new RGB[fNumColumns];
}
fBackgrounds[columnIndex] = background;
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate#setFontData(org.eclipse.swt.graphics.FontData, int)
*/
public void setFontData(FontData fontData, int columnIndex) {
if (fontData == null) {
return;
}
if (fFontDatas == null) {
fFontDatas = new FontData[fNumColumns];
}
fFontDatas[columnIndex] = fontData;
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate#setForeground(org.eclipse.swt.graphics.RGB, int)
*/
public void setForeground(RGB foreground, int columnIndex) {
if (foreground == null) {
return;
}
if (fForegrounds == null) {
fForegrounds = new RGB[fNumColumns];
}
fForegrounds[columnIndex] = foreground;
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate#setImageDescriptor(org.eclipse.jface.resource.ImageDescriptor, int)
*/
public void setImageDescriptor(ImageDescriptor image, int columnIndex) {
if (image == null) {
return;
}
if (fImageDescriptors == null) {
fImageDescriptors = new ImageDescriptor[fNumColumns];
}
fImageDescriptors[columnIndex] = image;
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate#setLabel(java.lang.String, int)
*/
public void setLabel(String text, int columnIndex) {
fLabels[columnIndex] = text;
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate#getPresentationContext()
*/
public IPresentationContext getPresentationContext() {
return fProvider.getPresentationContext();
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IProgressMonitor#done()
*/
public void done() {
fProvider.complete(this);
}
/**
* Applies settings to viewer cell
*/
public void update() {
if (!fItem.isDisposed()) {
if (fColumnIds == null) {
fItem.setText(fLabels[0]);
} else {
fItem.setText(fLabels);
}
fItem.setData(PREV_LABEL_KEY, fLabels);
if (fImageDescriptors == null) {
fItem.setImage((Image)null);
fItem.setData(PREV_IMAGE_KEY, null); // TODO: bug 159461
} else {
if (fImageDescriptors == null) {
fItem.setImage((Image)null);
fItem.setData(PREV_IMAGE_KEY, null);
} else {
Image[] images = new Image[fImageDescriptors.length];
for (int i = 0; i < fImageDescriptors.length; i++) {
images[i] = fProvider.getImage(fImageDescriptors[i]);
}
if (fColumnIds == null) {
fItem.setImage(images[0]);
} else {
fItem.setImage(images);
}
fItem.setData(PREV_IMAGE_KEY, images); // TODO: bug 159461
}
}
if (fForegrounds == null) {
fItem.setForeground((Color)null);
} else {
if (fColumnIds == null) {
fItem.setForeground(fProvider.getColor(fForegrounds[0]));
} else {
for (int i = 0; i< fForegrounds.length; i++) {
fItem.setForeground(i, fProvider.getColor(fForegrounds[i]));
}
}
}
if (fBackgrounds == null) {
fItem.setBackground((Color)null);
} else {
if (fColumnIds == null) {
fItem.setBackground(fProvider.getColor(fBackgrounds[0]));
} else {
for (int i = 0; i< fBackgrounds.length; i++) {
fItem.setBackground(i, fProvider.getColor(fBackgrounds[i]));
}
}
}
if (fFontDatas == null) {
fItem.setFont((Font)null);
} else {
if (fColumnIds == null) {
fItem.setFont(fProvider.getFont(fFontDatas[0]));
} else {
for (int i = 0; i < fFontDatas.length; i++) {
fItem.setFont(i, fProvider.getFont(fFontDatas[i]));
}
}
}
}
fProvider.updateComplete(this);
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate#getElement()
*/
public Object getElement() {
return getElementPath().getLastSegment();
}
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("ILabelUpdate: "); //$NON-NLS-1$
buf.append(getElement());
return buf.toString();
}
}