@Override protected Widget newPositioner(DragContext context) { // Use two widgets so that setPixelSize() consistently affects dimensions // excluding positioner border in quirks and strict modes SimplePanel outer = new SimplePanel(); outer.addStyleName(DragClientBundle.INSTANCE.css().positioner()); // place off screen for border calculation RootPanel.get().add(outer, -500, -500); // Ensure IE quirks mode returns valid outer.offsetHeight, and thus valid // DOMUtil.getVerticalBorders(outer) outer.setWidget(DUMMY_LABEL_IE_QUIRKS_MODE_OFFSET_HEIGHT); int width = 0; int height = 0; for (Widget widget : context.selectedWidgets) { width = Math.max(width, widget.getOffsetWidth()); height += widget.getOffsetHeight(); } SimplePanel inner = new SimplePanel(); inner.setPixelSize( width - DOMUtil.getHorizontalBorders(outer), height - DOMUtil.getVerticalBorders(outer)); outer.setWidget(inner); return outer; }
protected void configurePostionerSlot(DragContext context, PortletSlot slot) { positionerSlot = slot; int targetIndex = DOMUtil.findIntersect( panel, new CoordinateLocation(context.mouseX, context.mouseY), getLocationWidgetComparator()); panel.insert(positionerSlot, targetIndex); positionerSlot.addStyleName("v-portallayout-positioner"); }
@Override public void onMove(DragContext context) { super.onMove(context); int targetIndex = DOMUtil.findIntersect( panel, new CoordinateLocation(context.mouseX, context.mouseY), getLocationWidgetComparator()); // check that positioner not already in the correct location int positionerIndex = panel.getWidgetIndex(positionerSlot); if (positionerIndex != targetIndex && (positionerIndex != targetIndex - 1 || targetIndex == 0)) { if (positionerIndex == 0 && panel.getWidgetCount() == 1) { } else if (targetIndex == -1) { } else { panel.insert(positionerSlot, targetIndex); } } }