/*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.xwiki.gwt.user.client.ui;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.logical.shared.HasCloseHandlers;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* The base class for any custom dialog box. It prevents unwanted modifications of the content from outside. It wraps
* {@link DialogBox} object that you can customize and which is not accessible outside.
*
* @version $Id: 98f140029a78efc19131a1182233e1a606d5f820 $
*/
public class CompositeDialogBox extends Composite implements HasCloseHandlers<CompositeDialogBox>,
CloseHandler<PopupPanel>
{
/**
* The underlying dialog box.
*/
private final DialogBox dialog;
/**
* Creates a new composite dialog box.
*
* @param autoHide Whether or not the dialog should auto hide when the user clicks outside of it.
* @param modal Specifies if the dialog box can loose focus.
*/
public CompositeDialogBox(boolean autoHide, boolean modal)
{
dialog = new DialogBox(autoHide, modal);
dialog.addCloseHandler(this);
}
@Override
protected void initWidget(Widget widget)
{
super.initWidget(widget);
dialog.setWidget(this);
}
/**
* Protected access to the underlying dialog box.
*
* @return the wrapped dialog box.
*/
protected DialogBox getDialog()
{
return dialog;
}
/**
* Centers this dialog on the screen.
*
* @see DialogBox#center()
*/
public void center()
{
dialog.center();
}
/**
* Hides this dialog box.
*
* @see DialogBox#hide()
*/
public void hide()
{
dialog.hide();
}
@Override
public HandlerRegistration addCloseHandler(CloseHandler<CompositeDialogBox> handler)
{
return addHandler(handler, CloseEvent.getType());
}
@Override
public void onClose(CloseEvent<PopupPanel> event)
{
if (event.getSource() == dialog) {
CloseEvent.fire(this, this, event.isAutoClosed());
}
}
/**
* @return {@code true} if this dialog is currently shown, {@code false} otherwise
*
* @see DialogBox#isShowing()
*/
public boolean isShowing()
{
return dialog.isShowing();
}
}