Changeset 200
- Timestamp:
- 06/26/02 15:50:18 (6 years ago)
- Files:
-
- trunk/RBSkinning/RBSkinning/SkinObject.py (modified) (5 diffs)
- trunk/RBSkinning/RBSkinning/wxPythonSkin/frame.py (modified) (3 diffs)
- trunk/RBSkinning/RBSkinning/wxTools/test.skin (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/wxTools/wxLockingFrame.py (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBSkinning/RBSkinning/SkinObject.py
r186 r200 55 55 'contextvar':'', 56 56 'contextnode':'', 57 'parentvar':'', 58 'parentnode':'', 57 59 'unravelstop':'0', 58 60 } … … 76 78 77 79 self.object = None 78 79 # print '++', self.__class__.__name__80 #def __del__(self):81 # print '--', self.__class__.__name__82 80 83 81 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 116 114 if self.parent(): 117 115 self.parent().RemoveElement(self) 116 117 # Context Var/Node settings 118 118 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) 120 121 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) 122 133 123 134 del self.children … … 146 157 def _xmlInitStarted(self): 147 158 self.SkinInitialize() 159 160 # Context Var/Node settings 148 161 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)) 150 164 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) 152 176 153 177 def _xmlInitComplete(self): … … 161 185 # Now act on knowing that self.object wasn't set before 162 186 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) 164 192 trunk/RBSkinning/RBSkinning/wxPythonSkin/frame.py
r196 r200 36 36 37 37 from wxSkinObject import wx, wxSkinWindowObject 38 from Foundation.wxTools import wxLockingFrame 38 39 39 40 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 55 56 'show': '0', 56 57 'contextvar':'frame', 57 'locking': ' 0',58 'locking': 'none', 58 59 }) 59 60 … … 66 67 winParent = self.wxGetParentObject(wx.wxFramePtr) or self.context.application.GetTopWindow() 67 68 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) 71 75 else: 72 76 self.object = wx.wxFrame(winParent,**kwSettings) trunk/RBSkinning/RBSkinning/wxTools/test.skin
r196 r200 1 1 <?xml version='1.0'?> 2 2 <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 wx5 self.AddNamespace(wx)6 from wxPython import stc7 self.AddNamespace(stc)8 from Foundation import ContextApply9 self.AddNamespace(ContextApply)10 </py:inline>11 12 3 <application /> 13 4 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> 15 20 <panel> <frame_mover /> </panel> 16 21 </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 --> 23 30 </skin:skin> trunk/RBSkinning/RBSkinning/wxTools/wxLockingFrame.py
r198 r200 43 43 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 44 44 45 class wxLock ingFrameBase(wx.wxFrame):45 class wxLockSide: 46 46 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 47 47 #~ Constants / Variables / Etc. 48 48 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 49 49 50 _weakself = None 50 _DeltaWing = 10 51 _DeltaAttract = 10 52 _DeltaResist = 10 51 53 52 54 _LockingSides = [ … … 62 64 ] 63 65 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 90 class wxLockingFrameBase(wx.wxFrame, wxLockSide): 91 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 #~ Constants / Variables / Etc. 93 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 95 _weakself = None 74 96 __bLocking = 0 75 97 … … 89 111 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 90 112 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 99 113 def Show(self, bShow=True): 100 114 result = wx.wxFrame.Show(self, bShow) 101 if bShow: self._SaveSidePositions() 102 else: self._RemoveSidePositions() 115 self._SaveSidePositions() 103 116 return result 104 117 … … 108 121 else: newpos = pos.x, pos.y 109 122 110 newpos, newsize = self._OnLockingMove(newpos, self.GetSize ().asTuple()) or newpos123 newpos, newsize = self._OnLockingMove(newpos, self.GetSizeTuple()) or newpos 111 124 result = wx.wxFrame.Move(self, newpos) 112 125 … … 114 127 return result 115 128 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 121 145 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 122 146 123 147 def _OnSizeFrame(self, evt): 124 self._SaveSidePositions()125 148 if not self.__bLocking: 126 149 self.__bLocking = 1 127 pos, size = self.GetPosition ().asTuple(), self.GetSize().asTuple()150 pos, size = self.GetPositionTuple(), self.GetSizeTuple() 128 151 newpos, newsize = self._OnLockingSize(pos, size) 129 152 self.SetDimensions(*(newpos + newsize)) 130 153 self.__bLocking = 0 154 self._SaveSidePositions() 131 155 evt.Skip() 132 156 133 157 def _OnMoveFrame(self, evt): 134 self._SaveSidePositions()135 158 if not self.__bLocking: 136 159 self.__bLocking= 1 137 pos, size = self.GetPosition ().asTuple(), self.GetSize().asTuple()160 pos, size = self.GetPositionTuple(), self.GetSizeTuple() 138 161 newpos, newsize = self._OnLockingMove(pos, size) 139 162 self.SetDimensions(*(newpos + newsize)) 140 163 self.__bLocking= 0 164 self._SaveSidePositions() 141 165 evt.Skip() 166 167 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 168 #~ Protected Methods 169 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 142 170 143 171 def _RemoveSidePositions(self): 144 172 if self._weakself: 145 self._weakself = None146 173 for each in self._LockingSides: 147 174 del each[0][self._weakself] 175 self._weakself = None 148 176 149 177 def _SaveSidePositions(self): 178 if not self.IsShown() or self.IsIconized(): 179 return self._RemoveSidePositions() 150 180 self._weakself = weakref.ref(self) 151 181 l,t,w,h = self.GetRect().asTuple() 152 182 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)) 182 208 183 209 def _OnLockingMove(self, pos, size): … … 193 219 elif WidthIdx == 2: pos = Side[-1]-w, pos[1], 194 220 elif WidthIdx == 3: pos = pos[0], Side[-1]-h, 195 self.OnLocktoFrame(self._weakself, pos)196 221 break 197 222 return pos, size … … 209 234 elif WidthIdx == 2: size = Side[-1]-pos[0], size[1], 210 235 elif WidthIdx == 3: size = size[0], Side[-1]-pos[1], 211 self.OnLocktoFrame(self._weakself, pos)212 236 break 213 237 return pos, size 214 238 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 277 wxLockingFrameBase.SetupScreenLockingSides() 278 215 279 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 216 280 217 281 class wxAttractiveLockingFrame(wxLockingFrameBase): 218 _LockingSides = wxLockingFrameBase._LockingSides[:]219 282 _DeltaAttract = 20 220 283 _DeltaResist = 0 221 _DeltaWing = 10222 223 wxAttractiveLockingFrame.SetupScreenLockingSides()224 284 225 285 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 226 286 227 287 class wxResistiveLockingFrame(wxLockingFrameBase): 228 _LockingSides = wxLockingFrameBase._LockingSides[:]229 288 _DeltaAttract = 0 230 289 _DeltaResist = 20 231 _DeltaWing = 10232 233 wxResistiveLockingFrame.SetupScreenLockingSides()234 290 235 291 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 236 292 237 293 class wxLockingFrame(wxLockingFrameBase): 238 _LockingSides = wxLockingFrameBase._LockingSides[:]239 294 _DeltaAttract = 10 240 295 _DeltaResist = 10 241 _DeltaWing = 10 242 243 wxLockingFrame.SetupScreenLockingSides() 244 245 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 296
