/* * 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 ); } }