package fr.lteconsulting.hexa.client.ui.uploadjs; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style.BorderStyle; import com.google.gwt.dom.client.Style.Position; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.HasValue; import com.google.gwt.user.client.ui.Widget; public class ProgressBar extends Widget implements HasValue<Integer> { int currentValue = 0; Element progress = DOM.createDiv(); Element text = DOM.createSpan(); public ProgressBar() { Element div = DOM.createDiv(); div.getStyle().setWidth( 100, Unit.PX ); div.getStyle().setHeight( 20, Unit.PX ); div.getStyle().setBorderWidth( 1, Unit.PX ); div.getStyle().setBorderColor( "black" ); div.getStyle().setBorderStyle( BorderStyle.SOLID ); div.getStyle().setPosition( Position.ABSOLUTE ); progress.getStyle().setWidth( currentValue, Unit.PCT ); progress.getStyle().setHeight( 100, Unit.PCT ); progress.getStyle().setBackgroundColor( "grey" ); text.getStyle().setColor( "white" ); text.getStyle().setPosition( Position.ABSOLUTE ); text.getStyle().setTop( 0, Unit.PX ); text.getStyle().setLeft( 0, Unit.PX ); div.appendChild( progress ); div.appendChild( text ); Element main = DOM.createDiv(); main.appendChild( div ); main.getStyle().setWidth( 102, Unit.PX ); main.getStyle().setHeight( 22, Unit.PX ); setElement( main ); } @Override public HandlerRegistration addValueChangeHandler( ValueChangeHandler<Integer> handler ) { return addHandler( handler, ValueChangeEvent.getType() ); } @Override public Integer getValue() { return currentValue; } @Override public void setValue( Integer value ) { setValue( value, true ); } @Override public void setValue( Integer value, boolean fireEvents ) { currentValue = value; progress.getStyle().setWidth( currentValue, Unit.PCT ); if( currentValue >= 0 ) text.setInnerText( currentValue + "%" ); else text.setInnerText( "Error" ); if( fireEvents ) ValueChangeEvent.fire( this, value ); } }