Package org.gwtoolbox.widget.client.panel.dashboard

Source Code of org.gwtoolbox.widget.client.panel.dashboard.DashboardWidget

package org.gwtoolbox.widget.client.panel.dashboard;

import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseUpEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import org.gwtoolbox.commons.ui.client.event.CommonMouseHandler;
import org.gwtoolbox.widget.client.panel.contentpanel.ContentPanel;

/**
* @author Uri Boness
*/
public class DashboardWidget extends Composite {

    private ContentPanel main;

    public DashboardWidget(String name, Widget content, DashboardDragController controller) {
        main = new ContentPanel(name);
        main.setCollapsable(true);
        main.setContent(content);
        main.addTitleMouseHandler(new DnDListener(this, controller));
        SimplePanel panel = new SimplePanel();
        panel.setWidget(main);
        main.setWidth("100%");
        initWidget(panel);
        setStylePrimaryName("DashboardWidget");
    }

    public void addTool(ContentPanel.Tool tool, ClickHandler clickHandler) {
        main.addTool(tool, clickHandler);
    }

    //============================================== Inner Classes =====================================================

    private static class DnDListener extends CommonMouseHandler {

        private SimplePanel placeHolder;

        private final DashboardWidget widget;
        private final DashboardDragController controller;
        private Point lastDragPoint;
        private HandlerRegistration  eventPreviewHandlerRegistration;

        private DnDListener(DashboardWidget widget, DashboardDragController controller) {
            this.widget = widget;
            this.controller = controller;
        }

        @Override
        public void onMouseDown(MouseDownEvent event) {
            Element element = event.getNativeEvent().getEventTarget().cast();
            int left = widget.getAbsoluteLeft();
            int top = widget.getAbsoluteTop();
            int width = widget.getOffsetWidth();

            // keeping the placeholder of the widget and hiding it. If the widget drop is rejected
            // it will be put back in this placeholder and will be shown in its original place.
            placeHolder = (SimplePanel) widget.getParent();
            placeHolder.setVisible(false);

            widget.setWidth(width + "px");
            RootPanel.get().add(widget, left + 5, top - 5);
            widget.addStyleDependentName("drag");

            lastDragPoint = new Point(event.getClientX(), event.getClientY());
            Event.setCapture(element);
            controller.handleDashboardWidgetMove(widget);
            eventPreviewHandlerRegistration = Event.addNativePreviewHandler(new Event.NativePreviewHandler() {
                public void onPreviewNativeEvent(Event.NativePreviewEvent event) {
                    event.getNativeEvent().preventDefault();
                }
            });
        }

        @Override
        public void onMouseMove(MouseMoveEvent event) {
            if (lastDragPoint == null) { // currently not dragging
                return;
            }

            int x = event.getClientX();
            int y = event.getClientY();

            int left = widget.getAbsoluteLeft();
            int top = widget.getAbsoluteTop();

            int deltaX = x - lastDragPoint.getX();
            int deltaY = y - lastDragPoint.getY();

            RootPanel.get().setWidgetPosition(widget, left + deltaX, top + deltaY);
            lastDragPoint = new Point(x, y);
            controller.handleDashboardWidgetMove(widget);
        }

        @Override
        public void onMouseUp(MouseUpEvent event) {
            if (lastDragPoint == null) { // currently not dragging
                return;
            }
            Element element = event.getNativeEvent().getEventTarget().cast();
            lastDragPoint = null;
            Event.releaseCapture(element);
            widget.removeStyleDependentName("drag");
            RootPanel.get().remove(widget);
            try {
                controller.handleDashboardWidgetDrop(widget);
                placeHolder.removeFromParent();
            } catch (DropVetoException dve) {
                // putting the widget back to its original place
                placeHolder.setWidget(widget);
                placeHolder.setVisible(true);
            }
            placeHolder = null;
            if (eventPreviewHandlerRegistration != null) {
                eventPreviewHandlerRegistration.removeHandler();
            }
        }
    }
}
TOP

Related Classes of org.gwtoolbox.widget.client.panel.dashboard.DashboardWidget

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.