def newPositioner(self, context): # Use two widgets so that setPixelSize() consistently affects dimensions outer = SimplePanel() outer.addStyleName(CSS_DRAGDROP_POSITIONER) # place off screen for border calculation RootPanel.get().add(outer, -500, -500) # Ensure IE quirks mode returns valid outer.offsetHeight, and thus valid outer.setWidget(self.DUMMY_LABEL_IE_QUIRKS_MODE_OFFSET_HEIGHT) width = 0 height = 0 if isinstance(self.dropTarget,HorizontalPanel): for widget in context.selectedWidgets: width += widget.getOffsetWidth() height = Math.max(height, widget.getOffsetHeight()) else: for widget in context.selectedWidgets: width = Math.max(width, widget.getOffsetWidth()) height += widget.getOffsetHeight() inner = SimplePanel() inner.setPixelSize( width - DOMUtil.getHorizontalBorders(outer), height - DOMUtil.getVerticalBorders(outer)) outer.setWidget(inner) return outer
def makePositioner(self, reference): outer = SimplePanel() # Use two widgets so that setPixelSize() consistently affects dimensions outer.addStyleName(CSS_DRAGDROP_POSITIONER) outer.getElement().getStyle().setProperty("margin", "0px") RootPanel.get().add(outer, -500, -500) # place off screen for border calculation outer.setWidget(DUMMY_LABEL_IE_QUIRKS_MODE_OFFSET_HEIGHT) # Ensure IE quirks mode returns valid outer.offsetHeight, and thus valid inner = SimplePanel() inner.getElement().getStyle().setProperty("margin", "0px") inner.getElement().getStyle().setProperty("border", "none") offsetWidth = reference.getOffsetWidth() - DOMUtil.getHorizontalBorders(outer) offsetHeight = reference.getOffsetHeight() - DOMUtil.getVerticalBorders(outer) inner.setPixelSize(offsetWidth, offsetHeight) outer.setWidget(inner) return outer
def onEnter(self, context): super(self.__class__,self).onEnter(context) assert self.draggableList.size() == 0 self.dropTargetClientWidth = DOMUtil.getClientWidth(self.dropTarget.getElement()) self.dropTargetClientHeight = DOMUtil.getClientHeight(self.dropTarget.getElement()) self.calcDropTargetOffset() draggableAbsoluteLeft = context.draggable.getAbsoluteLeft() draggableAbsoluteTop = context.draggable.getAbsoluteTop() for widget in context.selectedWidgets: draggable = self.Draggable(widget) draggable.positioner = self.makePositioner(widget) draggable.relativeX = widget.getAbsoluteLeft() - draggableAbsoluteLeft draggable.relativeY = widget.getAbsoluteTop() - draggableAbsoluteTop self.draggableList.add(draggable)
def onEnter(self, context): super(self.__class__, self).onEnter(context) self.positioner = self.newPositioner(context) targetIndex = DOMUtil.findIntersect( self.dropTarget, CoordinateLocation(context.mouseX, context.mouseY), self.getLocationWidgetComparator() ) self.insert(self.positioner, targetIndex)
def onMove(self, context): super(self.__class__, self).onMove(context) targetIndex = DOMUtil.findIntersect( self.dropTarget, CoordinateLocation(context.mouseX, context.mouseY), self.getLocationWidgetComparator() ) positionerIndex = self.dropTarget.getWidgetIndex(self.positioner) # check that positioner not already in the correct location if positionerIndex is not targetIndex and (positionerIndex is not targetIndex - 1 or targetIndex == 0): if positionerIndex == 0 and self.dropTarget.getWidgetCount() == 1: pass elif positionerIndex == 0 and self.dropTarget.getWidgetCount() == 1: pass elif targetIndex == -1: # outside drop target, so remove positioner to indicate a drop will not happen self.positioner.removeFromParent() else: self.insert(self.positioner, targetIndex)
def calcDropTargetOffset(self): dropTargetLocation = WidgetLocation(self.dropTarget, None) self.dropTargetOffsetX = dropTargetLocation.getLeft() \ + DOMUtil.getBorderLeft(self.dropTarget.getElement()) self.dropTargetOffsetY = dropTargetLocation.getTop() \ + DOMUtil.getBorderTop(self.dropTarget.getElement())