Changeset 479
- Timestamp:
- 03/19/03 22:43:52 (6 years ago)
- Files:
-
- trunk/RBSkinning/RBSkinning/wxPythonSkin/dockcontainer.py (added)
- trunk/RBSkinning/RBSkinning/wxPythonSkin/dockhost.py (added)
- trunk/RBSkinning/RBSkinning/wxPythonSkin/expander.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/wxPythonSkin/layout.py (modified) (2 diffs)
- trunk/RBSkinning/RBSkinning/wxPythonSkin/layout_flexgrid.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/wxTools/__init__.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/wxTools/wxDockingTools.py (modified) (6 diffs)
- trunk/RBSkinning/demo/wxPythonSkin (added)
- trunk/RBSkinning/demo/wxPythonSkin/docking (added)
- trunk/RBSkinning/demo/wxPythonSkin/docking/docking.py (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBSkinning/RBSkinning/wxPythonSkin/expander.py
r478 r479 64 64 # Layouts cancel the window parent 65 65 parentLayout = self.winParent 66 self.winParent = None 66 67 67 68 # Figure out what type of sizer we should be creating trunk/RBSkinning/RBSkinning/wxPythonSkin/layout.py
r478 r479 26 26 import warnings 27 27 from wxSkinLayoutObject import wx, wxSkinLayoutObject, wxSkinObjectNoData 28 from RBSkinning.wxTools import SetLayoutContainerSizeHints 28 29 29 30 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 31 #~ Definitions 31 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~32 33 def SetLayoutContainerSizeHints(layout, container, force=False):34 """Tool to update container's size hints to layout's minsize,35 accounting for client area"""36 minsize = layout.GetMinSize().asTuple()37 size = container.GetSizeTuple()38 clientsize = container.GetClientSizeTuple()39 sizew = minsize[0] + (size[0] - clientsize[0])40 sizeh = minsize[1] + (size[1] - clientsize[1])41 if force or sizew > 0 or sizeh > 0:42 container.SetSizeHints(sizew, sizeh)43 return True44 else: return False45 46 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~47 #~ Class48 32 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 49 33 … … 163 147 sizerargs = tuple([ChildNode.wxEvalCond(*evalargs) for evalargs in (('sizerOption', 0), ('sizerFlag', 0), ('sizerBorder', 0))]) 164 148 if sizerargs != (0,0,0): 165 print sizerargs166 149 warnings.warn('"sizerOption", "sizerFlag", and "sizerBorder" attributes should be replaced with "sizercfg"', DeprecationWarning) 167 150 args = args + tuple(sizerargs) trunk/RBSkinning/RBSkinning/wxPythonSkin/layout_flexgrid.py
r477 r479 37 37 default_settings = layout.default_settings.copy() 38 38 default_settings.update({ 39 'ctxvar': 'layout',40 'orientation': 'opposite',41 'sizerAuto': '1',42 'sizerFit': '0',43 39 'rows': '0', 44 40 'cols': '2', trunk/RBSkinning/RBSkinning/wxTools/__init__.py
r253 r479 20 20 ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 21 21 22 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23 #~ Definitions 24 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 25 26 def SetLayoutContainerSizeHints(layout, parent): 27 minsize = layout.GetMinSize().asTuple() 28 clientsize = parent.GetClientSizeTuple() 29 if clientsize[0]<minsize[0] or clientsize[1]<minsize[1]: 30 clientsize = max(clientsize[0], minsize[0]), max(clientsize[1], minsize[1]) 31 parent.SetClientSize(clientsize) 32 size = parent.GetSizeTuple() 33 sizew = minsize[0] + (size[0] - clientsize[0]) 34 sizeh = minsize[1] + (size[1] - clientsize[1]) 35 parent.SetSizeHints(sizew, sizeh) 36 trunk/RBSkinning/RBSkinning/wxTools/wxDockingTools.py
r478 r479 20 20 ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 21 21 22 from __init__ import SetLayoutContainerSizeHints 23 22 24 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23 25 #~ Definitions 26 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 27 28 class _matchany(object): 29 def __eq__(self, other): return True 30 def __ne__(self, other): return False 31 _matchany = _matchany() 32 33 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 34 35 class wxDockContainer(object): 36 def __init__(self, dockhost=None): 37 self.docked = False 38 self.items = [] 39 self.dockhost = dockhost 40 self.Dock() 41 42 def Add(self, item, *args, **kw): 43 self.items.append((item, args, kw)) 44 45 def Prepend(self, item, *args, **kw): 46 self.items.insert(0, (item, args, kw)) 47 48 def Remove(self, item, *args, **kw): 49 try: 50 self.items.remove((item, _matchany, _matchany)) 51 return True 52 except ValueError: return False 53 54 def DockTo(self, dockhost): 55 if dockhost is not self.dockhost: 56 self.Undock() 57 self.dockhost = dockhost 58 return self.Dock() 59 else: 60 return self.Dock() 61 62 def IsDocked(self, to=None): 63 if self.docked: 64 if to in [None, self.dockhost]: 65 return True 66 return False 67 68 def DockToggle(self): 69 if self.IsDocked(): 70 return self.Undock() 71 else: return self.Dock() 72 73 def Dock(self, adjust=True): 74 if not self.docked and self.dockhost: 75 for item, args, kw in self.items: 76 if adjust: self._AdjustItem(item, True) 77 self.dockhost.DockItem(item, *args, **kw) 78 self.docked = True 79 return self.docked 80 81 def Undock(self, adjust=True): 82 if self.docked and self.dockhost: 83 for item, args, kw in self.items: 84 if adjust: self._AdjustItem(item, False) 85 self.dockhost.UndockItem(item) 86 elif adjust: 87 for item, args, kw in self.items: 88 self._AdjustItem(item, False) 89 self.docked = False 90 return self.docked 91 92 def _AdjustItem(self, item, show): 93 # Restore to a nominal size 94 item.SetSize(item.GetBestSize()) 95 item.Show(show) 96 24 97 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 25 98 … … 30 103 31 104 prepend = False 105 dockcount = 0 106 hideempty = False 32 107 33 108 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 35 110 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36 111 37 def __init__(self, parent, layout, rootlayout=None, prepend=False ):112 def __init__(self, parent, layout, rootlayout=None, prepend=False, hideempty=False): 38 113 self.parent = parent 39 114 self.layout = layout 40 115 self.rootlayout = rootlayout or layout 41 116 self.prepend = prepend 117 self.hideempty = hideempty 42 118 43 119 def DockItem(self, dockitem, *args, **kw): 44 if isinstance(dockitem, wxDock Item):120 if isinstance(dockitem, wxDockContainer): 45 121 dockitem.DockTo(self) 46 122 else: 123 self.dockcount += 1 47 124 try: DIReparent = dockitem.Reparent 48 125 except AttributeError: pass … … 55 132 56 133 def UndockItem(self, dockitem, *args, **kw): 57 if isinstance(dockitem, wxDock Item):134 if isinstance(dockitem, wxDockContainer): 58 135 if dockitem.IsDocked(self): 59 136 dockitem.Undock() 60 137 else: 138 self.dockcount -= 1 61 139 ### The following code is not required, but included so 62 140 ### we don't wonder about the asymetry ;) … … 68 146 # We will re-enable in self.Layout 69 147 self.parent.SetSizeHints(0, 0) 70 71 if self.layout.Remove(dockitem): 72 self.Layout() 148 self.layout.Remove(dockitem) 149 self.Layout() 73 150 74 151 def Layout(self): 75 152 self.rootlayout.Layout() 76 153 self._SetLayoutContainerSizeHints() 154 155 if self.hideempty: 156 if self.dockcount <= 0: 157 self.dockcount = 0 158 self.parent.Show(False) 159 else: 160 self.parent.Show(True) 77 161 78 162 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 81 165 82 166 def _SetLayoutContainerSizeHints(self): 83 minsize = self.layout.GetMinSize().asTuple() 84 size = self.parent.GetSizeTuple() 85 clientsize = self.parent.GetClientSizeTuple() 86 sizew = minsize[0] + (size[0] - clientsize[0]) 87 sizeh = minsize[1] + (size[1] - clientsize[1]) 88 self.parent.SetSizeHints(sizew, sizeh) 167 return SetLayoutContainerSizeHints(self.rootlayout, self.parent) 89 168 90 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~91 92 class wxDockItem(object):93 def __init__(self, item, dockhost=None):94 self.docked = False95 self.sizercfg = ()96 self.item = item97 self.dockhost = dockhost98 self.Dock()99 100 def DockTo(self, dockhost):101 if dockhost is not self.dockhost:102 self.Undock()103 self.dockhost = dockhost104 self.Dock()105 else:106 self.Dock()107 108 def IsDocked(self, to=None):109 if self.docked:110 if to in [None, self.dockhost]:111 return True112 return False113 114 def DockToggle(self):115 if self.IsDocked():116 self.Undock()117 else: self.Dock()118 119 def Dock(self, doshow=True):120 if not self.docked and self.dockhost:121 self.docked = True122 if doshow: self.item.Show(True)123 self.dockhost.DockItem(self.item, *self.sizercfg)124 125 def Undock(self, dohide=True):126 if self.docked and self.dockhost:127 self.docked = False128 if dohide: self.item.Show(False)129 self.dockhost.UndockItem(self.item)130
