package com.sksamuel.jqm4gwt.toolbar;
import com.google.gwt.event.logical.shared.HasAttachHandlers;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.user.client.ui.Widget;
public class JQMTabsEvent extends GwtEvent<JQMTabsEvent.Handler> {
public interface Handler extends EventHandler {
/**
* If the tabs are currently collapsed, event.oldTabHeader and event.oldTabContent will be null.
* <br> If the tabs are collapsing, event.newTabHeader and event.newTabContent will be null.
*/
void onActivate(JQMTabsEvent event);
/**
* If any exception is thrown then tabs won't be switched and current tab remains active.
* <br> If the tabs are currently collapsed, event.oldTabHeader and event.oldTabContent will be null.
* <br> If the tabs are collapsing, event.newTabHeader and event.newTabContent will be null.
*/
void onBeforeActivate(JQMTabsEvent event);
}
public static class DefaultHandler implements Handler {
@Override
public void onActivate(JQMTabsEvent event) {
}
@Override
public void onBeforeActivate(JQMTabsEvent event) {
}
}
static Type<JQMTabsEvent.Handler> TYPE;
/**
* Fires an {@link JQMTabsEvent} on all registered handlers in the handler source.
*
* @param <S> The handler source type
* @param source - the source of the handlers
*/
public static <S extends HasAttachHandlers> void fire(S source, TabsState tabsState,
Widget newTabHeader, Widget oldTabHeader, Widget newTabContent, Widget oldTabContent) {
if (TYPE != null) {
JQMTabsEvent event = new JQMTabsEvent(tabsState, newTabHeader, oldTabHeader,
newTabContent, oldTabContent);
source.fireEvent(event);
}
}
public static Type<JQMTabsEvent.Handler> getType() {
if (TYPE == null) {
TYPE = new Type<JQMTabsEvent.Handler>();
}
return TYPE;
}
public enum TabsState { ACTIVATE, BEFORE_ACTIVATE }
private final TabsState tabsState;
private final Widget newTabHeader;
private final Widget oldTabHeader;
private final Widget newTabContent;
private final Widget oldTabContent;
protected JQMTabsEvent(TabsState tabsState, Widget newTabHeader, Widget oldTabHeader,
Widget newTabContent, Widget oldTabContent) {
this.tabsState = tabsState;
this.newTabHeader = newTabHeader;
this.oldTabHeader = oldTabHeader;
this.newTabContent = newTabContent;
this.oldTabContent = oldTabContent;
}
public TabsState getTabsState() {
return tabsState;
}
public Widget getNewTabHeader() {
return newTabHeader;
}
public Widget getOldTabHeader() {
return oldTabHeader;
}
public Widget getNewTabContent() {
return newTabContent;
}
public Widget getOldTabContent() {
return oldTabContent;
}
@Override
public final Type<JQMTabsEvent.Handler> getAssociatedType() {
return TYPE;
}
@Override
public String toDebugString() {
assertLive();
return super.toDebugString() + " tabsState = " + tabsState;
}
@Override
protected void dispatch(JQMTabsEvent.Handler handler) {
switch (tabsState) {
case ACTIVATE:
handler.onActivate(this);
break;
case BEFORE_ACTIVATE:
handler.onBeforeActivate(this);
break;
}
}
}