/* * Copyright 2011 Daniel Kurka * * 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.googlecode.mgwt.ui.client.widget.panel.pull; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.uibinder.client.UiFactory; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; import com.googlecode.mgwt.dom.client.event.animation.TransitionEndEvent; import com.googlecode.mgwt.dom.client.event.animation.TransitionEndHandler; import com.googlecode.mgwt.ui.client.util.CssUtil; import com.googlecode.mgwt.ui.client.widget.progress.ProgressIndicator; /** * A header for a pull panel that shows an arrow * * @author Daniel Kurka * */ public class PullArrowBase extends Composite implements PullArrowWidget { @UiField protected FlowPanel icon; @UiField protected HTML textContainer; @UiField protected ProgressIndicator indicator; @UiField protected FlowPanel main; protected PullPanelAppearance appearance; public PullArrowBase(PullPanelAppearance appearance) { this.appearance = appearance; initWidget(this.appearance.arrow().createAndBindUi(this)); indicator.getElement().getStyle().setDisplay(Display.NONE); resetRotation(); addDomHandler(new TransitionEndHandler() { @Override public void onTransitionEnd(TransitionEndEvent event) { event.preventDefault(); event.stopPropagation(); } }, TransitionEndEvent.getType()); showArrow(); } @Override public Widget asWidget() { return this; } @Override public void onScroll(int positionY) { int degree = getRotation(positionY); CssUtil.rotate(icon.getElement(), degree); } public void showError() { removeStyles(); icon.addStyleName(appearance.css().error()); icon.setVisible(true); indicator.setVisible(false); } @Override public int getHeight() { // TODO return 70; } @Override public int getStateSwitchPosition() { // TODO return 50; } @Override public void setHTML(final String html) { String htmlToSet = html; if (html == null) { htmlToSet = ""; } textContainer.setHTML(htmlToSet); } public void showArrow() { removeStyles(); icon.addStyleName(appearance.css().arrow()); resetRotation(); icon.setVisible(true); indicator.setVisible(false); } public void showLoadingIndicator() { icon.getElement().setAttribute("style", ""); showSpinner(); } protected void showSpinner() { removeStyles(); icon.setVisible(false); indicator.setVisible(true); } protected int getRotation(int y) { return y; } protected void resetRotation() { int rotation = getRotation(0); CssUtil.rotate(icon.getElement(), rotation); } protected void removeStyles() { icon.removeStyleName(appearance.css().arrow()); icon.removeStyleName(appearance.css().error()); } @UiFactory protected PullPanelAppearance getAppearance() { return appearance; } }