Mercurial > traipse
comparison orpg/gametree/nodehandlers/StarWarsd20.py @ 28:ff154cf3350c ornery-orc
Traipse 'OpenRPG' {100203-00}
Traipse is a distribution of OpenRPG that is designed to be easy to
setup and go. Traipse also makes it easy for developers to work on code
without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy'
and adds fixes to the code. 'Ornery-Orc's main goal is to offer more
advanced features and enhance the productivity of the user.
Update Summary (Stable)
New Features:
New Bookmarks Feature
New 'boot' command to remote admin
New confirmation window for sent nodes
Miniatures Layer pop up box allows users to turn off Mini labels, from
FlexiRPG
New Zoom Mouse plugin added
New Images added to Plugin UI
Switching to Element Tree
New Map efficiency, from FlexiRPG
New Status Bar to Update Manager
New TrueDebug Class in orpg_log (See documentation for usage)
New Portable Mercurial
New Tip of the Day, from Core and community
New Reference Syntax added for custom PC sheets
New Child Reference for gametree
New Parent Reference for gametree
New Gametree Recursion method, mapping, context sensitivity, and
effeciency..
New Features node with bonus nodes and Node Referencing help added
New Dieroller structure from Core
New DieRoller portability for odd Dice
New 7th Sea die roller; ie [7k3] = [7d10.takeHighest(3).open(10)]
New 'Mythos' System die roller added
New vs. die roller method for WoD; ie [3v3] = [3d10.vs(3)]. Included for
Mythos roller also
New Warhammer FRPG Die Roller (Special thanks to Puu-san for the
support)
New EZ_Tree Reference system. Push a button, Traipse the tree, get a
reference (Beta!)
New Grids act more like Spreadsheets in Use mode, with Auto Calc
Fixes:
Fix to allow for portability to an OpenSUSE linux OS
Fix to mplay_client for Fedora and OpenSUSE
Fix to Text based Server
Fix to Remote Admin Commands
Fix to Pretty Print, from Core
Fix to Splitter Nodes not being created
Fix to massive amounts of images loading, from Core
Fix to Map from gametree not showing to all clients
Fix to gametree about menus
Fix to Password Manager check on startup
Fix to PC Sheets from tool nodes. They now use the tabber_panel
Fix to Whiteboard ID to prevent random line or text deleting.
Fixes to Server, Remote Server, and Server GUI
Fix to Update Manager; cleaner clode for saved repositories
Fixes made to Settings Panel and now reactive settings when Ok is
pressed
Fixes to Alternity roller's attack roll. Uses a simple Tuple instead of
a Splice
Fix to Use panel of Forms and Tabbers. Now longer enters design mode
Fix made Image Fetching. New fetching image and new failed image
Fix to whiteboard ID's to prevent non updated clients from ruining the
fix.
default_manifest.xml renamed to default_upmana.xml
author | sirebral |
---|---|
date | Wed, 03 Feb 2010 22:16:49 -0600 |
parents | 97265586402b |
children |
comparison
equal
deleted
inserted
replaced
27:51428d30c59e | 28:ff154cf3350c |
---|---|
19 # | 19 # |
20 # File: StarWarsd20.py | 20 # File: StarWarsd20.py |
21 # Author: Chris Davis; Mark Twombley | 21 # Author: Chris Davis; Mark Twombley |
22 # Maintainer: Mark Twombley | 22 # Maintainer: Mark Twombley |
23 # Version: | 23 # Version: |
24 # $Id: StarWarsd20.py,v 1.18 2006/11/15 12:11:23 digitalxero Exp $ | 24 # $Id: StarWarsd20.py,v Traipse 'Ornery-Orc' prof.ebral Exp $ |
25 # | 25 # |
26 # Description: The file contains code for the StarWarsd20 nodehanlers | 26 # Description: The file contains code for the StarWarsd20 nodehanlers |
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 Traipse 'Ornery-Orc' prof.ebral Exp $" |
30 | 30 |
31 from core import * | 31 from core import * |
32 from containers import * | |
33 from orpg.tools.orpg_log import debug | |
34 from xml.etree.ElementTree import parse | |
32 | 35 |
33 SWD20_EXPORT = wx.NewId() | 36 SWD20_EXPORT = wx.NewId() |
34 ############################ | 37 ############################ |
35 ## StarWarsd20 character node handler | 38 ## StarWarsd20 character node handler |
36 ############################ | 39 ############################ |
42 def __init__(self,xml_dom,tree_node): | 45 def __init__(self,xml_dom,tree_node): |
43 node_handler.__init__(self,xml_dom,tree_node) | 46 node_handler.__init__(self,xml_dom,tree_node) |
44 self.load_children() | 47 self.load_children() |
45 | 48 |
46 def load_children(self): | 49 def load_children(self): |
47 children = self.master_dom._get_childNodes() | 50 children = self.xml.getchildren() |
48 for c in children: | 51 for c in children: |
49 self.tree.load_xml(c,self.mytree_node) | 52 self.tree.load_xml(c,self.mytree_node) |
50 | |
51 | 53 |
52 def on_drop(self,evt): | 54 def on_drop(self,evt): |
53 drag_obj = self.tree.drag_obj | 55 drag_obj = self.tree.drag_obj |
54 #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): |
55 # return | 57 # return |
56 if drag_obj == self: | 58 if drag_obj == self: |
57 return | 59 return |
58 opt = wx.MessageBox("Add node as child?","Container Node",wx.YES_NO|wx.CANCEL) | 60 opt = wx.MessageBox("Add node as child?","Container Node",wx.YES_NO|wx.CANCEL) |
59 if opt == wx.YES: | 61 if opt == wx.YES: |
60 xml_dom = self.tree.drag_obj.delete() | 62 xml_dom = self.tree.drag_obj.delete() |
61 xml_dom = self.master_dom.insertBefore(xml_dom,None) | 63 xml_dom = self.xml.insertBefore(xml_dom,None) |
62 self.tree.load_xml(xml_dom, self.mytree_node) | 64 self.tree.load_xml(xml_dom, self.mytree_node) |
63 self.tree.Expand(self.mytree_node) | 65 self.tree.Expand(self.mytree_node) |
64 elif opt == wx.NO: | 66 elif opt == wx.NO: |
65 node_handler.on_drop(self,evt) | 67 node_handler.on_drop(self,evt) |
66 | 68 |
67 def tohtml(self): | 69 def tohtml(self): |
68 cookie = 0 | 70 cookie = 0 |
69 html_str = "<table border=\"1\" ><tr><td>" | 71 html_str = "<table border=\"1\" ><tr><td>" |
70 html_str += "<b>"+self.master_dom.getAttribute("name") + "</b>" | 72 html_str += "<b>"+self.xml.get("name") + "</b>" |
71 html_str += "</td></tr>\n" | 73 html_str += "</td></tr>\n" |
72 html_str += "<tr><td>" | 74 html_str += "<tr><td>" |
73 max = tree.GetChildrenCount(handler.mytree_node) | 75 max = tree.GetChildrenCount(handler.mytree_node) |
74 try: | 76 try: (child,cookie)=self.tree.GetFirstChild(self.mytree_node,cookie) |
75 (child,cookie)=self.tree.GetFirstChild(self.mytree_node,cookie) | 77 except: (child,cookie)=self.tree.GetFirstChild(self.mytree_node) |
76 except: # If this happens we probably have a newer version of wxPython | |
77 (child,cookie)=self.tree.GetFirstChild(self.mytree_node) | |
78 obj = self.tree.GetPyData(child) | 78 obj = self.tree.GetPyData(child) |
79 for m in xrange(max): | 79 for m in xrange(max): |
80 html_str += "<p>" + obj.tohtml() | 80 html_str += "<p>" + obj.tohtml() |
81 if m < max-1: | 81 if m < max-1: |
82 child = self.tree.GetNextSibling(child) | 82 child = self.tree.GetNextSibling(child) |
88 return 1 | 88 return 1 |
89 | 89 |
90 def get_char_name( self ): | 90 def get_char_name( self ): |
91 return self.child_handlers['general'].get_char_name() | 91 return self.child_handlers['general'].get_char_name() |
92 | 92 |
93 ## def set_char_pp(self,attr,evl): | |
94 ## return self.child_handlers['pp'].set_char_pp(attr,evl) | |
95 ## | |
96 ## def get_char_pp( self, attr ): | |
97 ## return self.child_handlers['pp'].get_char_pp(attr) | |
98 ## | |
99 def get_char_lvl( self, attr ): | 93 def get_char_lvl( self, attr ): |
100 return self.child_handlers['classes'].get_char_lvl(attr) | 94 return self.child_handlers['classes'].get_char_lvl(attr) |
101 | |
102 | 95 |
103 | 96 |
104 class SWd20char_handler(node_handler): | 97 class SWd20char_handler(node_handler): |
105 """ Node handler for a SWd20 charactor | 98 """ Node handler for a SWd20 charactor |
106 <nodehandler name='?' module='StarWarsd20' class='SWd20char_handler' /> | 99 <nodehandler name='?' module='StarWarsd20' class='SWd20char_handler' /> |
125 | 118 |
126 | 119 |
127 def on_version(self,old_version): | 120 def on_version(self,old_version): |
128 node_handler.on_version(self,old_version) | 121 node_handler.on_version(self,old_version) |
129 if old_version == "": | 122 if old_version == "": |
130 tmp = open(dir_struct["nodes"]+"StarWars_d20character.xml","r") | 123 tree = parse(dir_struct["nodes"]+"StarWars_d20character.xml") |
131 xml_dom = parseXml_with_dlg(self.tree,tmp.read()) | 124 xml_dom = tree.getroot() |
132 xml_dom = xml_dom._get_firstChild() | |
133 tmp.close() | |
134 ## add new nodes | 125 ## add new nodes |
135 for tag in ("howtouse","inventory","powers","divine","pp"): | 126 for tag in ("howtouse","inventory","powers","divine","pp"): |
136 node_list = xml_dom.getElementsByTagName(tag) | 127 node_list = xml_dom.findall(tag) |
137 self.master_dom.appendChild(node_list[0]) | 128 self.xml.append(node_list[0]) |
138 | 129 |
139 ## add new atts | 130 ## add new atts |
140 melee_attack = self.master_dom.getElementsByTagName('melee')[0] | 131 melee_attack = self.xml.findall('melee')[0] |
141 melee_attack.setAttribute("second","0") | 132 melee_attack.set("second","0") |
142 melee_attack.setAttribute("third","0") | 133 melee_attack.set("third","0") |
143 melee_attack.setAttribute("forth","0") | 134 melee_attack.set("forth","0") |
144 melee_attack.setAttribute("fifth","0") | 135 melee_attack.set("fifth","0") |
145 melee_attack.setAttribute("sixth","0") | 136 melee_attack.set("sixth","0") |
146 range_attack = self.master_dom.getElementsByTagName('ranged')[0] | 137 range_attack = self.xml.findall('ranged')[0] |
147 range_attack.setAttribute("second","0") | 138 range_attack.set("second","0") |
148 range_attack.setAttribute("third","0") | 139 range_attack.set("third","0") |
149 range_attack.setAttribute("forth","0") | 140 range_attack.set("forth","0") |
150 range_attack.setAttribute("fifth","0") | 141 range_attack.set("fifth","0") |
151 range_attack.setAttribute("sixth","0") | 142 range_attack.set("sixth","0") |
152 | 143 gen_list = self.xml.findall('general')[0] |
153 gen_list = self.master_dom.getElementsByTagName('general')[0] | |
154 | 144 |
155 for tag in ("currentxp","xptolevel"): | 145 for tag in ("currentxp","xptolevel"): |
156 node_list = xml_dom.getElementsByTagName(tag) | 146 node_list = xml_dom.findall(tag) |
157 gen_list.appendChild(node_list[0]) | 147 gen_list.append(node_list[0]) |
158 ## temp fix | |
159 #parent = self.master_dom._get_parentNode() | |
160 #old_dom = parent.replaceChild(xml_dom,self.master_dom) | |
161 #self.master_dom = 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 | 153 |
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 | |
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 |
178 def new_child_handler(self,tag,text,handler_class,icon='gear'): | 158 def new_child_handler(self,tag,text,handler_class,icon='gear'): |
179 node_list = self.master_dom.getElementsByTagName(tag) | 159 node_list = self.xml.findall(tag) |
180 tree = self.tree | 160 tree = self.tree |
181 i = self.tree.icons[icon] | 161 i = self.tree.icons[icon] |
182 new_tree_node = tree.AppendItem(self.mytree_node,text,i,i) | 162 new_tree_node = tree.AppendItem(self.mytree_node,text,i,i) |
183 handler = handler_class(node_list[0],new_tree_node,self) | 163 handler = handler_class(node_list[0],new_tree_node,self) |
184 tree.SetPyData(new_tree_node,handler) | 164 tree.SetPyData(new_tree_node,handler) |
188 return tabbed_panel(parent,self,1) | 168 return tabbed_panel(parent,self,1) |
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 | |
194 | 173 |
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: | 230 name = obj.xml.get("name") |
259 panel = obj.get_use_panel(self) | 231 if panel: self.AddPage(panel,name) |
260 name = obj.master_dom.getAttribute("name") | |
261 | |
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 """ |
290 def __init__(self, xml_dom, tree_node, parent): | 252 def __init__(self, xml_dom, tree_node, parent): |
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 | 258 |
297 | 259 def on_drop(self, evt): |
298 def on_drop(self,evt): | |
299 pass | 260 pass |
300 | 261 |
301 def on_rclick(self,evt): | 262 def on_rclick(self, evt): |
302 pass | 263 pass |
303 | 264 |
304 def on_ldclick(self,evt): #Function needs help. Needs an OnClose I think. | 265 def on_ldclick(self, evt): |
305 if self.myeditor == None or self.myeditor.destroyed: | 266 return |
306 title = self.master_dom.getAttribute('name') + " Editor" | 267 |
307 # Frame created in correctly. | 268 def on_html(self, evt): |
308 self.myeditor = wx.Frame(self.frame,title,dir_struct["icon"]+'grid.ico') | |
309 wnd = self.get_design_panel(self.myeditor) | |
310 self.myeditor.panel = wnd | |
311 self.wnd = wnd | |
312 self.myeditor.Show(1) | |
313 else: | |
314 self.myeditor.Raise() | |
315 | |
316 def on_html(self,evt): | |
317 html_str = self.tohtml() | 269 html_str = self.tohtml() |
318 wnd = http_html_window(self.frame.note,-1) | 270 wnd = http_html_window(self.frame.note,-1) |
319 wnd.title = self.master_dom.getAttribute('name') | 271 wnd.title = self.xml.get('name') |
320 self.frame.add_panel(wnd) | 272 self.frame.add_panel(wnd) |
321 wnd.SetPage(html_str) | 273 wnd.SetPage(html_str) |
322 | 274 |
323 def get_design_panel(self,parent): | 275 def get_design_panel(self, parent): |
324 pass | 276 pass |
325 | 277 |
326 def get_use_panel(self,parent): | 278 def get_use_panel(self, parent): |
327 return self.get_design_panel(parent) | 279 return self.get_design_panel(parent) |
328 | 280 |
329 def delete(self): | 281 def delete(self): |
330 pass | 282 pass |
331 | 283 |
336 """ | 288 """ |
337 def __init__(self, xml_dom, tree_node, parent): | 289 def __init__(self, xml_dom, tree_node, parent): |
338 SWd20_char_child.__init__(self, xml_dom, tree_node, parent) | 290 SWd20_char_child.__init__(self, xml_dom, tree_node, parent) |
339 tree = self.tree | 291 tree = self.tree |
340 icons = self.tree.icons | 292 icons = self.tree.icons |
341 node_list = self.master_dom.getElementsByTagName('skill') | 293 node_list = self.xml.findall('skill') |
342 self.skills={} | 294 self.skills={} |
343 for n in node_list: | 295 for n in node_list: |
344 name = n.getAttribute('name') | 296 name = n.get('name') |
345 self.skills[name] = n | 297 self.skills[name] = n |
346 new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear']) | 298 new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear']) |
347 tree.SetPyData(new_tree_node,self) | 299 tree.SetPyData(new_tree_node,self) |
348 | 300 |
349 def get_mod(self,name): | 301 def get_mod(self,name): |
350 skill = self.skills[name] | 302 skill = self.skills[name] |
351 stat = skill.getAttribute('stat') | 303 stat = skill.get('stat') |
352 ac = int(skill.getAttribute('armorcheck')) | 304 ac = int(skill.get('armorcheck')) |
353 if ac: | 305 if ac: |
354 ac = self.char_hander.child_handlers['ac'].get_check_pen() | 306 ac = self.char_hander.child_handlers['ac'].get_check_pen() |
355 stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat) | 307 stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat) |
356 rank = int(skill.getAttribute('rank')) | 308 rank = int(skill.get('rank')) |
357 misc = int(skill.getAttribute('misc')) | 309 misc = int(skill.get('misc')) |
358 total = stat_mod + rank + misc + ac | 310 total = stat_mod + rank + misc + ac |
359 return total | 311 return total |
360 | 312 |
361 def on_rclick(self,evt): | 313 def on_rclick(self,evt): |
362 #updated with code for untrained use check | 314 #updated with code for untrained use check |
363 item = self.tree.GetSelection() | 315 item = self.tree.GetSelection() |
364 name = self.tree.GetItemText(item) | 316 name = self.tree.GetItemText(item) |
365 skill = self.skills[name] | 317 skill = self.skills[name] |
366 rank = int(skill.getAttribute('rank')) | 318 rank = int(skill.get('rank')) |
367 untrained = int(skill.getAttribute('untrained')) | 319 untrained = int(skill.get('untrained')) |
368 chat = self.chat | 320 chat = self.chat |
369 if item == self.mytree_node: | 321 if item == self.mytree_node: |
370 SWd20_char_child.on_ldclick(self,evt) | 322 SWd20_char_child.on_ldclick(self,evt) |
371 else: | 323 else: |
372 if rank == 0 and untrained == 0: | 324 if rank == 0 and untrained == 0: chat.Post("Can't use untrained!",True,True) |
373 chat.Post('Can\'t use untrained!',True,True) | |
374 else: | 325 else: |
375 mod = self.get_mod(name) | 326 mod = self.get_mod(name) |
376 if mod >= 0: | 327 if mod >= 0: mod1 = "+" |
377 mod1 = "+" | 328 else: mod1 = "" |
378 else: | |
379 mod1 = "" | |
380 txt = '%s Skill Check: [1d20%s%s]' % (name, mod1, mod) | 329 txt = '%s Skill Check: [1d20%s%s]' % (name, mod1, mod) |
381 chat.ParsePost(txt,True,True) | 330 chat.ParsePost(txt,True,True) |
382 | 331 |
383 def get_design_panel(self,parent): | 332 def get_design_panel(self,parent): |
384 wnd = outline_panel(parent,self,skill_grid,"Skills") | 333 wnd = outline_panel(parent,self,skill_grid,"Skills") |
386 return wnd | 335 return wnd |
387 | 336 |
388 def tohtml(self): | 337 def tohtml(self): |
389 html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 ><th width='30%'>Skill</th><th>Key</th> | 338 html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 ><th width='30%'>Skill</th><th>Key</th> |
390 <th>Rank</th><th>Abil</th><th>Misc</th><th>Total</th></tr>""" | 339 <th>Rank</th><th>Abil</th><th>Misc</th><th>Total</th></tr>""" |
391 node_list = self.master_dom.getElementsByTagName('skill') | 340 node_list = self.xml.findall('skill') |
392 for n in node_list: | 341 for n in node_list: |
393 name = n.getAttribute('name') | 342 name = n.get('name') |
394 stat = n.getAttribute('stat') | 343 stat = n.get('stat') |
395 rank = n.getAttribute('rank') | 344 rank = n.get('rank') |
396 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>" |
397 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)) |
398 misc = n.getAttribute('misc') | 347 misc = n.get('misc') |
399 mod = str(self.get_mod(name)) | 348 mod = str(self.get_mod(name)) |
400 if mod >= 0: | 349 if mod >= 0: mod1 = "+" |
401 mod1 = "+" | 350 else: mod1 = "" |
402 else: | |
403 mod1 = "" | |
404 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) |
405 html_str = html_str + "</table>" | 352 html_str = html_str + "</table>" |
406 return html_str | 353 return html_str |
407 | 354 |
408 | 355 |
411 created by SWd20char_handler. | 358 created by SWd20char_handler. |
412 """ | 359 """ |
413 def __init__(self, xml_dom, tree_node, parent): | 360 def __init__(self, xml_dom, tree_node, parent): |
414 SWd20_char_child.__init__(self, xml_dom, tree_node, parent) | 361 SWd20_char_child.__init__(self, xml_dom, tree_node, parent) |
415 self.abilities = {} | 362 self.abilities = {} |
416 node_list = self.master_dom.getElementsByTagName('stat') | 363 node_list = self.xml.findall('stat') |
417 tree = self.tree | 364 tree = self.tree |
418 icons = tree.icons | 365 icons = tree.icons |
419 for n in node_list: | 366 for n in node_list: |
420 name = n.getAttribute('abbr') | 367 name = n.get('abbr') |
421 self.abilities[name] = n | 368 self.abilities[name] = n |
422 new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] ) | 369 new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] ) |
423 tree.SetPyData( new_tree_node, self ) | 370 tree.SetPyData( new_tree_node, self ) |
424 | 371 |
425 def on_rclick( self, evt ): | 372 def on_rclick( self, evt ): |
427 name = self.tree.GetItemText( item ) | 374 name = self.tree.GetItemText( item ) |
428 if item == self.mytree_node: | 375 if item == self.mytree_node: |
429 SWd20_char_child.on_ldclick( self, evt ) | 376 SWd20_char_child.on_ldclick( self, evt ) |
430 else: | 377 else: |
431 mod = self.get_mod( name ) | 378 mod = self.get_mod( name ) |
432 if mod >= 0: | 379 if mod >= 0: mod1 = "+" |
433 mod1 = "+" | 380 else: mod1 = "" |
434 else: | |
435 mod1 = "" | |
436 chat = self.chat | 381 chat = self.chat |
437 txt = '%s check: [1d20%s%s]' % ( name, mod1, mod ) | 382 txt = '%s check: [1d20%s%s]' % ( name, mod1, mod ) |
438 chat.ParsePost( txt, True, True ) | 383 chat.ParsePost( txt, True, True ) |
439 | 384 |
440 def get_mod(self,abbr): | 385 def get_mod(self,abbr): |
441 score = int(self.abilities[abbr].getAttribute('base')) | 386 score = int(self.abilities[abbr].get('base')) |
442 mod = (score - 10) / 2 | 387 mod = (score - 10) / 2 |
443 return mod | 388 return mod |
444 | 389 |
445 def set_score(self,abbr,score): | 390 def set_score(self,abbr,score): |
446 if score >= 0: | 391 if score >= 0: |
447 self.abilities[abbr].setAttribute("base",str(score)) | 392 self.abilities[abbr].set("base",str(score)) |
448 | 393 |
449 def get_design_panel(self,parent): | 394 def get_design_panel(self,parent): |
450 wnd = outline_panel(parent,self,abil_grid,"Abilities") | 395 wnd = outline_panel(parent,self,abil_grid,"Abilities") |
451 wnd.title = "Abilities (edit)" | 396 wnd.title = "Abilities (edit)" |
452 return wnd | 397 return wnd |
453 | 398 |
454 def tohtml(self): | 399 def tohtml(self): |
455 html_str = """<table border='1' width=100%><tr BGCOLOR=#E9E9E9 ><th width='50%'>Ability</th> | 400 html_str = """<table border='1' width=100%><tr BGCOLOR=#E9E9E9 ><th width='50%'>Ability</th> |
456 <th>Base</th><th>Modifier</th></tr>""" | 401 <th>Base</th><th>Modifier</th></tr>""" |
457 node_list = self.master_dom.getElementsByTagName('stat') | 402 node_list = self.xml.findall('stat') |
458 for n in node_list: | 403 for n in node_list: |
459 name = n.getAttribute('name') | 404 name = n.get('name') |
460 abbr = n.getAttribute('abbr') | 405 abbr = n.get('abbr') |
461 base = n.getAttribute('base') | 406 base = n.get('base') |
462 mod = str(self.get_mod(abbr)) | 407 mod = str(self.get_mod(abbr)) |
463 if mod >= 0: | 408 if mod >= 0: mod1 = "+" |
464 mod1 = "+" | 409 else: mod1 = "" |
465 else: | |
466 mod1 = "" | |
467 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) |
468 html_str = html_str + "</table>" | 411 html_str = html_str + "</table>" |
469 return html_str | 412 return html_str |
470 | 413 |
471 class SWd20saves(SWd20_char_child): | 414 class SWd20saves(SWd20_char_child): |
474 """ | 417 """ |
475 def __init__(self, xml_dom, tree_node, parent): | 418 def __init__(self, xml_dom, tree_node, parent): |
476 SWd20_char_child.__init__(self, xml_dom, tree_node, parent) | 419 SWd20_char_child.__init__(self, xml_dom, tree_node, parent) |
477 tree = self.tree | 420 tree = self.tree |
478 icons = self.tree.icons | 421 icons = self.tree.icons |
479 node_list = self.master_dom.getElementsByTagName('save') | 422 node_list = self.xml.findall('save') |
480 self.saves={} | 423 self.saves={} |
481 for n in node_list: | 424 for n in node_list: |
482 name = n.getAttribute('name') | 425 name = n.get('name') |
483 self.saves[name] = n | 426 self.saves[name] = n |
484 new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear']) | 427 new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear']) |
485 tree.SetPyData(new_tree_node,self) | 428 tree.SetPyData(new_tree_node,self) |
486 | 429 |
487 def get_mod(self,name): | 430 def get_mod(self,name): |
488 save = self.saves[name] | 431 save = self.saves[name] |
489 stat = save.getAttribute('stat') | 432 stat = save.get('stat') |
490 stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat) | 433 stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat) |
491 base = int(save.getAttribute('base')) | 434 base = int(save.get('base')) |
492 miscmod = int(save.getAttribute('miscmod')) | 435 miscmod = int(save.get('miscmod')) |
493 # magmod = int(save.getAttribute('magmod')) | |
494 # total = stat_mod + base + miscmod + magmod | |
495 total = stat_mod + base + miscmod | 436 total = stat_mod + base + miscmod |
496 return total | 437 return total |
497 | 438 |
498 def on_rclick(self,evt): | 439 def on_rclick(self,evt): |
499 item = self.tree.GetSelection() | 440 item = self.tree.GetSelection() |
503 #wnd = save_grid(self.frame.note,self) | 444 #wnd = save_grid(self.frame.note,self) |
504 #wnd.title = "Saves" | 445 #wnd.title = "Saves" |
505 #self.frame.add_panel(wnd) | 446 #self.frame.add_panel(wnd) |
506 else: | 447 else: |
507 mod = self.get_mod(name) | 448 mod = self.get_mod(name) |
508 if mod >= 0: | 449 if mod >= 0: mod1 = "+" |
509 mod1 = "+" | 450 else: mod1 = "" |
510 else: | |
511 mod1 = "" | |
512 chat = self.chat | 451 chat = self.chat |
513 txt = '%s save: [1d20%s%s]' % (name, mod1, mod) | 452 txt = '%s save: [1d20%s%s]' % (name, mod1, mod) |
514 chat.ParsePost( txt, True, True ) | 453 chat.ParsePost( txt, True, True ) |
515 | 454 |
516 def get_design_panel(self,parent): | 455 def get_design_panel(self,parent): |
520 | 459 |
521 def tohtml(self): | 460 def tohtml(self): |
522 html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 ><th width='30%'>Save</th> | 461 html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 ><th width='30%'>Save</th> |
523 <th>Key</th><th>Base</th><th>Abil</th><th>Magic</th> | 462 <th>Key</th><th>Base</th><th>Abil</th><th>Magic</th> |
524 <th>Misc</th><th>Total</th></tr>""" | 463 <th>Misc</th><th>Total</th></tr>""" |
525 node_list = self.master_dom.getElementsByTagName('save') | 464 node_list = self.xml.findall('save') |
526 for n in node_list: | 465 for n in node_list: |
527 name = n.getAttribute('name') | 466 name = n.get('name') |
528 stat = n.getAttribute('stat') | 467 stat = n.get('stat') |
529 base = n.getAttribute('base') | 468 base = n.get('base') |
530 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>" |
531 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)) |
532 mag = n.getAttribute('magmod') | 471 mag = n.get('magmod') |
533 misc = n.getAttribute('miscmod') | 472 misc = n.get('miscmod') |
534 mod = str(self.get_mod(name)) | 473 mod = str(self.get_mod(name)) |
535 if mod >= 0: | 474 if mod >= 0: mod1 = "+" |
536 mod1 = "+" | 475 else: mod1 = "" |
537 else: | |
538 mod1 = "" | |
539 html_str = html_str + "<td>"+stat_mod+"</td><td>"+mag+"</td>" | 476 html_str = html_str + "<td>"+stat_mod+"</td><td>"+mag+"</td>" |
540 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) |
541 html_str = html_str + "</table>" | 478 html_str = html_str + "</table>" |
542 return html_str | 479 return html_str |
543 | 480 |
553 wnd = outline_panel(parent,self,gen_grid,"General Information") | 490 wnd = outline_panel(parent,self,gen_grid,"General Information") |
554 wnd.title = "General Info" | 491 wnd.title = "General Info" |
555 return wnd | 492 return wnd |
556 | 493 |
557 def tohtml(self): | 494 def tohtml(self): |
558 n_list = self.master_dom._get_childNodes() | 495 n_list = self.xml.getchildren() |
559 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>" | 496 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>" |
560 for n in n_list: | 497 for n in n_list: |
561 t_node = component.get('xml').safe_get_text_node(n) | 498 html_str += "<B>"+n.tag.capitalize() +":</B> " |
562 html_str += "<B>"+n._get_tagName().capitalize() +":</B> " | 499 html_str += n.text + ", " |
563 html_str += t_node._get_nodeValue() + ", " | |
564 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" | 500 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" |
565 return html_str | 501 return html_str |
566 | 502 |
567 def on_name_change(self,name): | 503 def on_name_change(self,name): |
568 self.char_hander.rename(name) | 504 self.char_hander.rename(name) |
569 | 505 |
570 def get_char_name( self ): | 506 def get_char_name( self ): |
571 node = self.master_dom.getElementsByTagName( 'name' )[0] | 507 node = self.xml.findall( 'name' )[0] |
572 t_node = component.get('xml').safe_get_text_node( node ) | 508 return node.text |
573 return t_node._get_nodeValue() | |
574 | 509 |
575 | 510 |
576 class SWd20classes(SWd20_char_child): | 511 class SWd20classes(SWd20_char_child): |
577 """ Node Handler for classes. This handler will be | 512 """ Node Handler for classes. This handler will be |
578 created by SWd20char_handler. | 513 created by SWd20char_handler. |
585 wnd.title = "Classes" | 520 wnd.title = "Classes" |
586 return wnd | 521 return wnd |
587 | 522 |
588 def tohtml(self): | 523 def tohtml(self): |
589 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>" |
590 n_list = self.master_dom._get_childNodes() | 525 n_list = self.xml.getchildren() |
591 for n in n_list: | 526 for n in n_list: html_str += n.get('name') + " ("+n.get('level')+"), " |
592 html_str += n.getAttribute('name') + " ("+n.getAttribute('level')+"), " | |
593 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" | 527 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" |
594 return html_str | 528 return html_str |
595 | 529 |
596 def get_char_lvl( self, attr ): | 530 def get_char_lvl( self, attr ): |
597 node_list = self.master_dom.getElementsByTagName('class') | 531 node_list = self.xml.findall('class') |
598 for n in node_list: | 532 for n in node_list: |
599 lvl = n.getAttribute('level') | 533 lvl = n.get('level') |
600 type = n.getAttribute('name') | 534 type = n.get('name') |
601 if attr == "level": | 535 if attr == "level": return lvl |
602 return lvl | 536 elif attr == "class": return type |
603 elif attr == "class": | |
604 return type | |
605 | 537 |
606 | 538 |
607 class SWd20feats(SWd20_char_child): | 539 class SWd20feats(SWd20_char_child): |
608 """ Node Handler for classes. This handler will be | 540 """ Node Handler for classes. This handler will be |
609 created by d20char_handler. | 541 created by d20char_handler. |
616 wnd.title = "Feats" | 548 wnd.title = "Feats" |
617 return wnd | 549 return wnd |
618 | 550 |
619 def tohtml(self): | 551 def tohtml(self): |
620 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>" |
621 n_list = self.master_dom._get_childNodes() | 553 n_list = self.xml.getchildren() |
622 for n in n_list: | 554 for n in n_list: html_str += n.get('name')+ ", " |
623 html_str += n.getAttribute('name')+ ", " | |
624 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" | 555 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" |
625 return html_str | 556 return html_str |
626 | 557 |
627 class SWd20howto(SWd20_char_child): | 558 class SWd20howto(SWd20_char_child): |
628 """ Node Handler for hit points. This handler will be | 559 """ Node Handler for hit points. This handler will be |
647 wnd = outline_panel(parent,self,inventory_grid,"Inventory") | 578 wnd = outline_panel(parent,self,inventory_grid,"Inventory") |
648 wnd.title = "General Info" | 579 wnd.title = "General Info" |
649 return wnd | 580 return wnd |
650 | 581 |
651 def tohtml(self): | 582 def tohtml(self): |
652 n_list = self.master_dom._get_childNodes() | 583 n_list = self.xml.getchildren() |
653 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>" | 584 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>" |
654 for n in n_list: | 585 for n in n_list: |
655 t_node = component.get('xml').safe_get_text_node(n) | 586 html_str += "<B>"+n.tag.capitalize() +":</B> " |
656 html_str += "<B>"+n._get_tagName().capitalize() +":</B> " | 587 html_str += n.text + "<br />" |
657 html_str += t_node._get_nodeValue() + "<br />" | |
658 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" | 588 html_str = html_str[:len(html_str)-2] + "</td></tr></table>" |
659 return html_str | 589 return html_str |
660 | 590 |
661 def on_name_change(self,name): | 591 def on_name_change(self,name): |
662 self.char_hander.rename(name) | 592 self.char_hander.rename(name) |
663 | 593 |
664 def get_char_name( self ): | 594 def get_char_name( self ): |
665 node = self.master_dom.getElementsByTagName( 'name' )[0] | 595 node = self.xml.findall( 'name' )[0] |
666 t_node = component.get('xml').safe_get_text_node( node ) | 596 return node.text |
667 return t_node._get_nodeValue() | |
668 | 597 |
669 class SWd20hp(SWd20_char_child): | 598 class SWd20hp(SWd20_char_child): |
670 """ Node Handler for hit points. This handler will be | 599 """ Node Handler for hit points. This handler will be |
671 created by d20char_handler. | 600 created by d20char_handler. |
672 """ | 601 """ |
678 wnd.title = "Wound Points" | 607 wnd.title = "Wound Points" |
679 return wnd | 608 return wnd |
680 | 609 |
681 def tohtml(self): | 610 def tohtml(self): |
682 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=4>Wound Points</th></tr>" | 611 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=4>Wound Points</th></tr>" |
683 html_str += "<tr><th>Max:</th><td>"+self.master_dom.getAttribute('max')+"</td>" | 612 html_str += "<tr><th>Max:</th><td>"+self.xml.get('max')+"</td>" |
684 html_str += "<th>Current:</th><td>"+self.master_dom.getAttribute('current')+"</td>" | 613 html_str += "<th>Current:</th><td>"+self.xml.get('current')+"</td>" |
685 html_str += "</tr></table>" | 614 html_str += "</tr></table>" |
686 return html_str | 615 return html_str |
687 | 616 |
688 def get_max_hp( self ): | 617 def get_max_hp( self ): |
689 try: | 618 try: return eval( self.xml.get( 'max' ) ) |
690 return eval( self.master_dom.getAttribute( 'max' ) ) | 619 except: return 0 |
691 except: | |
692 return 0 | |
693 def get_current_hp( self ): | 620 def get_current_hp( self ): |
694 try: | 621 try: return eval( self.xml.get( 'current' ) ) |
695 return eval( self.master_dom.getAttribute( 'current' ) ) | 622 except: return 0 |
696 except: | |
697 return 0 | |
698 | 623 |
699 class SWd20vp(SWd20_char_child): | 624 class SWd20vp(SWd20_char_child): |
700 """ Node Handler for hit points. This handler will be | 625 """ Node Handler for hit points. This handler will be |
701 created by d20char_handler. | 626 created by d20char_handler. |
702 """ | 627 """ |
708 wnd.title = "Vitality Points" | 633 wnd.title = "Vitality Points" |
709 return wnd | 634 return wnd |
710 | 635 |
711 def tohtml(self): | 636 def tohtml(self): |
712 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=4>Vitality Points</th></tr>" | 637 html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=4>Vitality Points</th></tr>" |
713 html_str += "<tr><th>Max:</th><td>"+self.master_dom.getAttribute('max')+"</td>" | 638 html_str += "<tr><th>Max:</th><td>"+self.xml.get('max')+"</td>" |
714 html_str += "<th>Current:</th><td>"+self.master_dom.getAttribute('current')+"</td>" | 639 html_str += "<th>Current:</th><td>"+self.xml.get('current')+"</td>" |
715 html_str += "</tr></table>" | 640 html_str += "</tr></table>" |
716 return html_str | 641 return html_str |
717 | 642 |
718 def get_max_vp( self ): | 643 def get_max_vp( self ): |
719 try: | 644 try: return eval( self.xml.get( 'max' ) ) |
720 return eval( self.master_dom.getAttribute( 'max' ) ) | 645 except: return 0 |
721 except: | |
722 return 0 | |
723 def get_current_vp( self ): | 646 def get_current_vp( self ): |
724 try: | 647 try: return eval( self.xml.get( 'current' ) ) |
725 return eval( self.master_dom.getAttribute( 'current' ) ) | 648 except: return 0 |
726 except: | |
727 return 0 | |
728 | 649 |
729 class SWd20attacks(SWd20_char_child): | 650 class SWd20attacks(SWd20_char_child): |
730 """ Node Handler for attacks. This handler will be | 651 """ Node Handler for attacks. This handler will be |
731 created by d20char_handler. | 652 created by d20char_handler. |
732 """ | 653 """ |
733 def __init__(self,xml_dom,tree_node,parent): | 654 def __init__(self,xml_dom,tree_node,parent): |
734 SWd20_char_child.__init__(self,xml_dom,tree_node,parent) | 655 SWd20_char_child.__init__(self,xml_dom,tree_node,parent) |
735 node_list = self.master_dom.getElementsByTagName('melee') | 656 node_list = self.xml.findall('melee') |
736 self.melee = node_list[0] | 657 self.melee = node_list[0] |
737 node_list = self.master_dom.getElementsByTagName('ranged') | 658 node_list = self.xml.findall('ranged') |
738 self.ranged = node_list[0] | 659 self.ranged = node_list[0] |
739 self.refresh_weapons() | 660 self.refresh_weapons() |
740 | 661 |
741 def refresh_weapons(self): | 662 def refresh_weapons(self): |
742 self.weapons = {} | 663 self.weapons = {} |
743 tree = self.tree | 664 tree = self.tree |
744 icons = self.tree.icons | 665 icons = self.tree.icons |
745 tree.CollapseAndReset(self.mytree_node) | 666 tree.CollapseAndReset(self.mytree_node) |
746 node_list = self.master_dom.getElementsByTagName('weapon') | 667 node_list = self.xml.findall('weapon') |
747 for n in node_list: | 668 for n in node_list: |
748 name = n.getAttribute('name') | 669 name = n.get('name') |
749 new_tree_node = tree.AppendItem(self.mytree_node,name,icons['sword'],icons['sword']) | 670 new_tree_node = tree.AppendItem(self.mytree_node,name,icons['sword'],icons['sword']) |
750 tree.SetPyData(new_tree_node,self) | 671 tree.SetPyData(new_tree_node,self) |
751 self.weapons[name]=n | 672 self.weapons[name]=n |
752 | 673 |
753 def get_mod(self,type='m'): | 674 def get_mod(self,type='m'): |
759 stat_mod = self.char_hander.child_handlers['abilities'].get_mod('Str') | 680 stat_mod = self.char_hander.child_handlers['abilities'].get_mod('Str') |
760 temp = self.melee | 681 temp = self.melee |
761 else: | 682 else: |
762 stat_mod = self.char_hander.child_handlers['abilities'].get_mod('Dex') | 683 stat_mod = self.char_hander.child_handlers['abilities'].get_mod('Dex') |
763 temp = self.ranged | 684 temp = self.ranged |
764 base = int(temp.getAttribute('base')) | 685 base = int(temp.get('base')) |
765 base2 = int(temp.getAttribute('second')) | 686 base2 = int(temp.get('second')) |
766 base3 = int(temp.getAttribute('third')) | 687 base3 = int(temp.get('third')) |
767 base4 = int(temp.getAttribute('forth')) | 688 base4 = int(temp.get('forth')) |
768 base5 = int(temp.getAttribute('fifth')) | 689 base5 = int(temp.get('fifth')) |
769 base6 = int(temp.getAttribute('sixth')) | 690 base6 = int(temp.get('sixth')) |
770 misc = int(temp.getAttribute('misc')) | 691 misc = int(temp.get('misc')) |
771 return (base, base2, base3, base4, base5, base6, stat_mod ,misc) | 692 return (base, base2, base3, base4, base5, base6, stat_mod ,misc) |
772 | 693 |
773 def on_rclick(self,evt): | 694 def on_rclick(self,evt): |
774 #removed the DnD specific code | 695 #removed the DnD specific code |
775 item = self.tree.GetSelection() | 696 item = self.tree.GetSelection() |
776 name = self.tree.GetItemText(item) | 697 name = self.tree.GetItemText(item) |
777 if item == self.mytree_node: | 698 if item == self.mytree_node: |
778 SWd20_char_child.on_ldclick(self,evt) | 699 SWd20_char_child.on_ldclick(self,evt) |
779 #self.frame.add_panel(self.get_design_panel(self.frame.note)) | 700 #self.frame.add_panel(self.get_design_panel(self.frame.note)) |
780 else: | 701 else: |
781 mod = int(self.weapons[name].getAttribute('mod')) | 702 mod = int(self.weapons[name].get('mod')) |
782 if self.weapons[name].getAttribute('range') == '0': | 703 if self.weapons[name].get('range') == '0': |
783 mod = mod + self.get_mod('m') | 704 mod = mod + self.get_mod('m') |
784 if mod >= 0: | 705 if mod >= 0: mod1 = "+" |
785 mod1 = "+" | 706 else: mod1 = "" |
786 else: | |
787 mod1 = "" | |
788 else: | 707 else: |
789 mod = mod + self.get_mod('r') | 708 mod = mod + self.get_mod('r') |
790 if mod >= 0: | 709 if mod >= 0: mod1 = "+" |
791 mod1 = "+" | 710 else: mod1 = "" |
792 else: | |
793 mod1 = "" | |
794 chat = self.chat | 711 chat = self.chat |
795 dmg = self.weapons[name].getAttribute('damage') | 712 dmg = self.weapons[name].get('damage') |
796 lvl = self.get_char_lvl('level') | 713 lvl = self.get_char_lvl('level') |
797 cname = self.char_hander.get_char_name() | 714 cname = self.char_hander.get_char_name() |
798 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) |
799 chat.ParsePost( txt, True, False ) | 716 chat.ParsePost( txt, True, False ) |
800 temp = self.melee | 717 temp = self.melee |
823 html_str += "<td>"+str(ranged[0]+ranged[1]+ranged[2])+"</td>" | 740 html_str += "<td>"+str(ranged[0]+ranged[1]+ranged[2])+"</td>" |
824 html_str += "<td>"+str(ranged[0])+"</td>" | 741 html_str += "<td>"+str(ranged[0])+"</td>" |
825 html_str += "<td>"+str(ranged[1])+"</td>" | 742 html_str += "<td>"+str(ranged[1])+"</td>" |
826 html_str += "<td>"+str(ranged[2])+"</td></tr></table>" | 743 html_str += "<td>"+str(ranged[2])+"</td></tr></table>" |
827 | 744 |
828 n_list = self.master_dom.getElementsByTagName('weapon') | 745 n_list = self.xml.findall('weapon') |
829 for n in n_list: | 746 for n in n_list: |
830 mod = n.getAttribute('mod') | 747 mod = n.get('mod') |
831 if mod >= 0: | 748 if mod >= 0: mod1 = "+" |
832 mod1 = "+" | 749 else: mod1 = "" |
833 else: | 750 ran = n.get('range') |
834 mod1 = "" | |
835 ran = n.getAttribute('range') | |
836 total = str(int(mod) + self.get_mod(ran)) | 751 total = str(int(mod) + self.get_mod(ran)) |
837 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> |
838 <th>Attack</th><th >Damage</th><th>Critical</th></tr>""" | 753 <th>Attack</th><th >Damage</th><th>Critical</th></tr>""" |
839 html_str += "<tr ALIGN='center' ><td colspan=2>"+n.getAttribute('name')+"</td><td>"+total+"</td>" | 754 html_str += "<tr ALIGN='center' ><td colspan=2>"+n.get('name')+"</td><td>"+total+"</td>" |
840 html_str += "<td>"+n.getAttribute('damage')+"</td><td>"+n.getAttribute('critical')+"</td></tr>" | 755 html_str += "<td>"+n.get('damage')+"</td><td>"+n.get('critical')+"</td></tr>" |
841 html_str += """<tr BGCOLOR=#E9E9E9 ><th>Range</th><th>Weight</th> | 756 html_str += """<tr BGCOLOR=#E9E9E9 ><th>Range</th><th>Weight</th> |
842 <th>Type</th><th>Size</th><th>Misc Mod</th></tr>""" | 757 <th>Type</th><th>Size</th><th>Misc Mod</th></tr>""" |
843 html_str += "<tr ALIGN='center'><td>"+ran+"</td><td>"+n.getAttribute('weight')+"</td>" | 758 html_str += "<tr ALIGN='center'><td>"+ran+"</td><td>"+n.get('weight')+"</td>" |
844 html_str += "<td>"+n.getAttribute('type')+"</td><td>"+n.getAttribute('size')+"</td>" | 759 html_str += "<td>"+n.get('type')+"</td><td>"+n.get('size')+"</td>" |
845 html_str += '<td>%s%s</td></tr></table>' % (mod1, mod) | 760 html_str += '<td>%s%s</td></tr></table>' % (mod1, mod) |
846 return html_str | 761 return html_str |
847 | 762 |
848 class SWd20armor(SWd20_char_child): | 763 class SWd20armor(SWd20_char_child): |
849 """ Node Handler for ac. This handler will be | 764 """ Node Handler for ac. This handler will be |
861 def get_armor_class(self): | 776 def get_armor_class(self): |
862 ac_total = 10 | 777 ac_total = 10 |
863 ac_total += self.get_total('bonus') | 778 ac_total += self.get_total('bonus') |
864 dex_mod = self.char_hander.child_handlers['abilities'].get_mod('Dex') | 779 dex_mod = self.char_hander.child_handlers['abilities'].get_mod('Dex') |
865 max_dex = self.get_max_dex() | 780 max_dex = self.get_max_dex() |
866 if dex_mod < max_dex: | 781 if dex_mod < max_dex: ac_total += dex_mod |
867 ac_total += dex_mod | 782 else: ac_total += max_dex |
868 else: | |
869 ac_total += max_dex | |
870 return ac_total | 783 return ac_total |
871 | 784 |
872 def get_max_dex(self): | 785 def get_max_dex(self): |
873 armor_list = self.master_dom.getElementsByTagName('armor') | 786 armor_list = self.xml.findall('armor') |
874 dex = 10 | 787 dex = 10 |
875 for a in armor_list: | 788 for a in armor_list: |
876 temp = int(a.getAttribute("maxdex")) | 789 temp = int(a.get("maxdex")) |
877 if temp < dex: | 790 if temp < dex: dex = temp |
878 dex = temp | |
879 return dex | 791 return dex |
880 | 792 |
881 def get_total(self,attr): | 793 def get_total(self,attr): |
882 armor_list = self.master_dom.getElementsByTagName('armor') | 794 armor_list = self.xml.findall('armor') |
883 total = 0 | 795 total = 0 |
884 for a in armor_list: | 796 for a in armor_list: total += int(a.get(attr)) |
885 total += int(a.getAttribute(attr)) | |
886 return total | 797 return total |
887 | 798 |
888 def get_design_panel(self,parent): | 799 def get_design_panel(self,parent): |
889 wnd = outline_panel(parent,self,ac_panel,"Armor") | 800 wnd = outline_panel(parent,self,ac_panel,"Armor") |
890 wnd.title = "Armor" | 801 wnd.title = "Armor" |
896 html_str += "<tr ALIGN='center' ><td>"+str(self.get_armor_class())+"</td>" | 807 html_str += "<tr ALIGN='center' ><td>"+str(self.get_armor_class())+"</td>" |
897 html_str += "<td>"+str(self.get_check_pen())+"</td>" | 808 html_str += "<td>"+str(self.get_check_pen())+"</td>" |
898 html_str += "<td>"+str(self.get_spell_failure())+"</td>" | 809 html_str += "<td>"+str(self.get_spell_failure())+"</td>" |
899 html_str += "<td>"+str(self.get_max_dex())+"</td>" | 810 html_str += "<td>"+str(self.get_max_dex())+"</td>" |
900 html_str += "<td>"+str(self.get_total_weight())+"</td></tr></table>" | 811 html_str += "<td>"+str(self.get_total_weight())+"</td></tr></table>" |
901 n_list = self.master_dom._get_childNodes() | 812 n_list = self.xml.getchildren() |
902 for n in n_list: | 813 for n in n_list: |
903 html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=3>Armor</th> | 814 html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=3>Armor</th> |
904 <th>Type</th><th >Bonus</th></tr>""" | 815 <th>Type</th><th >Bonus</th></tr>""" |
905 html_str += "<tr ALIGN='center' ><td colspan=3>"+n.getAttribute('name')+"</td>" | 816 html_str += "<tr ALIGN='center' ><td colspan=3>"+n.get('name')+"</td>" |
906 html_str += "<td>"+n.getAttribute('type')+"</td>" | 817 html_str += "<td>"+n.get('type')+"</td>" |
907 html_str += "<td>"+n.getAttribute('bonus')+"</td></tr>" | 818 html_str += "<td>"+n.get('bonus')+"</td></tr>" |
908 html_str += """<tr BGCOLOR=#E9E9E9 ><th>Check Penalty</th><th>Spell Failure</th> | 819 html_str += """<tr BGCOLOR=#E9E9E9 ><th>Check Penalty</th><th>Spell Failure</th> |
909 <th>Max Dex</th><th>Speed</th><th>Weight</th></tr>""" | 820 <th>Max Dex</th><th>Speed</th><th>Weight</th></tr>""" |
910 html_str += "<tr ALIGN='center'><td>"+n.getAttribute('checkpenalty')+"</td>" | 821 html_str += "<tr ALIGN='center'><td>"+n.get('checkpenalty')+"</td>" |
911 html_str += "<td>"+n.getAttribute('maxdex')+"</td>" | 822 html_str += "<td>"+n.get('maxdex')+"</td>" |
912 html_str += "<td>"+n.getAttribute('speed')+"</td>" | 823 html_str += "<td>"+n.get('speed')+"</td>" |
913 html_str += "<td>"+n.getAttribute('weight')+"</td></tr></table>" | 824 html_str += "<td>"+n.get('weight')+"</td></tr></table>" |
914 return html_str | 825 return html_str |
915 | 826 |
916 | 827 |
917 ######################## | 828 ######################## |
918 ## d20 char windows | 829 ## d20 char windows |
920 | 831 |
921 class base_panel(wx.Panel): | 832 class base_panel(wx.Panel): |
922 def __init__(self, parent): | 833 def __init__(self, parent): |
923 wx.Panel.__init__(self, parent, -1) | 834 wx.Panel.__init__(self, parent, -1) |
924 | 835 |
925 #self.build_ctrls() | |
926 self.Bind(wx.EVT_SIZE, self.on_size) | 836 self.Bind(wx.EVT_SIZE, self.on_size) |
927 | 837 |
928 def on_size(self,event): | 838 def on_size(self,event): |
929 s = self.GetClientSizeTuple() | 839 s = self.GetClientSizeTuple() |
930 #self.splitter.SetDimensions(0,0,s[0],s[1]) | |
931 | 840 |
932 class outline_panel(wx.Panel): | 841 class outline_panel(wx.Panel): |
933 def __init__(self, parent, handler, wnd, txt,): | 842 def __init__(self, parent, handler, wnd, txt,): |
934 wx.Panel.__init__(self, parent, -1) | 843 wx.Panel.__init__(self, parent, -1) |
935 self.panel = wnd(self,handler) | 844 self.panel = wnd(self,handler) |
941 self.panel.SetDimensions(20,20,s[0]-40,s[1]-40) | 850 self.panel.SetDimensions(20,20,s[0]-40,s[1]-40) |
942 self.outline.SetDimensions(5,5,s[0]-10,s[1]-10) | 851 self.outline.SetDimensions(5,5,s[0]-10,s[1]-10) |
943 | 852 |
944 class char_panel(wx.ScrolledWindow): | 853 class char_panel(wx.ScrolledWindow): |
945 def __init__(self, parent, handler): | 854 def __init__(self, parent, handler): |
946 pname = handler.master_dom.setAttribute("name", 'TWO') | 855 pname = handler.xml.set("name", 'TWO') |
947 wx.ScrolledWindow.__init__(self, parent, -1,style=wx.VSCROLL | wx.SUNKEN_BORDER ) | 856 wx.ScrolledWindow.__init__(self, parent, -1,style=wx.VSCROLL | wx.SUNKEN_BORDER ) |
948 self.height = 1200 | 857 self.height = 1200 |
949 self.SetScrollbars(10, 10,80, self.height/10) | 858 self.SetScrollbars(10, 10,80, self.height/10) |
950 self.main_sizer = wx.BoxSizer(wx.HORIZONTAL) | 859 self.main_sizer = wx.BoxSizer(wx.HORIZONTAL) |
951 self.panels = {} | 860 self.panels = {} |
952 keys = handler.child_handlers.keys() | 861 keys = handler.child_handlers.keys() |
953 for k in keys: | 862 for k in keys: self.panels[k] = handler.child_handlers[k].get_design_panel(self, [k]) |
954 self.panels[k] = handler.child_handlers[k].get_design_panel(self, [k]) | |
955 self.sub_sizer = wx.BoxSizer(wx.VERTICAL) | 863 self.sub_sizer = wx.BoxSizer(wx.VERTICAL) |
956 self.sub_sizer2 = wx.BoxSizer(wx.VERTICAL) | 864 self.sub_sizer2 = wx.BoxSizer(wx.VERTICAL) |
957 self.sub_sizer.Add(self.panels['general'], 1, wx.EXPAND) | 865 self.sub_sizer.Add(self.panels['general'], 1, wx.EXPAND) |
958 self.sub_sizer.Add(self.panels['abilities'], 1, wx.EXPAND) | 866 self.sub_sizer.Add(self.panels['abilities'], 1, wx.EXPAND) |
959 | 867 |
960 self.sub_sizer.Add(self.panels['attacks'], 2, wx.EXPAND) | 868 self.sub_sizer.Add(self.panels['attacks'], 2, wx.EXPAND) |
961 self.sub_sizer.Add(self.panels['ac'], 1, wx.EXPAND) | 869 self.sub_sizer.Add(self.panels['ac'], 1, wx.EXPAND) |
962 #self.sub_sizer.Add(self.panels['spells'], 1, wx.EXPAND) | |
963 | 870 |
964 self.sub_sizer2.Add(self.panels['classes'], 2, wx.EXPAND) | 871 self.sub_sizer2.Add(self.panels['classes'], 2, wx.EXPAND) |
965 self.sub_sizer2.Add(self.panels['wp'], 1, wx.EXPAND) | 872 self.sub_sizer2.Add(self.panels['wp'], 1, wx.EXPAND) |
966 self.sub_sizer2.Add(self.panels['vp'], 1, wx.EXPAND) | 873 self.sub_sizer2.Add(self.panels['vp'], 1, wx.EXPAND) |
967 #self.sub_sizer2.Add(self.panels['pp'], 1, wx.EXPAND) | |
968 self.sub_sizer2.Add(self.panels['saves'], 2, wx.EXPAND) | 874 self.sub_sizer2.Add(self.panels['saves'], 2, wx.EXPAND) |
969 | 875 |
970 self.sub_sizer2.Add(self.panels['feats'], 2, wx.EXPAND) | 876 self.sub_sizer2.Add(self.panels['feats'], 2, wx.EXPAND) |
971 #self.sub_sizer2.Add(self.panels['powers'], 2, wx.EXPAND) | |
972 self.sub_sizer2.Add(self.panels['skills'], 3, wx.EXPAND) | 877 self.sub_sizer2.Add(self.panels['skills'], 3, wx.EXPAND) |
973 | 878 |
974 self.main_sizer.Add(self.sub_sizer, 1, wx.EXPAND) | 879 self.main_sizer.Add(self.sub_sizer, 1, wx.EXPAND) |
975 self.main_sizer.Add(self.sub_sizer2, 1, wx.EXPAND) | 880 self.main_sizer.Add(self.sub_sizer2, 1, wx.EXPAND) |
976 self.panels['abilities'].panel.char_wnd = self | 881 self.panels['abilities'].panel.char_wnd = self |
989 | 894 |
990 def refresh_data(self): | 895 def refresh_data(self): |
991 self.panels['saves'].panel.refresh_data() | 896 self.panels['saves'].panel.refresh_data() |
992 self.panels['skills'].panel.refresh_data() | 897 self.panels['skills'].panel.refresh_data() |
993 self.panels['attacks'].panel.refresh_data() | 898 self.panels['attacks'].panel.refresh_data() |
994 # self.panels['powers'].panel.refresh_data() | |
995 # self.panels['spells'].panel.refresh_data() | |
996 | 899 |
997 HOWTO_MAX = wx.NewId() | 900 HOWTO_MAX = wx.NewId() |
998 | 901 |
999 class howto_panel(wx.Panel): | 902 class howto_panel(wx.Panel): |
1000 def __init__(self, parent, handler): | 903 def __init__(self, parent, handler): |
1001 wx.Panel.__init__(self, parent, -1) | 904 wx.Panel.__init__(self, parent, -1) |
1002 pname = handler.master_dom.setAttribute("name", 'How To') | 905 pname = handler.xml.set("name", 'How To') |
1003 self.sizer = wx.FlexGridSizer(2, 4, 2, 2) # rows, cols, hgap, vgap | 906 self.sizer = wx.FlexGridSizer(2, 4, 2, 2) # rows, cols, hgap, vgap |
1004 self.master_dom = handler.master_dom | 907 self.xml = handler.xml |
1005 n_list = self.master_dom._get_childNodes() | 908 n_list = self.xml.getchildren() |
1006 for n in n_list: | 909 for n in n_list: |
1007 t_node = component.get('xml').safe_get_text_node(n) | 910 self.sizer.AddMany([ (wx.StaticText(self, -1, n.text), 0, wx.ALIGN_CENTER_VERTICAL), |
1008 self.sizer.AddMany([ (wx.StaticText(self, -1, t_node._get_nodeValue()), 0, wx.ALIGN_CENTER_VERTICAL), | |
1009 ]) | 911 ]) |
1010 self.sizer.AddGrowableCol(1) | 912 self.sizer.AddGrowableCol(1) |
1011 self.SetSizer(self.sizer) | 913 self.SetSizer(self.sizer) |
1012 | 914 |
1013 | 915 |
1015 WP_MAX = wx.NewId() | 917 WP_MAX = wx.NewId() |
1016 | 918 |
1017 class hp_panel(wx.Panel): | 919 class hp_panel(wx.Panel): |
1018 def __init__(self, parent, handler): | 920 def __init__(self, parent, handler): |
1019 wx.Panel.__init__(self, parent, -1) | 921 wx.Panel.__init__(self, parent, -1) |
1020 pname = handler.master_dom.setAttribute("name", 'WoundPoints') | 922 pname = handler.xml.set("name", 'WoundPoints') |
1021 self.sizer = wx.FlexGridSizer(2, 4, 2, 2) # rows, cols, hgap, vgap | 923 self.sizer = wx.FlexGridSizer(2, 4, 2, 2) # rows, cols, hgap, vgap |
1022 self.master_dom = handler.master_dom | 924 self.xml = handler.xml |
1023 self.sizer.AddMany([ (wx.StaticText(self, -1, "WP Current:"), 0, wx.ALIGN_CENTER_VERTICAL), | 925 self.sizer.AddMany([ (wx.StaticText(self, -1, "WP Current:"), 0, wx.ALIGN_CENTER_VERTICAL), |
1024 (wx.TextCtrl(self, WP_CUR, self.master_dom.getAttribute('current')), 0, wx.EXPAND), | 926 (wx.TextCtrl(self, WP_CUR, self.xml.get('current')), 0, wx.EXPAND), |
1025 (wx.StaticText(self, -1, "WP Max:"), 0, wx.ALIGN_CENTER_VERTICAL), | 927 (wx.StaticText(self, -1, "WP Max:"), 0, wx.ALIGN_CENTER_VERTICAL), |
1026 (wx.TextCtrl(self, WP_MAX, self.master_dom.getAttribute('max')), 0, wx.EXPAND), | 928 (wx.TextCtrl(self, WP_MAX, self.xml.get('max')), 0, wx.EXPAND), |
1027 ]) | 929 ]) |
1028 self.sizer.AddGrowableCol(1) | 930 self.sizer.AddGrowableCol(1) |
1029 self.Bind(wx.EVT_SIZE, self.on_size) | 931 self.Bind(wx.EVT_SIZE, self.on_size) |
1030 self.Bind(wx.EVT_TEXT, self.on_text, id=WP_MAX) | 932 self.Bind(wx.EVT_TEXT, self.on_text, id=WP_MAX) |
1031 self.Bind(wx.EVT_TEXT, self.on_text, id=WP_CUR) | 933 self.Bind(wx.EVT_TEXT, self.on_text, id=WP_CUR) |
1032 self.SetSizer(self.sizer) | 934 self.SetSizer(self.sizer) |
1033 | 935 |
1034 def on_text(self,evt): | 936 def on_text(self,evt): |
1035 id = evt.GetId() | 937 id = evt.GetId() |
1036 if id == WP_CUR: | 938 if id == WP_CUR: |
1037 self.master_dom.setAttribute('current',evt.GetString()) | 939 self.xml.set('current',evt.GetString()) |
1038 elif id == WP_MAX: | 940 elif id == WP_MAX: |
1039 self.master_dom.setAttribute('max',evt.GetString()) | 941 self.xml.set('max',evt.GetString()) |
1040 | 942 |
1041 def on_size(self,evt): | 943 def on_size(self,evt): |
1042 s = self.GetClientSizeTuple() | 944 s = self.GetClientSizeTuple() |
1043 self.sizer.SetDimension(0,0,s[0],s[1]) | 945 self.sizer.SetDimension(0,0,s[0],s[1]) |
1044 | 946 |
1046 VP_MAX = wx.NewId() | 948 VP_MAX = wx.NewId() |
1047 | 949 |
1048 class vp_panel(wx.Panel): | 950 class vp_panel(wx.Panel): |
1049 def __init__(self, parent, handler): | 951 def __init__(self, parent, handler): |
1050 wx.Panel.__init__(self, parent, -1) | 952 wx.Panel.__init__(self, parent, -1) |
1051 pname = handler.master_dom.setAttribute("name", 'VitalityPoints') | 953 pname = handler.xml.set("name", 'VitalityPoints') |
1052 self.sizer = wx.FlexGridSizer(2, 4, 2, 2) # rows, cols, hgap, vgap | 954 self.sizer = wx.FlexGridSizer(2, 4, 2, 2) # rows, cols, hgap, vgap |
1053 self.master_dom = handler.master_dom | 955 self.xml = handler.xml |
1054 self.sizer.AddMany([ (wx.StaticText(self, -1, "VP Current:"), 0, wx.ALIGN_CENTER_VERTICAL), | 956 self.sizer.AddMany([ (wx.StaticText(self, -1, "VP Current:"), 0, wx.ALIGN_CENTER_VERTICAL), |
1055 (wx.TextCtrl(self, VP_CUR, self.master_dom.getAttribute('current')), 0, wx.EXPAND), | 957 (wx.TextCtrl(self, VP_CUR, self.xml.get('current')), 0, wx.EXPAND), |
1056 (wx.StaticText(self, -1, "VP Max:"), 0, wx.ALIGN_CENTER_VERTICAL), | 958 (wx.StaticText(self, -1, "VP Max:"), 0, wx.ALIGN_CENTER_VERTICAL), |
1057 (wx.TextCtrl(self, VP_MAX, self.master_dom.getAttribute('max')), 0, wx.EXPAND), | 959 (wx.TextCtrl(self, VP_MAX, self.xml.get('max')), 0, wx.EXPAND), |
1058 ]) | 960 ]) |
1059 self.sizer.AddGrowableCol(1) | 961 self.sizer.AddGrowableCol(1) |
1060 self.Bind(wx.EVT_SIZE, self.on_size) | 962 self.Bind(wx.EVT_SIZE, self.on_size) |
1061 self.Bind(wx.EVT_TEXT, self.on_text, id=VP_MAX) | 963 self.Bind(wx.EVT_TEXT, self.on_text, id=VP_MAX) |
1062 self.Bind(wx.EVT_TEXT, self.on_text, id=VP_CUR) | 964 self.Bind(wx.EVT_TEXT, self.on_text, id=VP_CUR) |
1063 self.SetSizer(self.sizer) | 965 self.SetSizer(self.sizer) |
1064 | 966 |
1065 def on_text(self,evt): | 967 def on_text(self,evt): |
1066 id = evt.GetId() | 968 id = evt.GetId() |
1067 if id == VP_CUR: | 969 if id == VP_CUR: self.xml.set('current',evt.GetString()) |
1068 self.master_dom.setAttribute('current',evt.GetString()) | 970 elif id == VP_MAX: self.xml.set('max',evt.GetString()) |
1069 elif id == VP_MAX: | |
1070 self.master_dom.setAttribute('max',evt.GetString()) | |
1071 | 971 |
1072 def on_size(self,evt): | 972 def on_size(self,evt): |
1073 s = self.GetClientSizeTuple() | 973 s = self.GetClientSizeTuple() |
1074 self.sizer.SetDimension(0,0,s[0],s[1]) | 974 self.sizer.SetDimension(0,0,s[0],s[1]) |
1075 | 975 |
1076 #PP_CUR = wx.NewId() | |
1077 #PP_MAX = wx.NewId() | |
1078 #PP_FRE = wx.NewId() | |
1079 #PP_MFRE = wx.NewId() | |
1080 | |
1081 #class pp_panel(wx.Panel): | |
1082 # def __init__(self, parent, handler): | |
1083 # wx.Panel.__init__(self, parent, -1) | |
1084 # pname = handler.master_dom.setAttribute("name", 'PowerPoints') | |
1085 # self.sizer = wx.FlexGridSizer(2, 4, 2, 2) # rows, cols, hgap, vgap | |
1086 # self.master_dom = handler.master_dom | |
1087 # | |
1088 # self.sizer.AddMany([ (wx.StaticText(self, -1, "PP Current:"), 0, wx.ALIGN_CENTER_VERTICAL), | |
1089 # (wx.TextCtrl(self, PP_CUR, self.master_dom.getAttribute('current1')), 0, wx.EXPAND), | |
1090 # (wx.StaticText(self, -1, "PP Max:"), 0, wx.ALIGN_CENTER_VERTICAL), | |
1091 # (wx.TextCtrl(self, PP_MAX, self.master_dom.getAttribute('max1')), 0, wx.EXPAND), | |
1092 # (wx.StaticText(self, -1, "Current Free Talants per day:"), 0, wx.ALIGN_CENTER_VERTICAL), | |
1093 # (wx.TextCtrl(self, PP_FRE, self.master_dom.getAttribute('free')), 0, wx.EXPAND), | |
1094 # (wx.StaticText(self, -1, "Max Free Talants per day:"), 0, wx.ALIGN_CENTER_VERTICAL), | |
1095 # (wx.TextCtrl(self, PP_MFRE, self.master_dom.getAttribute('maxfree')), 0, wx.EXPAND), | |
1096 # ]) | |
1097 # self.sizer.AddGrowableCol(1) | |
1098 # self.Bind(wx.EVT_SIZE, self.on_size) | |
1099 # self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MAX) | |
1100 # self.Bind(wx.EVT_TEXT, self.on_text, id=PP_CUR) | |
1101 # self.Bind(wx.EVT_TEXT, self.on_text, id=PP_FRE) | |
1102 # self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MFRE) | |
1103 # | |
1104 # def on_text(self,evt): | |
1105 # id = evt.GetId() | |
1106 # if id == PP_CUR: | |
1107 # self.master_dom.setAttribute('current1',evt.GetString()) | |
1108 # elif id == PP_MAX: | |
1109 # self.master_dom.setAttribute('max1',evt.GetString()) | |
1110 # elif id == PP_FRE: | |
1111 # self.master_dom.setAttribute('free',evt.GetString()) | |
1112 # elif id == PP_MFRE: | |
1113 # self.master_dom.setAttribute('maxfree',evt.GetString()) | |
1114 # | |
1115 # def on_size(self,evt): | |
1116 # s = self.GetClientSizeTuple() | |
1117 # self.sizer.SetDimension(0,0,s[0],s[1]) | |
1118 | |
1119 | 976 |
1120 class gen_grid(wx.grid.Grid): | 977 class gen_grid(wx.grid.Grid): |
1121 """grid for gen info""" | 978 """grid for gen info""" |
1122 def __init__(self, parent, handler): | 979 def __init__(self, parent, handler): |
1123 pname = handler.master_dom.setAttribute("name", 'General') | 980 pname = handler.xml.set("name", 'General') |
1124 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 981 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1125 self.Bind(wx.EVT_SIZE, self.on_size) | 982 self.Bind(wx.EVT_SIZE, self.on_size) |
1126 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) | 983 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) |
1127 self.handler = handler | 984 self.handler = handler |
1128 n_list = handler.master_dom._get_childNodes() | 985 n_list = handler.xml.getchildren() |
1129 self.CreateGrid(len(n_list),2) | 986 self.CreateGrid(len(n_list),2) |
1130 self.SetRowLabelSize(0) | 987 self.SetRowLabelSize(0) |
1131 self.SetColLabelSize(0) | 988 self.SetColLabelSize(0) |
1132 self.n_list = n_list | 989 self.n_list = n_list |
1133 i = 0 | 990 i = 0 |
1134 for i in range(len(n_list)): | 991 for i in range(len(n_list)): self.refresh_row(i) |
1135 self.refresh_row(i) | |
1136 | 992 |
1137 def on_cell_change(self,evt): | 993 def on_cell_change(self,evt): |
1138 row = evt.GetRow() | 994 row = evt.GetRow() |
1139 col = evt.GetCol() | 995 col = evt.GetCol() |
1140 value = self.GetCellValue(row,col) | 996 value = self.GetCellValue(row,col) |
1141 t_node = self.n_list[row]._get_firstChild() | 997 self.n_list[row].text = value |
1142 t_node._set_nodeValue(value) | |
1143 if row==0: self.handler.on_name_change(value) | 998 if row==0: self.handler.on_name_change(value) |
1144 | 999 |
1145 def refresh_row(self,rowi): | 1000 def refresh_row(self,rowi): |
1146 t_node = component.get('xml').safe_get_text_node(self.n_list[rowi]) | 1001 self.SetCellValue(rowi,0,self.n_list[rowi].tag) |
1147 self.SetCellValue(rowi,0,self.n_list[rowi]._get_tagName()) | |
1148 self.SetReadOnly(rowi,0) | 1002 self.SetReadOnly(rowi,0) |
1149 self.SetCellValue(rowi,1,t_node._get_nodeValue()) | 1003 self.SetCellValue(rowi,1,self.n_list[rowi].text) |
1150 | 1004 |
1151 def on_size(self,evt): | 1005 def on_size(self,evt): |
1152 (w,h) = self.GetClientSizeTuple() | 1006 (w,h) = self.GetClientSizeTuple() |
1153 cols = self.GetNumberCols() | 1007 cols = self.GetNumberCols() |
1154 col_w = w/(cols) | 1008 col_w = w/(cols) |
1155 for i in range(0,cols): | 1009 for i in range(0,cols): self.SetColSize(i,col_w) |
1156 self.SetColSize(i,col_w) | |
1157 evt.Skip() | 1010 evt.Skip() |
1158 self.Refresh() | 1011 self.Refresh() |
1159 | 1012 |
1160 class inventory_grid(wx.grid.Grid): | 1013 class inventory_grid(wx.grid.Grid): |
1161 """grid for gen info""" | 1014 """grid for gen info""" |
1162 def __init__(self, parent, handler): | 1015 def __init__(self, parent, handler): |
1163 pname = handler.master_dom.setAttribute("name", 'Money and Inventory') | 1016 pname = handler.xml.set("name", 'Money and Inventory') |
1164 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 1017 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1165 self.Bind(wx.EVT_SIZE, self.on_size) | 1018 self.Bind(wx.EVT_SIZE, self.on_size) |
1166 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) | 1019 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) |
1167 self.handler = handler | 1020 self.handler = handler |
1168 n_list = handler.master_dom._get_childNodes() | 1021 n_list = handler.xml.getchildren() |
1169 self.CreateGrid(len(n_list),2) | 1022 self.CreateGrid(len(n_list),2) |
1170 self.SetRowLabelSize(0) | 1023 self.SetRowLabelSize(0) |
1171 self.SetColLabelSize(0) | 1024 self.SetColLabelSize(0) |
1172 self.n_list = n_list | 1025 self.n_list = n_list |
1173 i = 0 | 1026 i = 0 |
1174 for i in range(len(n_list)): | 1027 for i in range(len(n_list)): self.refresh_row(i) |
1175 self.refresh_row(i) | |
1176 | 1028 |
1177 def on_cell_change(self,evt): | 1029 def on_cell_change(self,evt): |
1178 row = evt.GetRow() | 1030 row = evt.GetRow() |
1179 col = evt.GetCol() | 1031 col = evt.GetCol() |
1180 value = self.GetCellValue(row,col) | 1032 value = self.GetCellValue(row,col) |
1181 t_node = self.n_list[row]._get_firstChild() | 1033 self.n_list[row].text = value |
1182 t_node._set_nodeValue(value) | |
1183 if row==0: self.handler.on_name_change(value) | 1034 if row==0: self.handler.on_name_change(value) |
1184 | 1035 |
1185 def refresh_row(self,rowi): | 1036 def refresh_row(self,rowi): |
1186 t_node = component.get('xml').safe_get_text_node(self.n_list[rowi]) | 1037 self.SetCellValue(rowi,0, self.n_list[rowi].tag) |
1187 self.SetCellValue(rowi,0,self.n_list[rowi]._get_tagName()) | |
1188 self.SetReadOnly(rowi,0) | 1038 self.SetReadOnly(rowi,0) |
1189 self.SetCellValue(rowi,1,t_node._get_nodeValue()) | 1039 self.SetCellValue(rowi,1,self.n_list[rowi].text) |
1190 | 1040 |
1191 def on_size(self,evt): | 1041 def on_size(self,evt): |
1192 (w,h) = self.GetClientSizeTuple() | 1042 (w,h) = self.GetClientSizeTuple() |
1193 cols = self.GetNumberCols() | 1043 cols = self.GetNumberCols() |
1194 col_w = w/(cols) | 1044 col_w = w/(cols) |
1195 for i in range(0,cols): | 1045 for i in range(0,cols): self.SetColSize(i,col_w) |
1196 self.SetColSize(i,col_w) | |
1197 evt.Skip() | 1046 evt.Skip() |
1198 self.Refresh() | 1047 self.Refresh() |
1199 | 1048 |
1200 class abil_grid(wx.grid.Grid): | 1049 class abil_grid(wx.grid.Grid): |
1201 """grid for abilities""" | 1050 """grid for abilities""" |
1202 def __init__(self, parent, handler): | 1051 def __init__(self, parent, handler): |
1203 pname = handler.master_dom.setAttribute("name", 'Stats') | 1052 pname = handler.xml.set("name", 'Stats') |
1204 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 1053 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1205 self.Bind(wx.EVT_SIZE, self.on_size) | 1054 self.Bind(wx.EVT_SIZE, self.on_size) |
1206 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) | 1055 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) |
1207 self.handler = handler | 1056 self.handler = handler |
1208 stats = handler.master_dom.getElementsByTagName('stat') | 1057 stats = handler.xml.findall('stat') |
1209 self.CreateGrid(len(stats),3) | 1058 self.CreateGrid(len(stats),3) |
1210 self.SetRowLabelSize(0) | 1059 self.SetRowLabelSize(0) |
1211 col_names = ['Ability','Score','Modifier'] | 1060 col_names = ['Ability','Score','Modifier'] |
1212 for i in range(len(col_names)): | 1061 for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i]) |
1213 self.SetColLabelValue(i,col_names[i]) | |
1214 self.stats = stats | 1062 self.stats = stats |
1215 i = 0 | 1063 i = 0 |
1216 for i in range(len(stats)): | 1064 for i in range(len(stats)): self.refresh_row(i) |
1217 self.refresh_row(i) | |
1218 self.char_wnd = None | 1065 self.char_wnd = None |
1219 | 1066 |
1220 def on_cell_change(self,evt): | 1067 def on_cell_change(self,evt): |
1221 row = evt.GetRow() | 1068 row = evt.GetRow() |
1222 col = evt.GetCol() | 1069 col = evt.GetCol() |
1223 value = self.GetCellValue(row,col) | 1070 value = self.GetCellValue(row,col) |
1224 try: | 1071 try: |
1225 int(value) | 1072 int(value) |
1226 self.stats[row].setAttribute('base',value) | 1073 self.stats[row].set('base',value) |
1227 self.refresh_row(row) | 1074 self.refresh_row(row) |
1228 except: | 1075 except: self.SetCellValue(row,col,"0") |
1229 self.SetCellValue(row,col,"0") | 1076 if self.char_wnd: self.char_wnd.refresh_data() |
1230 if self.char_wnd: | |
1231 self.char_wnd.refresh_data() | |
1232 | 1077 |
1233 def refresh_row(self,rowi): | 1078 def refresh_row(self,rowi): |
1234 s = self.stats[rowi] | 1079 s = self.stats[rowi] |
1235 name = s.getAttribute('name') | 1080 name = s.get('name') |
1236 abbr = s.getAttribute('abbr') | 1081 abbr = s.get('abbr') |
1237 self.SetCellValue(rowi,0,name) | 1082 self.SetCellValue(rowi,0,name) |
1238 self.SetReadOnly(rowi,0) | 1083 self.SetReadOnly(rowi,0) |
1239 self.SetCellValue(rowi,1,s.getAttribute('base')) | 1084 self.SetCellValue(rowi,1,s.get('base')) |
1240 self.SetCellValue(rowi,2,str(self.handler.get_mod(abbr))) | 1085 self.SetCellValue(rowi,2,str(self.handler.get_mod(abbr))) |
1241 self.SetReadOnly(rowi,2) | 1086 self.SetReadOnly(rowi,2) |
1242 | 1087 |
1243 def on_size(self,evt): | 1088 def on_size(self,evt): |
1244 (w,h) = self.GetClientSizeTuple() | 1089 (w,h) = self.GetClientSizeTuple() |
1245 cols = self.GetNumberCols() | 1090 cols = self.GetNumberCols() |
1246 col_w = w/(cols+2) | 1091 col_w = w/(cols+2) |
1247 self.SetColSize(0,col_w*3) | 1092 self.SetColSize(0,col_w*3) |
1248 for i in range(1,cols): | 1093 for i in range(1,cols): self.SetColSize(i,col_w) |
1249 self.SetColSize(i,col_w) | |
1250 evt.Skip() | 1094 evt.Skip() |
1251 self.Refresh() | 1095 self.Refresh() |
1252 | 1096 |
1253 def refresh_data(self): | 1097 def refresh_data(self): |
1254 for r in range(self.GetNumberRows()-1): | 1098 for r in range(self.GetNumberRows()-1): self.refresh_row(r) |
1255 self.refresh_row(r) | |
1256 | 1099 |
1257 | 1100 |
1258 class save_grid(wx.grid.Grid): | 1101 class save_grid(wx.grid.Grid): |
1259 """grid for saves""" | 1102 """grid for saves""" |
1260 def __init__(self, parent, handler): | 1103 def __init__(self, parent, handler): |
1261 pname = handler.master_dom.setAttribute("name", 'Saves') | 1104 pname = handler.xml.set("name", 'Saves') |
1262 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 1105 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1263 self.Bind(wx.EVT_SIZE, self.on_size) | 1106 self.Bind(wx.EVT_SIZE, self.on_size) |
1264 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) | 1107 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) |
1265 self.handler = handler | 1108 self.handler = handler |
1266 saves = handler.master_dom.getElementsByTagName('save') | 1109 saves = handler.xml.findall('save') |
1267 self.stats = handler.char_hander.child_handlers['abilities'] | 1110 self.stats = handler.char_hander.child_handlers['abilities'] |
1268 self.CreateGrid(len(saves),7) | 1111 self.CreateGrid(len(saves),7) |
1269 self.SetRowLabelSize(0) | 1112 self.SetRowLabelSize(0) |
1270 col_names = ['Save','Key','base','Abil','Magic','Misc','Total'] | 1113 col_names = ['Save','Key','base','Abil','Magic','Misc','Total'] |
1271 for i in range(len(col_names)): | 1114 for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i]) |
1272 self.SetColLabelValue(i,col_names[i]) | |
1273 self.saves = saves | 1115 self.saves = saves |
1274 i = 0 | 1116 i = 0 |
1275 for i in range(len(saves)): | 1117 for i in range(len(saves)):self.refresh_row(i) |
1276 self.refresh_row(i) | |
1277 | 1118 |
1278 def on_cell_change(self,evt): | 1119 def on_cell_change(self,evt): |
1279 row = evt.GetRow() | 1120 row = evt.GetRow() |
1280 col = evt.GetCol() | 1121 col = evt.GetCol() |
1281 value = self.GetCellValue(row,col) | 1122 value = self.GetCellValue(row,col) |
1282 try: | 1123 try: |
1283 int(value) | 1124 int(value) |
1284 if col == 2: | 1125 if col == 2: self.saves[row].set('base',value) |
1285 self.saves[row].setAttribute('base',value) | 1126 elif col == 4:self.saves[row].set('magmod',value) |
1286 elif col ==4: | 1127 elif col == 4: self.saves[row].set('miscmod',value) |
1287 self.saves[row].setAttribute('magmod',value) | |
1288 elif col ==4: | |
1289 self.saves[row].setAttribute('miscmod',value) | |
1290 self.refresh_row(row) | 1128 self.refresh_row(row) |
1291 except: | 1129 except: self.SetCellValue(row,col,"0") |
1292 self.SetCellValue(row,col,"0") | |
1293 | 1130 |
1294 def refresh_row(self,rowi): | 1131 def refresh_row(self,rowi): |
1295 s = self.saves[rowi] | 1132 s = self.saves[rowi] |
1296 name = s.getAttribute('name') | 1133 name = s.get('name') |
1297 self.SetCellValue(rowi,0,name) | 1134 self.SetCellValue(rowi,0,name) |
1298 self.SetReadOnly(rowi,0) | 1135 self.SetReadOnly(rowi,0) |
1299 stat = s.getAttribute('stat') | 1136 stat = s.get('stat') |
1300 self.SetCellValue(rowi,1,stat) | 1137 self.SetCellValue(rowi,1,stat) |
1301 self.SetReadOnly(rowi,1) | 1138 self.SetReadOnly(rowi,1) |
1302 self.SetCellValue(rowi,2,s.getAttribute('base')) | 1139 self.SetCellValue(rowi,2,s.get('base')) |
1303 self.SetCellValue(rowi,3,str(self.stats.get_mod(stat))) | 1140 self.SetCellValue(rowi,3,str(self.stats.get_mod(stat))) |
1304 self.SetReadOnly(rowi,3) | 1141 self.SetReadOnly(rowi,3) |
1305 self.SetCellValue(rowi,4,s.getAttribute('magmod')) | 1142 self.SetCellValue(rowi,4,s.get('magmod')) |
1306 self.SetCellValue(rowi,5,s.getAttribute('miscmod')) | 1143 self.SetCellValue(rowi,5,s.get('miscmod')) |
1307 mod = str(self.handler.get_mod(name)) | 1144 mod = str(self.handler.get_mod(name)) |
1308 self.SetCellValue(rowi,6,mod) | 1145 self.SetCellValue(rowi,6,mod) |
1309 self.SetReadOnly(rowi,6) | 1146 self.SetReadOnly(rowi,6) |
1310 | 1147 |
1311 def on_size(self,evt): | 1148 def on_size(self,evt): |
1312 (w,h) = self.GetClientSizeTuple() | 1149 (w,h) = self.GetClientSizeTuple() |
1313 cols = self.GetNumberCols() | 1150 cols = self.GetNumberCols() |
1314 col_w = w/(cols+2) | 1151 col_w = w/(cols+2) |
1315 self.SetColSize(0,col_w*3) | 1152 self.SetColSize(0,col_w*3) |
1316 for i in range(1,cols): | 1153 for i in range(1,cols): self.SetColSize(i,col_w) |
1317 self.SetColSize(i,col_w) | |
1318 evt.Skip() | 1154 evt.Skip() |
1319 self.Refresh() | 1155 self.Refresh() |
1320 | 1156 |
1321 def refresh_data(self): | 1157 def refresh_data(self): |
1322 for r in range(self.GetNumberRows()): | 1158 for r in range(self.GetNumberRows()): self.refresh_row(r) |
1323 self.refresh_row(r) | |
1324 | 1159 |
1325 | 1160 |
1326 class skill_grid(wx.grid.Grid): | 1161 class skill_grid(wx.grid.Grid): |
1327 """ panel for skills """ | 1162 """ panel for skills """ |
1328 def __init__(self, parent, handler): | 1163 def __init__(self, parent, handler): |
1329 pname = handler.master_dom.setAttribute("name", 'Skills') | 1164 pname = handler.xml.set("name", 'Skills') |
1330 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 1165 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1331 self.Bind(wx.EVT_SIZE, self.on_size) | 1166 self.Bind(wx.EVT_SIZE, self.on_size) |
1332 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) | 1167 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) |
1333 self.handler = handler | 1168 self.handler = handler |
1334 skills = handler.master_dom.getElementsByTagName('skill') | 1169 skills = handler.xml.findall('skill') |
1335 self.stats = handler.char_hander.child_handlers['abilities'] | 1170 self.stats = handler.char_hander.child_handlers['abilities'] |
1336 self.CreateGrid(len(skills),7) | 1171 self.CreateGrid(len(skills),7) |
1337 self.SetRowLabelSize(0) | 1172 self.SetRowLabelSize(0) |
1338 col_names = ['Skill','Key','Rank','Abil','Misc','Total'] | 1173 col_names = ['Skill','Key','Rank','Abil','Misc','Total'] |
1339 for i in range(len(col_names)): | 1174 for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i]) |
1340 self.SetColLabelValue(i,col_names[i]) | |
1341 rowi = 0 | 1175 rowi = 0 |
1342 self.skills = skills | 1176 self.skills = skills |
1343 for i in range(len(skills)): | 1177 for i in range(len(skills)): |
1344 self.refresh_row(i) | 1178 self.refresh_row(i) |
1345 | 1179 |
1348 col = evt.GetCol() | 1182 col = evt.GetCol() |
1349 value = self.GetCellValue(row,col) | 1183 value = self.GetCellValue(row,col) |
1350 #print value | 1184 #print value |
1351 try: | 1185 try: |
1352 int(value) | 1186 int(value) |
1353 if col == 3: | 1187 if col == 3: self.skills[row].set('rank',value) |
1354 self.skills[row].setAttribute('rank',value) | 1188 elif col == 5: self.skills[row].set('misc',value) |
1355 elif col ==5: | 1189 elif col == 1: self.skills[row].set('untrained',value) |
1356 self.skills[row].setAttribute('misc',value) | |
1357 elif col == 1: | |
1358 self.skills[row].setAttribute('untrained',value) | |
1359 self.refresh_row(row) | 1190 self.refresh_row(row) |
1360 except: | 1191 except: self.SetCellValue(row,col,"0") |
1361 self.SetCellValue(row,col,"0") | |
1362 | 1192 |
1363 def refresh_row(self,rowi): | 1193 def refresh_row(self,rowi): |
1364 s = self.skills[rowi] | 1194 s = self.skills[rowi] |
1365 name = s.getAttribute('name') | 1195 name = s.get('name') |
1366 self.SetCellValue(rowi,0,name) | 1196 self.SetCellValue(rowi,0,name) |
1367 self.SetReadOnly(rowi,0) | 1197 self.SetReadOnly(rowi,0) |
1368 self.SetCellValue(rowi,1,s.getAttribute('untrained')) | 1198 self.SetCellValue(rowi,1,s.get('untrained')) |
1369 stat = s.getAttribute('stat') | 1199 stat = s.get('stat') |
1370 self.SetCellValue(rowi,2,stat) | 1200 self.SetCellValue(rowi,2,stat) |
1371 self.SetReadOnly(rowi,2) | 1201 self.SetReadOnly(rowi,2) |
1372 self.SetCellValue(rowi,3,s.getAttribute('rank')) | 1202 self.SetCellValue(rowi,3,s.get('rank')) |
1373 self.SetCellValue(rowi,4,str(self.stats.get_mod(stat))) | 1203 self.SetCellValue(rowi,4,str(self.stats.get_mod(stat))) |
1374 self.SetReadOnly(rowi,4) | 1204 self.SetReadOnly(rowi,4) |
1375 self.SetCellValue(rowi,5,s.getAttribute('misc')) | 1205 self.SetCellValue(rowi,5,s.get('misc')) |
1376 mod = str(self.handler.get_mod(name)) | 1206 mod = str(self.handler.get_mod(name)) |
1377 self.SetCellValue(rowi,6,mod) | 1207 self.SetCellValue(rowi,6,mod) |
1378 self.SetReadOnly(rowi,6) | 1208 self.SetReadOnly(rowi,6) |
1379 | 1209 |
1380 def on_size(self,evt): | 1210 def on_size(self,evt): |
1381 (w,h) = self.GetClientSizeTuple() | 1211 (w,h) = self.GetClientSizeTuple() |
1382 cols = self.GetNumberCols() | 1212 cols = self.GetNumberCols() |
1383 col_w = w/(cols+2) | 1213 col_w = w/(cols+2) |
1384 self.SetColSize(0,col_w*3) | 1214 self.SetColSize(0,col_w*3) |
1385 for i in range(1,cols): | 1215 for i in range(1,cols): self.SetColSize(i,col_w) |
1386 self.SetColSize(i,col_w) | |
1387 evt.Skip() | 1216 evt.Skip() |
1388 self.Refresh() | 1217 self.Refresh() |
1389 | 1218 |
1390 def refresh_data(self): | 1219 def refresh_data(self): |
1391 for r in range(self.GetNumberRows()): | 1220 for r in range(self.GetNumberRows()): self.refresh_row(r) |
1392 self.refresh_row(r) | |
1393 | |
1394 | 1221 |
1395 | 1222 |
1396 class feat_panel(wx.Panel): | 1223 class feat_panel(wx.Panel): |
1397 def __init__(self, parent, handler): | 1224 def __init__(self, parent, handler): |
1398 pname = handler.master_dom.setAttribute("name", 'Feats') | 1225 pname = handler.xml.set("name", 'Feats') |
1399 wx.Panel.__init__(self, parent, -1) | 1226 wx.Panel.__init__(self, parent, -1) |
1400 self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 1227 self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1401 sizer = wx.BoxSizer(wx.HORIZONTAL) | 1228 sizer = wx.BoxSizer(wx.HORIZONTAL) |
1402 remove_btn = wx.Button(self, wx.ID_ANY, "Remove Feat") | 1229 remove_btn = wx.Button(self, wx.ID_ANY, "Remove Feat") |
1403 add_btn = wx.Button(self, wx.ID_ANY, "Add Feat") | 1230 add_btn = wx.Button(self, wx.ID_ANY, "Add Feat") |
1408 self.SetSizer(self.sizer) | 1235 self.SetSizer(self.sizer) |
1409 self.Bind(wx.EVT_SIZE, self.on_size) | 1236 self.Bind(wx.EVT_SIZE, self.on_size) |
1410 self.Bind(wx.EVT_BUTTON, self.on_remove, remove_btn) | 1237 self.Bind(wx.EVT_BUTTON, self.on_remove, remove_btn) |
1411 self.Bind(wx.EVT_BUTTON, self.on_add, add_btn) | 1238 self.Bind(wx.EVT_BUTTON, self.on_add, add_btn) |
1412 | 1239 |
1413 n_list = handler.master_dom._get_childNodes() | 1240 n_list = handler.xml.getchildren() |
1414 self.n_list = n_list | 1241 self.n_list = n_list |
1415 self.master_dom = handler.master_dom | 1242 self.xml = handler.xml |
1416 self.grid.CreateGrid(len(n_list),2,1) | 1243 self.grid.CreateGrid(len(n_list),2,1) |
1417 self.grid.SetRowLabelSize(0) | 1244 self.grid.SetRowLabelSize(0) |
1418 self.grid.SetColLabelValue(0,"Feat") | 1245 self.grid.SetColLabelValue(0,"Feat") |
1419 self.grid.SetColLabelValue(1,"Type") | 1246 self.grid.SetColLabelValue(1,"Type") |
1420 for i in range(len(n_list)): | 1247 for i in range(len(n_list)): self.refresh_row(i) |
1421 self.refresh_row(i) | |
1422 self.temp_dom = None | 1248 self.temp_dom = None |
1423 | 1249 |
1424 def refresh_row(self,i): | 1250 def refresh_row(self,i): |
1425 feat = self.n_list[i] | 1251 feat = self.n_list[i] |
1426 name = feat.getAttribute('name') | 1252 name = feat.get('name') |
1427 type = feat.getAttribute('type') | 1253 type = feat.get('type') |
1428 self.grid.SetCellValue(i,0,name) | 1254 self.grid.SetCellValue(i,0,name) |
1429 self.grid.SetReadOnly(i,0) | 1255 self.grid.SetReadOnly(i,0) |
1430 self.grid.SetCellValue(i,1,type) | 1256 self.grid.SetCellValue(i,1,type) |
1431 self.grid.SetReadOnly(i,1) | 1257 self.grid.SetReadOnly(i,1) |
1432 | 1258 |
1433 def on_remove(self,evt): | 1259 def on_remove(self,evt): |
1434 rows = self.grid.GetNumberRows() | 1260 rows = self.grid.GetNumberRows() |
1435 for i in range(rows): | 1261 for i in range(rows): |
1436 if self.grid.IsInSelection(i,0): | 1262 if self.grid.IsInSelection(i,0): |
1437 self.grid.DeleteRows(i) | 1263 self.grid.DeleteRows(i) |
1438 self.master_dom.removeChild(self.n_list[i]) | 1264 self.xml.remove(self.n_list[i]) |
1439 | 1265 |
1440 def on_add(self,evt): | 1266 def on_add(self,evt): |
1441 if not self.temp_dom: | 1267 if not self.temp_dom: |
1442 tmp = open(dir_struct["SWd20"]+"d20feats.xml","r") | 1268 tree = parse(dir_struct["SWd20"]+"d20feats.xml") |
1443 xml_dom = parseXml_with_dlg(self,tmp.read()) | 1269 self.temp_dom = tree.getroot() |
1444 xml_dom = xml_dom._get_firstChild() | 1270 f_list = self.temp_dom.findall('feat') |
1445 tmp.close() | |
1446 self.temp_dom = xml_dom | |
1447 f_list = self.temp_dom.getElementsByTagName('feat') | |
1448 opts = [] | 1271 opts = [] |
1449 for f in f_list: | 1272 for f in f_list: opts.append(f.get('name')) |
1450 opts.append(f.getAttribute('name')) | |
1451 dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts) | 1273 dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts) |
1452 if dlg.ShowModal() == wx.ID_OK: | 1274 if dlg.ShowModal() == wx.ID_OK: |
1453 i = dlg.GetSelection() | 1275 i = dlg.GetSelection() |
1454 new_node = self.master_dom.appendChild(f_list[i].cloneNode(False)) | 1276 new_node = self.xml.append(f_list[i]) |
1455 self.grid.AppendRows(1) | 1277 self.grid.AppendRows(1) |
1456 self.refresh_row(self.grid.GetNumberRows()-1) | 1278 self.refresh_row(self.grid.GetNumberRows()-1) |
1457 dlg.Destroy() | 1279 dlg.Destroy() |
1458 | 1280 |
1459 | 1281 |
1462 self.grid.SetDimensions(0,0,s[0],s[1]-25) | 1284 self.grid.SetDimensions(0,0,s[0],s[1]-25) |
1463 self.sizer.SetDimension(0,s[1]-25,s[0],25) | 1285 self.sizer.SetDimension(0,s[1]-25,s[0],25) |
1464 (w,h) = self.grid.GetClientSizeTuple() | 1286 (w,h) = self.grid.GetClientSizeTuple() |
1465 cols = self.grid.GetNumberCols() | 1287 cols = self.grid.GetNumberCols() |
1466 col_w = w/(cols) | 1288 col_w = w/(cols) |
1467 for i in range(0,cols): | 1289 for i in range(0,cols): self.grid.SetColSize(i,col_w) |
1468 self.grid.SetColSize(i,col_w) | |
1469 | 1290 |
1470 class attack_grid(wx.grid.Grid): | 1291 class attack_grid(wx.grid.Grid): |
1471 """grid for attacks""" | 1292 """grid for attacks""" |
1472 def __init__(self, parent, handler): | 1293 def __init__(self, parent, handler): |
1473 pname = handler.master_dom.setAttribute("name", 'Melee') | 1294 pname = handler.xml.set("name", 'Melee') |
1474 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 1295 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1475 self.parent = parent | 1296 self.parent = parent |
1476 self.handler = handler | 1297 self.handler = handler |
1477 self.rows = (self.handler.melee,self.handler.ranged) | 1298 self.rows = (self.handler.melee,self.handler.ranged) |
1478 self.CreateGrid(2,10) | 1299 self.CreateGrid(2,10) |
1479 self.SetRowLabelSize(0) | 1300 self.SetRowLabelSize(0) |
1480 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'] |
1481 for i in range(len(col_names)): | 1302 for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i]) |
1482 self.SetColLabelValue(i,col_names[i]) | |
1483 self.SetCellValue(0,0,"Melee") | 1303 self.SetCellValue(0,0,"Melee") |
1484 self.SetCellValue(1,0,"Ranged") | 1304 self.SetCellValue(1,0,"Ranged") |
1485 self.refresh_data() | 1305 self.refresh_data() |
1486 self.Bind(wx.EVT_SIZE, self.on_size) | 1306 self.Bind(wx.EVT_SIZE, self.on_size) |
1487 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) |
1490 row = evt.GetRow() | 1310 row = evt.GetRow() |
1491 col = evt.GetCol() | 1311 col = evt.GetCol() |
1492 value = self.GetCellValue(row,col) | 1312 value = self.GetCellValue(row,col) |
1493 try: | 1313 try: |
1494 int(value) | 1314 int(value) |
1495 if col==1: | 1315 if col== 1: self.rows[row].set('base',value) |
1496 self.rows[row].setAttribute('base',value) | 1316 elif col== 2: self.rows[row].set('second',value) |
1497 elif col==2: | 1317 elif col== 3: self.rows[row].set('third',value) |
1498 self.rows[row].setAttribute('second',value) | 1318 elif col== 4: self.rows[row].set('forth',value) |
1499 elif col==3: | 1319 elif col== 5: self.rows[row].set('fifth',value) |
1500 self.rows[row].setAttribute('third',value) | 1320 elif col== 6: self.rows[row].set('sixth',value) |
1501 elif col==4: | 1321 elif col== 8: self.rows[row].set('misc',value) |
1502 self.rows[row].setAttribute('forth',value) | |
1503 elif col==5: | |
1504 self.rows[row].setAttribute('fifth',value) | |
1505 elif col==6: | |
1506 self.rows[row].setAttribute('sixth',value) | |
1507 elif col==8: | |
1508 self.rows[row].setAttribute('misc',value) | |
1509 self.parent.refresh_data() | 1322 self.parent.refresh_data() |
1510 except: | 1323 except: self.SetCellValue(row,col,"0") |
1511 self.SetCellValue(row,col,"0") | |
1512 | 1324 |
1513 def refresh_data(self): | 1325 def refresh_data(self): |
1514 melee = self.handler.get_attack_data('m') | 1326 melee = self.handler.get_attack_data('m') |
1515 ranged = self.handler.get_attack_data('r') | 1327 ranged = self.handler.get_attack_data('r') |
1516 for i in range(0,7): | 1328 for i in range(0,7): |
1523 self.SetReadOnly(0,7) | 1335 self.SetReadOnly(0,7) |
1524 self.SetReadOnly(1,7) | 1336 self.SetReadOnly(1,7) |
1525 self.SetReadOnly(0,9) | 1337 self.SetReadOnly(0,9) |
1526 self.SetReadOnly(1,9) | 1338 self.SetReadOnly(1,9) |
1527 | 1339 |
1528 | |
1529 def on_size(self,evt): | 1340 def on_size(self,evt): |
1530 (w,h) = self.GetClientSizeTuple() | 1341 (w,h) = self.GetClientSizeTuple() |
1531 cols = self.GetNumberCols() | 1342 cols = self.GetNumberCols() |
1532 col_w = w/(cols+1) | 1343 col_w = w/(cols+1) |
1533 self.SetColSize(0,col_w*2) | 1344 self.SetColSize(0,col_w*2) |
1534 for i in range(1,cols): | 1345 for i in range(1,cols): self.SetColSize(i,col_w) |
1535 self.SetColSize(i,col_w) | |
1536 evt.Skip() | 1346 evt.Skip() |
1537 self.Refresh() | 1347 self.Refresh() |
1538 | 1348 |
1539 class weapon_panel(wx.Panel): | 1349 class weapon_panel(wx.Panel): |
1540 def __init__(self, parent, handler): | 1350 def __init__(self, parent, handler): |
1541 pname = handler.master_dom.setAttribute("name", 'Weapons') | 1351 pname = handler.xml.set("name", 'Weapons') |
1542 wx.Panel.__init__(self, parent, -1) | 1352 wx.Panel.__init__(self, parent, -1) |
1543 self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 1353 self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1544 sizer = wx.BoxSizer(wx.HORIZONTAL) | 1354 sizer = wx.BoxSizer(wx.HORIZONTAL) |
1545 remove_btn = wx.Button(self, 10, "Remove Weapon") | 1355 remove_btn = wx.Button(self, 10, "Remove Weapon") |
1546 add_btn = wx.Button(self, 20, "Add Weapon") | 1356 add_btn = wx.Button(self, 20, "Add Weapon") |
1551 self.SetSizer(self.sizer) | 1361 self.SetSizer(self.sizer) |
1552 self.Bind(wx.EVT_SIZE, self.on_size) | 1362 self.Bind(wx.EVT_SIZE, self.on_size) |
1553 self.Bind(wx.EVT_BUTTON, self.on_remove, remove_btn) | 1363 self.Bind(wx.EVT_BUTTON, self.on_remove, remove_btn) |
1554 self.Bind(wx.EVT_BUTTON, self.on_add, add_btn) | 1364 self.Bind(wx.EVT_BUTTON, self.on_add, add_btn) |
1555 self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) | 1365 self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) |
1556 n_list = handler.master_dom.getElementsByTagName('weapon') | 1366 n_list = handler.xml.findall('weapon') |
1557 self.n_list = n_list | 1367 self.n_list = n_list |
1558 self.master_dom = handler.master_dom | 1368 self.xml = handler.xml |
1559 self.handler = handler | 1369 self.handler = handler |
1560 self.grid.CreateGrid(len(n_list),9,1) | 1370 self.grid.CreateGrid(len(n_list),9,1) |
1561 self.grid.SetRowLabelSize(0) | 1371 self.grid.SetRowLabelSize(0) |
1562 col_names = ['Name','damage','mod','critical','type','weight','range','size','Total'] | 1372 col_names = ['Name','damage','mod','critical','type','weight','range','size','Total'] |
1563 for i in range(len(col_names)): | 1373 for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i]) |
1564 self.grid.SetColLabelValue(i,col_names[i]) | |
1565 self.refresh_data() | 1374 self.refresh_data() |
1566 self.temp_dom = None | 1375 self.temp_dom = None |
1567 | 1376 |
1568 def on_cell_change(self,evt): | 1377 def on_cell_change(self,evt): |
1569 row = evt.GetRow() | 1378 row = evt.GetRow() |
1570 col = evt.GetCol() | 1379 col = evt.GetCol() |
1571 value = self.grid.GetCellValue(row,col) | 1380 value = self.grid.GetCellValue(row,col) |
1572 if col == 0: | 1381 if col == 0: self.n_list[row].set('name',value) |
1573 self.n_list[row].setAttribute('name',value) | |
1574 elif col == 2: | 1382 elif col == 2: |
1575 try: | 1383 try: |
1576 int(value) | 1384 int(value) |
1577 self.n_list[row].setAttribute('mod',value) | 1385 self.n_list[row].set('mod',value) |
1578 self.refresh_row(row) | 1386 self.refresh_row(row) |
1579 except: | 1387 except: self.grid.SetCellValue(row,col,"1") |
1580 self.grid.SetCellValue(row,col,"1") | 1388 else: self.n_list[row].set(self.grid.GetColLabelValue(col),value) |
1581 else: | |
1582 self.n_list[row].setAttribute(self.grid.GetColLabelValue(col),value) | |
1583 | 1389 |
1584 def refresh_row(self,i): | 1390 def refresh_row(self,i): |
1585 n = self.n_list[i] | 1391 n = self.n_list[i] |
1586 name = n.getAttribute('name') | 1392 name = n.get('name') |
1587 mod = n.getAttribute('mod') | 1393 mod = n.get('mod') |
1588 ran = n.getAttribute('range') | 1394 ran = n.get('range') |
1589 total = str(int(mod) + self.handler.get_mod(ran)) | 1395 total = str(int(mod) + self.handler.get_mod(ran)) |
1590 self.grid.SetCellValue(i,0,name) | 1396 self.grid.SetCellValue(i,0,name) |
1591 self.grid.SetCellValue(i,1,n.getAttribute('damage')) | 1397 self.grid.SetCellValue(i,1,n.get('damage')) |
1592 self.grid.SetCellValue(i,2,mod) | 1398 self.grid.SetCellValue(i,2,mod) |
1593 self.grid.SetCellValue(i,3,n.getAttribute('critical')) | 1399 self.grid.SetCellValue(i,3,n.get('critical')) |
1594 self.grid.SetCellValue(i,4,n.getAttribute('type')) | 1400 self.grid.SetCellValue(i,4,n.get('type')) |
1595 self.grid.SetCellValue(i,5,n.getAttribute('weight')) | 1401 self.grid.SetCellValue(i,5,n.get('weight')) |
1596 self.grid.SetCellValue(i,6,ran) | 1402 self.grid.SetCellValue(i,6,ran) |
1597 self.grid.SetCellValue(i,7,n.getAttribute('size') ) | 1403 self.grid.SetCellValue(i,7,n.get('size') ) |
1598 self.grid.SetCellValue(i,8,total) | 1404 self.grid.SetCellValue(i,8,total) |
1599 self.grid.SetReadOnly(i,8) | 1405 self.grid.SetReadOnly(i,8) |
1600 | 1406 |
1601 def on_remove(self,evt): | 1407 def on_remove(self,evt): |
1602 rows = self.grid.GetNumberRows() | 1408 rows = self.grid.GetNumberRows() |
1603 for i in range(rows): | 1409 for i in range(rows): |
1604 if self.grid.IsInSelection(i,0): | 1410 if self.grid.IsInSelection(i,0): |
1605 self.grid.DeleteRows(i) | 1411 self.grid.DeleteRows(i) |
1606 self.master_dom.removeChild(self.n_list[i]) | 1412 self.xml.remove(self.n_list[i]) |
1607 self.n_list = self.master_dom.getElementsByTagName('weapon') | 1413 self.n_list = self.xml.findall('weapon') |
1608 self.handler.refresh_weapons() | 1414 self.handler.refresh_weapons() |
1609 | 1415 |
1610 def on_add(self,evt): | 1416 def on_add(self,evt): |
1611 if not self.temp_dom: | 1417 if not self.temp_dom: |
1612 tmp = open(dir_struct["SWd20"]+"d20weapons.xml","r") | 1418 tree = parse(dir_struct["SWd20"]+"d20weapons.xml") |
1613 xml_dom = parseXml_with_dlg(self,tmp.read()) | 1419 self.temp_dom = tree.getroot() |
1614 xml_dom = xml_dom._get_firstChild() | 1420 f_list = self.temp_dom.findall('weapon') |
1615 tmp.close() | |
1616 self.temp_dom = xml_dom | |
1617 f_list = self.temp_dom.getElementsByTagName('weapon') | |
1618 opts = [] | 1421 opts = [] |
1619 for f in f_list: | 1422 for f in f_list: |
1620 opts.append(f.getAttribute('name')) | 1423 opts.append(f.get('name')) |
1621 dlg = wx.SingleChoiceDialog(self,'Choose Weapon','Weapon List',opts) | 1424 dlg = wx.SingleChoiceDialog(self,'Choose Weapon','Weapon List',opts) |
1622 if dlg.ShowModal() == wx.ID_OK: | 1425 if dlg.ShowModal() == wx.ID_OK: |
1623 i = dlg.GetSelection() | 1426 i = dlg.GetSelection() |
1624 new_node = self.master_dom.appendChild(f_list[i].cloneNode(False)) | 1427 new_node = self.xml.append(f_list[i]) |
1625 self.grid.AppendRows(1) | 1428 self.grid.AppendRows(1) |
1626 self.n_list = self.master_dom.getElementsByTagName('weapon') | 1429 self.n_list = self.xml.findall('weapon') |
1627 self.refresh_row(self.grid.GetNumberRows()-1) | 1430 self.refresh_row(self.grid.GetNumberRows()-1) |
1628 self.handler.refresh_weapons() | 1431 self.handler.refresh_weapons() |
1629 dlg.Destroy() | 1432 dlg.Destroy() |
1630 | 1433 |
1631 def on_size(self,event): | 1434 def on_size(self,event): |
1634 self.sizer.SetDimension(0,s[1]-25,s[0],25) | 1437 self.sizer.SetDimension(0,s[1]-25,s[0],25) |
1635 (w,h) = self.grid.GetClientSizeTuple() | 1438 (w,h) = self.grid.GetClientSizeTuple() |
1636 cols = self.grid.GetNumberCols() | 1439 cols = self.grid.GetNumberCols() |
1637 col_w = w/(cols+1) | 1440 col_w = w/(cols+1) |
1638 self.grid.SetColSize(0,col_w*2) | 1441 self.grid.SetColSize(0,col_w*2) |
1639 for i in range(1,cols): | 1442 for i in range(1,cols): self.grid.SetColSize(i,col_w) |
1640 self.grid.SetColSize(i,col_w) | |
1641 | 1443 |
1642 def refresh_data(self): | 1444 def refresh_data(self): |
1643 for i in range(len(self.n_list)): | 1445 for i in range(len(self.n_list)): self.refresh_row(i) |
1644 self.refresh_row(i) | |
1645 | 1446 |
1646 | 1447 |
1647 class attack_panel(wx.Panel): | 1448 class attack_panel(wx.Panel): |
1648 def __init__(self, parent, handler): | 1449 def __init__(self, parent, handler): |
1649 pname = handler.master_dom.setAttribute("name", 'Melee') | 1450 pname = handler.xml.set("name", 'Melee') |
1650 wx.Panel.__init__(self, parent, -1) | 1451 wx.Panel.__init__(self, parent, -1) |
1651 | |
1652 self.a_grid = attack_grid(self, handler) | 1452 self.a_grid = attack_grid(self, handler) |
1653 self.w_panel = weapon_panel(self, handler) | 1453 self.w_panel = weapon_panel(self, handler) |
1654 self.sizer = wx.BoxSizer(wx.VERTICAL) | 1454 self.sizer = wx.BoxSizer(wx.VERTICAL) |
1655 self.sizer.Add(self.a_grid, 1, wx.EXPAND) | 1455 self.sizer.Add(self.a_grid, 1, wx.EXPAND) |
1656 self.sizer.Add(self.w_panel, 2, wx.EXPAND) | 1456 self.sizer.Add(self.w_panel, 2, wx.EXPAND) |
1666 self.a_grid.refresh_data() | 1466 self.a_grid.refresh_data() |
1667 | 1467 |
1668 | 1468 |
1669 class ac_panel(wx.Panel): | 1469 class ac_panel(wx.Panel): |
1670 def __init__(self, parent, handler): | 1470 def __init__(self, parent, handler): |
1671 pname = handler.master_dom.setAttribute("name", 'Armor') | 1471 pname = handler.xml.set("name", 'Armor') |
1672 wx.Panel.__init__(self, parent, -1) | 1472 wx.Panel.__init__(self, parent, -1) |
1673 self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 1473 self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1674 sizer = wx.BoxSizer(wx.HORIZONTAL) | 1474 sizer = wx.BoxSizer(wx.HORIZONTAL) |
1675 remove_btn = wx.Button(self, 10, "Remove Armor") | 1475 remove_btn = wx.Button(self, 10, "Remove Armor") |
1676 add_btn = wx.Button(self, 20, "Add Armor") | 1476 add_btn = wx.Button(self, 20, "Add Armor") |
1681 self.SetSizer(self.sizer) | 1481 self.SetSizer(self.sizer) |
1682 self.Bind(wx.EVT_SIZE, self.on_size) | 1482 self.Bind(wx.EVT_SIZE, self.on_size) |
1683 self.Bind(wx.EVT_BUTTON, self.on_remove, remove_btn) | 1483 self.Bind(wx.EVT_BUTTON, self.on_remove, remove_btn) |
1684 self.Bind(wx.EVT_BUTTON, self.on_add, add_btn) | 1484 self.Bind(wx.EVT_BUTTON, self.on_add, add_btn) |
1685 self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) | 1485 self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) |
1686 self.master_dom = handler.master_dom | 1486 self.xml = handler.xml |
1687 n_list = handler.master_dom._get_childNodes() | 1487 n_list = handler.xml.getchildren() |
1688 self.n_list = n_list | 1488 self.n_list = n_list |
1689 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'] |
1690 self.grid.CreateGrid(len(n_list),len(col_names),1) | 1490 self.grid.CreateGrid(len(n_list),len(col_names),1) |
1691 self.grid.SetRowLabelSize(0) | 1491 self.grid.SetRowLabelSize(0) |
1692 for i in range(len(col_names)): | 1492 for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i]) |
1693 self.grid.SetColLabelValue(i,col_names[i]) | |
1694 self.atts =['name','bonus','maxdex','checkpenalty','weight','speed','speed6','type'] | 1493 self.atts =['name','bonus','maxdex','checkpenalty','weight','speed','speed6','type'] |
1695 for i in range(len(n_list)): | 1494 for i in range(len(n_list)): self.refresh_row(i) |
1696 self.refresh_row(i) | |
1697 self.temp_dom = None | 1495 self.temp_dom = None |
1698 | 1496 |
1699 | 1497 |
1700 def on_cell_change(self,evt): | 1498 def on_cell_change(self,evt): |
1701 row = evt.GetRow() | 1499 row = evt.GetRow() |
1702 col = evt.GetCol() | 1500 col = evt.GetCol() |
1703 value = self.grid.GetCellValue(row,col) | 1501 value = self.grid.GetCellValue(row,col) |
1704 if col >= 1 and col <= 5: | 1502 if col >= 1 and col <= 5: |
1705 try: | 1503 try: |
1706 int(value) | 1504 int(value) |
1707 self.n_list[row].setAttribute(self.atts[col],value) | 1505 self.n_list[row].set(self.atts[col],value) |
1708 except: | 1506 except: self.grid.SetCellValue(row,col,"0") |
1709 self.grid.SetCellValue(row,col,"0") | 1507 else: self.n_list[row].set(self.atts[col],value) |
1710 else: | |
1711 self.n_list[row].setAttribute(self.atts[col],value) | |
1712 | 1508 |
1713 def refresh_row(self,i): | 1509 def refresh_row(self,i): |
1714 n = self.n_list[i] | 1510 n = self.n_list[i] |
1715 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])) |
1716 self.grid.SetCellValue(i,y,n.getAttribute(self.atts[y])) | |
1717 | 1512 |
1718 def on_remove(self,evt): | 1513 def on_remove(self,evt): |
1719 rows = self.grid.GetNumberRows() | 1514 rows = self.grid.GetNumberRows() |
1720 for i in range(rows): | 1515 for i in range(rows): |
1721 if self.grid.IsInSelection(i,0): | 1516 if self.grid.IsInSelection(i,0): |
1722 self.grid.DeleteRows(i) | 1517 self.grid.DeleteRows(i) |
1723 self.master_dom.removeChild(self.n_list[i]) | 1518 self.xml.remove(self.n_list[i]) |
1724 | 1519 |
1725 def on_add(self,evt): | 1520 def on_add(self,evt): |
1726 if not self.temp_dom: | 1521 if not self.temp_dom: |
1727 tmp = open(dir_struct["SWd20"]+"d20armor.xml","r") | 1522 tree = parse(dir_struct["SWd20"]+"d20armor.xml") |
1728 xml_dom = parseXml_with_dlg(self,tmp.read()) | 1523 self.temp_dom = tree.getroot() |
1729 xml_dom = xml_dom._get_firstChild() | 1524 f_list = self.temp_dom.findall('armor') |
1730 tmp.close() | |
1731 self.temp_dom = xml_dom | |
1732 f_list = self.temp_dom.getElementsByTagName('armor') | |
1733 opts = [] | 1525 opts = [] |
1734 for f in f_list: | 1526 for f in f_list: opts.append(f.get('name')) |
1735 opts.append(f.getAttribute('name')) | |
1736 dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts) | 1527 dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts) |
1737 if dlg.ShowModal() == wx.ID_OK: | 1528 if dlg.ShowModal() == wx.ID_OK: |
1738 i = dlg.GetSelection() | 1529 i = dlg.GetSelection() |
1739 new_node = self.master_dom.appendChild(f_list[i].cloneNode(False)) | 1530 new_node = self.xml.append(f_list[i]) |
1740 self.grid.AppendRows(1) | 1531 self.grid.AppendRows(1) |
1741 self.refresh_row(self.grid.GetNumberRows()-1) | 1532 self.refresh_row(self.grid.GetNumberRows()-1) |
1742 dlg.Destroy() | 1533 dlg.Destroy() |
1743 | 1534 |
1744 def on_size(self,event): | 1535 def on_size(self,event): |
1747 self.sizer.SetDimension(0,s[1]-25,s[0],25) | 1538 self.sizer.SetDimension(0,s[1]-25,s[0],25) |
1748 (w,h) = self.grid.GetClientSizeTuple() | 1539 (w,h) = self.grid.GetClientSizeTuple() |
1749 cols = self.grid.GetNumberCols() | 1540 cols = self.grid.GetNumberCols() |
1750 col_w = w/(cols+2) | 1541 col_w = w/(cols+2) |
1751 self.grid.SetColSize(0,col_w*3) | 1542 self.grid.SetColSize(0,col_w*3) |
1752 for i in range(1,cols): | 1543 for i in range(1,cols): self.grid.SetColSize(i,col_w) |
1753 self.grid.SetColSize(i,col_w) | |
1754 | 1544 |
1755 | 1545 |
1756 class class_panel(wx.Panel): | 1546 class class_panel(wx.Panel): |
1757 def __init__(self, parent, handler): | 1547 def __init__(self, parent, handler): |
1758 pname = handler.master_dom.setAttribute("name", 'Class') | 1548 pname = handler.xml.set("name", 'Class') |
1759 wx.Panel.__init__(self, parent, -1) | 1549 wx.Panel.__init__(self, parent, -1) |
1760 self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) | 1550 self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS) |
1761 sizer = wx.BoxSizer(wx.HORIZONTAL) | 1551 sizer = wx.BoxSizer(wx.HORIZONTAL) |
1762 remove_btn = wx.Button(self, wx.ID_ANY, "Remove Class") | 1552 remove_btn = wx.Button(self, wx.ID_ANY, "Remove Class") |
1763 add_btn = wx.Button(self, wx.ID_ANY, "Add Class") | 1553 add_btn = wx.Button(self, wx.ID_ANY, "Add Class") |
1769 self.Bind(wx.EVT_SIZE, self.on_size) | 1559 self.Bind(wx.EVT_SIZE, self.on_size) |
1770 self.Bind(wx.EVT_BUTTON, self.on_remove, remove_btn) | 1560 self.Bind(wx.EVT_BUTTON, self.on_remove, remove_btn) |
1771 self.Bind(wx.EVT_BUTTON, self.on_add, add_btn) | 1561 self.Bind(wx.EVT_BUTTON, self.on_add, add_btn) |
1772 self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) | 1562 self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change) |
1773 | 1563 |
1774 n_list = handler.master_dom._get_childNodes() | 1564 n_list = handler.xml.getchildren() |
1775 self.n_list = n_list | 1565 self.n_list = n_list |
1776 self.master_dom = handler.master_dom | 1566 self.xml = handler.xml |
1777 self.grid.CreateGrid(len(n_list),2,1) | 1567 self.grid.CreateGrid(len(n_list),2,1) |
1778 self.grid.SetRowLabelSize(0) | 1568 self.grid.SetRowLabelSize(0) |
1779 self.grid.SetColLabelValue(0,"Class") | 1569 self.grid.SetColLabelValue(0,"Class") |
1780 self.grid.SetColLabelValue(1,"Level") | 1570 self.grid.SetColLabelValue(1,"Level") |
1781 for i in range(len(n_list)): | 1571 for i in range(len(n_list)): self.refresh_row(i) |
1782 self.refresh_row(i) | |
1783 self.temp_dom = None | 1572 self.temp_dom = None |
1784 | 1573 |
1785 def on_cell_change(self,evt): | 1574 def on_cell_change(self,evt): |
1786 row = evt.GetRow() | 1575 row = evt.GetRow() |
1787 col = evt.GetCol() | 1576 col = evt.GetCol() |
1788 value = self.grid.GetCellValue(row,col) | 1577 value = self.grid.GetCellValue(row,col) |
1789 try: | 1578 try: |
1790 int(value) | 1579 int(value) |
1791 self.n_list[row].setAttribute('level',value) | 1580 self.n_list[row].set('level',value) |
1792 except: | 1581 except: self.grid.SetCellValue(row,col,"1") |
1793 self.grid.SetCellValue(row,col,"1") | |
1794 | 1582 |
1795 | 1583 |
1796 def refresh_row(self,i): | 1584 def refresh_row(self,i): |
1797 n = self.n_list[i] | 1585 n = self.n_list[i] |
1798 name = n.getAttribute('name') | 1586 name = n.get('name') |
1799 level = n.getAttribute('level') | 1587 level = n.get('level') |
1800 self.grid.SetCellValue(i,0,name) | 1588 self.grid.SetCellValue(i,0,name) |
1801 self.grid.SetReadOnly(i,0) | 1589 self.grid.SetReadOnly(i,0) |
1802 self.grid.SetCellValue(i,1,level) | 1590 self.grid.SetCellValue(i,1,level) |
1803 #self.grid.SetReadOnly(i,1) | |
1804 | 1591 |
1805 def on_remove(self,evt): | 1592 def on_remove(self,evt): |
1806 rows = self.grid.GetNumberRows() | 1593 rows = self.grid.GetNumberRows() |
1807 for i in range(rows): | 1594 for i in range(rows): |
1808 if self.grid.IsInSelection(i,0): | 1595 if self.grid.IsInSelection(i,0): |
1809 self.grid.DeleteRows(i) | 1596 self.grid.DeleteRows(i) |
1810 self.master_dom.removeChild(self.n_list[i]) | 1597 self.xml.remove(self.n_list[i]) |
1811 | 1598 |
1812 def on_add(self,evt): | 1599 def on_add(self,evt): |
1813 if not self.temp_dom: | 1600 if not self.temp_dom: |
1814 tmp = open(dir_struct["SWd20"]+"SWd20classes.xml","r") | 1601 tree = parse(dir_struct["SWd20"]+"SWd20classes.xml") |
1815 xml_dom = parseXml_with_dlg(self,tmp.read()) | 1602 self.temp_dom = tree.getroot() |
1816 xml_dom = xml_dom._get_firstChild() | 1603 f_list = self.temp_dom.findall('class') |
1817 tmp.close() | |
1818 self.temp_dom = xml_dom | |
1819 f_list = self.temp_dom.getElementsByTagName('class') | |
1820 opts = [] | 1604 opts = [] |
1821 for f in f_list: | 1605 for f in f_list: opts.append(f.get('name')) |
1822 opts.append(f.getAttribute('name')) | |
1823 dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts) | 1606 dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts) |
1824 if dlg.ShowModal() == wx.ID_OK: | 1607 if dlg.ShowModal() == wx.ID_OK: |
1825 i = dlg.GetSelection() | 1608 i = dlg.GetSelection() |
1826 new_node = self.master_dom.appendChild(f_list[i].cloneNode(False)) | 1609 new_node = self.xml.append(f_list[i]) |
1827 self.grid.AppendRows(1) | 1610 self.grid.AppendRows(1) |
1828 self.refresh_row(self.grid.GetNumberRows()-1) | 1611 self.refresh_row(self.grid.GetNumberRows()-1) |
1829 dlg.Destroy() | 1612 dlg.Destroy() |
1830 | 1613 |
1831 | 1614 |
1834 self.grid.SetDimensions(0,0,s[0],s[1]-25) | 1617 self.grid.SetDimensions(0,0,s[0],s[1]-25) |
1835 self.sizer.SetDimension(0,s[1]-25,s[0],25) | 1618 self.sizer.SetDimension(0,s[1]-25,s[0],25) |
1836 (w,h) = self.grid.GetClientSizeTuple() | 1619 (w,h) = self.grid.GetClientSizeTuple() |
1837 cols = self.grid.GetNumberCols() | 1620 cols = self.grid.GetNumberCols() |
1838 col_w = w/(cols) | 1621 col_w = w/(cols) |
1839 for i in range(0,cols): | 1622 for i in range(0,cols): self.grid.SetColSize(i,col_w) |
1840 self.grid.SetColSize(i,col_w) | 1623 |