package com.eas.widgets; import com.eas.core.HasPublished; import com.eas.core.XElement; import com.eas.menu.HasComponentPopupMenu; import com.eas.menu.PlatypusPopupMenu; import com.eas.ui.HasEventsExecutor; import com.eas.ui.HasJsFacade; import com.eas.ui.events.EventsExecutor; import com.eas.ui.events.HasHideHandlers; import com.eas.ui.events.HasShowHandlers; import com.eas.ui.events.HideEvent; import com.eas.ui.events.HideHandler; import com.eas.ui.events.ShowEvent; import com.eas.ui.events.ShowHandler; import com.eas.widgets.progress.ProgressBar; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.event.dom.client.ContextMenuEvent; import com.google.gwt.event.dom.client.ContextMenuHandler; import com.google.gwt.event.logical.shared.HasResizeHandlers; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.HasEnabled; public class PlatypusProgressBar extends ProgressBar implements HasJsFacade, HasEnabled, HasComponentPopupMenu, HasEventsExecutor, HasShowHandlers, HasHideHandlers, HasResizeHandlers { protected EventsExecutor eventsExecutor; protected PlatypusPopupMenu menu; protected boolean enabled = true; protected String name; protected JavaScriptObject published; protected String text; protected TextFormatter formatter = new TextFormatter() { @Override public String getText(ProgressBar bar, Double curProgress) { return text; } }; public PlatypusProgressBar() { super(); setStyleName("progress"); getBarElement().removeClassName("gwt-ProgressBar-bar"); getBarElement().addClassName("progress-bar"); getBarElement().addClassName("progress-bar-default"); getElement().<XElement> cast().addResizingTransitionEnd(this); } @Override public HandlerRegistration addResizeHandler(ResizeHandler handler) { return addHandler(handler, ResizeEvent.getType()); } @Override public void onResize() { super.onResize(); if (isAttached()) { ResizeEvent.fire(this, getElement().getOffsetWidth(), getElement().getOffsetHeight()); } } @Override public HandlerRegistration addHideHandler(HideHandler handler) { return addHandler(handler, HideEvent.getType()); } @Override public HandlerRegistration addShowHandler(ShowHandler handler) { return addHandler(handler, ShowEvent.getType()); } @Override public void setVisible(boolean visible) { boolean oldValue = isVisible(); super.setVisible(visible); if (oldValue != visible) { if (visible) { ShowEvent.fire(this, this); } else { HideEvent.fire(this, this); } } } @Override public EventsExecutor getEventsExecutor() { return eventsExecutor; } @Override public void setEventsExecutor(EventsExecutor aExecutor) { eventsExecutor = aExecutor; } @Override public PlatypusPopupMenu getPlatypusPopupMenu() { return menu; } protected HandlerRegistration menuTriggerReg; @Override public void setPlatypusPopupMenu(PlatypusPopupMenu aMenu) { if (menu != aMenu) { if (menuTriggerReg != null) menuTriggerReg.removeHandler(); menu = aMenu; if (menu != null) { menuTriggerReg = super.addDomHandler(new ContextMenuHandler() { @Override public void onContextMenu(ContextMenuEvent event) { event.preventDefault(); event.stopPropagation(); menu.setPopupPosition(event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY()); menu.show(); } }, ContextMenuEvent.getType()); } } } @Override public boolean isEnabled() { return enabled; } @Override public void setEnabled(boolean aValue) { boolean oldValue = enabled; enabled = aValue; if (!oldValue && enabled) { getElement().<XElement> cast().unmask(); } else if (oldValue && !enabled) { getElement().<XElement> cast().disabledMask(); } } @Override public String getJsName() { return name; } @Override public void setJsName(String aValue) { name = aValue; } public String getText() { return text; } public void setText(String aValue) { if (text == null && aValue != null || !text.equals(aValue)) { text = aValue; if (text != null) { setTextFormatter(formatter); } else { setTextFormatter(null); } } } public JavaScriptObject getPublished() { return published; } @Override public void setPublished(JavaScriptObject aValue) { if (published != aValue) { published = aValue; if (published != null) { publish(this, aValue); } } } private native static void publish(HasPublished aWidget, JavaScriptObject published)/*-{ Object.defineProperty(published, "value", { get : function() { var v = aWidget.@com.eas.widgets.PlatypusProgressBar::getValue()(); if (v != null) { return v.@java.lang.Number::doubleValue()(); } else return null; }, set : function(aValue) { if (aValue != null) { var v = +aValue; var d = @java.lang.Double::new(D)(v); aWidget.@com.eas.widgets.PlatypusProgressBar::setValue(Ljava/lang/Double;Z)(d, true); } else { aWidget.@com.eas.widgets.PlatypusProgressBar::setValue(Ljava/lang/Double;Z)(null, true); } } }); Object.defineProperty(published, "minimum", { get : function() { return aWidget.@com.eas.widgets.PlatypusProgressBar::getMinProgress()(); }, set : function(aValue) { aWidget.@com.eas.widgets.PlatypusProgressBar::setMinProgress(D)(aValue); } }); Object.defineProperty(published, "maximum", { get : function() { return aWidget.@com.eas.widgets.PlatypusProgressBar::getMaxProgress()(); }, set : function(aValue) { aWidget.@com.eas.widgets.PlatypusProgressBar::setMaxProgress(D)(aValue); } }); Object.defineProperty(published, "text", { get : function() { return aWidget.@com.eas.widgets.PlatypusProgressBar::getText()(); }, set : function(aValue) { aWidget.@com.eas.widgets.PlatypusProgressBar::setText(Ljava/lang/String;)(aValue != null ? '' + aValue : null); } }); }-*/; }