package org.goko.core.execution.monitor.uiprovider;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DecorationOverlayIcon;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;
import org.eclipse.wb.swt.ResourceManager;
import org.goko.core.common.exception.GkException;
import org.goko.core.gcode.element.validation.IValidationTarget;
import org.goko.core.gcode.execution.ExecutionState;
import org.goko.core.gcode.execution.ExecutionToken;
import org.goko.core.log.GkLog;
public class ExecutionQueueContainerLabelProvider extends LabelProvider implements IStyledLabelProvider {
private static final GkLog LOG = GkLog.getLogger(ExecutionQueueContainerLabelProvider.class);
private final ImageDescriptor warningImageDescriptor;
private final ImageDescriptor errorImageDescriptor;
/**
* Constructor
*/
public ExecutionQueueContainerLabelProvider() {
super();
warningImageDescriptor = ResourceManager.getPluginImageDescriptor("org.goko.gcode.rs274ngcv3.ui", "resources/icons/warn_ovr.png");
errorImageDescriptor = ResourceManager.getPluginImageDescriptor("org.goko.core.execution.monitor", "resources/icons/error_ovr.png");
}
/** (inheritDoc)
* @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)
*/
@Override
public StyledString getStyledText(Object element) {
if(element instanceof ExecutionQueueContainerUiProvider){
StyledString styleString = new StyledString();
styleString.append("Execution queue ");
return styleString;
}else if(element instanceof ExecutionToken){
ExecutionToken<?> executionToken = (ExecutionToken<?>) element;
StyledString styleString = new StyledString();
try {
styleString.append(executionToken.getGCodeProvider().getCode());
} catch (GkException e) {
styleString.append("ERROR");
LOG.error(e);
}
return styleString;
}
return null;
}
/** (inheritDoc)
* @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
*/
@Override
public Image getImage(Object element) {
if(element instanceof ExecutionQueueContainerUiProvider){
return ResourceManager.getPluginImage("org.goko.core.execution.monitor", "resources/icons/blue-documents-stack.png");
}else if(element instanceof ExecutionToken){
ExecutionToken<?> token = (ExecutionToken<?>) element;
Image image = null;
if(token.hasErrors()){
image = ResourceManager.getPluginImage("org.goko.core.execution.monitor", "resources/icons/error_ovr.png");
}else if(token.getState() == ExecutionState.COMPLETE){
image = ResourceManager.getPluginImage("org.goko.core.execution.monitor", "resources/icons/tick.png");
}else if(token.getState() == ExecutionState.RUNNING){
image = ResourceManager.getPluginImage("org.goko.core.execution.monitor", "resources/icons/control-running.png");
}else if(token.getState() == ExecutionState.PAUSED){
image = ResourceManager.getPluginImage("org.goko.core.execution.monitor", "resources/icons/pause.gif");
}else if(token.getState() == ExecutionState.ERROR){
image = ResourceManager.getPluginImage("org.goko.core.execution.monitor", "resources/icons/cross.png");
}else if(token.getState() == ExecutionState.STOPPED){
image = ResourceManager.getPluginImage("org.goko.core.execution.monitor", "resources/icons/stop.gif");
}
image = decorateValidationTarget(image, token);
return image;
}
return null;
}
protected Image decorateValidationTarget(Image image, IValidationTarget target){
if(image != null){
if(target.hasErrors()){
return new DecorationOverlayIcon(image, errorImageDescriptor, IDecoration.BOTTOM_RIGHT).createImage();
}else if(target.hasWarnings()){
return new DecorationOverlayIcon(image, warningImageDescriptor, IDecoration.BOTTOM_RIGHT).createImage();
}
}
return image;
}
}