package org.appfuse.webapp.client.ui; import org.appfuse.webapp.client.application.Application; import org.appfuse.webapp.client.application.base.security.LoginEvent; import org.appfuse.webapp.client.application.base.security.LogoutEvent; import org.appfuse.webapp.client.ui.navigation.NavigationBar; import org.appfuse.webapp.client.ui.navigation.SideNavigationBar; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.place.shared.PlaceChangeEvent; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Widget; /** * The outermost UI of the application. */ public class DesktopShell extends Shell implements LoginEvent.Handler, LogoutEvent.Handler, PlaceChangeEvent.Handler { interface Binder extends UiBinder<Widget, DesktopShell> { } private static final Binder uiBinder = GWT.create(Binder.class); @UiField NavigationBar navigationBar; @UiField SideNavigationBar sideNavigationBar; @UiField Element currentUserInfo; public DesktopShell() { initWidget(uiBinder.createAndBindUi(this)); } @Override public void setApplication(final Application application) { super.setApplication(application); navigationBar.setApplication(application); sideNavigationBar.setApplication(application); } @Override protected void onAttach() { super.onAttach(); navigationBar.load(); } @Override public void onLoginEvent(final LoginEvent loginEvent) { navigationBar.load(); final SafeHtmlBuilder sb = new SafeHtmlBuilder(); sb.appendEscaped(" | "); sb.appendEscaped(application.getI18n().user_status()); sb.append(' '); sb.appendEscaped(application.getCurrentUsername()); currentUserInfo.setInnerSafeHtml(sb.toSafeHtml()); } @Override public void onLogoutEvent(final LogoutEvent logoutEvent) { navigationBar.load(); currentUserInfo.setInnerHTML(""); } @Override public void onPlaceChange(final PlaceChangeEvent event) { Window.scrollTo(0, 0); for (final Widget widget : messages) { try { widget.removeFromParent(); } catch (final Throwable e) { // already removed // XXX null in native method Node.removeChild:L291 } } } }