org.opennms.features.dashboard.client.portlet.AbsPopup.java Source code

Java tutorial

Introduction

Here is the source code for org.opennms.features.dashboard.client.portlet.AbsPopup.java

Source

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

}