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);
}
});
}-*/;
}