| 89 | | DeltaPos = evt.GetEventObject().ClientToScreen(evt.GetPosition()) |
|---|
| 90 | | DeltaRect = [0,0,0,0] |
|---|
| 91 | | for idx in (0,1): |
|---|
| 92 | | alpha = self.SizeFrame[idx] |
|---|
| 93 | | dp, dl = 0, 0 |
|---|
| 94 | | if alpha < 0: |
|---|
| 95 | | dp = alpha * (self.OffsetPos[idx] - DeltaPos[idx]) |
|---|
| 96 | | dl = alpha * (DeltaPos[idx] - self.OffsetPos[idx]) |
|---|
| 97 | | if dp > 0: |
|---|
| 98 | | # Make sure we don't go past the minsize stops... |
|---|
| 99 | | delta = self.FrameRect[2 + idx] - self.MinSize[idx] |
|---|
| 100 | | dp, dl = min(dp, delta), min(dl, delta) |
|---|
| 101 | | elif alpha > 0: |
|---|
| 102 | | dl = alpha * (DeltaPos[idx] - self.OffsetPos[idx]) |
|---|
| 103 | | elif self.SizeFrame == (0,0): |
|---|
| 104 | | dp = DeltaPos[idx] - self.OffsetPos[idx] |
|---|
| 105 | | DeltaRect[0 + idx], DeltaRect[2 + idx] = dp, dl |
|---|
| | 86 | self.strategy.OnMouseMotion(evt) |
|---|
| | 90 | class MoverStrategy(object): |
|---|
| | 91 | def SetMovementOptions(self, horizontal=0, vertical=0): |
|---|
| | 92 | """ |
|---|
| | 93 | horizontal: |
|---|
| | 94 | -1 size left side of frame |
|---|
| | 95 | 0 move horizontally |
|---|
| | 96 | 1 size right side of frame |
|---|
| | 97 | |
|---|
| | 98 | vertical: |
|---|
| | 99 | -1 size top side of frame |
|---|
| | 100 | 0 move vertically |
|---|
| | 101 | 1 size bottom side of frame |
|---|
| | 102 | """ |
|---|
| | 103 | self.SizeFrame = horizontal, vertical |
|---|
| | 104 | |
|---|
| | 105 | def SetFrame(self, Frame): |
|---|
| | 106 | self.Frame = weakref.proxy(Frame) |
|---|
| | 107 | |
|---|
| | 108 | def OnMouseDown(self, evt): |
|---|
| | 109 | EO = evt.GetEventObject() |
|---|
| | 110 | self.OffsetPos = EO.ClientToScreen(evt.GetPosition()) |
|---|
| | 111 | self.FrameRect = self.Frame.GetRect().asTuple() |
|---|
| | 112 | ClientSize = self.Frame.GetClientSize().asTuple() |
|---|
| | 113 | Size = self.Frame.GetSize().asTuple() |
|---|
| | 114 | BestSize = self.Frame.GetBestSize().asTuple() |
|---|
| | 115 | self.MinSize = (BestSize[0]+Size[0]-ClientSize[0], BestSize[1]+Size[1]-ClientSize[1]) |
|---|
| | 116 | |
|---|
| | 117 | def OnMouseUp(self, evt): |
|---|
| | 118 | del self.OffsetPos |
|---|
| | 119 | del self.FrameRect |
|---|
| | 120 | del self.MinSize |
|---|
| | 121 | |
|---|
| | 122 | def OnMouseMotion(self, evt): |
|---|
| | 123 | DeltaPos = evt.GetEventObject().ClientToScreen(evt.GetPosition()) |
|---|
| | 124 | DeltaRect = [0,0,0,0] |
|---|
| | 125 | for idx in (0,1): |
|---|
| | 126 | alpha = self.SizeFrame[idx] |
|---|
| | 127 | dp, dl = 0, 0 |
|---|
| | 128 | if alpha < 0: |
|---|
| | 129 | dp = alpha * (self.OffsetPos[idx] - DeltaPos[idx]) |
|---|
| | 130 | dl = alpha * (DeltaPos[idx] - self.OffsetPos[idx]) |
|---|
| | 131 | if dp > 0: |
|---|
| | 132 | # Make sure we don't go past the minsize stops... |
|---|
| | 133 | delta = self.FrameRect[2 + idx] - self.MinSize[idx] |
|---|
| | 134 | dp, dl = min(dp, delta), min(dl, delta) |
|---|
| | 135 | elif alpha > 0: |
|---|
| | 136 | dl = alpha * (DeltaPos[idx] - self.OffsetPos[idx]) |
|---|
| | 137 | elif self.SizeFrame == (0,0): |
|---|
| | 138 | dp = DeltaPos[idx] - self.OffsetPos[idx] |
|---|
| | 139 | DeltaRect[0 + idx], DeltaRect[2 + idx] = dp, dl |
|---|
| | 140 | |
|---|
| | 141 | newrect = [x+y for x,y in zip(self.FrameRect, DeltaRect)] |
|---|
| | 142 | self.Frame.SetDimensions(*newrect) |
|---|