// Copyright 2012 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.collide.client.workspace; import com.google.collide.client.common.BaseResources; import com.google.collide.client.ui.popup.CenterPanel; import com.google.collide.client.util.Elements; import com.google.collide.mvp.CompositeView; import com.google.collide.mvp.UiComponent; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.AnchorElement; import com.google.gwt.dom.client.Element; import com.google.gwt.resources.client.CssResource; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiTemplate; import elemental.events.Event; import elemental.events.EventListener; /** * Instructional popup that alert users that window with started application * has been blocked by browser. */ public class PopupBlockedInstructionalPopup extends UiComponent<PopupBlockedInstructionalPopup.View> { /** * Static factory method for obtaining an instance of the * {@link PopupBlockedInstructionalPopup}. */ public static PopupBlockedInstructionalPopup create(Resources res) { View view = new View(res); CenterPanel centerPanel = CenterPanel.create(res, view.getElement()); centerPanel.setHideOnEscapeEnabled(true); return new PopupBlockedInstructionalPopup(view, centerPanel); } /** * CSS resources interface. */ public interface Css extends CssResource { String root(); String popupBlockedIcon(); } /** * Resources interface. */ public interface Resources extends BaseResources.Resources, CenterPanel.Resources { @Source("PopupBlockedInstructionalPopup.css") Css popupBlockedInstructionalPopupCss(); @Source("blocked_popups.png") ImageResource popupBlockedIcon(); } interface ViewEvents { void onDoneClicked(); } static class View extends CompositeView<ViewEvents> { @UiTemplate("PopupBlockedInstructionalPopup.ui.xml") interface MyBinder extends UiBinder<Element, View> { } private static MyBinder uiBinder = GWT.create(MyBinder.class); final Resources res; @UiField(provided = true) final BaseResources.Css baseCss; @UiField(provided = true) final Css css; @UiField AnchorElement doneButton; View(Resources res) { this.res = res; this.baseCss = res.baseCss(); this.css = res.popupBlockedInstructionalPopupCss(); setElement(Elements.asJsElement(uiBinder.createAndBindUi(this))); attachEventListeners(); } private void attachEventListeners() { Elements.asJsElement(doneButton).setOnClick(new EventListener() { @Override public void handleEvent(Event evt) { if (getDelegate() == null) { return; } getDelegate().onDoneClicked(); } }); } } class ViewEventsImpl implements ViewEvents { @Override public void onDoneClicked() { centerPanel.hide(); } } private final CenterPanel centerPanel; PopupBlockedInstructionalPopup(View view, CenterPanel centerPanel) { super(view); this.centerPanel = centerPanel; view.setDelegate(new ViewEventsImpl()); } public void show() { centerPanel.show(); } }