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())