Java tutorial
/*! * 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 (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.gwt.widgets.client.dialogs; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.FocusWidget; import com.google.gwt.user.client.ui.KeyboardListener; import com.google.gwt.user.client.ui.PopupListener; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; import org.pentaho.gwt.widgets.client.utils.FrameUtils; @SuppressWarnings("deprecation") public class DialogBox extends com.google.gwt.user.client.ui.DialogBox implements PopupListener { private static FocusPanel pageBackground = null; private static int clickCount = 0; private static int dialogDepthCount = 0; private FocusWidget focusWidget = null; boolean autoHide = false; boolean modal = true; boolean centerCalled = false; public DialogBox(boolean autoHide, boolean modal) { super(autoHide, modal); this.autoHide = autoHide; this.modal = modal; addPopupListener(this); setStylePrimaryName("pentaho-dialog"); } public boolean onKeyDownPreview(char key, int modifiers) { // Use the popup's key preview hooks to close the dialog when either // enter or escape is pressed. switch (key) { case KeyboardListener.KEY_ENTER: case KeyboardListener.KEY_ESCAPE: hide(); break; } return true; } protected void initializePageBackground() { // IE6 has problems with 100% height so is better a huge size // pageBackground.setSize("100%", "100%"); if (pageBackground == null) { pageBackground = new FocusPanel(); pageBackground.setStyleName("glasspane"); //$NON-NLS-1$ pageBackground.addClickListener(new ClickListener() { public void onClick(Widget sender) { clickCount++; if (clickCount > 2) { clickCount = 0; pageBackground.setVisible(false); pageBackground.getElement().getStyle().setDisplay(Display.NONE); } } }); RootPanel.get().add(pageBackground, 0, 0); } } protected void block() { pageBackground.setSize("100%", Window.getClientHeight() + Window.getScrollTop() + "px"); //$NON-NLS-1$ //$NON-NLS-2$ pageBackground.setVisible(true); pageBackground.getElement().getStyle().setDisplay(Display.BLOCK); } public void center() { initializePageBackground(); super.center(); if (modal && !centerCalled) { block(); dialogDepthCount++; } if (focusWidget != null) { focusWidget.setFocus(true); } // hide <embeds> // TODO: migrate to GlassPane Listener FrameUtils.toggleEmbedVisibility(false); // Notify listeners that we're showing a dialog (hide PDFs, flash). if (!centerCalled) { GlassPane.getInstance().show(); } centerCalled = true; } public void show() { super.show(); if (focusWidget != null) { focusWidget.setFocus(true); } } public void setFocusWidget(FocusWidget widget) { focusWidget = widget; if (focusWidget != null) { focusWidget.setFocus(true); } } public void onPopupClosed(PopupPanel sender, boolean autoClosed) { if (modal) { dialogDepthCount--; centerCalled = false; if (dialogDepthCount <= 0) { pageBackground.setVisible(false); // reshow <embeds> if (this.isVisible()) { // TODO: migrate to glasspane listener FrameUtils.toggleEmbedVisibility(true); } // just make sure it is zero dialogDepthCount = 0; } } // Notify listeners that we're hiding a dialog (re-show PDFs, flash). GlassPane.getInstance().hide(); } }