data-miner-executor/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/custom/progress/OrangeProgressBarAppearance...

133 lines
3.8 KiB
Java

package org.gcube.portlets.user.dataminerexecutor.client.custom.progress;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.resources.client.ImageResource.ImageOptions;
import com.google.gwt.resources.client.ImageResource.RepeatStyle;
import com.google.gwt.safecss.shared.SafeStyles;
import com.google.gwt.safecss.shared.SafeStylesUtils;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.sencha.gxt.cell.core.client.ProgressBarCell.ProgressBarAppearance;
import com.sencha.gxt.cell.core.client.ProgressBarCell.ProgressBarAppearanceOptions;
import com.sencha.gxt.core.client.GXT;
import com.sencha.gxt.core.client.XTemplates;
import com.sencha.gxt.core.client.util.Format;
/**
*
* @author Giancarlo Panichi
*
*
*/
public class OrangeProgressBarAppearance implements ProgressBarAppearance {
public interface OrangeProgressBarResources {
ImageResource barOrange();
ImageResource innerBarOrange();
OrangeProgressBarStyle style();
}
public interface OrangeProgressBarStyle extends CssResource {
String progressBarOrange();
String progressInnerOrange();
String progressTextOrange();
String progressTextBackOrange();
String progressWrapOrange();
}
public interface OrangeProgressBarTemplate extends XTemplates {
@XTemplate(source = "OrangeProgressBar.html")
SafeHtml render(SafeHtml text, OrangeProgressBarStyle style,
SafeStyles wrapStyles, SafeStyles progressBarStyles,
SafeStyles progressTextStyles, SafeStyles widthStyles);
}
public interface OrangeProgressBarDefaultResources extends
OrangeProgressBarResources, ClientBundle {
@Source({ "OrangeProgressBar.css" })
@Override
OrangeProgressBarStyle style();
@Source("orange-progress-bg.gif")
@ImageOptions(repeatStyle = RepeatStyle.Horizontal)
@Override
ImageResource barOrange();
@Source("orange-bg.gif")
@ImageOptions(repeatStyle = RepeatStyle.Horizontal)
@Override
ImageResource innerBarOrange();
}
private final OrangeProgressBarStyle style;
private OrangeProgressBarTemplate template;
public OrangeProgressBarAppearance() {
this(
GWT.<OrangeProgressBarDefaultResources> create(OrangeProgressBarDefaultResources.class),
GWT.<OrangeProgressBarTemplate> create(OrangeProgressBarTemplate.class));
}
public OrangeProgressBarAppearance(OrangeProgressBarResources resources,
OrangeProgressBarTemplate template) {
this.style = resources.style();
this.style.ensureInjected();
this.template = template;
}
@Override
public void render(SafeHtmlBuilder sb, Double value,
ProgressBarAppearanceOptions options) {
value = value == null ? 0 : value;
double valueWidth = value * options.getWidth();
int vw = new Double(valueWidth).intValue();
String text = options.getProgressText();
if (text != null) {
int v = (int) Math.round(value * 100);
text = Format.substitute(text, v);
}
SafeHtml txt;
if (text == null) {
txt = SafeHtmlUtils.fromSafeConstant("&#160;");
} else {
txt = SafeHtmlUtils.fromString(text);
}
int adj = GXT.isIE() ? 4 : 2;
SafeStyles wrapStyles = SafeStylesUtils.fromTrustedString("width:"
+ (options.getWidth() - adj) + "px;");
SafeStyles progressBarStyles = SafeStylesUtils
.fromTrustedString("width:" + vw + "px;");
SafeStyles progressTextStyles = SafeStylesUtils
.fromTrustedString("width:" + Math.max(vw - 8, 0) + "px;");
SafeStyles widthStyles = SafeStylesUtils.fromTrustedString("width:"
+ (Math.max(0, options.getWidth() - adj)) + "px;");
sb.append(template.render(txt, style, wrapStyles, progressBarStyles,
progressTextStyles, widthStyles));
}
}