Changeset 200

Show
Ignore:
Timestamp:
06/26/02 15:50:18 (6 years ago)
Author:
sholloway
Message:

Added Locking methods
Added parentvar/ parentnode

Files:

Legend:

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

    r186 r200  
    5555        'contextvar':'', 
    5656        'contextnode':'', 
     57        'parentvar':'', 
     58        'parentnode':'', 
    5759        'unravelstop':'0', 
    5860        } 
     
    7678 
    7779        self.object = None 
    78  
    79     #    print '++', self.__class__.__name__ 
    80     #def __del__(self): 
    81     #    print '--', self.__class__.__name__ 
    8280 
    8381    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    116114            if self.parent(): 
    117115                self.parent().RemoveElement(self) 
     116 
     117            # Context Var/Node settings 
    118118            if self.settings.get('contextnode', None): 
    119                 delattr(self.context, self.settings['contextnode']) 
     119                for name in self.settings['contextnode'].split(','): 
     120                    delattr(self.context, name) 
    120121            if self.settings.get('contextvar', None) and self.object: 
    121                 delattr(self.context, self.settings['contextvar']) 
     122                for name in self.settings['contextvar'].split(','): 
     123                    delattr(self.context, name) 
     124 
     125            # Parent Var/Node settings 
     126            if self.context._NextContext: 
     127                if self.settings.get('parentnode', None): 
     128                    for name in self.settings['parentnode'].split(','): 
     129                        delattr(self.context, name) 
     130                if self.settings.get('parentvar', None) and self.object: 
     131                    for name in self.settings['parentvar'].split(','): 
     132                        delattr(self.context._NextContext, name) 
    122133 
    123134            del self.children 
     
    146157    def _xmlInitStarted(self): 
    147158        self.SkinInitialize() 
     159 
     160        # Context Var/Node settings 
    148161        if self.settings.get('contextnode', None): 
    149             setattr(self.context, self.settings['contextnode'], weakref.proxy(self)) 
     162            for name in self.settings['contextnode'].split(','): 
     163                setattr(self.context, name, weakref.proxy(self)) 
    150164        if self.settings.get('contextvar', None) and self.object: 
    151             setattr(self.context, self.settings['contextvar'], self.object) 
     165            for name in self.settings['contextvar'].split(','): 
     166                setattr(self.context, name, self.object) 
     167 
     168        # Parent Var/Node settings 
     169        if self.context._NextContext: 
     170            if self.settings.get('parentnode', None): 
     171                for name in self.settings['parentnode'].split(','): 
     172                    setattr(self.context, name, weakref.proxy(self)) 
     173            if self.settings.get('parentvar', None) and self.object: 
     174                for name in self.settings['parentvar'].split(','): 
     175                    setattr(self.context._NextContext, name, self.object) 
    152176 
    153177    def _xmlInitComplete(self): 
     
    161185            # Now act on knowing that self.object wasn't set before 
    162186            if self.settings.get('contextvar', None): 
    163                 setattr(self.context, self.settings['contextvar'], self.object) 
     187                for name in self.settings['contextvar'].split(','): 
     188                    setattr(self.context, name, self.object) 
     189            if self.settings.get('parentvar', None) and self.object and self.context._NextContext: 
     190                for name in self.settings['parentvar'].split(','): 
     191                    setattr(self.context._NextContext, name, self.object) 
    164192 
  • trunk/RBSkinning/RBSkinning/wxPythonSkin/frame.py

    r196 r200  
    3636 
    3737from wxSkinObject import wx, wxSkinWindowObject 
     38from Foundation.wxTools import wxLockingFrame  
    3839 
    3940#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    5556        'show':     '0', 
    5657        'contextvar':'frame', 
    57         'locking':  '0', 
     58        'locking':  'none', 
    5859        }) 
    5960 
     
    6667        winParent = self.wxGetParentObject(wx.wxFramePtr) or self.context.application.GetTopWindow() 
    6768        kwSettings = self.wxSettingDict(['id', 'style', 'pos', 'size'], ['name', 'title']) 
    68         if self.wxEval('locking'): 
    69             from Foundation.wxTools.wxLockingFrame import wxLockingFrame 
    70             self.object = wxLockingFrame(winParent,**kwSettings) 
     69        if self.settings['locking'].lower() in ['standard', 'yes', '1', 'true']: 
     70            self.object = wxLockingFrame.wxLockingFrame(winParent,**kwSettings) 
     71        elif self.settings['locking'].lower() in ['attractive']: 
     72            self.object = wxLockingFrame.wxAttractiveLockingFrame(winParent,**kwSettings) 
     73        elif self.settings['locking'].lower() in ['resistive']: 
     74            self.object = wxLockingFrame.wxResistiveLockingFrame(winParent,**kwSettings) 
    7175        else: 
    7276            self.object = wx.wxFrame(winParent,**kwSettings) 
  • trunk/RBSkinning/RBSkinning/wxTools/test.skin

    r196 r200  
    11<?xml version='1.0'?>  
    22<skin:skin xmlns:skin='http://namespaces.runeblade.com/skin' xmlns:py='http://namespaces.runeblade.com/xmlPython' xmlns='http://namespaces.runeblade.com/wxPythonSkin'> 
    3     <py:inline> 
    4         from wxPython import wx 
    5         self.AddNamespace(wx) 
    6         from wxPython import stc 
    7         self.AddNamespace(stc) 
    8         from Foundation import ContextApply 
    9         self.AddNamespace(ContextApply) 
    10     </py:inline> 
    11  
    123    <application /> 
    134 
    14     <frame locking='1' show='1' size='300,300' title='Locking Test A' > 
     5    <frame parentvar='standard1' locking='standard' show='1' size='400,400' title='Standard Locking 1' > 
     6        <py:inline> 
     7            from Foundation.wxTools.wxLockingFrame import wxLockSide 
     8            parentObj.LockToDesktop() 
     9        </py:inline> 
     10        <panel> <frame_mover /> </panel> 
     11 
     12    </frame> 
     13 
     14    <frame parentvar='standard2' locking='standard' show='1' size='200,200' title='Standard Locking 2' > 
     15        <py:inline> 
     16            #parentObj.SetSizeHints(200,200,600,600) 
     17            from Foundation.wxTools.wxLockingFrame import wxLockSide 
     18            parentObj.LockToFrame(context.standard1) 
     19        </py:inline> 
    1520        <panel> <frame_mover /> </panel> 
    1621    </frame> 
    17     <frame locking='1' show='1' size='200,200' title='Locking Test B' > 
    18         <panel> <frame_mover /> </panel> 
    19     </frame> 
    20     <frame locking='1' show='1' size='200,200' title='Locking Test C' > 
    21         <panel> <frame_mover /> </panel> 
    22     </frame> 
     22 
     23    <!-- 
     24    <frame locking='attractive' show='1' size='200,200' title='Attractive Locking 1' > <panel> <frame_mover /> </panel> </frame> 
     25    <frame locking='attractive' show='1' size='200,200' title='Attractive Locking 2' > <panel> <frame_mover /> </panel> </frame> 
     26 
     27    <frame locking='resistive' show='1' size='200,200' title='Resistive Locking 1' > <panel> <frame_mover /> </panel> </frame> 
     28    <frame locking='resistive' show='1' size='200,200' title='Resistive Locking 2' > <panel> <frame_mover /> </panel> </frame> 
     29    --> 
    2330</skin:skin> 
  • trunk/RBSkinning/RBSkinning/wxTools/wxLockingFrame.py

    r198 r200  
    4343#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4444 
    45 class wxLockingFrameBase(wx.wxFrame)
     45class wxLockSide
    4646    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4747    #~ Constants / Variables / Etc.  
    4848    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4949 
    50     _weakself = None 
     50    _DeltaWing = 10 
     51    _DeltaAttract = 10 
     52    _DeltaResist = 10 
    5153 
    5254    _LockingSides = [ 
     
    6264        ] 
    6365 
    64     _LeftSide = 0 
    65     _TopSide = 1 
    66     _RightSide = 2 
    67     _BottomSide = 3 
    68  
    69     _LeftInnerSide = 4 
    70     _TopInnerSide = 5 
    71     _RightInnerSide = 6 
    72     _BottomInnerSide = 7 
    73  
     66    Left = 0 
     67    Top = 1 
     68    Right = 2 
     69    Bottom = 3 
     70 
     71    LeftInner = 4 
     72    TopInner = 5 
     73    RightInner = 6 
     74    BottomInner = 7 
     75 
     76    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     77    #~ Class Methods 
     78    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     79 
     80    def SetupScreenLockingSides(Class): 
     81        l,t,w,h = wx.wxGetClientDisplayRect().asTuple() 
     82        Class._LockingSides[Class.LeftInner][0][None] = [(l-Class._DeltaResist, t, l+Class._DeltaAttract, t+h, l)] 
     83        Class._LockingSides[Class.RightInner][0][None] = [(l+w-Class._DeltaAttract, t, l+w+Class._DeltaResist, t+h, l+w)] 
     84        Class._LockingSides[Class.BottomInner][0][None] = [(l, t+h-Class._DeltaAttract, l+w, t+h+Class._DeltaResist, t+h)] 
     85        Class._LockingSides[Class.TopInner][0][None] = [(l, t-Class._DeltaResist, l+w, t+Class._DeltaAttract, t)] 
     86    SetupScreenLockingSides = classmethod(SetupScreenLockingSides) 
     87 
     88#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     89 
     90class wxLockingFrameBase(wx.wxFrame, wxLockSide): 
     91    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     92    #~ Constants / Variables / Etc.  
     93    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     94 
     95    _weakself = None 
    7496    __bLocking = 0 
    7597 
     
    89111    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    90112 
    91     def SetupScreenLockingSides(Class): 
    92         l,t,w,h = wx.wxGetClientDisplayRect().asTuple() 
    93         Class._LockingSides[Class._LeftInnerSide][0][None] = [(l-Class._DeltaResist, t, l+Class._DeltaAttract, t+h, l)] 
    94         Class._LockingSides[Class._RightInnerSide][0][None] = [(l+w-Class._DeltaAttract, t, l+w+Class._DeltaResist, t+h, l+w)] 
    95         Class._LockingSides[Class._BottomInnerSide][0][None] = [(l, t+h-Class._DeltaAttract, l+w, t+h+Class._DeltaResist, t+h)] 
    96         Class._LockingSides[Class._TopInnerSide][0][None] = [(l, t-Class._DeltaResist, l+w, t+Class._DeltaAttract, t)] 
    97     SetupScreenLockingSides = classmethod(SetupScreenLockingSides) 
    98  
    99113    def Show(self, bShow=True): 
    100114        result = wx.wxFrame.Show(self, bShow) 
    101         if bShow: self._SaveSidePositions() 
    102         else: self._RemoveSidePositions() 
     115        self._SaveSidePositions() 
    103116        return result 
    104117 
     
    108121        else: newpos = pos.x, pos.y 
    109122 
    110         newpos, newsize = self._OnLockingMove(newpos, self.GetSize().asTuple()) or newpos 
     123        newpos, newsize = self._OnLockingMove(newpos, self.GetSizeTuple()) or newpos 
    111124        result = wx.wxFrame.Move(self, newpos) 
    112125 
     
    114127        return result 
    115128 
    116     def OnLocktoFrame(self, weakframe, pos): 
    117         pass #print "Now locked to weakframe %r" % weakframe 
    118  
    119     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    120     #~ Protected Methods  
     129    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     130     
     131    def LockFrameToSelf(self, frame, LockSideIndicies=(wxLockSide.Bottom,wxLockSide.LeftInner), LockSizeIndicies=tuple()): 
     132        Positions = self._GetIntersectionPositions(*(self.GetRect().asTuple() + frame.GetSizeTuple())) 
     133        return self._DoLockFrameToPositon(frame, Positions, LockSideIndicies, LockSizeIndicies) 
     134 
     135    def LockToFrame(self, frame, LockSideIndicies=(wxLockSide.Bottom,wxLockSide.LeftInner), LockSizeIndicies=tuple()): 
     136        Positions = self._GetIntersectionPositions(*(frame.GetRect().asTuple() + self.GetSizeTuple())) 
     137        return self._DoLockFrameToPositon(self, Positions, LockSideIndicies, LockSizeIndicies) 
     138 
     139    def LockToDesktop(self, LockSideIndicies=(wxLockSide.TopInner,wxLockSide.LeftInner), LockSizeIndicies=tuple()): 
     140        Positions = self._GetIntersectionPositions(*(wx.wxGetClientDisplayRect().asTuple() + self.GetSizeTuple())) 
     141        return self._DoLockFrameToPositon(self, Positions, LockSideIndicies, LockSizeIndicies) 
     142 
     143    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     144    #~ Event Handlers 
    121145    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    122146 
    123147    def _OnSizeFrame(self, evt): 
    124         self._SaveSidePositions() 
    125148        if not self.__bLocking: 
    126149            self.__bLocking = 1 
    127             pos, size = self.GetPosition().asTuple(), self.GetSize().asTuple() 
     150            pos, size = self.GetPositionTuple(), self.GetSizeTuple() 
    128151            newpos, newsize = self._OnLockingSize(pos, size) 
    129152            self.SetDimensions(*(newpos + newsize)) 
    130153            self.__bLocking = 0 
     154        self._SaveSidePositions() 
    131155        evt.Skip() 
    132156 
    133157    def _OnMoveFrame(self, evt): 
    134         self._SaveSidePositions() 
    135158        if not self.__bLocking: 
    136159            self.__bLocking= 1 
    137             pos, size = self.GetPosition().asTuple(), self.GetSize().asTuple() 
     160            pos, size = self.GetPositionTuple(), self.GetSizeTuple() 
    138161            newpos, newsize = self._OnLockingMove(pos, size) 
    139162            self.SetDimensions(*(newpos + newsize)) 
    140163            self.__bLocking= 0 
     164        self._SaveSidePositions() 
    141165        evt.Skip() 
     166 
     167    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     168    #~ Protected Methods  
     169    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    142170 
    143171    def _RemoveSidePositions(self): 
    144172        if self._weakself: 
    145             self._weakself = None 
    146173            for each in self._LockingSides: 
    147174                del each[0][self._weakself] 
     175            self._weakself = None 
    148176 
    149177    def _SaveSidePositions(self): 
     178        if not self.IsShown() or self.IsIconized(): 
     179            return self._RemoveSidePositions() 
    150180        self._weakself = weakref.ref(self) 
    151181        l,t,w,h = self.GetRect().asTuple() 
    152182 
    153         self._LockingSides[self._LeftSide][0][self._weakself] = [(l-self._DeltaAttract, t, l+self._DeltaResist, t+h, l)] 
    154         self._LockingSides[self._RightSide][0][self._weakself] = [(l+w-self._DeltaResist, t, l+w+self._DeltaAttract, t+h, l+w)] 
    155         self._LockingSides[self._BottomSide][0][self._weakself] = [(l, t+h-self._DeltaResist, l+w, t+h+self._DeltaAttract, t+h)] 
    156         self._LockingSides[self._TopSide][0][self._weakself] = [(l, t-self._DeltaAttract, l+w, t+self._DeltaResist, t)] 
    157  
    158         self._LockingSides[self._LeftInnerSide][0][self._weakself] = [(l-self._DeltaResist, t-self._DeltaWing, l+self._DeltaAttract, t, l), (l-self._DeltaResist, t+h, l+self._DeltaAttract, t+h+self._DeltaWing, l)] 
    159         self._LockingSides[self._RightInnerSide][0][self._weakself] = [(l+w-self._DeltaAttract, t-self._DeltaWing, l+w+self._DeltaResist, t, l+w), (l+w-self._DeltaAttract, t+h, l+w+self._DeltaResist, t+h+self._DeltaWing, l+w)] 
    160         self._LockingSides[self._BottomInnerSide][0][self._weakself] = [(l-self._DeltaWing, t+h-self._DeltaAttract, l, t+h+self._DeltaResist, t+h), (l+w, t+h-self._DeltaAttract, l+w+self._DeltaWing, t+h+self._DeltaResist, t+h)] 
    161         self._LockingSides[self._TopInnerSide][0][self._weakself] = [(l-self._DeltaWing, t-self._DeltaResist, l, t+self._DeltaAttract, t), (l+w, t-self._DeltaResist, l+w+self._DeltaWing, t+self._DeltaAttract, t)] 
    162  
    163     def _GetIntersectionSides(self, l, t, w, h): 
    164         return [ 
    165             (l+w, t, l+w, t+h), # Right - Outter 
    166             (l, t+h, l+w, t+h), # Bottom - Outter 
    167             (l, t, l, t+h), # Left - Outter 
    168             (l, t, l+w, t), # Top - Outter 
    169  
    170             (l, t, l, t+h), # Left - Inner 
    171             (l, t, l+w, t), # Top - Inner 
    172             (l+w, t, l+w, t+h), # Right - Inner 
    173             (l, t+h, l+w, t+h), # Bottom - Inner 
    174             ] 
    175  
    176     def _Intersects(self, A, B): 
    177         if A[0] > B[2]: return 0 
    178         if B[0] > A[2]: return 0 
    179         if A[1] > B[3]: return 0 
    180         if B[1] > A[3]: return 0 
    181         return 1 
     183        self._LockingSides[self.Left][0][self._weakself] = [(l-self._DeltaAttract, t, l+self._DeltaResist, t+h, l)] 
     184        self._LockingSides[self.Right][0][self._weakself] = [(l+w-self._DeltaResist, t, l+w+self._DeltaAttract, t+h, l+w)] 
     185        self._LockingSides[self.Bottom][0][self._weakself] = [(l, t+h-self._DeltaResist, l+w, t+h+self._DeltaAttract, t+h)] 
     186        self._LockingSides[self.Top][0][self._weakself] = [(l, t-self._DeltaAttract, l+w, t+self._DeltaResist, t)] 
     187 
     188        self._LockingSides[self.LeftInner][0][self._weakself] = [(l-self._DeltaResist, t-self._DeltaWing, l+self._DeltaAttract, t, l), (l-self._DeltaResist, t+h, l+self._DeltaAttract, t+h+self._DeltaWing, l)] 
     189        self._LockingSides[self.RightInner][0][self._weakself] = [(l+w-self._DeltaAttract, t-self._DeltaWing, l+w+self._DeltaResist, t, l+w), (l+w-self._DeltaAttract, t+h, l+w+self._DeltaResist, t+h+self._DeltaWing, l+w)] 
     190        self._LockingSides[self.BottomInner][0][self._weakself] = [(l-self._DeltaWing, t+h-self._DeltaAttract, l, t+h+self._DeltaResist, t+h), (l+w, t+h-self._DeltaAttract, l+w+self._DeltaWing, t+h+self._DeltaResist, t+h)] 
     191        self._LockingSides[self.TopInner][0][self._weakself] = [(l-self._DeltaWing, t-self._DeltaResist, l, t+self._DeltaAttract, t), (l+w, t-self._DeltaResist, l+w+self._DeltaWing, t+self._DeltaAttract, t)] 
     192 
     193    def _DoLockFrameToPositon(self, frame, Positions, LockSideIndicies, LockSizeIndicies): 
     194        pos, size = frame.GetPositionTuple(), frame.GetSizeTuple() 
     195        for LockIndex in LockSideIndicies: 
     196            if LockIndex & 1: pos = pos[0], Positions[LockIndex]  
     197            else: pos = Positions[LockIndex], pos[1] 
     198 
     199        newpos, pos = pos, (pos[0] + size[0], pos[1] + size[1]) 
     200        for LockIndex in LockSizeIndicies: 
     201            if LockIndex & 1: pos = pos[0], Positions[LockIndex]  
     202            else: pos = Positions[LockIndex], pos[1] 
     203 
     204        newsize = abs(pos[0] - newpos[0]), abs(pos[1] - newpos[1]) 
     205        newpos = tuple(map(min, zip(pos, newpos))) 
     206 
     207        return frame.SetDimensions(*(newpos + newsize)) 
    182208 
    183209    def _OnLockingMove(self, pos, size): 
     
    193219                        elif WidthIdx == 2: pos = Side[-1]-w, pos[1],  
    194220                        elif WidthIdx == 3: pos = pos[0], Side[-1]-h,  
    195                         self.OnLocktoFrame(self._weakself, pos) 
    196221                        break 
    197222        return pos, size 
     
    209234                        elif WidthIdx == 2: size = Side[-1]-pos[0], size[1],  
    210235                        elif WidthIdx == 3: size = size[0], Side[-1]-pos[1],  
    211                         self.OnLocktoFrame(self._weakself, pos) 
    212236                        break 
    213237        return pos, size 
    214238 
     239    #~ Utilities ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     240 
     241    def _GetIntersectionPositions(self, l, t, w, h, wP=0, hP=0): 
     242        return [ 
     243            l-wP, #LeftSide 
     244            t-hP, #TopSide 
     245            l+w, #RightSide 
     246            t+h, #BottomSide 
     247 
     248            l, #LeftInnerSide 
     249            t, #TopInnerSide 
     250            l+w-wP, #RightInnerSide 
     251            t+h-hP, #BottomInnerSide 
     252            ] 
     253 
     254    def _GetIntersectionSides(self, l, t, w, h): 
     255        return [ 
     256            (l+w, t, l+w, t+h), # Right - Outter 
     257            (l, t+h, l+w, t+h), # Bottom - Outter 
     258            (l, t, l, t+h), # Left - Outter 
     259            (l, t, l+w, t), # Top - Outter 
     260 
     261            (l, t, l, t+h), # Left - Inner 
     262            (l, t, l+w, t), # Top - Inner 
     263            (l+w, t, l+w, t+h), # Right - Inner 
     264            (l, t+h, l+w, t+h), # Bottom - Inner 
     265            ] 
     266 
     267    def _Intersects(self, A, B): 
     268        if A[0] > B[2]: return 0 
     269        if B[0] > A[2]: return 0 
     270        if A[1] > B[3]: return 0 
     271        if B[1] > A[3]: return 0 
     272        return 1 
     273 
     274 
     275#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     276 
     277wxLockingFrameBase.SetupScreenLockingSides() 
     278 
    215279#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    216280 
    217281class wxAttractiveLockingFrame(wxLockingFrameBase): 
    218     _LockingSides = wxLockingFrameBase._LockingSides[:] 
    219282    _DeltaAttract = 20 
    220283    _DeltaResist = 0 
    221     _DeltaWing = 10 
    222  
    223 wxAttractiveLockingFrame.SetupScreenLockingSides() 
    224284 
    225285#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    226286 
    227287class wxResistiveLockingFrame(wxLockingFrameBase): 
    228     _LockingSides = wxLockingFrameBase._LockingSides[:] 
    229288    _DeltaAttract = 0 
    230289    _DeltaResist = 20 
    231     _DeltaWing = 10 
    232  
    233 wxResistiveLockingFrame.SetupScreenLockingSides() 
    234290 
    235291#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    236292 
    237293class wxLockingFrame(wxLockingFrameBase): 
    238     _LockingSides = wxLockingFrameBase._LockingSides[:] 
    239294    _DeltaAttract = 10 
    240295    _DeltaResist = 10 
    241     _DeltaWing = 10 
    242  
    243 wxLockingFrame.SetupScreenLockingSides() 
    244  
    245 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     296