Mercurial > traipse_dev
comparison orpg/gametree/nodehandlers/StarWarsd20.py @ 151:06f10429eedc alpha
Traipse Alpha '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 (Cleaning up for 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:15:49 -0600 |
parents | 8827271fbe1b |
children | dcae32e219f1 |
comparison
equal
deleted
inserted
replaced
149:c2caca988a11 | 151:06f10429eedc |
---|---|
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 |