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);
}
Aggregations