comparison orpg/gametree/nodehandlers/StarWarsd20.py @ 152:6081bdc2b8d5 beta

Traipse Beta 'OpenRPG' {091125-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 (Beta) Added Bookmarks Fix to Remote Admin Commands Minor fix to text based Server Fix to Pretty Print, from Core Fix to Splitter Nodes not being created Fix to massive amounts of images loading, from Core Added 'boot' command to remote admin Added confirmation window for sent nodes Minor changes to allow for portability to an OpenSUSE linux OS Miniatures Layer pop up box allows users to turn off Mini labels, from FlexiRPG Zoom Mouse plugin added Images added to Plugin UI Switching to Element Tree Map efficiency, from FlexiRPG Added Status Bar to Update Manager default_manifest.xml renamed to default_upmana.xml Cleaner clode for saved repositories New TrueDebug Class in orpg_log (See documentation for usage) Mercurial's hgweb folder is ported to upmana Pretty important update that can help remove thousands of dead children from your gametree. Children, <forms />, <group_atts />, <horizontal />, <cols />, <rows />, <height />, etc... are all tags now. Check your gametree and look for dead children!! New Gametree Recursion method, mapping, and context sensitivity. !Infinite Loops return error instead of freezing the software! New Syntax added for custom PC sheets Tip of the Day added, from Core and community Fixed Whiteboard ID to prevent random line or text deleting. Modified ID's to prevent non updated clients from ruining the fix.
author sirebral
date Wed, 25 Nov 2009 06:16:35 -0600
parents dcf4fbe09b70
children dcae32e219f1
comparison
equal deleted inserted replaced
150:6c5f46a5924b 152:6081bdc2b8d5
27 # 27 #
28 28
29 __version__ = "$Id: StarWarsd20.py,v 1.18 2006/11/15 12:11:23 digitalxero Exp $" 29 __version__ = "$Id: StarWarsd20.py,v 1.18 2006/11/15 12:11:23 digitalxero Exp $"
30 30
31 from core import * 31 from core import *
32 from containers import *
32 from orpg.tools.orpg_log import debug 33 from orpg.tools.orpg_log import debug
33 from xml.etree.ElementTree import parse 34 from xml.etree.ElementTree import parse
34 35
35 SWD20_EXPORT = wx.NewId() 36 SWD20_EXPORT = wx.NewId()
36 ############################ 37 ############################
47 48
48 def load_children(self): 49 def load_children(self):
49 children = self.xml.getchildren() 50 children = self.xml.getchildren()
50 for c in children: 51 for c in children:
51 self.tree.load_xml(c,self.mytree_node) 52 self.tree.load_xml(c,self.mytree_node)
52
53 53
54 def on_drop(self,evt): 54 def on_drop(self,evt):
55 drag_obj = self.tree.drag_obj 55 drag_obj = self.tree.drag_obj
56 #if self.is_my_child(self.mytree_node,drag_obj.mytree_node): 56 #if self.is_my_child(self.mytree_node,drag_obj.mytree_node):
57 # return 57 # return
71 html_str = "<table border=\"1\" ><tr><td>" 71 html_str = "<table border=\"1\" ><tr><td>"
72 html_str += "<b>"+self.xml.get("name") + "</b>" 72 html_str += "<b>"+self.xml.get("name") + "</b>"
73 html_str += "</td></tr>\n" 73 html_str += "</td></tr>\n"
74 html_str += "<tr><td>" 74 html_str += "<tr><td>"
75 max = tree.GetChildrenCount(handler.mytree_node) 75 max = tree.GetChildrenCount(handler.mytree_node)
76 try: 76 try: (child,cookie)=self.tree.GetFirstChild(self.mytree_node,cookie)
77 (child,cookie)=self.tree.GetFirstChild(self.mytree_node,cookie) 77 except: (child,cookie)=self.tree.GetFirstChild(self.mytree_node)
78 except: # If this happens we probably have a newer version of wxPython
79 (child,cookie)=self.tree.GetFirstChild(self.mytree_node)
80 obj = self.tree.GetPyData(child) 78 obj = self.tree.GetPyData(child)
81 for m in xrange(max): 79 for m in xrange(max):
82 html_str += "<p>" + obj.tohtml() 80 html_str += "<p>" + obj.tohtml()
83 if m < max-1: 81 if m < max-1:
84 child = self.tree.GetNextSibling(child) 82 child = self.tree.GetNextSibling(child)
90 return 1 88 return 1
91 89
92 def get_char_name( self ): 90 def get_char_name( self ):
93 return self.child_handlers['general'].get_char_name() 91 return self.child_handlers['general'].get_char_name()
94 92
95 ## def set_char_pp(self,attr,evl):
96 ## return self.child_handlers['pp'].set_char_pp(attr,evl)
97 ##
98 ## def get_char_pp( self, attr ):
99 ## return self.child_handlers['pp'].get_char_pp(attr)
100 ##
101 def get_char_lvl( self, attr ): 93 def get_char_lvl( self, attr ):
102 return self.child_handlers['classes'].get_char_lvl(attr) 94 return self.child_handlers['classes'].get_char_lvl(attr)
103
104 95
105 96
106 class SWd20char_handler(node_handler): 97 class SWd20char_handler(node_handler):
107 """ Node handler for a SWd20 charactor 98 """ Node handler for a SWd20 charactor
108 <nodehandler name='?' module='StarWarsd20' class='SWd20char_handler' /> 99 <nodehandler name='?' module='StarWarsd20' class='SWd20char_handler' />
147 range_attack.set("second","0") 138 range_attack.set("second","0")
148 range_attack.set("third","0") 139 range_attack.set("third","0")
149 range_attack.set("forth","0") 140 range_attack.set("forth","0")
150 range_attack.set("fifth","0") 141 range_attack.set("fifth","0")
151 range_attack.set("sixth","0") 142 range_attack.set("sixth","0")
152
153 gen_list = self.xml.findall('general')[0] 143 gen_list = self.xml.findall('general')[0]
154 144
155 for tag in ("currentxp","xptolevel"): 145 for tag in ("currentxp","xptolevel"):
156 node_list = xml_dom.findall(tag) 146 node_list = xml_dom.findall(tag)
157 gen_list.append(node_list[0]) 147 gen_list.append(node_list[0])
158 ## temp fix
159 #parent = self.xml._get_parentNode()
160 #old_dom = parent.replaceChild(xml_dom,self.xml)
161 #self.xml = xml_dom
162 print old_version 148 print old_version
163 149
164 150
165 def get_char_name( self ): 151 def get_char_name( self ):
166 return self.child_handlers['general'].get_char_name() 152 return self.child_handlers['general'].get_char_name()
167
168 ## def set_char_pp(self,attr,evl):
169 ## return self.child_handlers['pp'].set_char_pp(attr,evl)
170 ##
171 ## def get_char_pp( self, attr ):
172 ## return self.child_handlers['pp'].get_char_pp(attr)
173 153
174 def get_char_lvl( self, attr ): 154 def get_char_lvl( self, attr ):
175 return self.child_handlers['classes'].get_char_lvl(attr) 155 return self.child_handlers['classes'].get_char_lvl(attr)
176 156
177 157
189 169
190 170
191 def get_use_panel(self,parent): 171 def get_use_panel(self,parent):
192 return tabbed_panel(parent,self,2) 172 return tabbed_panel(parent,self,2)
193 173
194
195 def tohtml(self): 174 def tohtml(self):
196 html_str = "<table><tr><td colspan=2 >"+self.child_handlers['general'].tohtml()+"</td></tr>" 175 html_str = "<table><tr><td colspan=2 >"+self.child_handlers['general'].tohtml()+"</td></tr>"
197 html_str += "<tr><td width='50%' valign=top >"+self.child_handlers['abilities'].tohtml() 176 html_str += "<tr><td width='50%' valign=top >"+self.child_handlers['abilities'].tohtml()
198 html_str += "<P>" + self.child_handlers['saves'].tohtml() 177 html_str += "<P>" + self.child_handlers['saves'].tohtml()
199 html_str += "<P>" + self.child_handlers['attacks'].tohtml() 178 html_str += "<P>" + self.child_handlers['attacks'].tohtml()
200 html_str += "<P>" + self.child_handlers['ac'].tohtml() 179 html_str += "<P>" + self.child_handlers['ac'].tohtml()
201 html_str += "<P>" + self.child_handlers['feats'].tohtml() 180 html_str += "<P>" + self.child_handlers['feats'].tohtml()
202 #html_str += "<P>" + self.child_handlers['spells'].tohtml()
203 #html_str += "<P>" + self.child_handlers['divine'].tohtml()
204 #html_str += "<P>" + self.child_handlers['powers'].tohtml()
205 html_str += "<P>" + self.child_handlers['inventory'].tohtml() +"</td>" 181 html_str += "<P>" + self.child_handlers['inventory'].tohtml() +"</td>"
206 html_str += "<td width='50%' valign=top >"+self.child_handlers['classes'].tohtml() 182 html_str += "<td width='50%' valign=top >"+self.child_handlers['classes'].tohtml()
207 html_str += "<P>" + self.child_handlers['wp'].tohtml() 183 html_str += "<P>" + self.child_handlers['wp'].tohtml()
208 html_str += "<P>" + self.child_handlers['vp'].tohtml() 184 html_str += "<P>" + self.child_handlers['vp'].tohtml()
209 #html_str += "<P>" + self.child_handlers['pp'].tohtml()
210 html_str += "<P>" + self.child_handlers['skills'].tohtml() +"</td>" 185 html_str += "<P>" + self.child_handlers['skills'].tohtml() +"</td>"
211 html_str += "</tr></table>" 186 html_str += "</tr></table>"
212 return html_str 187 return html_str
213 188
214 def about(self): 189 def about(self):
215 html_str = "<img src='" + dir_struct["icon"]+'d20_logo.gif' "><br /><b>d20 Character Tool v0.7 beta</b>" 190 """html_str = "<img src='" + dir_struct["icon"]+'d20_logo.gif' "><br /><b>d20 Character Tool v0.7 beta</b>"
216 html_str += "<br />by Chris Davis<br />chris@rpgarchive.com" 191 html_str += "<br />by Chris Davis<br />chris@rpgarchive.com"
217 return html_str 192 return html_str"""
193 text = 'd20 Character Tool 0.7 beta\n'
194 text += 'by Chris Davis chris@rpgarchive.com'
195 return text
218 196
219 def get_char_name( self ): 197 def get_char_name( self ):
220 return self.child_handlers['general'].get_char_name() 198 return self.child_handlers['general'].get_char_name()
221 def get_armor_class( self ): 199 def get_armor_class( self ):
222 return self.child_handlers['ac'].get_armor_class() 200 return self.child_handlers['ac'].get_armor_class()
226 return self.child_handlers['wp'].get_current_hp() 204 return self.child_handlers['wp'].get_current_hp()
227 def get_max_vp( self ): 205 def get_max_vp( self ):
228 return self.child_handlers['vp'].get_max_vp() 206 return self.child_handlers['vp'].get_max_vp()
229 def get_current_vp( self ): 207 def get_current_vp( self ):
230 return self.child_handlers['vp'].get_current_vp() 208 return self.child_handlers['vp'].get_current_vp()
231
232 ## def set_char_pp(self,attr,evl):
233 ## return self.child_handlers['pp'].set_char_pp(attr,evl)
234 ##
235 ## def get_char_pp( self, attr ):
236 ## return self.child_handlers['pp'].get_char_pp(attr)
237
238 def get_char_lvl( self, attr ): 209 def get_char_lvl( self, attr ):
239 return self.child_handlers['classes'].get_char_lvl(attr) 210 return self.child_handlers['classes'].get_char_lvl(attr)
240 211
212 """ Removed to use the supplied Tabbed Panel
241 class tabbed_panel(wx.Notebook): 213 class tabbed_panel(wx.Notebook):
242 def __init__(self, parent, handler, mode): 214 def __init__(self, parent, handler, mode):
243 wx.Notebook.__init__(self, parent, -1, size=(1200,800)) 215 wx.Notebook.__init__(self, parent, -1, size=(1200,800))
244 self.handler = handler 216 self.handler = handler
245 self.parent = parent 217 self.parent = parent
251 except: # If this happens we probably have a newer version of wxPython 223 except: # If this happens we probably have a newer version of wxPython
252 (child,cookie)=tree.GetFirstChild(handler.mytree_node) 224 (child,cookie)=tree.GetFirstChild(handler.mytree_node)
253 obj = tree.GetPyData(child) 225 obj = tree.GetPyData(child)
254 for m in xrange(max): 226 for m in xrange(max):
255 227
256 if mode == 1: 228 if mode == 1: panel = obj.get_design_panel(self)
257 panel = obj.get_design_panel(self) 229 else: panel = obj.get_use_panel(self)
258 else:
259 panel = obj.get_use_panel(self)
260 name = obj.xml.get("name") 230 name = obj.xml.get("name")
261 231 if panel: self.AddPage(panel,name)
262 if panel:
263 self.AddPage(panel,name)
264 if m < max-1: 232 if m < max-1:
265 child = tree.GetNextSibling(child) 233 child = tree.GetNextSibling(child)
266 obj = tree.GetPyData(child) 234 obj = tree.GetPyData(child)
267
268 235
269 def about(self): 236 def about(self):
270 html_str = "<img src='" + dir_struct["icon"]+'d20_logo.gif' "><br /><b>d20 Character Tool v0.7 beta</b>" 237 html_str = "<img src='" + dir_struct["icon"]+'d20_logo.gif' "><br /><b>d20 Character Tool v0.7 beta</b>"
271 html_str += "<br />by Chris Davis<br />chris@rpgarchive.com" 238 html_str += "<br />by Chris Davis<br />chris@rpgarchive.com"
272 return html_str 239 return html_str
273 240
274 def get_char_name( self ): 241 def get_char_name( self ):
275 return self.child_handlers['general'].get_char_name() 242 return self.child_handlers['general'].get_char_name()
276 243
277 ## def set_char_pp(self,attr,evl):
278 ## return self.child_handlers['pp'].set_char_pp(attr,evl)
279 ##
280 ## def get_char_pp( self, attr ):
281 ## return self.child_handlers['pp'].get_char_pp(attr)
282
283 def get_char_lvl( self, attr ): 244 def get_char_lvl( self, attr ):
284 return self.child_handlers['classes'].get_char_lvl(attr) 245 return self.child_handlers['classes'].get_char_lvl(attr)
246 """
285 247
286 class SWd20_char_child(node_handler): 248 class SWd20_char_child(node_handler):
287 """ Node Handler for skill. This handler will be 249 """ Node Handler for skill. This handler will be
288 created by SWd20char_handler. 250 created by SWd20char_handler.
289 """ 251 """
291 node_handler.__init__(self, xml_dom, tree_node) 253 node_handler.__init__(self, xml_dom, tree_node)
292 self.char_hander = parent 254 self.char_hander = parent
293 self.drag = False 255 self.drag = False
294 self.frame = component.get('frame') 256 self.frame = component.get('frame')
295 self.myeditor = None 257 self.myeditor = None
296
297 258
298 def on_drop(self, evt): 259 def on_drop(self, evt):
299 pass 260 pass
300 261
301 def on_rclick(self, evt): 262 def on_rclick(self, evt):
358 untrained = int(skill.get('untrained')) 319 untrained = int(skill.get('untrained'))
359 chat = self.chat 320 chat = self.chat
360 if item == self.mytree_node: 321 if item == self.mytree_node:
361 SWd20_char_child.on_ldclick(self,evt) 322 SWd20_char_child.on_ldclick(self,evt)
362 else: 323 else:
363 if rank == 0 and untrained == 0: 324 if rank == 0 and untrained == 0: chat.Post("Can't use untrained!",True,True)
364 chat.Post('Can\'t use untrained!',True,True)
365 else: 325 else:
366 mod = self.get_mod(name) 326 mod = self.get_mod(name)
367 if mod >= 0: 327 if mod >= 0: mod1 = "+"
368 mod1 = "+" 328 else: mod1 = ""
369 else:
370 mod1 = ""
371 txt = '%s Skill Check: [1d20%s%s]' % (name, mod1, mod) 329 txt = '%s Skill Check: [1d20%s%s]' % (name, mod1, mod)
372 chat.ParsePost(txt,True,True) 330 chat.ParsePost(txt,True,True)
373 331
374 def get_design_panel(self,parent): 332 def get_design_panel(self,parent):
375 wnd = outline_panel(parent,self,skill_grid,"Skills") 333 wnd = outline_panel(parent,self,skill_grid,"Skills")
386 rank = n.get('rank') 344 rank = n.get('rank')
387 html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+rank+"</td>" 345 html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+rank+"</td>"
388 stat_mod = str(self.char_hander.child_handlers['abilities'].get_mod(stat)) 346 stat_mod = str(self.char_hander.child_handlers['abilities'].get_mod(stat))
389 misc = n.get('misc') 347 misc = n.get('misc')
390 mod = str(self.get_mod(name)) 348 mod = str(self.get_mod(name))
391 if mod >= 0: 349 if mod >= 0: mod1 = "+"
392 mod1 = "+" 350 else: mod1 = ""
393 else:
394 mod1 = ""
395 html_str = html_str + "<td>"+stat_mod+"</td><td>"+misc+'</td><td>%s%s</td></tr>' % (mod1, mod) 351 html_str = html_str + "<td>"+stat_mod+"</td><td>"+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
396 html_str = html_str + "</table>" 352 html_str = html_str + "</table>"
397 return html_str 353 return html_str
398 354
399 355
418 name = self.tree.GetItemText( item ) 374 name = self.tree.GetItemText( item )
419 if item == self.mytree_node: 375 if item == self.mytree_node:
420 SWd20_char_child.on_ldclick( self, evt ) 376 SWd20_char_child.on_ldclick( self, evt )
421 else: 377 else:
422 mod = self.get_mod( name ) 378 mod = self.get_mod( name )
423 if mod >= 0: 379 if mod >= 0: mod1 = "+"
424 mod1 = "+" 380 else: mod1 = ""
425 else:
426 mod1 = ""
427 chat = self.chat 381 chat = self.chat
428 txt = '%s check: [1d20%s%s]' % ( name, mod1, mod ) 382 txt = '%s check: [1d20%s%s]' % ( name, mod1, mod )
429 chat.ParsePost( txt, True, True ) 383 chat.ParsePost( txt, True, True )
430 384
431 def get_mod(self,abbr): 385 def get_mod(self,abbr):
449 for n in node_list: 403 for n in node_list:
450 name = n.get('name') 404 name = n.get('name')
451 abbr = n.get('abbr') 405 abbr = n.get('abbr')
452 base = n.get('base') 406 base = n.get('base')
453 mod = str(self.get_mod(abbr)) 407 mod = str(self.get_mod(abbr))
454 if mod >= 0: 408 if mod >= 0: mod1 = "+"
455 mod1 = "+" 409 else: mod1 = ""
456 else:
457 mod1 = ""
458 html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+base+'</td><td>%s%s</td></tr>' % (mod1, mod) 410 html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+base+'</td><td>%s%s</td></tr>' % (mod1, mod)
459 html_str = html_str + "</table>" 411 html_str = html_str + "</table>"
460 return html_str 412 return html_str
461 413
462 class SWd20saves(SWd20_char_child): 414 class SWd20saves(SWd20_char_child):
479 save = self.saves[name] 431 save = self.saves[name]
480 stat = save.get('stat') 432 stat = save.get('stat')
481 stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat) 433 stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat)
482 base = int(save.get('base')) 434 base = int(save.get('base'))
483 miscmod = int(save.get('miscmod')) 435 miscmod = int(save.get('miscmod'))
484 # magmod = int(save.get('magmod'))
485 # total = stat_mod + base + miscmod + magmod
486 total = stat_mod + base + miscmod 436 total = stat_mod + base + miscmod
487 return total 437 return total
488 438
489 def on_rclick(self,evt): 439 def on_rclick(self,evt):
490 item = self.tree.GetSelection() 440 item = self.tree.GetSelection()
494 #wnd = save_grid(self.frame.note,self) 444 #wnd = save_grid(self.frame.note,self)
495 #wnd.title = "Saves" 445 #wnd.title = "Saves"
496 #self.frame.add_panel(wnd) 446 #self.frame.add_panel(wnd)
497 else: 447 else:
498 mod = self.get_mod(name) 448 mod = self.get_mod(name)
499 if mod >= 0: 449 if mod >= 0: mod1 = "+"
500 mod1 = "+" 450 else: mod1 = ""
501 else:
502 mod1 = ""
503 chat = self.chat 451 chat = self.chat
504 txt = '%s save: [1d20%s%s]' % (name, mod1, mod) 452 txt = '%s save: [1d20%s%s]' % (name, mod1, mod)
505 chat.ParsePost( txt, True, True ) 453 chat.ParsePost( txt, True, True )
506 454
507 def get_design_panel(self,parent): 455 def get_design_panel(self,parent):
521 html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+base+"</td>" 469 html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+base+"</td>"
522 stat_mod = str(self.char_hander.child_handlers['abilities'].get_mod(stat)) 470 stat_mod = str(self.char_hander.child_handlers['abilities'].get_mod(stat))
523 mag = n.get('magmod') 471 mag = n.get('magmod')
524 misc = n.get('miscmod') 472 misc = n.get('miscmod')
525 mod = str(self.get_mod(name)) 473 mod = str(self.get_mod(name))
526 if mod >= 0: 474 if mod >= 0: mod1 = "+"
527 mod1 = "+" 475 else: mod1 = ""
528 else:
529 mod1 = ""
530 html_str = html_str + "<td>"+stat_mod+"</td><td>"+mag+"</td>" 476 html_str = html_str + "<td>"+stat_mod+"</td><td>"+mag+"</td>"
531 html_str = html_str + '<td>'+misc+'</td><td>%s%s</td></tr>' % (mod1, mod) 477 html_str = html_str + '<td>'+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
532 html_str = html_str + "</table>" 478 html_str = html_str + "</table>"
533 return html_str 479 return html_str
534 480
575 return wnd 521 return wnd
576 522
577 def tohtml(self): 523 def tohtml(self):
578 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Classes</th></tr><tr><td>" 524 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Classes</th></tr><tr><td>"
579 n_list = self.xml.getchildren() 525 n_list = self.xml.getchildren()
580 for n in n_list: 526 for n in n_list: html_str += n.get('name') + " ("+n.get('level')+"), "
581 html_str += n.get('name') + " ("+n.get('level')+"), "
582 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" 527 html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
583 return html_str 528 return html_str
584 529
585 def get_char_lvl( self, attr ): 530 def get_char_lvl( self, attr ):
586 node_list = self.xml.findall('class') 531 node_list = self.xml.findall('class')
587 for n in node_list: 532 for n in node_list:
588 lvl = n.get('level') 533 lvl = n.get('level')
589 type = n.get('name') 534 type = n.get('name')
590 if attr == "level": 535 if attr == "level": return lvl
591 return lvl 536 elif attr == "class": return type
592 elif attr == "class":
593 return type
594 537
595 538
596 class SWd20feats(SWd20_char_child): 539 class SWd20feats(SWd20_char_child):
597 """ Node Handler for classes. This handler will be 540 """ Node Handler for classes. This handler will be
598 created by d20char_handler. 541 created by d20char_handler.
606 return wnd 549 return wnd
607 550
608 def tohtml(self): 551 def tohtml(self):
609 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Feats</th></tr><tr><td>" 552 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Feats</th></tr><tr><td>"
610 n_list = self.xml.getchildren() 553 n_list = self.xml.getchildren()
611 for n in n_list: 554 for n in n_list: html_str += n.get('name')+ ", "
612 html_str += n.get('name')+ ", "
613 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" 555 html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
614 return html_str 556 return html_str
615 557
616 class SWd20howto(SWd20_char_child): 558 class SWd20howto(SWd20_char_child):
617 """ Node Handler for hit points. This handler will be 559 """ Node Handler for hit points. This handler will be
671 html_str += "<th>Current:</th><td>"+self.xml.get('current')+"</td>" 613 html_str += "<th>Current:</th><td>"+self.xml.get('current')+"</td>"
672 html_str += "</tr></table>" 614 html_str += "</tr></table>"
673 return html_str 615 return html_str
674 616
675 def get_max_hp( self ): 617 def get_max_hp( self ):
676 try: 618 try: return eval( self.xml.get( 'max' ) )
677 return eval( self.xml.get( 'max' ) ) 619 except: return 0
678 except:
679 return 0
680 def get_current_hp( self ): 620 def get_current_hp( self ):
681 try: 621 try: return eval( self.xml.get( 'current' ) )
682 return eval( self.xml.get( 'current' ) ) 622 except: return 0
683 except:
684 return 0
685 623
686 class SWd20vp(SWd20_char_child): 624 class SWd20vp(SWd20_char_child):
687 """ Node Handler for hit points. This handler will be 625 """ Node Handler for hit points. This handler will be
688 created by d20char_handler. 626 created by d20char_handler.
689 """ 627 """
701 html_str += "<th>Current:</th><td>"+self.xml.get('current')+"</td>" 639 html_str += "<th>Current:</th><td>"+self.xml.get('current')+"</td>"
702 html_str += "</tr></table>" 640 html_str += "</tr></table>"
703 return html_str 641 return html_str
704 642
705 def get_max_vp( self ): 643 def get_max_vp( self ):
706 try: 644 try: return eval( self.xml.get( 'max' ) )
707 return eval( self.xml.get( 'max' ) ) 645 except: return 0
708 except:
709 return 0
710 def get_current_vp( self ): 646 def get_current_vp( self ):
711 try: 647 try: return eval( self.xml.get( 'current' ) )
712 return eval( self.xml.get( 'current' ) ) 648 except: return 0
713 except:
714 return 0
715 649
716 class SWd20attacks(SWd20_char_child): 650 class SWd20attacks(SWd20_char_child):
717 """ Node Handler for attacks. This handler will be 651 """ Node Handler for attacks. This handler will be
718 created by d20char_handler. 652 created by d20char_handler.
719 """ 653 """
766 #self.frame.add_panel(self.get_design_panel(self.frame.note)) 700 #self.frame.add_panel(self.get_design_panel(self.frame.note))
767 else: 701 else:
768 mod = int(self.weapons[name].get('mod')) 702 mod = int(self.weapons[name].get('mod'))
769 if self.weapons[name].get('range') == '0': 703 if self.weapons[name].get('range') == '0':
770 mod = mod + self.get_mod('m') 704 mod = mod + self.get_mod('m')
771 if mod >= 0: 705 if mod >= 0: mod1 = "+"
772 mod1 = "+" 706 else: mod1 = ""
773 else:
774 mod1 = ""
775 else: 707 else:
776 mod = mod + self.get_mod('r') 708 mod = mod + self.get_mod('r')
777 if mod >= 0: 709 if mod >= 0: mod1 = "+"
778 mod1 = "+" 710 else: mod1 = ""
779 else:
780 mod1 = ""
781 chat = self.chat 711 chat = self.chat
782 dmg = self.weapons[name].get('damage') 712 dmg = self.weapons[name].get('damage')
783 lvl = self.get_char_lvl('level') 713 lvl = self.get_char_lvl('level')
784 cname = self.char_hander.get_char_name() 714 cname = self.char_hander.get_char_name()
785 txt = '%s %s Attack Roll: [1d20%s%s] ===> DMG: [%s%s%s]' % (cname, name, mod1, mod, dmg, mod1, mod) 715 txt = '%s %s Attack Roll: [1d20%s%s] ===> DMG: [%s%s%s]' % (cname, name, mod1, mod, dmg, mod1, mod)
813 html_str += "<td>"+str(ranged[2])+"</td></tr></table>" 743 html_str += "<td>"+str(ranged[2])+"</td></tr></table>"
814 744
815 n_list = self.xml.findall('weapon') 745 n_list = self.xml.findall('weapon')
816 for n in n_list: 746 for n in n_list:
817 mod = n.get('mod') 747 mod = n.get('mod')
818 if mod >= 0: 748 if mod >= 0: mod1 = "+"
819 mod1 = "+" 749 else: mod1 = ""
820 else:
821 mod1 = ""
822 ran = n.get('range') 750 ran = n.get('range')
823 total = str(int(mod) + self.get_mod(ran)) 751 total = str(int(mod) + self.get_mod(ran))
824 html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=2>Weapon</th> 752 html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=2>Weapon</th>
825 <th>Attack</th><th >Damage</th><th>Critical</th></tr>""" 753 <th>Attack</th><th >Damage</th><th>Critical</th></tr>"""
826 html_str += "<tr ALIGN='center' ><td colspan=2>"+n.get('name')+"</td><td>"+total+"</td>" 754 html_str += "<tr ALIGN='center' ><td colspan=2>"+n.get('name')+"</td><td>"+total+"</td>"
848 def get_armor_class(self): 776 def get_armor_class(self):
849 ac_total = 10 777 ac_total = 10
850 ac_total += self.get_total('bonus') 778 ac_total += self.get_total('bonus')
851 dex_mod = self.char_hander.child_handlers['abilities'].get_mod('Dex') 779 dex_mod = self.char_hander.child_handlers['abilities'].get_mod('Dex')
852 max_dex = self.get_max_dex() 780 max_dex = self.get_max_dex()
853 if dex_mod < max_dex: 781 if dex_mod < max_dex: ac_total += dex_mod
854 ac_total += dex_mod 782 else: ac_total += max_dex
855 else:
856 ac_total += max_dex
857 return ac_total 783 return ac_total
858 784
859 def get_max_dex(self): 785 def get_max_dex(self):
860 armor_list = self.xml.findall('armor') 786 armor_list = self.xml.findall('armor')
861 dex = 10 787 dex = 10
862 for a in armor_list: 788 for a in armor_list:
863 temp = int(a.get("maxdex")) 789 temp = int(a.get("maxdex"))
864 if temp < dex: 790 if temp < dex: dex = temp
865 dex = temp
866 return dex 791 return dex
867 792
868 def get_total(self,attr): 793 def get_total(self,attr):
869 armor_list = self.xml.findall('armor') 794 armor_list = self.xml.findall('armor')
870 total = 0 795 total = 0
871 for a in armor_list: 796 for a in armor_list: total += int(a.get(attr))
872 total += int(a.get(attr))
873 return total 797 return total
874 798
875 def get_design_panel(self,parent): 799 def get_design_panel(self,parent):
876 wnd = outline_panel(parent,self,ac_panel,"Armor") 800 wnd = outline_panel(parent,self,ac_panel,"Armor")
877 wnd.title = "Armor" 801 wnd.title = "Armor"
907 831
908 class base_panel(wx.Panel): 832 class base_panel(wx.Panel):
909 def __init__(self, parent): 833 def __init__(self, parent):
910 wx.Panel.__init__(self, parent, -1) 834 wx.Panel.__init__(self, parent, -1)
911 835
912 #self.build_ctrls()
913 self.Bind(wx.EVT_SIZE, self.on_size) 836 self.Bind(wx.EVT_SIZE, self.on_size)
914 837
915 def on_size(self,event): 838 def on_size(self,event):
916 s = self.GetClientSizeTuple() 839 s = self.GetClientSizeTuple()
917 #self.splitter.SetDimensions(0,0,s[0],s[1])
918 840
919 class outline_panel(wx.Panel): 841 class outline_panel(wx.Panel):
920 def __init__(self, parent, handler, wnd, txt,): 842 def __init__(self, parent, handler, wnd, txt,):
921 wx.Panel.__init__(self, parent, -1) 843 wx.Panel.__init__(self, parent, -1)
922 self.panel = wnd(self,handler) 844 self.panel = wnd(self,handler)
935 self.height = 1200 857 self.height = 1200
936 self.SetScrollbars(10, 10,80, self.height/10) 858 self.SetScrollbars(10, 10,80, self.height/10)
937 self.main_sizer = wx.BoxSizer(wx.HORIZONTAL) 859 self.main_sizer = wx.BoxSizer(wx.HORIZONTAL)
938 self.panels = {} 860 self.panels = {}
939 keys = handler.child_handlers.keys() 861 keys = handler.child_handlers.keys()
940 for k in keys: 862 for k in keys: self.panels[k] = handler.child_handlers[k].get_design_panel(self, [k])
941 self.panels[k] = handler.child_handlers[k].get_design_panel(self, [k])
942 self.sub_sizer = wx.BoxSizer(wx.VERTICAL) 863 self.sub_sizer = wx.BoxSizer(wx.VERTICAL)
943 self.sub_sizer2 = wx.BoxSizer(wx.VERTICAL) 864 self.sub_sizer2 = wx.BoxSizer(wx.VERTICAL)
944 self.sub_sizer.Add(self.panels['general'], 1, wx.EXPAND) 865 self.sub_sizer.Add(self.panels['general'], 1, wx.EXPAND)
945 self.sub_sizer.Add(self.panels['abilities'], 1, wx.EXPAND) 866 self.sub_sizer.Add(self.panels['abilities'], 1, wx.EXPAND)
946 867
947 self.sub_sizer.Add(self.panels['attacks'], 2, wx.EXPAND) 868 self.sub_sizer.Add(self.panels['attacks'], 2, wx.EXPAND)
948 self.sub_sizer.Add(self.panels['ac'], 1, wx.EXPAND) 869 self.sub_sizer.Add(self.panels['ac'], 1, wx.EXPAND)
949 #self.sub_sizer.Add(self.panels['spells'], 1, wx.EXPAND)
950 870
951 self.sub_sizer2.Add(self.panels['classes'], 2, wx.EXPAND) 871 self.sub_sizer2.Add(self.panels['classes'], 2, wx.EXPAND)
952 self.sub_sizer2.Add(self.panels['wp'], 1, wx.EXPAND) 872 self.sub_sizer2.Add(self.panels['wp'], 1, wx.EXPAND)
953 self.sub_sizer2.Add(self.panels['vp'], 1, wx.EXPAND) 873 self.sub_sizer2.Add(self.panels['vp'], 1, wx.EXPAND)
954 #self.sub_sizer2.Add(self.panels['pp'], 1, wx.EXPAND)
955 self.sub_sizer2.Add(self.panels['saves'], 2, wx.EXPAND) 874 self.sub_sizer2.Add(self.panels['saves'], 2, wx.EXPAND)
956 875
957 self.sub_sizer2.Add(self.panels['feats'], 2, wx.EXPAND) 876 self.sub_sizer2.Add(self.panels['feats'], 2, wx.EXPAND)
958 #self.sub_sizer2.Add(self.panels['powers'], 2, wx.EXPAND)
959 self.sub_sizer2.Add(self.panels['skills'], 3, wx.EXPAND) 877 self.sub_sizer2.Add(self.panels['skills'], 3, wx.EXPAND)
960 878
961 self.main_sizer.Add(self.sub_sizer, 1, wx.EXPAND) 879 self.main_sizer.Add(self.sub_sizer, 1, wx.EXPAND)
962 self.main_sizer.Add(self.sub_sizer2, 1, wx.EXPAND) 880 self.main_sizer.Add(self.sub_sizer2, 1, wx.EXPAND)
963 self.panels['abilities'].panel.char_wnd = self 881 self.panels['abilities'].panel.char_wnd = self
976 894
977 def refresh_data(self): 895 def refresh_data(self):
978 self.panels['saves'].panel.refresh_data() 896 self.panels['saves'].panel.refresh_data()
979 self.panels['skills'].panel.refresh_data() 897 self.panels['skills'].panel.refresh_data()
980 self.panels['attacks'].panel.refresh_data() 898 self.panels['attacks'].panel.refresh_data()
981 # self.panels['powers'].panel.refresh_data()
982 # self.panels['spells'].panel.refresh_data()
983 899
984 HOWTO_MAX = wx.NewId() 900 HOWTO_MAX = wx.NewId()
985 901
986 class howto_panel(wx.Panel): 902 class howto_panel(wx.Panel):
987 def __init__(self, parent, handler): 903 def __init__(self, parent, handler):
1048 self.Bind(wx.EVT_TEXT, self.on_text, id=VP_CUR) 964 self.Bind(wx.EVT_TEXT, self.on_text, id=VP_CUR)
1049 self.SetSizer(self.sizer) 965 self.SetSizer(self.sizer)
1050 966
1051 def on_text(self,evt): 967 def on_text(self,evt):
1052 id = evt.GetId() 968 id = evt.GetId()
1053 if id == VP_CUR: 969 if id == VP_CUR: self.xml.set('current',evt.GetString())
1054 self.xml.set('current',evt.GetString()) 970 elif id == VP_MAX: self.xml.set('max',evt.GetString())
1055 elif id == VP_MAX:
1056 self.xml.set('max',evt.GetString())
1057 971
1058 def on_size(self,evt): 972 def on_size(self,evt):
1059 s = self.GetClientSizeTuple() 973 s = self.GetClientSizeTuple()
1060 self.sizer.SetDimension(0,0,s[0],s[1]) 974 self.sizer.SetDimension(0,0,s[0],s[1])
1061
1062 #PP_CUR = wx.NewId()
1063 #PP_MAX = wx.NewId()
1064 #PP_FRE = wx.NewId()
1065 #PP_MFRE = wx.NewId()
1066
1067 #class pp_panel(wx.Panel):
1068 # def __init__(self, parent, handler):
1069 # wx.Panel.__init__(self, parent, -1)
1070 # pname = handler.xml.set("name", 'PowerPoints')
1071 # self.sizer = wx.FlexGridSizer(2, 4, 2, 2) # rows, cols, hgap, vgap
1072 # self.xml = handler.xml
1073 #
1074 # self.sizer.AddMany([ (wx.StaticText(self, -1, "PP Current:"), 0, wx.ALIGN_CENTER_VERTICAL),
1075 # (wx.TextCtrl(self, PP_CUR, self.xml.get('current1')), 0, wx.EXPAND),
1076 # (wx.StaticText(self, -1, "PP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
1077 # (wx.TextCtrl(self, PP_MAX, self.xml.get('max1')), 0, wx.EXPAND),
1078 # (wx.StaticText(self, -1, "Current Free Talants per day:"), 0, wx.ALIGN_CENTER_VERTICAL),
1079 # (wx.TextCtrl(self, PP_FRE, self.xml.get('free')), 0, wx.EXPAND),
1080 # (wx.StaticText(self, -1, "Max Free Talants per day:"), 0, wx.ALIGN_CENTER_VERTICAL),
1081 # (wx.TextCtrl(self, PP_MFRE, self.xml.get('maxfree')), 0, wx.EXPAND),
1082 # ])
1083 # self.sizer.AddGrowableCol(1)
1084 # self.Bind(wx.EVT_SIZE, self.on_size)
1085 # self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MAX)
1086 # self.Bind(wx.EVT_TEXT, self.on_text, id=PP_CUR)
1087 # self.Bind(wx.EVT_TEXT, self.on_text, id=PP_FRE)
1088 # self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MFRE)
1089 #
1090 # def on_text(self,evt):
1091 # id = evt.GetId()
1092 # if id == PP_CUR:
1093 # self.xml.set('current1',evt.GetString())
1094 # elif id == PP_MAX:
1095 # self.xml.set('max1',evt.GetString())
1096 # elif id == PP_FRE:
1097 # self.xml.set('free',evt.GetString())
1098 # elif id == PP_MFRE:
1099 # self.xml.set('maxfree',evt.GetString())
1100 #
1101 # def on_size(self,evt):
1102 # s = self.GetClientSizeTuple()
1103 # self.sizer.SetDimension(0,0,s[0],s[1])
1104 975
1105 976
1106 class gen_grid(wx.grid.Grid): 977 class gen_grid(wx.grid.Grid):
1107 """grid for gen info""" 978 """grid for gen info"""
1108 def __init__(self, parent, handler): 979 def __init__(self, parent, handler):
1115 self.CreateGrid(len(n_list),2) 986 self.CreateGrid(len(n_list),2)
1116 self.SetRowLabelSize(0) 987 self.SetRowLabelSize(0)
1117 self.SetColLabelSize(0) 988 self.SetColLabelSize(0)
1118 self.n_list = n_list 989 self.n_list = n_list
1119 i = 0 990 i = 0
1120 for i in range(len(n_list)): 991 for i in range(len(n_list)): self.refresh_row(i)
1121 self.refresh_row(i)
1122 992
1123 def on_cell_change(self,evt): 993 def on_cell_change(self,evt):
1124 row = evt.GetRow() 994 row = evt.GetRow()
1125 col = evt.GetCol() 995 col = evt.GetCol()
1126 value = self.GetCellValue(row,col) 996 value = self.GetCellValue(row,col)
1134 1004
1135 def on_size(self,evt): 1005 def on_size(self,evt):
1136 (w,h) = self.GetClientSizeTuple() 1006 (w,h) = self.GetClientSizeTuple()
1137 cols = self.GetNumberCols() 1007 cols = self.GetNumberCols()
1138 col_w = w/(cols) 1008 col_w = w/(cols)
1139 for i in range(0,cols): 1009 for i in range(0,cols): self.SetColSize(i,col_w)
1140 self.SetColSize(i,col_w)
1141 evt.Skip() 1010 evt.Skip()
1142 self.Refresh() 1011 self.Refresh()
1143 1012
1144 class inventory_grid(wx.grid.Grid): 1013 class inventory_grid(wx.grid.Grid):
1145 """grid for gen info""" 1014 """grid for gen info"""
1153 self.CreateGrid(len(n_list),2) 1022 self.CreateGrid(len(n_list),2)
1154 self.SetRowLabelSize(0) 1023 self.SetRowLabelSize(0)
1155 self.SetColLabelSize(0) 1024 self.SetColLabelSize(0)
1156 self.n_list = n_list 1025 self.n_list = n_list
1157 i = 0 1026 i = 0
1158 for i in range(len(n_list)): 1027 for i in range(len(n_list)): self.refresh_row(i)
1159 self.refresh_row(i)
1160 1028
1161 def on_cell_change(self,evt): 1029 def on_cell_change(self,evt):
1162 row = evt.GetRow() 1030 row = evt.GetRow()
1163 col = evt.GetCol() 1031 col = evt.GetCol()
1164 value = self.GetCellValue(row,col) 1032 value = self.GetCellValue(row,col)
1172 1040
1173 def on_size(self,evt): 1041 def on_size(self,evt):
1174 (w,h) = self.GetClientSizeTuple() 1042 (w,h) = self.GetClientSizeTuple()
1175 cols = self.GetNumberCols() 1043 cols = self.GetNumberCols()
1176 col_w = w/(cols) 1044 col_w = w/(cols)
1177 for i in range(0,cols): 1045 for i in range(0,cols): self.SetColSize(i,col_w)
1178 self.SetColSize(i,col_w)
1179 evt.Skip() 1046 evt.Skip()
1180 self.Refresh() 1047 self.Refresh()
1181 1048
1182 class abil_grid(wx.grid.Grid): 1049 class abil_grid(wx.grid.Grid):
1183 """grid for abilities""" 1050 """grid for abilities"""
1189 self.handler = handler 1056 self.handler = handler
1190 stats = handler.xml.findall('stat') 1057 stats = handler.xml.findall('stat')
1191 self.CreateGrid(len(stats),3) 1058 self.CreateGrid(len(stats),3)
1192 self.SetRowLabelSize(0) 1059 self.SetRowLabelSize(0)
1193 col_names = ['Ability','Score','Modifier'] 1060 col_names = ['Ability','Score','Modifier']
1194 for i in range(len(col_names)): 1061 for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
1195 self.SetColLabelValue(i,col_names[i])
1196 self.stats = stats 1062 self.stats = stats
1197 i = 0 1063 i = 0
1198 for i in range(len(stats)): 1064 for i in range(len(stats)): self.refresh_row(i)
1199 self.refresh_row(i)
1200 self.char_wnd = None 1065 self.char_wnd = None
1201 1066
1202 def on_cell_change(self,evt): 1067 def on_cell_change(self,evt):
1203 row = evt.GetRow() 1068 row = evt.GetRow()
1204 col = evt.GetCol() 1069 col = evt.GetCol()
1205 value = self.GetCellValue(row,col) 1070 value = self.GetCellValue(row,col)
1206 try: 1071 try:
1207 int(value) 1072 int(value)
1208 self.stats[row].set('base',value) 1073 self.stats[row].set('base',value)
1209 self.refresh_row(row) 1074 self.refresh_row(row)
1210 except: 1075 except: self.SetCellValue(row,col,"0")
1211 self.SetCellValue(row,col,"0") 1076 if self.char_wnd: self.char_wnd.refresh_data()
1212 if self.char_wnd:
1213 self.char_wnd.refresh_data()
1214 1077
1215 def refresh_row(self,rowi): 1078 def refresh_row(self,rowi):
1216 s = self.stats[rowi] 1079 s = self.stats[rowi]
1217 name = s.get('name') 1080 name = s.get('name')
1218 abbr = s.get('abbr') 1081 abbr = s.get('abbr')
1225 def on_size(self,evt): 1088 def on_size(self,evt):
1226 (w,h) = self.GetClientSizeTuple() 1089 (w,h) = self.GetClientSizeTuple()
1227 cols = self.GetNumberCols() 1090 cols = self.GetNumberCols()
1228 col_w = w/(cols+2) 1091 col_w = w/(cols+2)
1229 self.SetColSize(0,col_w*3) 1092 self.SetColSize(0,col_w*3)
1230 for i in range(1,cols): 1093 for i in range(1,cols): self.SetColSize(i,col_w)
1231 self.SetColSize(i,col_w)
1232 evt.Skip() 1094 evt.Skip()
1233 self.Refresh() 1095 self.Refresh()
1234 1096
1235 def refresh_data(self): 1097 def refresh_data(self):
1236 for r in range(self.GetNumberRows()-1): 1098 for r in range(self.GetNumberRows()-1): self.refresh_row(r)
1237 self.refresh_row(r)
1238 1099
1239 1100
1240 class save_grid(wx.grid.Grid): 1101 class save_grid(wx.grid.Grid):
1241 """grid for saves""" 1102 """grid for saves"""
1242 def __init__(self, parent, handler): 1103 def __init__(self, parent, handler):
1248 saves = handler.xml.findall('save') 1109 saves = handler.xml.findall('save')
1249 self.stats = handler.char_hander.child_handlers['abilities'] 1110 self.stats = handler.char_hander.child_handlers['abilities']
1250 self.CreateGrid(len(saves),7) 1111 self.CreateGrid(len(saves),7)
1251 self.SetRowLabelSize(0) 1112 self.SetRowLabelSize(0)
1252 col_names = ['Save','Key','base','Abil','Magic','Misc','Total'] 1113 col_names = ['Save','Key','base','Abil','Magic','Misc','Total']
1253 for i in range(len(col_names)): 1114 for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
1254 self.SetColLabelValue(i,col_names[i])
1255 self.saves = saves 1115 self.saves = saves
1256 i = 0 1116 i = 0
1257 for i in range(len(saves)): 1117 for i in range(len(saves)):self.refresh_row(i)
1258 self.refresh_row(i)
1259 1118
1260 def on_cell_change(self,evt): 1119 def on_cell_change(self,evt):
1261 row = evt.GetRow() 1120 row = evt.GetRow()
1262 col = evt.GetCol() 1121 col = evt.GetCol()
1263 value = self.GetCellValue(row,col) 1122 value = self.GetCellValue(row,col)
1264 try: 1123 try:
1265 int(value) 1124 int(value)
1266 if col == 2: 1125 if col == 2: self.saves[row].set('base',value)
1267 self.saves[row].set('base',value) 1126 elif col == 4:self.saves[row].set('magmod',value)
1268 elif col ==4: 1127 elif col == 4: self.saves[row].set('miscmod',value)
1269 self.saves[row].set('magmod',value)
1270 elif col ==4:
1271 self.saves[row].set('miscmod',value)
1272 self.refresh_row(row) 1128 self.refresh_row(row)
1273 except: 1129 except: self.SetCellValue(row,col,"0")
1274 self.SetCellValue(row,col,"0")
1275 1130
1276 def refresh_row(self,rowi): 1131 def refresh_row(self,rowi):
1277 s = self.saves[rowi] 1132 s = self.saves[rowi]
1278 name = s.get('name') 1133 name = s.get('name')
1279 self.SetCellValue(rowi,0,name) 1134 self.SetCellValue(rowi,0,name)
1293 def on_size(self,evt): 1148 def on_size(self,evt):
1294 (w,h) = self.GetClientSizeTuple() 1149 (w,h) = self.GetClientSizeTuple()
1295 cols = self.GetNumberCols() 1150 cols = self.GetNumberCols()
1296 col_w = w/(cols+2) 1151 col_w = w/(cols+2)
1297 self.SetColSize(0,col_w*3) 1152 self.SetColSize(0,col_w*3)
1298 for i in range(1,cols): 1153 for i in range(1,cols): self.SetColSize(i,col_w)
1299 self.SetColSize(i,col_w)
1300 evt.Skip() 1154 evt.Skip()
1301 self.Refresh() 1155 self.Refresh()
1302 1156
1303 def refresh_data(self): 1157 def refresh_data(self):
1304 for r in range(self.GetNumberRows()): 1158 for r in range(self.GetNumberRows()): self.refresh_row(r)
1305 self.refresh_row(r)
1306 1159
1307 1160
1308 class skill_grid(wx.grid.Grid): 1161 class skill_grid(wx.grid.Grid):
1309 """ panel for skills """ 1162 """ panel for skills """
1310 def __init__(self, parent, handler): 1163 def __init__(self, parent, handler):
1316 skills = handler.xml.findall('skill') 1169 skills = handler.xml.findall('skill')
1317 self.stats = handler.char_hander.child_handlers['abilities'] 1170 self.stats = handler.char_hander.child_handlers['abilities']
1318 self.CreateGrid(len(skills),7) 1171 self.CreateGrid(len(skills),7)
1319 self.SetRowLabelSize(0) 1172 self.SetRowLabelSize(0)
1320 col_names = ['Skill','Key','Rank','Abil','Misc','Total'] 1173 col_names = ['Skill','Key','Rank','Abil','Misc','Total']
1321 for i in range(len(col_names)): 1174 for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
1322 self.SetColLabelValue(i,col_names[i])
1323 rowi = 0 1175 rowi = 0
1324 self.skills = skills 1176 self.skills = skills
1325 for i in range(len(skills)): 1177 for i in range(len(skills)):
1326 self.refresh_row(i) 1178 self.refresh_row(i)
1327 1179
1330 col = evt.GetCol() 1182 col = evt.GetCol()
1331 value = self.GetCellValue(row,col) 1183 value = self.GetCellValue(row,col)
1332 #print value 1184 #print value
1333 try: 1185 try:
1334 int(value) 1186 int(value)
1335 if col == 3: 1187 if col == 3: self.skills[row].set('rank',value)
1336 self.skills[row].set('rank',value) 1188 elif col == 5: self.skills[row].set('misc',value)
1337 elif col ==5: 1189 elif col == 1: self.skills[row].set('untrained',value)
1338 self.skills[row].set('misc',value)
1339 elif col == 1:
1340 self.skills[row].set('untrained',value)
1341 self.refresh_row(row) 1190 self.refresh_row(row)
1342 except: 1191 except: self.SetCellValue(row,col,"0")
1343 self.SetCellValue(row,col,"0")
1344 1192
1345 def refresh_row(self,rowi): 1193 def refresh_row(self,rowi):
1346 s = self.skills[rowi] 1194 s = self.skills[rowi]
1347 name = s.get('name') 1195 name = s.get('name')
1348 self.SetCellValue(rowi,0,name) 1196 self.SetCellValue(rowi,0,name)
1362 def on_size(self,evt): 1210 def on_size(self,evt):
1363 (w,h) = self.GetClientSizeTuple() 1211 (w,h) = self.GetClientSizeTuple()
1364 cols = self.GetNumberCols() 1212 cols = self.GetNumberCols()
1365 col_w = w/(cols+2) 1213 col_w = w/(cols+2)
1366 self.SetColSize(0,col_w*3) 1214 self.SetColSize(0,col_w*3)
1367 for i in range(1,cols): 1215 for i in range(1,cols): self.SetColSize(i,col_w)
1368 self.SetColSize(i,col_w)
1369 evt.Skip() 1216 evt.Skip()
1370 self.Refresh() 1217 self.Refresh()
1371 1218
1372 def refresh_data(self): 1219 def refresh_data(self):
1373 for r in range(self.GetNumberRows()): 1220 for r in range(self.GetNumberRows()): self.refresh_row(r)
1374 self.refresh_row(r)
1375
1376 1221
1377 1222
1378 class feat_panel(wx.Panel): 1223 class feat_panel(wx.Panel):
1379 def __init__(self, parent, handler): 1224 def __init__(self, parent, handler):
1380 pname = handler.xml.set("name", 'Feats') 1225 pname = handler.xml.set("name", 'Feats')
1397 self.xml = handler.xml 1242 self.xml = handler.xml
1398 self.grid.CreateGrid(len(n_list),2,1) 1243 self.grid.CreateGrid(len(n_list),2,1)
1399 self.grid.SetRowLabelSize(0) 1244 self.grid.SetRowLabelSize(0)
1400 self.grid.SetColLabelValue(0,"Feat") 1245 self.grid.SetColLabelValue(0,"Feat")
1401 self.grid.SetColLabelValue(1,"Type") 1246 self.grid.SetColLabelValue(1,"Type")
1402 for i in range(len(n_list)): 1247 for i in range(len(n_list)): self.refresh_row(i)
1403 self.refresh_row(i)
1404 self.temp_dom = None 1248 self.temp_dom = None
1405 1249
1406 def refresh_row(self,i): 1250 def refresh_row(self,i):
1407 feat = self.n_list[i] 1251 feat = self.n_list[i]
1408 name = feat.get('name') 1252 name = feat.get('name')
1423 if not self.temp_dom: 1267 if not self.temp_dom:
1424 tree = parse(dir_struct["SWd20"]+"d20feats.xml") 1268 tree = parse(dir_struct["SWd20"]+"d20feats.xml")
1425 self.temp_dom = tree.getroot() 1269 self.temp_dom = tree.getroot()
1426 f_list = self.temp_dom.findall('feat') 1270 f_list = self.temp_dom.findall('feat')
1427 opts = [] 1271 opts = []
1428 for f in f_list: 1272 for f in f_list: opts.append(f.get('name'))
1429 opts.append(f.get('name'))
1430 dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts) 1273 dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts)
1431 if dlg.ShowModal() == wx.ID_OK: 1274 if dlg.ShowModal() == wx.ID_OK:
1432 i = dlg.GetSelection() 1275 i = dlg.GetSelection()
1433 new_node = self.xml.append(f_list[i]) 1276 new_node = self.xml.append(f_list[i])
1434 self.grid.AppendRows(1) 1277 self.grid.AppendRows(1)
1441 self.grid.SetDimensions(0,0,s[0],s[1]-25) 1284 self.grid.SetDimensions(0,0,s[0],s[1]-25)
1442 self.sizer.SetDimension(0,s[1]-25,s[0],25) 1285 self.sizer.SetDimension(0,s[1]-25,s[0],25)
1443 (w,h) = self.grid.GetClientSizeTuple() 1286 (w,h) = self.grid.GetClientSizeTuple()
1444 cols = self.grid.GetNumberCols() 1287 cols = self.grid.GetNumberCols()
1445 col_w = w/(cols) 1288 col_w = w/(cols)
1446 for i in range(0,cols): 1289 for i in range(0,cols): self.grid.SetColSize(i,col_w)
1447 self.grid.SetColSize(i,col_w)
1448 1290
1449 class attack_grid(wx.grid.Grid): 1291 class attack_grid(wx.grid.Grid):
1450 """grid for attacks""" 1292 """grid for attacks"""
1451 def __init__(self, parent, handler): 1293 def __init__(self, parent, handler):
1452 pname = handler.xml.set("name", 'Melee') 1294 pname = handler.xml.set("name", 'Melee')
1455 self.handler = handler 1297 self.handler = handler
1456 self.rows = (self.handler.melee,self.handler.ranged) 1298 self.rows = (self.handler.melee,self.handler.ranged)
1457 self.CreateGrid(2,10) 1299 self.CreateGrid(2,10)
1458 self.SetRowLabelSize(0) 1300 self.SetRowLabelSize(0)
1459 col_names = ['Type','base','base 2','base 3','base 4','base 5','base 6','abil','misc','Total'] 1301 col_names = ['Type','base','base 2','base 3','base 4','base 5','base 6','abil','misc','Total']
1460 for i in range(len(col_names)): 1302 for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
1461 self.SetColLabelValue(i,col_names[i])
1462 self.SetCellValue(0,0,"Melee") 1303 self.SetCellValue(0,0,"Melee")
1463 self.SetCellValue(1,0,"Ranged") 1304 self.SetCellValue(1,0,"Ranged")
1464 self.refresh_data() 1305 self.refresh_data()
1465 self.Bind(wx.EVT_SIZE, self.on_size) 1306 self.Bind(wx.EVT_SIZE, self.on_size)
1466 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) 1307 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
1469 row = evt.GetRow() 1310 row = evt.GetRow()
1470 col = evt.GetCol() 1311 col = evt.GetCol()
1471 value = self.GetCellValue(row,col) 1312 value = self.GetCellValue(row,col)
1472 try: 1313 try:
1473 int(value) 1314 int(value)
1474 if col==1: 1315 if col== 1: self.rows[row].set('base',value)
1475 self.rows[row].set('base',value) 1316 elif col== 2: self.rows[row].set('second',value)
1476 elif col==2: 1317 elif col== 3: self.rows[row].set('third',value)
1477 self.rows[row].set('second',value) 1318 elif col== 4: self.rows[row].set('forth',value)
1478 elif col==3: 1319 elif col== 5: self.rows[row].set('fifth',value)
1479 self.rows[row].set('third',value) 1320 elif col== 6: self.rows[row].set('sixth',value)
1480 elif col==4: 1321 elif col== 8: self.rows[row].set('misc',value)
1481 self.rows[row].set('forth',value)
1482 elif col==5:
1483 self.rows[row].set('fifth',value)
1484 elif col==6:
1485 self.rows[row].set('sixth',value)
1486 elif col==8:
1487 self.rows[row].set('misc',value)
1488 self.parent.refresh_data() 1322 self.parent.refresh_data()
1489 except: 1323 except: self.SetCellValue(row,col,"0")
1490 self.SetCellValue(row,col,"0")
1491 1324
1492 def refresh_data(self): 1325 def refresh_data(self):
1493 melee = self.handler.get_attack_data('m') 1326 melee = self.handler.get_attack_data('m')
1494 ranged = self.handler.get_attack_data('r') 1327 ranged = self.handler.get_attack_data('r')
1495 for i in range(0,7): 1328 for i in range(0,7):
1502 self.SetReadOnly(0,7) 1335 self.SetReadOnly(0,7)
1503 self.SetReadOnly(1,7) 1336 self.SetReadOnly(1,7)
1504 self.SetReadOnly(0,9) 1337 self.SetReadOnly(0,9)
1505 self.SetReadOnly(1,9) 1338 self.SetReadOnly(1,9)
1506 1339
1507
1508 def on_size(self,evt): 1340 def on_size(self,evt):
1509 (w,h) = self.GetClientSizeTuple() 1341 (w,h) = self.GetClientSizeTuple()
1510 cols = self.GetNumberCols() 1342 cols = self.GetNumberCols()
1511 col_w = w/(cols+1) 1343 col_w = w/(cols+1)
1512 self.SetColSize(0,col_w*2) 1344 self.SetColSize(0,col_w*2)
1513 for i in range(1,cols): 1345 for i in range(1,cols): self.SetColSize(i,col_w)
1514 self.SetColSize(i,col_w)
1515 evt.Skip() 1346 evt.Skip()
1516 self.Refresh() 1347 self.Refresh()
1517 1348
1518 class weapon_panel(wx.Panel): 1349 class weapon_panel(wx.Panel):
1519 def __init__(self, parent, handler): 1350 def __init__(self, parent, handler):
1537 self.xml = handler.xml 1368 self.xml = handler.xml
1538 self.handler = handler 1369 self.handler = handler
1539 self.grid.CreateGrid(len(n_list),9,1) 1370 self.grid.CreateGrid(len(n_list),9,1)
1540 self.grid.SetRowLabelSize(0) 1371 self.grid.SetRowLabelSize(0)
1541 col_names = ['Name','damage','mod','critical','type','weight','range','size','Total'] 1372 col_names = ['Name','damage','mod','critical','type','weight','range','size','Total']
1542 for i in range(len(col_names)): 1373 for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
1543 self.grid.SetColLabelValue(i,col_names[i])
1544 self.refresh_data() 1374 self.refresh_data()
1545 self.temp_dom = None 1375 self.temp_dom = None
1546 1376
1547 def on_cell_change(self,evt): 1377 def on_cell_change(self,evt):
1548 row = evt.GetRow() 1378 row = evt.GetRow()
1549 col = evt.GetCol() 1379 col = evt.GetCol()
1550 value = self.grid.GetCellValue(row,col) 1380 value = self.grid.GetCellValue(row,col)
1551 if col == 0: 1381 if col == 0: self.n_list[row].set('name',value)
1552 self.n_list[row].set('name',value)
1553 elif col == 2: 1382 elif col == 2:
1554 try: 1383 try:
1555 int(value) 1384 int(value)
1556 self.n_list[row].set('mod',value) 1385 self.n_list[row].set('mod',value)
1557 self.refresh_row(row) 1386 self.refresh_row(row)
1558 except: 1387 except: self.grid.SetCellValue(row,col,"1")
1559 self.grid.SetCellValue(row,col,"1") 1388 else: self.n_list[row].set(self.grid.GetColLabelValue(col),value)
1560 else:
1561 self.n_list[row].set(self.grid.GetColLabelValue(col),value)
1562 1389
1563 def refresh_row(self,i): 1390 def refresh_row(self,i):
1564 n = self.n_list[i] 1391 n = self.n_list[i]
1565 name = n.get('name') 1392 name = n.get('name')
1566 mod = n.get('mod') 1393 mod = n.get('mod')
1610 self.sizer.SetDimension(0,s[1]-25,s[0],25) 1437 self.sizer.SetDimension(0,s[1]-25,s[0],25)
1611 (w,h) = self.grid.GetClientSizeTuple() 1438 (w,h) = self.grid.GetClientSizeTuple()
1612 cols = self.grid.GetNumberCols() 1439 cols = self.grid.GetNumberCols()
1613 col_w = w/(cols+1) 1440 col_w = w/(cols+1)
1614 self.grid.SetColSize(0,col_w*2) 1441 self.grid.SetColSize(0,col_w*2)
1615 for i in range(1,cols): 1442 for i in range(1,cols): self.grid.SetColSize(i,col_w)
1616 self.grid.SetColSize(i,col_w)
1617 1443
1618 def refresh_data(self): 1444 def refresh_data(self):
1619 for i in range(len(self.n_list)): 1445 for i in range(len(self.n_list)): self.refresh_row(i)
1620 self.refresh_row(i)
1621 1446
1622 1447
1623 class attack_panel(wx.Panel): 1448 class attack_panel(wx.Panel):
1624 def __init__(self, parent, handler): 1449 def __init__(self, parent, handler):
1625 pname = handler.xml.set("name", 'Melee') 1450 pname = handler.xml.set("name", 'Melee')
1626 wx.Panel.__init__(self, parent, -1) 1451 wx.Panel.__init__(self, parent, -1)
1627
1628 self.a_grid = attack_grid(self, handler) 1452 self.a_grid = attack_grid(self, handler)
1629 self.w_panel = weapon_panel(self, handler) 1453 self.w_panel = weapon_panel(self, handler)
1630 self.sizer = wx.BoxSizer(wx.VERTICAL) 1454 self.sizer = wx.BoxSizer(wx.VERTICAL)
1631 self.sizer.Add(self.a_grid, 1, wx.EXPAND) 1455 self.sizer.Add(self.a_grid, 1, wx.EXPAND)
1632 self.sizer.Add(self.w_panel, 2, wx.EXPAND) 1456 self.sizer.Add(self.w_panel, 2, wx.EXPAND)
1663 n_list = handler.xml.getchildren() 1487 n_list = handler.xml.getchildren()
1664 self.n_list = n_list 1488 self.n_list = n_list
1665 col_names = ['Armor','DR','Max Dex','Check Penalty','Weight','Speed (10)','Speed (6)','type'] 1489 col_names = ['Armor','DR','Max Dex','Check Penalty','Weight','Speed (10)','Speed (6)','type']
1666 self.grid.CreateGrid(len(n_list),len(col_names),1) 1490 self.grid.CreateGrid(len(n_list),len(col_names),1)
1667 self.grid.SetRowLabelSize(0) 1491 self.grid.SetRowLabelSize(0)
1668 for i in range(len(col_names)): 1492 for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
1669 self.grid.SetColLabelValue(i,col_names[i])
1670 self.atts =['name','bonus','maxdex','checkpenalty','weight','speed','speed6','type'] 1493 self.atts =['name','bonus','maxdex','checkpenalty','weight','speed','speed6','type']
1671 for i in range(len(n_list)): 1494 for i in range(len(n_list)): self.refresh_row(i)
1672 self.refresh_row(i)
1673 self.temp_dom = None 1495 self.temp_dom = None
1674 1496
1675 1497
1676 def on_cell_change(self,evt): 1498 def on_cell_change(self,evt):
1677 row = evt.GetRow() 1499 row = evt.GetRow()
1679 value = self.grid.GetCellValue(row,col) 1501 value = self.grid.GetCellValue(row,col)
1680 if col >= 1 and col <= 5: 1502 if col >= 1 and col <= 5:
1681 try: 1503 try:
1682 int(value) 1504 int(value)
1683 self.n_list[row].set(self.atts[col],value) 1505 self.n_list[row].set(self.atts[col],value)
1684 except: 1506 except: self.grid.SetCellValue(row,col,"0")
1685 self.grid.SetCellValue(row,col,"0") 1507 else: self.n_list[row].set(self.atts[col],value)
1686 else:
1687 self.n_list[row].set(self.atts[col],value)
1688 1508
1689 def refresh_row(self,i): 1509 def refresh_row(self,i):
1690 n = self.n_list[i] 1510 n = self.n_list[i]
1691 for y in range(len(self.atts)): 1511 for y in range(len(self.atts)): self.grid.SetCellValue(i,y,n.get(self.atts[y]))
1692 self.grid.SetCellValue(i,y,n.get(self.atts[y]))
1693 1512
1694 def on_remove(self,evt): 1513 def on_remove(self,evt):
1695 rows = self.grid.GetNumberRows() 1514 rows = self.grid.GetNumberRows()
1696 for i in range(rows): 1515 for i in range(rows):
1697 if self.grid.IsInSelection(i,0): 1516 if self.grid.IsInSelection(i,0):
1702 if not self.temp_dom: 1521 if not self.temp_dom:
1703 tree = parse(dir_struct["SWd20"]+"d20armor.xml") 1522 tree = parse(dir_struct["SWd20"]+"d20armor.xml")
1704 self.temp_dom = tree.getroot() 1523 self.temp_dom = tree.getroot()
1705 f_list = self.temp_dom.findall('armor') 1524 f_list = self.temp_dom.findall('armor')
1706 opts = [] 1525 opts = []
1707 for f in f_list: 1526 for f in f_list: opts.append(f.get('name'))
1708 opts.append(f.get('name'))
1709 dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts) 1527 dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts)
1710 if dlg.ShowModal() == wx.ID_OK: 1528 if dlg.ShowModal() == wx.ID_OK:
1711 i = dlg.GetSelection() 1529 i = dlg.GetSelection()
1712 new_node = self.xml.append(f_list[i]) 1530 new_node = self.xml.append(f_list[i])
1713 self.grid.AppendRows(1) 1531 self.grid.AppendRows(1)
1720 self.sizer.SetDimension(0,s[1]-25,s[0],25) 1538 self.sizer.SetDimension(0,s[1]-25,s[0],25)
1721 (w,h) = self.grid.GetClientSizeTuple() 1539 (w,h) = self.grid.GetClientSizeTuple()
1722 cols = self.grid.GetNumberCols() 1540 cols = self.grid.GetNumberCols()
1723 col_w = w/(cols+2) 1541 col_w = w/(cols+2)
1724 self.grid.SetColSize(0,col_w*3) 1542 self.grid.SetColSize(0,col_w*3)
1725 for i in range(1,cols): 1543 for i in range(1,cols): self.grid.SetColSize(i,col_w)
1726 self.grid.SetColSize(i,col_w)
1727 1544
1728 1545
1729 class class_panel(wx.Panel): 1546 class class_panel(wx.Panel):
1730 def __init__(self, parent, handler): 1547 def __init__(self, parent, handler):
1731 pname = handler.xml.set("name", 'Class') 1548 pname = handler.xml.set("name", 'Class')
1749 self.xml = handler.xml 1566 self.xml = handler.xml
1750 self.grid.CreateGrid(len(n_list),2,1) 1567 self.grid.CreateGrid(len(n_list),2,1)
1751 self.grid.SetRowLabelSize(0) 1568 self.grid.SetRowLabelSize(0)
1752 self.grid.SetColLabelValue(0,"Class") 1569 self.grid.SetColLabelValue(0,"Class")
1753 self.grid.SetColLabelValue(1,"Level") 1570 self.grid.SetColLabelValue(1,"Level")
1754 for i in range(len(n_list)): 1571 for i in range(len(n_list)): self.refresh_row(i)
1755 self.refresh_row(i)
1756 self.temp_dom = None 1572 self.temp_dom = None
1757 1573
1758 def on_cell_change(self,evt): 1574 def on_cell_change(self,evt):
1759 row = evt.GetRow() 1575 row = evt.GetRow()
1760 col = evt.GetCol() 1576 col = evt.GetCol()
1761 value = self.grid.GetCellValue(row,col) 1577 value = self.grid.GetCellValue(row,col)
1762 try: 1578 try:
1763 int(value) 1579 int(value)
1764 self.n_list[row].set('level',value) 1580 self.n_list[row].set('level',value)
1765 except: 1581 except: self.grid.SetCellValue(row,col,"1")
1766 self.grid.SetCellValue(row,col,"1")
1767 1582
1768 1583
1769 def refresh_row(self,i): 1584 def refresh_row(self,i):
1770 n = self.n_list[i] 1585 n = self.n_list[i]
1771 name = n.get('name') 1586 name = n.get('name')
1772 level = n.get('level') 1587 level = n.get('level')
1773 self.grid.SetCellValue(i,0,name) 1588 self.grid.SetCellValue(i,0,name)
1774 self.grid.SetReadOnly(i,0) 1589 self.grid.SetReadOnly(i,0)
1775 self.grid.SetCellValue(i,1,level) 1590 self.grid.SetCellValue(i,1,level)
1776 #self.grid.SetReadOnly(i,1)
1777 1591
1778 def on_remove(self,evt): 1592 def on_remove(self,evt):
1779 rows = self.grid.GetNumberRows() 1593 rows = self.grid.GetNumberRows()
1780 for i in range(rows): 1594 for i in range(rows):
1781 if self.grid.IsInSelection(i,0): 1595 if self.grid.IsInSelection(i,0):
1786 if not self.temp_dom: 1600 if not self.temp_dom:
1787 tree = parse(dir_struct["SWd20"]+"SWd20classes.xml") 1601 tree = parse(dir_struct["SWd20"]+"SWd20classes.xml")
1788 self.temp_dom = tree.getroot() 1602 self.temp_dom = tree.getroot()
1789 f_list = self.temp_dom.findall('class') 1603 f_list = self.temp_dom.findall('class')
1790 opts = [] 1604 opts = []
1791 for f in f_list: 1605 for f in f_list: opts.append(f.get('name'))
1792 opts.append(f.get('name'))
1793 dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts) 1606 dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts)
1794 if dlg.ShowModal() == wx.ID_OK: 1607 if dlg.ShowModal() == wx.ID_OK:
1795 i = dlg.GetSelection() 1608 i = dlg.GetSelection()
1796 new_node = self.xml.append(f_list[i]) 1609 new_node = self.xml.append(f_list[i])
1797 self.grid.AppendRows(1) 1610 self.grid.AppendRows(1)
1804 self.grid.SetDimensions(0,0,s[0],s[1]-25) 1617 self.grid.SetDimensions(0,0,s[0],s[1]-25)
1805 self.sizer.SetDimension(0,s[1]-25,s[0],25) 1618 self.sizer.SetDimension(0,s[1]-25,s[0],25)
1806 (w,h) = self.grid.GetClientSizeTuple() 1619 (w,h) = self.grid.GetClientSizeTuple()
1807 cols = self.grid.GetNumberCols() 1620 cols = self.grid.GetNumberCols()
1808 col_w = w/(cols) 1621 col_w = w/(cols)
1809 for i in range(0,cols): 1622 for i in range(0,cols): self.grid.SetColSize(i,col_w)
1810 self.grid.SetColSize(i,col_w) 1623