package fr.lteconsulting.hexa.client.ui.dialog;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.GwtEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.SimpleLayoutPanel;
import com.google.gwt.user.client.ui.Widget;
import fr.lteconsulting.hexa.client.ui.dialog.DialogBoxBuilder.DialogBox;
import fr.lteconsulting.hexa.client.ui.resources.image.ImageResources;
public class DialogBoxForLayoutWidget implements DialogBox, HasCloseHandlers<DialogBox>
{
HandlerManager handlerMng = new HandlerManager( this );
boolean isAutoHide;
boolean isDisplayed = false;
LayoutPanel dock;
Image closeWidget;
public DialogBoxForLayoutWidget( String title, IsWidget content )
{
int m = 50;
ImageResource closeImage = ImageResources.INSTANCE.close();
int titleSize = Math.max( closeImage.getHeight(), closeImage.getWidth() ) + 5;
dock = new LayoutPanel();
Glass glass = new Glass();
dock.add( glass );
DivWidget backGround = new DivWidget();
backGround.addStyleName( ResizablePanel.CSS.bkgnd() );
dock.add( backGround );
dock.setWidgetLeftRight( backGround, m, Unit.PX, m, Unit.PX );
dock.setWidgetTopBottom( backGround, m, Unit.PX, m, Unit.PX );
DivWidget titleWidget = new DivWidget();
titleWidget.addStyleName( ResizablePanel.CSS.title() );
titleWidget.getElement().setInnerText( title );
dock.add( titleWidget );
dock.setWidgetLeftRight( titleWidget, m, Unit.PX, m + titleSize, Unit.PX );
dock.setWidgetTopHeight( titleWidget, m, Unit.PX, titleSize, Unit.PX );
closeWidget = new Image( closeImage );
dock.add( closeWidget );
dock.setWidgetRightWidth( closeWidget, m, Unit.PX, titleSize, Unit.PX );
dock.setWidgetTopHeight( closeWidget, m, Unit.PX, titleSize, Unit.PX );
SimpleLayoutPanel contentPanel = new SimpleLayoutPanel();
contentPanel.setWidget( content.asWidget() );
contentPanel.addStyleName( ResizablePanel.CSS.content() );
dock.add( contentPanel );
dock.setWidgetLeftRight( contentPanel, m, Unit.PX, m, Unit.PX );
dock.setWidgetTopBottom( contentPanel, m + titleSize, Unit.PX, m, Unit.PX );
closeWidget.addClickHandler( new ClickHandler()
{
@Override
public void onClick( ClickEvent event )
{
if( isAutoHide )
hide();
}
} );
}
@Override
public void show()
{
show( true );
}
@Override
public void show( boolean isAutoHide )
{
this.isAutoHide = isAutoHide;
if( isDisplayed )
return;
isDisplayed = true;
RootLayoutPanel.get().add( dock );
}
@Override
public void hide()
{
if( ! isDisplayed )
return;
isDisplayed = false;
RootLayoutPanel.get().remove( dock );
CloseEvent.fire( this, null );
}
@Override
public HandlerRegistration addCloseHandler( CloseHandler<DialogBox> handler )
{
return handlerMng.addHandler( CloseEvent.getType(), handler );
}
@Override
public void fireEvent( GwtEvent<?> event )
{
handlerMng.fireEvent( event );
}
}
class DivWidget extends Widget
{
public DivWidget()
{
setElement( Document.get().createDivElement() );
}
}