blob: 546c3c61e68e342d8f0cba4cd61adbf76a1208fb [file] [log] [blame]
package org.eclipse.team.internal.ui.sync.views;
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.team.core.subscribers.SyncInfo;
import org.eclipse.team.core.sync.IRemoteSyncElement;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.internal.ui.actions.TeamAction;
import org.eclipse.team.ui.ISharedImages;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.model.WorkbenchLabelProvider;
/**
* The SyncViewerLabelProvider can be used in either a tree or table.
*/
public class SyncViewerLabelProvider extends LabelProvider implements ITableLabelProvider {
//column constants
private static final int COL_RESOURCE = 0;
private static final int COL_PARENT = 1;
private Image compressedFolderImage;
// Keep track of the compare and workbench image providers
// so they can be properly disposed
CompareConfiguration compareConfig = new CompareConfiguration();
WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider();
/**
* @return
*/
public Image getCompressedFolderImage() {
if (compressedFolderImage == null) {
compressedFolderImage = TeamUIPlugin.getImageDescriptor(ISharedImages.IMG_COMPRESSED_FOLDER).createImage();
}
return compressedFolderImage;
}
/**
* Returns a sync view label provider that is hooked up to the decorator
* mechanism.
*
* @return a new <code>DecoratingLabelProvider</code> which wraps a <code>
* new <code>WorkbenchLabelProvider</code>
*/
public static ILabelProvider getDecoratingLabelProvider() {
return new DecoratingLabelProvider(
new SyncViewerLabelProvider(),
WorkbenchPlugin
.getDefault()
.getWorkbench()
.getDecoratorManager()
.getLabelDecorator());
}
public SyncViewerLabelProvider() {
}
public String getText(Object element) {
if (element instanceof CompressedFolder) {
IResource resource = getResource(element);
return resource.getProjectRelativePath().toString();
}
IResource resource = getResource(element);
return workbenchLabelProvider.getText(resource);
}
public Image getImage(Object element) {
if (element instanceof CompressedFolder) {
return compareConfig.getImage(getCompressedFolderImage(), 0);
}
IResource resource = getResource(element);
int kind = getSyncKind(element);
switch (kind & IRemoteSyncElement.DIRECTION_MASK) {
case IRemoteSyncElement.OUTGOING:
kind = (kind &~ IRemoteSyncElement.OUTGOING) | IRemoteSyncElement.INCOMING;
break;
case IRemoteSyncElement.INCOMING:
kind = (kind &~ IRemoteSyncElement.INCOMING) | IRemoteSyncElement.OUTGOING;
break;
}
Image image = workbenchLabelProvider.getImage(resource);
return compareConfig.getImage(image, kind);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
*/
public void dispose() {
super.dispose();
workbenchLabelProvider.dispose();
compareConfig.dispose();
if (compressedFolderImage != null)
compressedFolderImage.dispose();
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
*/
public Image getColumnImage(Object element, int columnIndex) {
if (columnIndex == COL_RESOURCE) {
return getImage(element);
} else if (columnIndex == COL_PARENT) {
IResource resource = getResource(element);
return null;
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
*/
public String getColumnText(Object element, int columnIndex) {
if (columnIndex == COL_RESOURCE) {
return getText(element);
} else if (columnIndex == COL_PARENT) {
IResource resource = getResource(element);
return resource.getParent().getFullPath().toString();
}
return null;
}
private IResource getResource(Object obj) {
return (IResource)TeamAction.getAdapter(obj, IResource.class);
}
private SyncInfo getSyncInfo(Object obj) {
return (SyncInfo)TeamAction.getAdapter(obj, SyncInfo.class);
}
private int getSyncKind(Object element) {
SyncInfo info = getSyncInfo(element);
if (info != null) {
return info.getKind();
}
return 0;
}
}