Changeset 555

Show
Ignore:
Timestamp:
06/12/03 10:12:51 (5 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBSkinning/RBSkinning/wxTools/wxFrameMover.py

    r528 r555  
    4545 
    4646    def __init__(self, Frame, SizeFrame=(0,0), MouseButtonId=DefaultButton): 
     47        self.strategy = MoverStrategy() 
     48        self.strategy.SetMovementOptions(*SizeFrame) 
     49 
    4750        wx.wxEvtHandler.__init__(self) 
    4851        if Frame: self.SetFrame(Frame) 
    4952        wx.EVT_MOUSE_EVENTS(self, self.OnMouseEvents) 
    50         self.SizeFrame = SizeFrame 
    5153        self.MouseButtonId = MouseButtonId 
    5254 
    53     def SetFrame(self, Frame): 
    54         self.Frame = weakref.proxy(Frame) 
     55    def SetFrame(self, frame): 
     56        return self.strategy.SetFrame(frame) 
    5557 
    5658    def OnMouseEvents(self, evt): 
     
    6971            EO.CaptureMouse() 
    7072            self.OffsetPos = EO.ClientToScreen(evt.GetPosition()) 
    71             self.FrameRect = self.Frame.GetRect().asTuple() 
    72             ClientSize = self.Frame.GetClientSize().asTuple() 
    73             Size = self.Frame.GetSize().asTuple() 
    74             BestSize = self.Frame.GetBestSize().asTuple() 
    75             self.MinSize = (BestSize[0]+Size[0]-ClientSize[0], BestSize[1]+Size[1]-ClientSize[1]) 
     73            self.strategy.OnMouseDown(evt) 
    7674 
    7775    def OnMouseUp(self, evt): 
     
    8179            evt.GetEventObject().ReleaseMouse() 
    8280            del self.OffsetPos 
    83             del self.FrameRect 
    84             del self.MinSize 
     81            self.strategy.OnMouseUp(evt) 
    8582 
    8683    def OnMouseMotion(self, evt): 
    8784        evt.Skip() 
    8885        if self.Captured: 
    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) 
    10687 
    107             newrect = [x+y for x,y in zip(self.FrameRect, DeltaRect)] 
    108             self.Frame.SetDimensions(*newrect) 
     88#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    10989 
     90class 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)