/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2010-2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.features.dashboard.client.portlet;
import org.opennms.features.dashboard.client.dnd.ResizeDragController;
import org.opennms.features.dashboard.client.dnd.MoveDragController;
import com.allen_sauer.gwt.dnd.client.AbstractDragController;
import com.allen_sauer.gwt.dnd.client.util.Location;
import com.allen_sauer.gwt.dnd.client.util.WidgetLocation;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
/**
* author: Tharindu Munasinghe (tharindumunasinghe@gmail.com)
* org.opennms.features.dashboard
*/
@Deprecated
public abstract class AbsPopup extends FocusPanel
{
// protected WidgetResource imageResource = WidgetResource.WIDGETRESOURCE;
// protected WidgetCssResource cssResource = imageResource.widgetsCssResource();
public static final int DIRECTION_EAST = 0x0001;
public static final int DIRECTION_NORTH = 0x0002;
public static final int DIRECTION_SOUTH = 0x0004;
public static final int DIRECTION_WEST = 0x0008;
public static final DirectionConstant EAST = new DirectionConstant( DIRECTION_EAST, "e" );
public static final DirectionConstant NORTH = new DirectionConstant( DIRECTION_NORTH, "n" );
public static final DirectionConstant NORTH_EAST = new DirectionConstant( DIRECTION_NORTH | DIRECTION_EAST, "ne" );
public static final DirectionConstant NORTH_WEST = new DirectionConstant( DIRECTION_NORTH | DIRECTION_WEST, "nw" );
public static final DirectionConstant SOUTH = new DirectionConstant( DIRECTION_SOUTH, "s" );
public static final DirectionConstant SOUTH_EAST = new DirectionConstant( DIRECTION_SOUTH | DIRECTION_EAST, "se" );
public static final DirectionConstant SOUTH_WEST = new DirectionConstant( DIRECTION_SOUTH | DIRECTION_WEST, "sw" );
public static final DirectionConstant WEST = new DirectionConstant( DIRECTION_WEST, "w" );
private static final int BORDER_THICKNESS = 5;
protected static final int TITLE_HEIGHT = 22;
protected static final int BUTTON_PANEL_HEIGHT=23;
private int contentHeight;
private int contentWidth;
private Widget eastWidget;
private boolean initialLoad = false;
private Widget southWidget;
private Panel cornerWidget;
protected Label title;
protected PushButton closeBtn;
protected Grid mainPanel;
protected SimplePanel messageBody;
protected SimplePanel imageBody;
protected Button okBtn;
protected Button cancelBtn;
protected ClickHandler closeHandler;
private AbstractDragController moveDragController;
private ResizeDragController resizeDragController;
protected FlexTable bodyPanel;
protected FlexTable titlePanel;
public AbsPopup()
{
mainPanel = new Grid( 3, 3 );
mainPanel.getCellFormatter().setWidth( 0, 0, BORDER_THICKNESS+"px" );
mainPanel.getCellFormatter().setHeight( 0, 0, BORDER_THICKNESS+"px" );
mainPanel.getCellFormatter().setWidth( 2, 2, BORDER_THICKNESS+"px" );
mainPanel.getCellFormatter().setHeight( 2, 2, BORDER_THICKNESS+"px" );
add( mainPanel );
addStyleName( "popup-WindowPanel" );
mainPanel.setCellSpacing( 0 );
mainPanel.setCellPadding( 0 );
mainPanel.addStyleName( "borderPanel" );
DOM.setStyleAttribute( this.getElement(), "zIndex", "20000" );
DOM.setStyleAttribute( this.getElement(), "borderColor","#C3D9FF");
DOM.setStyleAttribute( this.getElement(), "border", "none" );
DOM.setStyleAttribute( this.getElement(), "background", "none" );
DOM.setStyleAttribute( this.getElement(), "padding","0px");
bodyPanel=new FlexTable();
bodyPanel.setSize( "100%", "100%" );
bodyPanel.setCellSpacing( 0 );
bodyPanel.setCellPadding( 0 );
mainPanel.setWidget( 1, 1, bodyPanel );
mainPanel.getCellFormatter().setVerticalAlignment( 1, 1, HasVerticalAlignment.ALIGN_TOP );
closeHandler = new ClickHandler() {
public void onClick(ClickEvent arg0) {
AbsPopup.this.setVisible( false );
AbsPopup.this.removeFromParent();
}
};
titlePanel=new FlexTable();
titlePanel.setCellSpacing( 0 );
titlePanel.setCellPadding( 0 );
titlePanel.setWidth( "100%" );
title=new Label( );
title.setStyleName( "popup-WindowPanel-title" );
// title.setSize( "100%", TITLE_HEIGHT+"px" );
title.setWidth("100%" );
titlePanel.setWidget( 0, 0, title );
closeBtn=new PushButton(new Image(GWT.getHostPageBaseURL()+"images/drop_small.png"));
closeBtn.setSize( "auto", "auto" );
closeBtn.setStyleName( "popup-WindowPanel-close" );
closeBtn.addClickHandler( closeHandler );
titlePanel.setWidget( 0, 1, closeBtn );
titlePanel.getCellFormatter().setWidth( 0, 1, "30px" );
HorizontalPanel contentpanel=new HorizontalPanel();
contentpanel.setWidth( "100%" );
bodyPanel.setWidget( 1, 0, contentpanel );
bodyPanel.getCellFormatter().setVerticalAlignment( 1, 0, HasVerticalAlignment.ALIGN_TOP );
imageBody=new SimplePanel();
imageBody.setStyleName( "popup-WindowPanel-image" );
contentpanel.add( imageBody );
messageBody=new SimplePanel();
messageBody.setStyleName( "popup-WindowPanel-body" );
contentpanel.add( messageBody );
moveDragController=new MoveDragController( RootPanel.get() );
moveDragController.setBehaviorDragStartSensitivity( 5 );
moveDragController.setBehaviorConstrainedToBoundaryPanel(true);
moveDragController.setBehaviorMultipleSelection(false);
moveDragController.makeDraggable( this, title );
resizeDragController = new ResizeDragController( RootPanel.get() );
resizeDragController.setBehaviorConstrainedToBoundaryPanel( true );
resizeDragController.setBehaviorMultipleSelection( false );
setupCell( 0, 0, NORTH_WEST, false );
setupCell( 0, 1, NORTH, false );
setupCell( 0, 2, NORTH_EAST, false );
setupCell( 1, 0, WEST, false );
eastWidget = setupCell( 1, 2, EAST, true );
eastWidget.setSize( BORDER_THICKNESS+"px", "100%" );
setupCell( 2, 0, SOUTH_WEST, false );
southWidget = setupCell( 2, 1, SOUTH, true );
southWidget.setSize( "100%", BORDER_THICKNESS + "px" );
cornerWidget = setupCell( 2, 2, SOUTH_EAST, true );
Image corner=new Image(GWT.getHostPageBaseURL()+"images/resize_corner.png");
cornerWidget.add( corner );
DOM.setStyleAttribute( corner.getElement(), "position", "absolute" );
DOM.setStyleAttribute( corner.getElement(), "right","3px");
DOM.setStyleAttribute( corner.getElement(), "bottom", "3px" );
okBtn = new Button( " Ok " );
okBtn.setPixelSize( 75, BUTTON_PANEL_HEIGHT );
okBtn.setStyleName( "popup-WindowPanel-btn" );
cancelBtn = new Button( "Cancel" );
cancelBtn.setPixelSize( 75, BUTTON_PANEL_HEIGHT );
cancelBtn.setStyleName( "popup-WindowPanel-btn" );
}
public void clear()
{
messageBody.clear();
}
public void showpopUp()
{
center();
// show();
}
public void showPopup( int left, int top )
{
// setPopupPosition( left, top );
// show();
RootPanel.get().add( this, left, top );
if ( !isVisible() )
{
setVisible(true);
}
}
public int getContentHeight()
{
return contentHeight;
}
public int getContentWidth()
{
return contentWidth;
}
public void moveBy( int right, int down )
{
AbsolutePanel parent = ( AbsolutePanel ) getParent();
Location location = new WidgetLocation( this, parent );
int left = location.getLeft() + right;
int top = location.getTop() + down;
parent.setWidgetPosition( this, left, top );
}
private Panel setupCell( int row, int col, DirectionConstant direction, boolean resize )
{
final FocusPanel widget = new FocusPanel();
widget.setPixelSize( BORDER_THICKNESS, BORDER_THICKNESS );
mainPanel.setWidget( row, col, widget );
if ( resize )
{
resizeDragController.makeDraggable( widget, direction );
widget.addStyleName( "Resize-" + direction.directionLetters );
}
return widget;
}
private void removeResizeHandle( Widget w, DirectionConstant direction )
{
resizeDragController.makeNotDraggable( w);
w.removeStyleName( "Resize-" + direction.directionLetters );
}
public void setContentSize( int width, int height )
{
if ( width != contentWidth )
{
contentWidth = width;
}
if ( height != contentHeight )
{
contentHeight = height;
// int headerHeight = title.getOffsetHeight();
// eastWidget.setPixelSize( BORDER_THICKNESS, contentHeight /*+ headerHeight*/ );
}
mainPanel.setPixelSize( contentWidth, contentHeight );
}
@Override
protected void onLoad()
{
super.onLoad();
if ( !initialLoad && mainPanel.getOffsetHeight() != 0 )
{
initialLoad = true;
setContentSize( mainPanel.getOffsetWidth(), mainPanel.getOffsetHeight() );
}
}
public void makeNotResizable()
{
removeResizeHandle( eastWidget, EAST );
removeResizeHandle( southWidget, SOUTH );
removeResizeHandle( cornerWidget, SOUTH_EAST );
}
public void center() {
int left = (Window.getClientWidth() - getOffsetWidth()) >> 1;
int top = (Window.getClientHeight() - getOffsetHeight()) >> 1;
RootPanel.get().add( this, Math.max(Window.getScrollLeft() + left, 0), Math.max(Window.getScrollTop() + top, 0));
if ( !isVisible() )
{
setVisible(true);
}
}
@Override
public void setHeight( String height )
{
mainPanel.setHeight( height );
}
@Override
public void setWidth( String width )
{
mainPanel.setWidth( width );
}
@Override
public void setPixelSize( int width, int height )
{
mainPanel.setPixelSize( width, height );
}
@Override
public void setSize( String width, String height )
{
mainPanel.setSize( width, height );
}
public void makeNotDraggable()
{
moveDragController.makeNotDraggable( this );
}
}