Legends can be dragged by user
This commit is contained in:
parent
7a7288b6b3
commit
ba31b3d7ba
@ -48,6 +48,51 @@ class GraphicsWidgetAnchor(object):
|
|||||||
self.__offset = offset
|
self.__offset = offset
|
||||||
self.__geometryChanged()
|
self.__geometryChanged()
|
||||||
|
|
||||||
|
|
||||||
|
def autoAnchor(self, pos, relative=True):
|
||||||
|
"""
|
||||||
|
Set the position of this item relative to its parent by automatically
|
||||||
|
choosing appropriate anchor settings.
|
||||||
|
|
||||||
|
If relative is True, one corner of the item will be anchored to
|
||||||
|
the appropriate location on the parent with no offset. The anchored
|
||||||
|
corner will be whichever is closest to the parent's boundary.
|
||||||
|
|
||||||
|
If relative is False, one corner of the item will be anchored to the same
|
||||||
|
corner of the parent, with an absolute offset to achieve the correct
|
||||||
|
position.
|
||||||
|
"""
|
||||||
|
pos = Point(pos)
|
||||||
|
br = self.mapRectToParent(self.boundingRect()).translated(pos - self.pos())
|
||||||
|
pbr = self.parentItem().boundingRect()
|
||||||
|
anchorPos = [0,0]
|
||||||
|
parentPos = Point()
|
||||||
|
itemPos = Point()
|
||||||
|
if abs(br.left() - pbr.left()) < abs(br.right() - pbr.right()):
|
||||||
|
anchorPos[0] = 0
|
||||||
|
parentPos[0] = pbr.left()
|
||||||
|
itemPos[0] = br.left()
|
||||||
|
else:
|
||||||
|
anchorPos[0] = 1
|
||||||
|
parentPos[0] = pbr.right()
|
||||||
|
itemPos[0] = br.right()
|
||||||
|
|
||||||
|
if abs(br.top() - pbr.top()) < abs(br.bottom() - pbr.bottom()):
|
||||||
|
anchorPos[1] = 0
|
||||||
|
parentPos[1] = pbr.top()
|
||||||
|
itemPos[1] = br.top()
|
||||||
|
else:
|
||||||
|
anchorPos[1] = 1
|
||||||
|
parentPos[1] = pbr.bottom()
|
||||||
|
itemPos[1] = br.bottom()
|
||||||
|
|
||||||
|
if relative:
|
||||||
|
relPos = [(itemPos[0]-pbr.left()) / pbr.width(), (itemPos[1]-pbr.top()) / pbr.height()]
|
||||||
|
self.anchor(anchorPos, relPos)
|
||||||
|
else:
|
||||||
|
offset = itemPos - parentPos
|
||||||
|
self.anchor(anchorPos, anchorPos, offset)
|
||||||
|
|
||||||
def __geometryChanged(self):
|
def __geometryChanged(self):
|
||||||
if self.__parent is None:
|
if self.__parent is None:
|
||||||
return
|
return
|
||||||
|
@ -101,7 +101,6 @@ class LegendItem(GraphicsWidget, GraphicsWidgetAnchor):
|
|||||||
label.close()
|
label.close()
|
||||||
self.updateSize() # redraq box
|
self.updateSize() # redraq box
|
||||||
|
|
||||||
|
|
||||||
def updateSize(self):
|
def updateSize(self):
|
||||||
if self.size is not None:
|
if self.size is not None:
|
||||||
return
|
return
|
||||||
@ -124,6 +123,13 @@ class LegendItem(GraphicsWidget, GraphicsWidgetAnchor):
|
|||||||
p.setBrush(fn.mkBrush(100,100,100,50))
|
p.setBrush(fn.mkBrush(100,100,100,50))
|
||||||
p.drawRect(self.boundingRect())
|
p.drawRect(self.boundingRect())
|
||||||
|
|
||||||
|
def hoverEvent(self, ev):
|
||||||
|
ev.acceptDrags(QtCore.Qt.LeftButton)
|
||||||
|
|
||||||
|
def mouseDragEvent(self, ev):
|
||||||
|
if ev.button() == QtCore.Qt.LeftButton:
|
||||||
|
dpos = ev.pos() - ev.lastPos()
|
||||||
|
self.autoAnchor(self.pos() + dpos)
|
||||||
|
|
||||||
class ItemSample(GraphicsWidget):
|
class ItemSample(GraphicsWidget):
|
||||||
def __init__(self, item):
|
def __init__(self, item):
|
||||||
|
Loading…
Reference in New Issue
Block a user