comparison orpg/gametree/nodehandlers/containers.py @ 28:ff154cf3350c ornery-orc

Traipse 'OpenRPG' {100203-00} Traipse is a distribution of OpenRPG that is designed to be easy to setup and go. Traipse also makes it easy for developers to work on code without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the code. 'Ornery-Orc's main goal is to offer more advanced features and enhance the productivity of the user. Update Summary (Stable) New Features: New Bookmarks Feature New 'boot' command to remote admin New confirmation window for sent nodes Miniatures Layer pop up box allows users to turn off Mini labels, from FlexiRPG New Zoom Mouse plugin added New Images added to Plugin UI Switching to Element Tree New Map efficiency, from FlexiRPG New Status Bar to Update Manager New TrueDebug Class in orpg_log (See documentation for usage) New Portable Mercurial New Tip of the Day, from Core and community New Reference Syntax added for custom PC sheets New Child Reference for gametree New Parent Reference for gametree New Gametree Recursion method, mapping, context sensitivity, and effeciency.. New Features node with bonus nodes and Node Referencing help added New Dieroller structure from Core New DieRoller portability for odd Dice New 7th Sea die roller; ie [7k3] = [7d10.takeHighest(3).open(10)] New 'Mythos' System die roller added New vs. die roller method for WoD; ie [3v3] = [3d10.vs(3)]. Included for Mythos roller also New Warhammer FRPG Die Roller (Special thanks to Puu-san for the support) New EZ_Tree Reference system. Push a button, Traipse the tree, get a reference (Beta!) New Grids act more like Spreadsheets in Use mode, with Auto Calc Fixes: Fix to allow for portability to an OpenSUSE linux OS Fix to mplay_client for Fedora and OpenSUSE Fix to Text based Server Fix to Remote Admin Commands Fix to Pretty Print, from Core Fix to Splitter Nodes not being created Fix to massive amounts of images loading, from Core Fix to Map from gametree not showing to all clients Fix to gametree about menus Fix to Password Manager check on startup Fix to PC Sheets from tool nodes. They now use the tabber_panel Fix to Whiteboard ID to prevent random line or text deleting. Fixes to Server, Remote Server, and Server GUI Fix to Update Manager; cleaner clode for saved repositories Fixes made to Settings Panel and now reactive settings when Ok is pressed Fixes to Alternity roller's attack roll. Uses a simple Tuple instead of a Splice Fix to Use panel of Forms and Tabbers. Now longer enters design mode Fix made Image Fetching. New fetching image and new failed image Fix to whiteboard ID's to prevent non updated clients from ruining the fix. default_manifest.xml renamed to default_upmana.xml
author sirebral
date Wed, 03 Feb 2010 22:16:49 -0600
parents 97265586402b
children fc48380f0c9f
comparison
equal deleted inserted replaced
27:51428d30c59e 28:ff154cf3350c
19 # 19 #
20 # File: containers.py 20 # File: containers.py
21 # Author: Chris Davis 21 # Author: Chris Davis
22 # Maintainer: 22 # Maintainer:
23 # Version: 23 # Version:
24 # $Id: containers.py,v 1.43 2007/08/08 19:17:17 digitalxero Exp $ 24 # $Id: containers.py,v Traipse 'Ornery-Orc' prof.ebral Exp $
25 # 25 #
26 # Description: The file contains code for the container nodehandlers 26 # Description: The file contains code for the container nodehandlers
27 # 27 #
28 28
29 29
30 from core import * 30 from core import *
31 from wx.lib.splitter import MultiSplitterWindow 31 from wx.lib.splitter import MultiSplitterWindow
32 32 from orpg.tools.orpg_log import logger
33 33 from orpg.orpgCore import component
34 ########################## 34
35 ## base contiainer 35 ##########################
36 ## base container
36 ########################## 37 ##########################
37 38
38 class container_handler(node_handler): 39 class container_handler(node_handler):
39 """ should not be used! only a base class! 40 """ should not be used! only a base class!
40 <nodehandler name='?' module='core' class='container_handler' /> 41 <nodehandler name='?' module='core' class='container_handler' />
41 """ 42 """
42 def __init__(self,xml_dom,tree_node): 43 def __init__(self, xml, tree_node):
43 node_handler.__init__(self,xml_dom,tree_node) 44 node_handler.__init__(self, xml, tree_node)
44 self.load_children() 45 self.load_children()
45 46
46 def load_children(self): 47 def load_children(self):
47 children = self.master_dom._get_childNodes() 48 for child_xml in self.xml: self.tree.load_xml(child_xml,self.mytree_node)
48 for c in children: 49
49 self.tree.load_xml(c,self.mytree_node) 50 def check_map_aware(self, treenode, evt):
50 51 node = self.tree.GetPyData(treenode)
51 def check_map_aware(self, obj, evt): 52 if hasattr(node,"map_aware") and node.map_aware(): node.on_send_to_map(evt)
52 if hasattr(obj,"map_aware") and obj.map_aware():
53 obj.on_send_to_map(evt)
54
55 53
56 def on_send_to_map(self, evt): 54 def on_send_to_map(self, evt):
57 child = self.tree.GetFirstChild(self.mytree_node) 55 self.tree.traverse(self.mytree_node, self.check_map_aware, evt)
58 if child[0].IsOk(): 56
59 self.traverse(child[0], self.check_map_aware, 0, evt) 57 def checkChildToMap(self, treenode, evt):
60 58 node = self.tree.GetPyData(treenode)
61 59 if hasattr(node,"map_aware") and node.map_aware(): self.mapcheck = True
62 def checkChildToMap(self, obj, evt):
63 if hasattr(obj,"map_aware") and obj.map_aware():
64 self.mapcheck = True
65 60
66 def checkToMapMenu(self): 61 def checkToMapMenu(self):
67 self.mapcheck = False 62 self.mapcheck = False
68 child = self.tree.GetFirstChild(self.mytree_node) 63 self.tree.traverse(self.mytree_node, self.checkChildToMap)
69 if child[0].IsOk():
70 self.traverse(child[0], self.checkChildToMap, 0, self.mapcheck)
71
72 return self.mapcheck 64 return self.mapcheck
73 65
74 def on_drop(self,evt): 66 def on_drop(self,evt):
75 drag_obj = self.tree.drag_obj 67 drag_obj = self.tree.drag_obj
76 if drag_obj == self or self.tree.is_parent_node(self.mytree_node,drag_obj.mytree_node): 68 if drag_obj == self or self.tree.is_parent_node(self.mytree_node,drag_obj.mytree_node): return
77 return
78 opt = wx.MessageBox("Add node as child?","Container Node",wx.YES_NO|wx.CANCEL) 69 opt = wx.MessageBox("Add node as child?","Container Node",wx.YES_NO|wx.CANCEL)
79 if opt == wx.YES: 70 if opt == wx.YES:
80 xml_dom = self.tree.drag_obj.delete() 71 drop_xml = self.tree.drag_obj.delete()
81 xml_dom = self.master_dom.insertBefore(xml_dom,None) 72 self.xml.insert(0, drop_xml)
82 self.tree.load_xml(xml_dom, self.mytree_node) 73 self.tree.load_xml(drop_xml, self.mytree_node)
83 self.tree.Expand(self.mytree_node) 74 self.tree.Expand(self.mytree_node)
84 elif opt == wx.NO: 75 elif opt == wx.NO: node_handler.on_drop(self,evt)
85 node_handler.on_drop(self,evt) 76
86 77 def gen_html(self, treenode, evt):
87 def gen_html(self, obj, evt): 78 node = self.tree.GetPyData(treenode)
88 self.html_str += "<p>" + obj.tohtml() 79 self.html_str += "<p>" + node.tohtml()
89 80
90 def tohtml(self): 81 def tohtml(self):
91 self.html_str = "<table border=\"1\" ><tr><td>" 82 self.html_str = "<table border='1' ><tr><td>"
92 self.html_str += "<b>"+self.master_dom.getAttribute("name") + "</b>" 83 self.html_str += "<b>"+self.xml.get("name") + "</b>"
93 self.html_str += "</td></tr>\n" 84 self.html_str += "</td></tr>\n"
94 self.html_str += "<tr><td>" 85 self.html_str += "<tr><td>"
95 86 self.tree.traverse(self.mytree_node, self.gen_html, recurse=False)
96 child = self.tree.GetFirstChild(self.mytree_node)
97 self.traverse(child[0], self.gen_html, 0, None)
98
99 self.html_str += "</td></tr></table>" 87 self.html_str += "</td></tr></table>"
100 return self.html_str 88 return self.html_str
101 89
102 def get_size_constraint(self): 90 def get_size_constraint(self):
103 return 2 91 return 2
109 class group_handler(container_handler): 97 class group_handler(container_handler):
110 """ group nodehandler to be used as a placeholder for other nodehandlers. 98 """ group nodehandler to be used as a placeholder for other nodehandlers.
111 This handler will continue parsing child xml data. 99 This handler will continue parsing child xml data.
112 <nodehandler name='?' module='core' class='group_handler' /> 100 <nodehandler name='?' module='core' class='group_handler' />
113 """ 101 """
114 def __init__(self,xml_dom,tree_node): 102 def __init__(self, xml, tree_node):
115 container_handler.__init__(self,xml_dom,tree_node) 103 container_handler.__init__(self, xml, tree_node)
116 104
117 def load_children(self): 105 def load_children(self):
118 self.atts = None 106 self.atts = None
119 children = self.master_dom._get_childNodes() 107 for child_xml in self.xml:
120 for c in children: 108 if child_xml.tag == "group_atts": #having the group attributes as a child is bad!
121 if c._get_tagName() == "group_atts": 109 self.xml.remove(child_xml)
122 self.atts = c 110 elif child_xml: self.tree.load_xml(child_xml, self.mytree_node)
123 else: 111 if not self.xml.get('cols'): self.xml.set('cols', '1')
124 self.tree.load_xml(c,self.mytree_node) 112 if not self.xml.get('border'): self.xml.set('border', '1')
125 if not self.atts:
126 elem = self.xml.minidom.Element('group_atts')
127 elem.setAttribute("cols","1")
128 elem.setAttribute("border","1")
129 self.atts = self.master_dom.appendChild(elem)
130 113
131 def get_design_panel(self,parent): 114 def get_design_panel(self,parent):
132 return group_edit_panel(parent,self) 115 return group_edit_panel(parent,self)
133 116
134 def on_use(self,evt): 117 def on_use(self,evt):
135 return 118 return
136 119
137 def gen_html(self, obj, evt): 120 def gen_html(self, treenode, evt):
138 if self.i not in self.tdatas: 121 node = self.tree.GetPyData(treenode)
139 self.tdatas[self.i] = '' 122 if self.i not in self.tdatas: self.tdatas[self.i] = ''
140 self.tdatas[self.i] += "<P>" + obj.tohtml() 123 self.tdatas[self.i] += "<P>" + node.tohtml()
141 self.i += 1 124 self.i += 1
142 if self.i >= self.cols: 125 if self.i >= self.cols: self.i = 0
143 self.i = 0
144 126
145 def tohtml(self): 127 def tohtml(self):
146 cols = self.atts.getAttribute("cols") 128 cols = self.xml.get("cols")
147 border = self.atts.getAttribute("border") 129 border = self.xml.get("border")
148 self.html_str = "<table border=\""+border+"\" ><tr><td colspan=\""+cols+"\">" 130 self.html_str = "<table border='"+border+"' ><tr><td colspan='"+cols+"'>"
149 self.html_str += "<font size=4>"+self.master_dom.getAttribute("name") + "</font>" 131 self.html_str += "<font size=4>"+self.xml.get("name") + "</font>"
150 self.html_str += "</td></tr>\n<tr>" 132 self.html_str += "</td></tr>\n<tr>"
151
152 self.cols = int(cols) 133 self.cols = int(cols)
153 self.i = 0 134 self.i = 0
154 self.tdatas = {} 135 self.tdatas = {}
155 136 self.tree.traverse(self.mytree_node, self.gen_html, recurse=False)
156 child = self.tree.GetFirstChild(self.mytree_node) 137 for td in self.tdatas: self.html_str += "<td valign='top' >" + self.tdatas[td] + "</td>\n";
157 if child[0].IsOk():
158 self.traverse(child[0], self.gen_html, 0, None)
159
160 for td in self.tdatas:
161 self.html_str += "<td valign=\"top\" >" + self.tdatas[td] + "</td>\n";
162 self.html_str += "</tr></table>" 138 self.html_str += "</tr></table>"
163 return self.html_str 139 return self.html_str
164 140
165 GROUP_COLS = wx.NewId() 141 GROUP_COLS = wx.NewId()
166 GROUP_BOR = wx.NewId() 142 GROUP_BOR = wx.NewId()
167 143
168 class group_edit_panel(wx.Panel): 144 class group_edit_panel(wx.Panel):
169 def __init__(self, parent, handler): 145 def __init__(self, parent, handler):
170 wx.Panel.__init__(self, parent, -1) 146 wx.Panel.__init__(self, parent, -1)
171 self.handler = handler 147 self.handler = handler
148 self.outline = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Group"), wx.VERTICAL)
149
172 sizer = wx.BoxSizer(wx.VERTICAL) 150 sizer = wx.BoxSizer(wx.VERTICAL)
173 self.text = { P_TITLE : wx.TextCtrl(self, P_TITLE, handler.master_dom.getAttribute('name')) 151 self.text = {P_TITLE : wx.TextCtrl(self, P_TITLE, handler.xml.get('name')) }
174 }
175 sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND) 152 sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
176 sizer.Add(self.text[P_TITLE], 0, wx.EXPAND) 153 sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
177 sizer.Add(wx.Size(10,10)) 154 sizer.Add(wx.Size(10,10))
178 155
179 radio_c = wx.RadioBox(self, GROUP_COLS, "Columns", choices=["1","2","3","4"]) 156 radio_c = wx.RadioBox(self, GROUP_COLS, "Columns", choices=["1","2","3","4"])
180 cols = handler.atts.getAttribute("cols") 157 cols = handler.xml.get("cols")
181 if cols != "": 158 if cols != "": radio_c.SetSelection(int(cols)-1)
182 radio_c.SetSelection(int(cols)-1)
183 159
184 radio_b = wx.RadioBox(self, GROUP_BOR, "Border", choices=["no","yes"]) 160 radio_b = wx.RadioBox(self, GROUP_BOR, "Border", choices=["no","yes"])
185 border = handler.atts.getAttribute("border") 161 border = handler.xml.get("border")
186 if border != "": 162 if border != "": radio_b.SetSelection(int(border))
187 radio_b.SetSelection(int(border))
188 163
189 sizer.Add(radio_c, 0, wx.EXPAND) 164 sizer.Add(radio_c, 0, wx.EXPAND)
190 sizer.Add(wx.Size(10,10)) 165 sizer.Add(wx.Size(10,10))
191 sizer.Add(radio_b, 0, wx.EXPAND) 166 sizer.Add(radio_b, 0, wx.EXPAND)
192 167
193 self.sizer = sizer 168 self.outline.Add(sizer, 0)
194 self.outline = wx.StaticBox(self,-1,"Group") 169 self.sizer = self.outline
195 self.SetSizer(self.sizer) 170 self.SetSizer(self.sizer)
196 self.SetAutoLayout(True) 171 self.SetAutoLayout(True)
197 self.Fit() 172 self.Fit()
198 parent.SetSize(self.GetBestSize()) 173 parent.SetSize(self.GetBestSize())
199 self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE) 174 self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
201 self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=GROUP_COLS) 176 self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=GROUP_COLS)
202 177
203 def on_radio_box(self,evt): 178 def on_radio_box(self,evt):
204 id = evt.GetId() 179 id = evt.GetId()
205 index = evt.GetInt() 180 index = evt.GetInt()
206 if id == GROUP_COLS: 181 if id == GROUP_COLS: self.handler.xml.set("cols",str(index+1))
207 self.handler.atts.setAttribute("cols",str(index+1)) 182 elif id == GROUP_BOR: self.handler.xml.set("border",str(index))
208 elif id == GROUP_BOR:
209 self.handler.atts.setAttribute("border",str(index))
210 183
211 def on_text(self,evt): 184 def on_text(self,evt):
212 id = evt.GetId() 185 id = evt.GetId()
213 if id == P_TITLE: 186 if id == P_TITLE:
214 txt = self.text[id].GetValue() 187 txt = self.text[id].GetValue()
215 if txt != "": 188 if txt != "":
216 self.handler.master_dom.setAttribute('name',txt) 189 self.handler.xml.set('name',txt)
217 self.handler.rename(txt) 190 self.handler.rename(txt)
218 191
219 192
220 193
221 ########################## 194 ##########################
222 ## tabber node handler 195 ## tabber node handler
223 ########################## 196 ##########################
224 class tabber_handler(container_handler): 197 class tabber_handler(container_handler):
225 """ <nodehandler name='?' module='containers' class='tabber_handler' />""" 198 """ <nodehandler name='?' module='containers' class='tabber_handler' />"""
226 199
227 def __init__(self,xml_dom,tree_node): 200 def __init__(self, xml, tree_node):
228 container_handler.__init__(self,xml_dom,tree_node) 201 container_handler.__init__(self, xml, tree_node)
229 202
230 def get_design_panel(self,parent): 203 def get_design_panel(self, parent):
231 return tabbed_panel(parent,self,1) 204 return tabbed_panel(parent, self, 1)
232 205
233 def get_use_panel(self,parent): 206 def get_use_panel(self, parent):
234 return tabbed_panel(parent,self,2) 207 return tabbed_panel(parent, self, 0)
235 208
236 209
237 class tabbed_panel(orpgTabberWnd): 210 class tabbed_panel(orpgTabberWnd):
238 def __init__(self, parent, handler, mode): 211 def __init__(self, parent, handler, mode):
239 orpgTabberWnd.__init__(self, parent, style=FNB.FNB_NO_X_BUTTON) 212 orpgTabberWnd.__init__(self, parent, style=FNB.FNB_NO_X_BUTTON)
240 self.handler = handler 213 self.handler = handler
241 self.parent = parent 214 self.parent = parent
242 tree = self.handler.tree 215 if mode == 1: self.AddPage(tabbed_edit_panel(parent, handler), 'Tabber', False)
243 child = tree.GetFirstChild(handler.mytree_node) 216 handler.tree.traverse(handler.mytree_node, self.pick_panel, mode, False)
244 if child[0].IsOk():
245 handler.traverse(child[0], self.pick_panel, 0, mode, False)
246
247 parent.SetSize(self.GetBestSize()) 217 parent.SetSize(self.GetBestSize())
248 218
249 def pick_panel(self, obj, mode): 219 def pick_panel(self, treenode, mode):
250 if mode == 1: 220 node = self.handler.tree.GetPyData(treenode)
251 panel = obj.get_design_panel(self) 221
252 else: 222 if mode == 1: panel = node.get_design_panel(self)
253 panel = obj.get_use_panel(self) 223 else: panel = node.get_use_panel(self)
254 224 name = node.xml.get("name")
255 name = obj.master_dom.getAttribute("name") 225 if name == None: ## Fixes broken 3e Inventory child
256 226 if node.xml.tag == 'inventory':
257 if panel: 227 node.xml.set('name', 'Inventory')
258 self.AddPage(panel, name, False) 228 name = "Inventory"
229 logger.info('A corrective action was take to a 3e PC Sheet', True)
230 component.get('frame').TraipseSuiteWarn('item')
231 if panel: self.AddPage(panel, name, False)
232
233 class tabbed_edit_panel(wx.Panel):
234 def __init__(self, parent, handler):
235 wx.Panel.__init__(self, parent, -1, style=FNB.FNB_NO_X_BUTTON)
236 self.handler = handler
237 self.parent = parent
238 main_sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Tabber"), wx.VERTICAL)
239 self.title = wx.TextCtrl(self, 1, handler.xml.get('name'))
240 main_sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
241 main_sizer.Add(self.title, 0, wx.EXPAND)
242 self.SetSizer(main_sizer)
243 self.SetAutoLayout(True)
244 self.Fit()
245 parent.SetSize(self.GetBestSize())
246 self.Bind(wx.EVT_TEXT, self.on_text, id=1)
247
248
249 def on_text(self,evt):
250 txt = self.title.GetValue()
251 if txt != "":
252 self.handler.xml.set('name',txt)
253 self.handler.rename(txt)
254
259 255
260 ################################# 256 #################################
261 ## Splitter container 257 ## Splitter container
262 ################################# 258 #################################
263 259
264 class splitter_handler(container_handler): 260 class splitter_handler(container_handler):
265 """ <nodehandler name='?' module='containers' class='splitter_handler' />""" 261 """ <nodehandler name='?' module='containers' class='splitter_handler' />"""
266 262
267 def __init__(self,xml_dom,tree_node): 263 def __init__(self,xml,tree_node):
268 container_handler.__init__(self,xml_dom,tree_node) 264 container_handler.__init__(self,xml,tree_node)
269 265
270 def load_children(self): 266 def load_children(self):
271 self.atts = None 267 self.atts = None
272 children = self.master_dom._get_childNodes() 268 for child_xml in self.xml:
273 for c in children: 269 if child_xml.tag == "splitter_atts": print 'splitter_atts exist!'; self.xml.remove(child_xml) #Same here!
274 if c._get_tagName() == "splitter_atts": 270 elif child_xml: self.tree.load_xml(child_xml,self.mytree_node)
275 self.atts = c 271 if not self.xml.get('horizontal'): self.xml.set('horizontal', '0')
276 else:
277 self.tree.load_xml(c,self.mytree_node)
278 if not self.atts:
279 elem = self.xml.minidom.Element('splitter_atts')
280 elem.setAttribute("horizontal","0")
281 self.atts = self.master_dom.appendChild(elem)
282 272
283 def get_design_panel(self,parent): 273 def get_design_panel(self,parent):
284 return self.build_splitter_wnd(parent, 1) 274 return self.build_splitter_wnd(parent, 1)
285 275
286 def get_use_panel(self,parent): 276 def get_use_panel(self,parent):
287 return self.build_splitter_wnd(parent, 2) 277 return self.build_splitter_wnd(parent, 0)
288 278
289 def on_drop(self,evt): 279 def on_drop(self,evt):
290 drag_obj = self.tree.drag_obj 280 drag_obj = self.tree.drag_obj
291 container_handler.on_drop(self,evt) 281 container_handler.on_drop(self,evt)
292 282
293 def build_splitter_wnd(self, parent, mode): 283 def build_splitter_wnd(self, parent, mode):
294 self.split = self.atts.getAttribute("horizontal") 284 self.split = self.xml.get("horizontal")
295
296 self.pane = splitter_panel(parent, self) 285 self.pane = splitter_panel(parent, self)
297 286 self.splitter = MultiSplitterWindow(self.pane, -1,
298 self.splitter = MultiSplitterWindow(self.pane, -1, style=wx.SP_LIVE_UPDATE|wx.SP_3DSASH|wx.SP_NO_XP_THEME) 287 style=wx.SP_LIVE_UPDATE|wx.SP_3DSASH|wx.SP_NO_XP_THEME)
299 288 if self.split == '1': self.splitter.SetOrientation(wx.VERTICAL)
300 if self.split == '1': 289 else: self.splitter.SetOrientation(wx.HORIZONTAL)
301 self.splitter.SetOrientation(wx.VERTICAL)
302 else:
303 self.splitter.SetOrientation(wx.HORIZONTAL)
304
305 self.bestSizex = -1 290 self.bestSizex = -1
306 self.bestSizey = -1 291 self.bestSizey = -1
307 292 self.tree.traverse(self.mytree_node, self.doSplit, mode, False)
308 cookie = 0
309 (child, cookie) = self.tree.GetFirstChild(self.mytree_node)
310 if child.IsOk():
311 self.traverse(child, self.doSplit, 0, mode, False)
312
313 self.pane.sizer.Add(self.splitter, 1, wx.EXPAND) 293 self.pane.sizer.Add(self.splitter, 1, wx.EXPAND)
314 294 if mode != 1: self.pane.hozCheck.Hide()
315
316 if mode != 1:
317 self.pane.hozCheck.Hide()
318
319 self.pane.SetSize((self.bestSizex, self.bestSizey)) 295 self.pane.SetSize((self.bestSizex, self.bestSizey))
320 self.pane.Layout() 296 self.pane.Layout()
321 parent.SetSize(self.pane.GetSize()) 297 parent.SetSize(self.pane.GetSize())
322 return self.pane 298 return self.pane
323 299
324 def doSplit(self, obj, mode): 300 def doSplit(self, treenode, mode):
325 if mode == 1: 301 node = self.tree.GetPyData(treenode)
326 tmp = obj.get_design_panel(self.splitter) 302 if mode == 1: tmp = node.get_design_panel(self.splitter)
327 else: 303 else: tmp = node.get_use_panel(self.splitter)
328 tmp = obj.get_use_panel(self.splitter)
329
330 if self.split == '1': 304 if self.split == '1':
331 sash = tmp.GetBestSize()[1]+1 305 sash = tmp.GetBestSize()[1]+1
332 self.bestSizey += sash+11 306 self.bestSizey += sash+11
333 if self.bestSizex < tmp.GetBestSize()[0]: 307 if self.bestSizex < tmp.GetBestSize()[0]: self.bestSizex = tmp.GetBestSize()[0]+10
334 self.bestSizex = tmp.GetBestSize()[0]+10
335 else: 308 else:
336 sash = tmp.GetBestSize()[0]+1 309 sash = tmp.GetBestSize()[0]+1
337 self.bestSizex += sash 310 self.bestSizex += sash
338 if self.bestSizey < tmp.GetBestSize()[1]: 311 if self.bestSizey < tmp.GetBestSize()[1]: self.bestSizey = tmp.GetBestSize()[1]+31
339 self.bestSizey = tmp.GetBestSize()[1]+31
340
341 self.splitter.AppendWindow(tmp, sash) 312 self.splitter.AppendWindow(tmp, sash)
342
343 def get_size_constraint(self): 313 def get_size_constraint(self):
344 return 1 314 return 1
345 315
346 class splitter_panel(wx.Panel): 316 class splitter_panel(wx.Panel):
347 def __init__(self, parent, handler): 317 def __init__(self, parent, handler):
348 wx.Panel.__init__(self, parent, -1) 318 wx.Panel.__init__(self, parent, -1)
349 self.handler = handler 319 self.handler = handler
350 sizer = wx.BoxSizer(wx.VERTICAL) 320 sizer = wx.BoxSizer(wx.VERTICAL)
321 self.title = wx.TextCtrl(self, 1, handler.xml.get('name'))
351 322
352 self.hozCheck = wx.CheckBox(self, -1, "Horizontal Split") 323 self.hozCheck = wx.CheckBox(self, -1, "Horizontal Split")
353 hoz = self.handler.atts.getAttribute("horizontal") 324 hoz = self.handler.xml.get("horizontal")
354 325
355 if hoz == '1': 326 if hoz == '1': self.hozCheck.SetValue(True)
356 self.hozCheck.SetValue(True) 327 else: self.hozCheck.SetValue(False)
357 #self.splitsize = wx.BoxSizer(wx.HORIZONTAL) 328
358 else: 329 sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
359 self.hozCheck.SetValue(False) 330 sizer.Add(self.title, 0)
360 #self.splitsize = wx.BoxSizer(wx.VERTICAL)
361
362 sizer.Add(self.hozCheck, 0, wx.EXPAND) 331 sizer.Add(self.hozCheck, 0, wx.EXPAND)
363 sizer.Add(wx.Size(10,0)) 332 sizer.Add(wx.Size(10,0))
364 #sizer.Add(self.splitsize, 1, wx.EXPAND)
365 333
366 self.sizer = sizer 334 self.sizer = sizer
367 self.SetSizer(self.sizer) 335 self.SetSizer(self.sizer)
368 self.SetAutoLayout(True) 336 self.SetAutoLayout(True)
369 337 self.Bind(wx.EVT_TEXT, self.on_text, id=1)
370 self.Bind(wx.EVT_CHECKBOX, self.on_check_box, id=self.hozCheck.GetId()) 338 self.Bind(wx.EVT_CHECKBOX, self.on_check_box, id=self.hozCheck.GetId())
371 339
372 def on_check_box(self,evt): 340 def on_check_box(self,evt):
373 state = self.hozCheck.GetValue() 341 state = self.hozCheck.GetValue()
374 if state: 342 if state: self.handler.xml.set("horizontal", "1")
375 self.handler.atts.setAttribute("horizontal", "1") 343 else: self.handler.xml.set("horizontal", "0")
376 else: 344
377 self.handler.atts.setAttribute("horizontal", "0") 345 def on_text(self,evt):
346 txt = self.title.GetValue()
347 if txt != "":
348 self.handler.xml.set('name',txt)
349 self.handler.rename(txt)
350