package com.akjava.gwt.lib.client.experimental; import com.akjava.gwt.lib.client.CanvasUtils; import com.google.gwt.canvas.client.Canvas; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.VerticalPanel; public class ProgressCanvas{ private PopupPanel popup; private int currentStep; public int getCurrentStep() { return currentStep; } private int maxStep; private String bgColor="#fff"; private String barColor="#f00"; private static Canvas canvas=Canvas.createIfSupported();//share private int canvasWidth=200; private int canvasHeight=16; protected VerticalPanel mainPanel; public ProgressCanvas(String title,int maxStep){ this.maxStep=maxStep; popup = new PopupPanel(false,true); popup.setGlassEnabled(true);//need call here,TODO support as option mainPanel = new VerticalPanel(); Label titleLabel=new Label(title); mainPanel.add(titleLabel); popup.add(mainPanel); canvas = CanvasUtils.createCanvas(canvas,canvasWidth, canvasHeight); mainPanel.add(canvas); } public void updateCanvas(){ CanvasUtils.fillRect(canvas, bgColor); if(currentStep>=maxStep){ CanvasUtils.fillRect(canvas, barColor); }else{ canvas.getContext2d().setFillStyle(barColor); int dw=(int)((double)canvasWidth/maxStep*currentStep); canvas.getContext2d().fillRect(0, 0, dw, canvasHeight); } } public void show(){ popup.center(); popup.show(); } public void hide(){ popup.hide(); } public void progress(int step){ currentStep+=step; updateCanvas(); } public boolean isCompleted(){ return currentStep>=maxStep; } }