Search in sources :

Example 1 with VDDTabSheet

use of com.haulmont.cuba.web.widgets.client.addons.dragdroplayouts.ui.tabsheet.VDDTabSheet in project cuba by cuba-platform.

the class VDragDropUtil method createLayoutTransferableFromMouseDown.

/**
 * Creates a transferable from a mouse down event. Returns null if creation
 * was not successful.
 *
 * @param event
 *            The mouse down event
 * @param root
 *            The root layout from where the component is dragged
 * @return A transferable or NULL if something failed
 */
public static VTransferable createLayoutTransferableFromMouseDown(NativeEvent event, Widget root, Widget target) {
    // NPE check
    if (target == null) {
        VConsole.error("Could not find widget");
        return null;
    }
    VConsole.log("Creating transferable for root:" + root.getElement() + "\t target:" + target.getElement());
    // Special treatment for Tabsheet
    if (root instanceof VDDTabSheet) {
        VDDTabSheet tabsheet = (VDDTabSheet) root;
        TabCaption tab = WidgetUtil.findWidget(target.getElement(), TabCaption.class);
        if (tab != null && tabsheet.getElement().isOrHasChild(tab.getElement())) {
            return createTabsheetTransferableFromMouseDown(tabsheet, tab, event);
        } else {
            // Not a tab
            VConsole.error("Not on tab");
            return null;
        }
    }
    // Special treatment for Accordion
    if (root instanceof VDDAccordion) {
        VDDAccordion accordion = (VDDAccordion) root;
        StackItem tab = WidgetUtil.findWidget(target.getElement(), StackItem.class);
        if (tab != null && accordion.getElement().isOrHasChild(tab.getElement())) {
            return createAccordionTransferableFromMouseDown(accordion, tab, event);
        } else {
            // Not on tab
            VConsole.error("Not on tab");
            return null;
        }
    }
    // Ensure we have the right widget
    target = getTransferableWidget(target);
    // Find the containing layout of the component
    ComponentConnector widgetConnector = Util.findConnectorFor(target);
    if (widgetConnector == null) {
        VConsole.error("No connector found for " + target);
        return null;
    }
    // Iterate until parent either is the root or a layout with drag and
    // drop enabled
    ComponentConnector layoutConnector = (ComponentConnector) widgetConnector.getParent();
    Widget layout = layoutConnector.getWidget();
    while (layout != root && layout != null && layoutConnector != null) {
        if (isDraggingEnabled(layoutConnector, target)) {
            // Found parent layout with support for drag and drop
            break;
        }
        target = layout;
        widgetConnector = layoutConnector;
        layoutConnector = (ComponentConnector) layoutConnector.getParent();
        if (layoutConnector == null) {
            break;
        }
        layout = layoutConnector.getWidget();
    }
    // Consistency check
    if (target == null) {
        VConsole.error("Target was null");
        return null;
    }
    if (root == target) {
        /*
             * Dispatch event again so parent layout can handle the drag of the
             * root
             */
        target.getElement().dispatchEvent(createMouseDownEvent(event));
        return null;
    }
    if (layoutConnector == null) {
        VConsole.error("No layout connector was found");
        return null;
    }
    return createTransferable(layoutConnector, widgetConnector, event);
}
Also used : VDDTabSheet(com.haulmont.cuba.web.widgets.client.addons.dragdroplayouts.ui.tabsheet.VDDTabSheet) StackItem(com.vaadin.client.ui.VAccordion.StackItem) TabCaption(com.vaadin.client.ui.VTabsheet.TabCaption) Widget(com.google.gwt.user.client.ui.Widget) VDDAccordion(com.haulmont.cuba.web.widgets.client.addons.dragdroplayouts.ui.accordion.VDDAccordion)

Aggregations

Widget (com.google.gwt.user.client.ui.Widget)1 VDDAccordion (com.haulmont.cuba.web.widgets.client.addons.dragdroplayouts.ui.accordion.VDDAccordion)1 VDDTabSheet (com.haulmont.cuba.web.widgets.client.addons.dragdroplayouts.ui.tabsheet.VDDTabSheet)1 StackItem (com.vaadin.client.ui.VAccordion.StackItem)1 TabCaption (com.vaadin.client.ui.VTabsheet.TabCaption)1