com.gwtmobile.ui.client.widgets.HeaderPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.gwtmobile.ui.client.widgets.HeaderPanel.java

Source

/*
 * Copyright (c) 2010 Zhihua (Dennis) Jiang
 *
 * 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.gwtmobile.ui.client.widgets;

import java.beans.Beans;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.gwtmobile.ui.client.CSS.StyleNames.Primary;

public class HeaderPanel extends PanelBase {

    ClickHandler _leftButtonClickHandler;
    ClickHandler _rightButtonClickHandler;

    public HeaderPanel() {
        super.add(new SimplePanel()); //left button placeholder
        super.add(new FlowPanel()); //contents
        super.add(new SimplePanel()); //right button placeholder
        setStyleName(Primary.HeaderPanel);
        if (Beans.isDesignTime()) {
            add(new Label("Empty HeaderPanel. " + getDesignTimeMessage()));
        }
    }

    @Override
    protected String getDesignTimeMessage() {
        return "Set caption and left/right button properties.";
    }

    @Override
    public void add(Widget w) {
        FlowPanel contents = (FlowPanel) getWidget(1);
        if (Beans.isDesignTime() && contents.getWidgetCount() > 0) {
            Widget widget = contents.getWidget(0);
            if (widget instanceof Label && ((Label) widget).getText().contains(getDesignTimeMessage())) {
                contents.clear();
            }
        }
        contents.add(w);
    }

    public void setCaption(String caption) {
        if (!caption.isEmpty()) {
            FlowPanel contents = (FlowPanel) getWidget(1);
            contents.clear();
            contents.add(new HTML(caption));
        }
    }

    public String getCaption() {
        FlowPanel contents = (FlowPanel) getWidget(1);
        if (contents.getWidgetCount() > 0) {
            HTML w = (HTML) contents.getWidget(0);
            return w.getHTML();
        }
        return "";
    }

    public void setLeftButton(String buttonName) {
        if (!buttonName.isEmpty()) {
            SimplePanel leftButton = (SimplePanel) getWidget(0);
            ClickHandler clickHandler = new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                    onLeftButtonClick(event);
                }
            };
            if (buttonName.toUpperCase().equals("BACK")) {
                leftButton.setWidget(new BackButton(buttonName, clickHandler));
            } else {
                leftButton.setWidget(new Button(buttonName, clickHandler));
            }
        }
    }

    /**
     * Sets the back button.
     *
     * Frank Mena: This is needed because the method setLeftButton() method
     * only allows setting the text "BACK" to create a left arrow button.
     * If you want to add a back button with the text "Cancel", the method
     * above will not allow it.
     *
     * @param buttonName the new back button
     */
    public void setBackButton(String buttonName) {
        if (!buttonName.isEmpty()) {
            SimplePanel leftButton = (SimplePanel) getWidget(0);
            ClickHandler clickHandler = new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                    onLeftButtonClick(event);
                }
            };
            leftButton.setWidget(new BackButton(buttonName, clickHandler));
        }
    }

    public void setRightButton(String buttonName) {
        if (!buttonName.isEmpty()) {
            SimplePanel rightButton = (SimplePanel) getWidget(2);
            ClickHandler clickHandler = new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                    onRightButtonClick(event);
                }
            };
            if (buttonName.toUpperCase().equals("NEXT")) {
                rightButton.setWidget(new NextButton(buttonName, clickHandler));
            } else {
                rightButton.setWidget(new Button(buttonName, clickHandler));
            }
        }
    }

    public Button getLeftButton() {
        SimplePanel leftButton = (SimplePanel) getWidget(0);
        return (Button) leftButton.getWidget();
    }

    public Button getRightButton() {
        SimplePanel rightButton = (SimplePanel) getWidget(2);
        return (Button) rightButton.getWidget();
    }

    void onLeftButtonClick(ClickEvent event) {
        if (_leftButtonClickHandler != null) {
            _leftButtonClickHandler.onClick(event);
        } else {
            Button leftButton = getLeftButton();
            if (leftButton != null && leftButton.getClass() == BackButton.class) {
                ((BackButton) leftButton).onClick(event);
            }
        }
    }

    void onRightButtonClick(ClickEvent event) {
        if (_rightButtonClickHandler != null) {
            _rightButtonClickHandler.onClick(event);
        }
    }

    public void setLeftButtonClickHandler(ClickHandler handler) {
        _leftButtonClickHandler = handler;
    }

    public void setRightButtonClickHandler(ClickHandler handler) {
        _rightButtonClickHandler = handler;
    }

}