org.pentaho.pac.client.common.ui.dialog.BasicDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.pentaho.pac.client.common.ui.dialog.BasicDialog.java

Source

/*
 * This program is free software; you can redistribute it and/or modify it under the 
 * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software 
 * Foundation.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this 
 * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html 
 * or from the Free Software Foundation, Inc., 
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * Copyright 2008 - 2009 Pentaho Corporation.  All rights reserved.
*/
package org.pentaho.pac.client.common.ui.dialog;

import org.pentaho.gwt.widgets.client.ui.ICallback;
import org.pentaho.pac.client.utils.PacImageBundle;

import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.HasHorizontalAlignment.HorizontalAlignmentConstant;
import com.google.gwt.user.client.ui.HasVerticalAlignment.VerticalAlignmentConstant;

public class BasicDialog extends DialogBox {

    private HorizontalPanel btnPanel = null;
    private HorizontalPanel btnOuterPanel = null;
    private VerticalPanel clientPanel = null;

    private static int idCounter = 0;
    private String titleBarSpanId = null;
    private String title = ""; //$NON-NLS-1$
    private RootPanel titleBarSpan = null;
    private Label titleBarLabel = new Label();

    private boolean showCloseButton = false;

    public BasicDialog() {
        this(""); //$NON-NLS-1$
    }

    public BasicDialog(String title) {
        this(title, true);
    }

    public BasicDialog(String title, boolean showCloseButton) {
        super();

        this.showCloseButton = showCloseButton;

        VerticalPanel rootPanel = new VerticalPanel();
        rootPanel.setSpacing(0);
        rootPanel.setStyleName("basicDialog.rootPanel"); //$NON-NLS-1$

        clientPanel = new VerticalPanel();
        setClientSize("100%", "100%"); //$NON-NLS-1$ //$NON-NLS-2$
        clientPanel.setStyleName("basicDialog.clientPanel"); //$NON-NLS-1$
        rootPanel.add(clientPanel);

        btnOuterPanel = new HorizontalPanel();
        btnOuterPanel.setSpacing(0);
        btnOuterPanel.setWidth("100%"); //$NON-NLS-1$
        btnOuterPanel.setStyleName("basicDialog.buttonPanel"); //$NON-NLS-1$

        btnPanel = new HorizontalPanel();
        btnPanel.setSpacing(0);
        btnPanel.setStyleName("basicDialog.buttonInnerPanel"); //$NON-NLS-1$

        btnOuterPanel.add(btnPanel);

        rootPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
        rootPanel.add(btnOuterPanel);

        setTitle(title);
        initTitleBar();

        setWidget(rootPanel);
    }

    /**
     * Removes the interior border around the dialog's client area.
     */
    protected void setNoBorderOnClientPanel() {
        clientPanel.setStyleName("basicDialog.clientPanelNoBorder"); //$NON-NLS-1$
    }

    protected void setClientSize(String width, String height) {
        clientPanel.setWidth(width);
        clientPanel.setHeight(height);
    }

    protected void setButtonPanelAlign(HorizontalAlignmentConstant hAlign, VerticalAlignmentConstant vAlign) {
        if (hAlign != null)
            btnOuterPanel.setCellHorizontalAlignment(btnPanel, hAlign);

        if (vAlign != null)
            btnOuterPanel.setCellVerticalAlignment(btnPanel, vAlign);
    }

    /**
     * Add a new button to the button panel. The new button will be the
     * right most button in the panel.
     * 
     * @param btn
     */
    protected void addButton(Button btn) {
        btn.addStyleName("basicDialog.button"); //$NON-NLS-1$
        this.btnPanel.add(btn);
    }

    protected void addWidgetToClientArea(Widget widget) {
        this.clientPanel.add(widget);
    }

    protected void removeRowFromClientArea(int row) {
        this.clientPanel.remove(row);
    }

    protected void insertRowIntoClientArea(Widget widget, int beforeRow) {
        this.clientPanel.insert(widget, beforeRow);
    }

    /**
     * Sets the title in the dialog's title bar
     */
    public void setTitle(String title) {
        this.title = title;
    }

    private void initTitleBar() {
        titleBarLabel.setStyleName("titleBarLabel"); //$NON-NLS-1$
        // add a span tag to the title bar to store the title and X icon later
        titleBarSpanId = "basicDialogTitle" + Integer.toString(idCounter); //$NON-NLS-1$
        idCounter++;
        setHTML("<span class='basicDialog.titleBarContent' id='" + titleBarSpanId + "'/>"); //$NON-NLS-1$//$NON-NLS-2$
    }

    private ICallback<BasicDialog> closeHandler = null;

    public void setOnCloseHandler(final ICallback<BasicDialog> handler) {
        closeHandler = handler;
    }

    /**
     * Displays the dialog on the screen.
     */
    public void show() {
        super.show();

        if (null == titleBarSpan) {
            try {
                titleBarSpan = RootPanel.get(titleBarSpanId);
            } catch (Throwable ex) {

            }
            final BasicDialog localThis = this;

            HorizontalPanel p = new HorizontalPanel();
            p.setWidth("99%"); //$NON-NLS-1$
            p.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
            p.add(titleBarLabel);
            p.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);

            if (showCloseButton) {
                Image img = PacImageBundle.getBundle().closeIcon().createImage();
                img.setStyleName("basicDialog.closeIcon"); //$NON-NLS-1$
                img.addClickListener(new ClickListener() {
                    public void onClick(Widget sender) {
                        if (null != localThis.closeHandler) {
                            localThis.closeHandler.onHandle(localThis);
                        } else {
                            localThis.hide();
                        }
                    }
                });

                p.add(img);
            }
            if (titleBarSpan != null) {
                titleBarSpan.add(p);
            }
        }
        titleBarLabel.setText(title);
    }

    /**
     * see: http://google-web-toolkit.googlecode.com/svn-history/r229/trunk/samples/mail/src/com/google/gwt/sample/mail/client/AboutDialog.java
     */
    public boolean onKeyDownPreview(char key, int modifiers) {
        // Use the popup's key preview hooks to close the dialog when escape is pressed.
        switch (key) {
        case KeyboardListener.KEY_ESCAPE:
            hide();
            return false;
        default:
            return true;
        }
    }

    /**
     * Sets the title in the dialog's title bar
     */
    public void setText(String text) {
        setTitle(text);
    }
}