package com.yoghurt.crypto.transactions.client.ui; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.place.shared.PlaceController; import com.google.gwt.place.shared.PlaceHistoryMapper; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.google.inject.Singleton; import com.yoghurt.crypto.transactions.client.place.ApplicationPlace; import com.yoghurt.crypto.transactions.client.place.ContributePlace; import com.yoghurt.crypto.transactions.client.place.StartupPlace; import com.yoghurt.crypto.transactions.client.ui.LazyProgressWidget.LazyProgressListener; import com.yoghurt.crypto.transactions.client.util.PlaceTokenParseUtil; import com.yoghurt.crypto.transactions.client.widget.HeadingWidget; import com.yoghurt.crypto.transactions.shared.domain.config.UserApplicationConfig; import gwt.material.design.client.ui.MaterialProgress; import gwt.material.design.client.ui.MaterialTextBox; @Singleton public class ApplicationRootView extends Composite implements AcceptsOneWidget, LazyProgressListener { interface ApplicationRootViewUiBinder extends UiBinder<Widget, ApplicationRootView> {} private static final ApplicationRootViewUiBinder UI_BINDER = GWT.create(ApplicationRootViewUiBinder.class); @UiField FlowPanel header; @UiField HeadingWidget applicationTitle; @UiField HeadingWidget applicationSubTitle; @UiField SimplePanel contentPanel; @UiField Anchor contributeLink; @UiField MaterialTextBox lookupField; @UiField SimplePanel progressContainer; @UiField MaterialProgress progress; private final PlaceController placeController; @Inject public ApplicationRootView(final PlaceHistoryMapper historyMapper, final PlaceController placeController, final UserApplicationConfig appConfig) { this.placeController = placeController; initWidget(UI_BINDER.createAndBindUi(this)); applicationTitle.setText(appConfig.getApplicationTitle()); applicationSubTitle.setText(appConfig.getApplicationSubTitle()); contributeLink.setHref("#" + historyMapper.getToken(new ContributePlace())); } @UiHandler("applicationTitle") public void onTitleClick(final ClickEvent e) { placeController.goTo(new StartupPlace()); } @UiHandler("lookupField") public void onLookupKeyUp(final KeyUpEvent event) { if (event.getNativeKeyCode() != KeyCodes.KEY_ENTER) { return; } final ApplicationPlace place = PlaceTokenParseUtil.parseToken(lookupField.getText()); if (place == null) { // Do something, like show a mild error. return; } placeController.goTo(place); } @Override public void setWidget(final IsWidget w) { if (w == null) { if (!progress.isAttached()) { progressContainer.setWidget(progress); } return; } if (w instanceof LazyProgressWidget) { ((LazyProgressWidget) w).subscribeProgressListener(this); } else { progressComplete(); } contentPanel.setWidget(w); } @Override public void progressComplete() { progress.removeFromParent(); } }