/* * Copyright 2012 SWM Services GmbH. * * 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 de.swm.commons.mobile.client.widgets; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.TouchStartEvent; import com.google.gwt.event.dom.client.TouchStartHandler; import com.google.gwt.user.client.ui.*; import de.swm.commons.mobile.client.SWMMobile; import de.swm.commons.mobile.client.widgets.itf.IHeaderPanel; import java.util.Iterator; /** * Header-Panel which is not maintaining any history. */ public class HeaderPanel extends SWMMobileWidgetBase implements HasWidgets, IHeaderPanel { private static String next_caption = SWMMobile.getI18N().headerPanelNextButton(); private static String back_caption = SWMMobile.getI18N().headerPanelBackButton(); private static boolean isHideBackUttonsOnAndroid; ClickHandler myLeftButtonClickHandler; ClickHandler myRightButtonClickHandler; TouchStartHandler myLeftButtonTouchHandler; TouchStartHandler myRightButtonTouchHandler; final FlowPanel container; /** * Default constructor. */ public HeaderPanel() { container = new FlowPanel(); final SimplePanel leftButtonContainer = new SimplePanel(); container.add(leftButtonContainer); // left button placeholder container.add(new FlowPanel()); // contents final SimplePanel rightButtonContainer = new SimplePanel(); container.add(rightButtonContainer); // right button placeholder initWidget(container); setStyleName(SWMMobile.getTheme().getMGWTCssBundle().getHeaderCss().headerPanel()); } /** * Sets the widget displayed on the left side. * * @param w widget to be displayed */ public void setLeftWidget(Widget w) { SimplePanel leftPanel = ((SimplePanel) ((FlowPanel) getWidget()).getWidget(0)); leftPanel.setWidget(w); } /** * Sets the widget displayed on the right side. * * @param w widget to be displayed */ public void setRightWidget(Widget w) { SimplePanel rightPanel = ((SimplePanel) ((FlowPanel) getWidget()).getWidget(2)); rightPanel.setWidget(w); } /** * {@inheritDoc} */ @Override public void add(Widget w) { FlowPanel contents = ((FlowPanel) ((FlowPanel) getWidget()).getWidget(1)); contents.add(w); } /** * {@inheritDoc} */ @Override public void setCaption(String caption) { FlowPanel contents = ((FlowPanel) ((FlowPanel) getWidget()).getWidget(1)); contents.clear(); contents.add(new HTML(caption)); } /** * {@inheritDoc} */ @Override public String getCaption() { FlowPanel contents = ((FlowPanel) ((FlowPanel) getWidget()).getWidget(1)); if (contents.getWidgetCount() > 0) { HTML w = (HTML) contents.getWidget(0); return w.getHTML(); } return ""; } /** * Will display the back button. * * @param hasButton true to display */ public void setHasBackButton(boolean hasButton) { if (hasButton) { setLeftButton(SWMMobile.getI18N().headerPanelBackButton()); } } /** * Will display the next button. * * @param hasButton true to display */ public void setHasNextButton(boolean hasButton) { if (hasButton) { setLeftButton(SWMMobile.getI18N().headerPanelNextButton()); } } /** * {@inheritDoc} */ @Override public void setLeftButton(String buttonName) { if (!hideBackButtonsOnAndroid()) { SimplePanel leftButton = ((SimplePanel) ((FlowPanel) getWidget()).getWidget(0)); final ClickHandler clickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { onLeftButtonClick(event); } }; final TouchStartHandler touchStartHandler = new TouchStartHandler() { @Override public void onTouchStart(TouchStartEvent event) { onLeftButtonTouchStart(event); } }; if (back_caption.equalsIgnoreCase(buttonName)) { BackButton button = new BackButton(buttonName, clickHandler); button.addTouchStartHandler(touchStartHandler); leftButton.setWidget(button); } else { Button button = new Button(buttonName, clickHandler); button.addTouchStartHandler(touchStartHandler); leftButton.setWidget(button); } } } private boolean hideBackButtonsOnAndroid() { if (SWMMobile.getOsDetection().isAndroid() && isHideBackUttonsOnAndroid){ return true; } //dafaultmassig ist der back button aktiv return false; } /** * {@inheritDoc} */ @Override public void setRightButton(String buttonName) { SimplePanel rightButton = ((SimplePanel) ((FlowPanel) getWidget()).getWidget(2)); final ClickHandler clickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { onRightButtonClick(event); } }; final TouchStartHandler touchStartHandler = new TouchStartHandler() { @Override public void onTouchStart(TouchStartEvent event) { onRightButtonTouchStart(event); } }; if (buttonName.equalsIgnoreCase(next_caption)) { NextButton button = new NextButton(buttonName, clickHandler); button.addTouchStartHandler(touchStartHandler); rightButton.setWidget(button); } else { Button button = new Button(buttonName, clickHandler); button.addTouchStartHandler(touchStartHandler); rightButton.setWidget(button); } } /** * Will set a pre-constructed button as right button. * * @param button the preconstructed button. */ public void setRightButton(Button button) { SimplePanel rightButton = ((SimplePanel) ((FlowPanel) getWidget()).getWidget(2)); rightButton.setWidget(button); } /** * {@inheritDoc} */ @Override public Button getLeftButton() { SimplePanel leftButton = ((SimplePanel) ((FlowPanel) getWidget()).getWidget(0)); return (Button) leftButton.getWidget(); } /** * {@inheritDoc} */ @Override public Button getRightButton() { SimplePanel rightButton = ((SimplePanel) ((FlowPanel) getWidget()).getWidget(2)); return (Button) rightButton.getWidget(); } private void onLeftButtonClick(ClickEvent event) { if (myLeftButtonClickHandler != null) { myLeftButtonClickHandler.onClick(event); } } private void onRightButtonClick(ClickEvent event) { if (myRightButtonClickHandler != null) { myRightButtonClickHandler.onClick(event); } } private void onLeftButtonTouchStart(TouchStartEvent event) { if (myLeftButtonTouchHandler != null) { myLeftButtonTouchHandler.onTouchStart(event); } } private void onRightButtonTouchStart(TouchStartEvent event) { if (myRightButtonTouchHandler != null) { myRightButtonTouchHandler.onTouchStart(event); } } /** * {@inheritDoc} */ @Override public void setLeftButtonClickHandler(ClickHandler handler) { myLeftButtonClickHandler = handler; } /** * {@inheritDoc} */ @Override public void setRightButtonClickHandler(ClickHandler handler) { myRightButtonClickHandler = handler; } /** * {@inheritDoc} */ public void setLeftButtonTouchHandler(TouchStartHandler handler) { myLeftButtonTouchHandler = handler; } /** * {@inheritDoc} */ public void setRightButtonTouchHandler(TouchStartHandler handler) { myRightButtonTouchHandler = handler; } /** * {@inheritDoc} */ @Override public Iterator<Widget> iterator() { return null; } /** * {@inheritDoc} */ @Override public boolean remove(Widget w) { return false; } @Override public void clear() { container.clear(); } /** * Sets the default text literals for next and back buttons. All buttons with this name will be rendered as back or * next buttons. This method should be called on app start. * * @param backCaptionText . * @param nextCaptionText . */ public static void internationalize(String backCaptionText, String nextCaptionText) { back_caption = backCaptionText; next_caption = nextCaptionText; } /** * If true - back button will not be visible on android. * @param hideBackUttonsOnAndroid if true back button will not be visible on android */ public static void setHideBackBttonsOnAndroid(boolean hideBackUttonsOnAndroid) { isHideBackUttonsOnAndroid = hideBackUttonsOnAndroid; } }