Mercurial > traipse_dev
comparison plugins/xxsimpleinit.py @ 0:4385a7d0efd1 grumpy-goblin
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author | sirebral |
---|---|
date | Tue, 14 Jul 2009 16:41:58 -0500 |
parents | |
children | c160f26ecf65 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4385a7d0efd1 |
---|---|
1 import os | |
2 import orpg.pluginhandler | |
3 from orpg.orpgCore import * | |
4 import wx | |
5 | |
6 class Plugin(orpg.pluginhandler.PluginHandler): | |
7 # Initialization subroutine. | |
8 # | |
9 # !self : instance of self | |
10 # !openrpg : instance of the the base openrpg control | |
11 def __init__(self, plugindb, parent): | |
12 orpg.pluginhandler.PluginHandler.__init__(self, plugindb, parent) | |
13 self.orpgframe = open_rpg.get_component('frame') | |
14 | |
15 # The Following code should be edited to contain the proper information | |
16 self.name = 'Simple Init' | |
17 self.author = 'Dj Gilcrease' | |
18 self.help = 'This is a simplistic Init tool that does not relie on Chat message parsing' | |
19 | |
20 #You can set variables below here. Always set them to a blank value in this section. Use plugin_enabled | |
21 #to set their proper values. | |
22 | |
23 def plugin_menu(self): | |
24 self.menu = wx.Menu() | |
25 | |
26 self.toggle = self.menu.AppendCheckItem(wx.ID_ANY, 'Show') | |
27 self.topframe.Bind(wx.EVT_MENU, self.on_init, self.toggle) | |
28 self.toggle.Check(True) | |
29 | |
30 | |
31 def plugin_enabled(self): | |
32 self.plugin_addcommand('/inittoggle', self.on_init, '- This will Show or Hide the Init window') | |
33 self.plugin_addcommand('/rollinit', self.rollInit, '- This will roll a new set of Inits', False) | |
34 self.plugin_addcommand('/startcombat', self.startInit, '- This will start the combat', False) | |
35 self.plugin_addcommand('/nextplayer', self.advanceInit, '- This will advance the Initiative to the next Player', False) | |
36 self.plugin_addcommand('/stopcombat', self.stopInit, '- This will end the combat', False) | |
37 self.plugin_addcommand('/pausecombat', self.pauseInit, '- This will pause the auto Advancer', False) | |
38 | |
39 self.InitSaves = self.plugindb.GetDict("xxsimpleinit", "InitSaves", {}) | |
40 self.frame = InitFrame(self) | |
41 self.frame.Show() | |
42 self.advanceTimer = wx.Timer(self.frame, wx.NewId()) | |
43 self.frame.Bind(wx.EVT_TIMER, self.advanceInit, self.advanceTimer) | |
44 self.buttonTimer = wx.Timer(self.frame, wx.NewId()) | |
45 self.frame.Bind(wx.EVT_TIMER, self.buttonCheck, self.buttonTimer) | |
46 self.buttonTimer.Start(250) | |
47 self.autoAdvancePaused = False | |
48 #self.PluginMenu() | |
49 | |
50 def plugin_disabled(self): | |
51 self.plugin_removecmd('/inittoggle') | |
52 self.plugin_removecmd('/rollinit') | |
53 self.plugin_removecmd('/startcombat') | |
54 self.plugin_removecmd('/nextplayer') | |
55 self.plugin_removecmd('/stopcombat') | |
56 self.plugin_removecmd('/pausecombat') | |
57 | |
58 self.advanceTimer.Stop() | |
59 del self.advanceTimer | |
60 | |
61 self.buttonTimer.Stop() | |
62 del self.buttonTimer | |
63 | |
64 try: | |
65 self.frame.Destroy() | |
66 except: | |
67 pass | |
68 | |
69 def on_init(self, cmdargs): | |
70 if self.frame.IsShown(): | |
71 self.toggle.Check(False) | |
72 self.frame.Hide() | |
73 else: | |
74 self.toggle.Check(True) | |
75 self.frame.Show() | |
76 print self.toggle.IsChecked() | |
77 | |
78 def startInit(self, evt=None): | |
79 if self.frame.initList.GetItemCount() == 0: | |
80 self.chat.InfoPost('You need to add some stuff to the Init list before you start') | |
81 return | |
82 | |
83 if not self.frame.startButton.IsEnabled(): | |
84 self.chat.InfoPost('Combat Round has already started! You must Stop the current combat to start a new one.') | |
85 return | |
86 | |
87 self.orpgframe.Freeze() | |
88 self.frame.Freeze() | |
89 self.frame.nextButton.Enable() | |
90 self.frame.stopButton.Enable() | |
91 self.frame.startButton.Disable() | |
92 self.frame.rollButton.Disable() | |
93 self.frame.autoAdvanceCheck.Disable() | |
94 self.frame.autoAdvanceList.Disable() | |
95 self.frame.autoAdvanceToggle.Enable() | |
96 self.frame.addButton.Disable() | |
97 self.frame.editButton.Disable() | |
98 self.frame.deleteButton.Disable() | |
99 self.frame.saveButton.Disable() | |
100 self.frame.loadButton.Disable() | |
101 self.frame.clearButton.Disable() | |
102 | |
103 self.frame.currentInit = -1 | |
104 self.round = 0 | |
105 | |
106 self.chat.Post('<font color="#00ff00" size="4"><b>============ START COMBAT ============</b></font>', True, True) | |
107 self.advanceInit() | |
108 self.frame.Thaw() | |
109 | |
110 if self.frame.autoAdvanceCheck.IsChecked(): | |
111 time = int(60000*int(self.frame.autoAdvanceList.GetStringSelection())) | |
112 self.advanceTimer.Start(time) | |
113 else: | |
114 self.frame.addButton.Enable() | |
115 self.frame.editButton.Enable() | |
116 self.frame.deleteButton.Enable() | |
117 | |
118 if self.frame.IsShown(): | |
119 wx.CallAfter(self.frame.SetFocus) | |
120 | |
121 wx.CallAfter(self.orpgframe.Thaw) | |
122 | |
123 def stopInit(self, evt=None): | |
124 if not self.frame.stopButton.IsEnabled(): | |
125 self.chat.InfoPost('Combat is already ended!') | |
126 return | |
127 | |
128 self.frame.Freeze() | |
129 self.frame.nextButton.Disable() | |
130 self.frame.stopButton.Disable() | |
131 self.frame.startButton.Enable() | |
132 self.frame.rollButton.Enable() | |
133 self.frame.autoAdvanceCheck.Enable() | |
134 self.frame.autoAdvanceList.Enable() | |
135 self.frame.autoAdvanceToggle.Disable() | |
136 self.frame.addButton.Enable() | |
137 self.frame.editButton.Enable() | |
138 self.frame.deleteButton.Enable() | |
139 self.frame.saveButton.Enable() | |
140 self.frame.loadButton.Enable() | |
141 self.frame.clearButton.Enable() | |
142 | |
143 for i in xrange(0, self.frame.initList.GetItemCount()): | |
144 self.frame.currentInit = i | |
145 if self.frame.currentInit.type == 'Effect': | |
146 self.frame.initList.DeleteItem(i) | |
147 | |
148 self.frame.currentInit = 0 | |
149 | |
150 if self.autoAdvancePaused and self.frame.autoAdvanceCheck.IsChecked(): | |
151 self.pauseInit('No Adv') | |
152 self.frame.Thaw() | |
153 | |
154 self.advanceTimer.Stop() | |
155 self.chat.Post('<font color="#ff0000" size="4"><b>============ END COMBAT ============</b></font>', True, True) | |
156 | |
157 def advanceInit(self, evt=None): | |
158 if not self.frame.nextButton.IsEnabled(): | |
159 self.chat.InfoPost('You must first Start combat inorder to advance the initiative turn!') | |
160 return | |
161 | |
162 self.frame.currentInit = self.frame.initIdx+1 | |
163 if self.frame.currentInit.type == 'Effect': | |
164 newDur = str(int(self.frame.currentInit.duration)-1) | |
165 self.frame.initList.SetStringItem(self.frame.initIdx, 2, newDur) | |
166 msg = '<br><table width="100%" border="1"><tr><td align="center"><center><u><b><font color="#ff0000" size="4">EFFECT NOTICE</font></b></u></center></td></tr>' | |
167 msg += '<tr><td align="center"><font color="#000000">' + self.frame.currentInit.name + ' has ' + newDur + ' rounds remaining</font></td></tr></table>' | |
168 self.chat.Post(msg, True, True) | |
169 wx.CallAfter(self.advanceInit) | |
170 else: | |
171 msg = '<br><table width="100%" border="1"><tr><td align="center"><center><u><font color="#ff0000" size="4"><b>' + self.frame.nextMessage.GetValue() + '</b></font></u></center></td></tr>' | |
172 msg += '<tr><td align="center"><b><font size="3"><font color="#ff0000">' + str(self.frame.initIdx+1) + ':</font> ' | |
173 msg += '<font color="#0000ff">(' + self.frame.currentInit.init + ')</font> ' | |
174 msg += '<font color="#000000">' + self.frame.currentInit.name + '</b></font></font></td></tr></table>' | |
175 self.chat.Post(msg, True, True) | |
176 | |
177 if self.frame.currentInit.type == 'Effect' and int(self.frame.currentInit.duration) <= 0: | |
178 self.frame.Freeze() | |
179 cidx = self.frame.initIdx | |
180 self.frame.initList.DeleteItem(cidx) | |
181 self.frame.currentInit = cidx | |
182 self.frame.Thaw() | |
183 | |
184 def pauseInit(self, evt=None): | |
185 self.frame.Freeze() | |
186 if not self.autoAdvancePaused: | |
187 self.frame.autoAdvanceToggle.SetLabel('Resume Auto Advance') | |
188 self.autoAdvancePaused = True | |
189 self.advanceTimer.Stop() | |
190 self.frame.nextButton.Disable() | |
191 self.frame.addButton.Enable() | |
192 self.frame.editButton.Enable() | |
193 self.frame.deleteButton.Enable() | |
194 else: | |
195 self.frame.autoAdvanceToggle.SetLabel('Pause Auto Advance') | |
196 self.frame.nextButton.Enable() | |
197 self.frame.addButton.Disable() | |
198 self.frame.editButton.Disable() | |
199 self.frame.deleteButton.Disable() | |
200 self.autoAdvancePaused = False | |
201 if evt != 'No Adv': | |
202 self.advanceInit() | |
203 self.advanceTimer.Start() | |
204 self.frame.Thaw() | |
205 | |
206 def newRound(self): | |
207 self.round += 1 | |
208 msg = '<br><hr><font color="#ff0000" size="4"><b>End of Round #' + str(self.round-1) + ', Starting Round #' + str(self.round) + '</b></font><hr>' | |
209 self.chat.Post(msg, True, True) | |
210 | |
211 def rollD20Init(self): | |
212 if not self.frame.rollButton.IsEnabled(): | |
213 self.chat.InfoPost("You cannot roll new Inits at this time") | |
214 return | |
215 self.orpgframe.Freeze() | |
216 self.frame.Freeze() | |
217 msg = '<br><font color="#0000ff" size="4"><b>============ START INIT LIST ============</b></font><br>' | |
218 msg += '<font color="#000000"><b>' | |
219 for i in xrange(0, self.frame.initList.GetItemCount()): | |
220 self.frame.currentInit = i | |
221 if self.frame.currentInit.manual == 'No': | |
222 initRoll = self.chat.ParseDice('[1d20' + self.frame.currentInit.initMod + ']') | |
223 | |
224 initRoll = initRoll.split('(') | |
225 initRoll = initRoll[1].replace(')','') | |
226 self.frame.initList.SetStringItem(i, 4, initRoll) | |
227 self.frame.initList.SetItemData(i, int(initRoll)) | |
228 else: | |
229 initRoll = self.frame.currentInit.init | |
230 | |
231 if self.frame.currentInit.type != 'Effect': | |
232 msg += '<br>' + self.frame.currentInit.name + ' = <font color="#ff0000">' + initRoll + '</font>' | |
233 | |
234 msg += '</b></font><br>' | |
235 | |
236 self.frame.initList.SortItems(self.frame.initSort) | |
237 msg += '<font color="#0000ff" size="4"><b>============ END INIT LIST ============</b></font>' | |
238 self.chat.Post(msg, True, True) | |
239 | |
240 self.frame.Thaw() | |
241 if self.frame.IsShown(): | |
242 wx.CallAfter(self.frame.SetFocus) | |
243 wx.CallAfter(self.orpgframe.Thaw) | |
244 | |
245 #Events | |
246 def rollInit(self, evt): | |
247 if self.frame.initRollType.GetStringSelection() == 'd20': | |
248 self.rollD20Init() | |
249 | |
250 def buttonCheck(self, evt): | |
251 if self.autoAdvancePaused: | |
252 return | |
253 if self.frame.initList.GetItemCount() == 0: | |
254 self.frame.Freeze() | |
255 self.advanceTimer.Stop() | |
256 self.frame.startButton.Disable() | |
257 self.frame.rollButton.Disable() | |
258 self.frame.nextButton.Disable() | |
259 self.frame.stopButton.Disable() | |
260 self.frame.editButton.Disable() | |
261 self.frame.deleteButton.Disable() | |
262 self.frame.saveButton.Disable() | |
263 self.frame.clearButton.Disable() | |
264 self.frame.Thaw() | |
265 elif not self.frame.stopButton.IsEnabled(): | |
266 self.frame.startButton.Enable() | |
267 self.frame.rollButton.Enable() | |
268 self.frame.editButton.Enable() | |
269 self.frame.deleteButton.Enable() | |
270 self.frame.saveButton.Enable() | |
271 self.frame.clearButton.Enable() | |
272 | |
273 if not self.frame.autoAdvanceCheck.IsChecked(): | |
274 self.frame.autoAdvanceToggle.Disable() | |
275 self.autoAdvancePaused = True | |
276 elif self.frame.autoAdvanceCheck.IsChecked() and self.frame.stopButton.IsEnabled(): | |
277 self.frame.autoAdvanceToggle.Enable() | |
278 | |
279 class InitFrame(wx.Frame): | |
280 def __init__(self, plugin): | |
281 self.plugin = plugin | |
282 self.toggle = plugin.toggle | |
283 self.log = open_rpg.get_component('log') | |
284 self.log.log("Enter InitFrame", ORPG_DEBUG) | |
285 | |
286 wx.Frame.__init__(self, None, wx.ID_ANY, title="Simple Init", style=wx.DEFAULT_FRAME_STYLE) | |
287 self.SetOwnBackgroundColour('#EFEFEF') | |
288 | |
289 self.dir_struct = open_rpg.get_component('dir_struct') | |
290 self.settings = open_rpg.get_component('settings') | |
291 self.xml = open_rpg.get_component('xml') | |
292 self.validate = open_rpg.get_component('validate') | |
293 | |
294 self.Freeze() | |
295 self.buildMenu() | |
296 self.buildButtons() | |
297 self.buildGUI() | |
298 wx.CallAfter(self.InitSetup) | |
299 | |
300 self.Bind(wx.EVT_CLOSE, self.onCloseWindow) | |
301 | |
302 self.log.log("Exit InitFrame", ORPG_DEBUG) | |
303 | |
304 def InitSetup(self): | |
305 self.chat = open_rpg.get_component('chat') | |
306 self.gametree = open_rpg.get_component('tree') | |
307 self.map = open_rpg.get_component('map') | |
308 self.session = open_rpg.get_component('session') | |
309 | |
310 self.initIdx = -1 | |
311 self.Thaw() | |
312 | |
313 def initSort(self, item1, item2): | |
314 if item1 == item2: | |
315 return 0 | |
316 elif item1 > item2: | |
317 return -1 | |
318 elif item1 < item2: | |
319 return 1 | |
320 | |
321 return 0 | |
322 | |
323 def onCloseWindow(self, evt): | |
324 self.Hide() | |
325 self.toggle.Check(False) | |
326 | |
327 def buildMenu(self): | |
328 self.log.log("Enter InitFrame->buildMenu(self)", ORPG_DEBUG) | |
329 | |
330 initmenu = wx.Menu() | |
331 | |
332 item = wx.MenuItem(initmenu, wx.ID_ANY, "Add\tInsert", "Add") | |
333 self.Bind(wx.EVT_MENU, self.OnMB_InitAdd, item) | |
334 initmenu.AppendItem(item) | |
335 | |
336 item = wx.MenuItem(initmenu, wx.ID_ANY, "Edit\tCtrl+E", "Edit") | |
337 self.Bind(wx.EVT_MENU, self.OnMB_InitEdit, item) | |
338 initmenu.AppendItem(item) | |
339 | |
340 item = wx.MenuItem(initmenu, wx.ID_ANY, "Delete\tCtrl+D", "Delete") | |
341 self.Bind(wx.EVT_MENU, self.OnMB_InitDelete, item) | |
342 initmenu.AppendItem(item) | |
343 | |
344 item = wx.MenuItem(initmenu, wx.ID_ANY, "Clear\tCtrl+C", "Clear") | |
345 self.Bind(wx.EVT_MENU, self.OnMB_InitClear, item) | |
346 initmenu.AppendItem(item) | |
347 | |
348 initmenu.AppendSeparator() | |
349 | |
350 item = wx.MenuItem(initmenu, wx.ID_ANY, "Next\tEnter", "Next") | |
351 self.Bind(wx.EVT_MENU, self.plugin.advanceInit, item) | |
352 initmenu.AppendItem(item) | |
353 | |
354 initmenu.AppendSeparator() | |
355 | |
356 item = wx.MenuItem(initmenu, wx.ID_ANY, "Save\tCtrl+S", "Save Current Init List") | |
357 self.Bind(wx.EVT_MENU, self.OnMB_InitSave, item) | |
358 initmenu.AppendItem(item) | |
359 | |
360 item = wx.MenuItem(initmenu, wx.ID_ANY, "Load", "Load New Init List") | |
361 self.Bind(wx.EVT_MENU, self.OnMB_InitLoad, item) | |
362 initmenu.AppendItem(item) | |
363 | |
364 menu = wx.MenuBar() | |
365 menu.Append(initmenu, "&Init") | |
366 | |
367 self.SetMenuBar(menu) | |
368 | |
369 self.log.log("Exit InitFrame->buildMenu(self)", ORPG_DEBUG) | |
370 | |
371 def buildButtons(self): | |
372 self.log.log("Enter InitFrame->buildButtons(self)", ORPG_DEBUG) | |
373 | |
374 self.autoAdvanceCheck = wx.CheckBox(self, wx.ID_ANY, "") | |
375 self.autoAdvanceCheck.SetValue(True) | |
376 self.autoAdvanceList = wx.Choice(self, wx.ID_ANY, choices=['1','2','3','4','5']) | |
377 self.autoAdvanceList.SetSelection(2) | |
378 self.autoAdvanceToggle = wx.Button(self, wx.ID_ANY, "Pause Auto Advance") | |
379 self.Bind(wx.EVT_BUTTON, self.plugin.pauseInit, self.autoAdvanceToggle) | |
380 self.autoAdvanceToggle.Disable() | |
381 | |
382 self.psizer = wx.BoxSizer(wx.HORIZONTAL) | |
383 self.psizer.Add(wx.StaticText(self, wx.ID_ANY, "Auto Advance"), 0, wx.ALIGN_CENTER|wx.ALL, 5) | |
384 self.psizer.Add(self.autoAdvanceCheck, 0, wx.ALIGN_CENTER|wx.ALL, 0) | |
385 self.psizer.Add(wx.StaticText(self, wx.ID_ANY, "Every"), 0, wx.ALIGN_CENTER|wx.ALL, 5) | |
386 self.psizer.Add(self.autoAdvanceList, 0, wx.ALIGN_CENTER|wx.ALL, 0) | |
387 self.psizer.Add(wx.StaticText(self, wx.ID_ANY, "Minutes"), 0, wx.ALIGN_CENTER|wx.ALL, 5) | |
388 self.psizer.Add(self.autoAdvanceToggle, 0, wx.ALIGN_CENTER|wx.ALL, 10) | |
389 | |
390 self.addButton = wx.Button(self, wx.ID_ANY, "Add") | |
391 self.Bind(wx.EVT_BUTTON, self.OnMB_InitAdd, self.addButton) | |
392 self.editButton = wx.Button(self, wx.ID_ANY, "Edit") | |
393 self.editButton.Disable() | |
394 self.Bind(wx.EVT_BUTTON, self.OnMB_InitEdit, self.editButton) | |
395 self.deleteButton = wx.Button(self, wx.ID_ANY, "Delete") | |
396 self.deleteButton.Disable() | |
397 self.Bind(wx.EVT_BUTTON, self.OnMB_InitDelete, self.deleteButton) | |
398 self.saveButton = wx.Button(self, wx.ID_ANY, "Save") | |
399 self.saveButton.Disable() | |
400 self.Bind(wx.EVT_BUTTON, self.OnMB_InitSave, self.saveButton) | |
401 self.loadButton = wx.Button(self, wx.ID_ANY, "Load") | |
402 self.Bind(wx.EVT_BUTTON, self.OnMB_InitLoad, self.loadButton) | |
403 self.clearButton = wx.Button(self, wx.ID_ANY, "Clear") | |
404 self.clearButton.Disable() | |
405 self.Bind(wx.EVT_BUTTON, self.OnMB_InitClear, self.clearButton) | |
406 | |
407 | |
408 self.esizer = wx.BoxSizer(wx.VERTICAL) | |
409 self.esizer.Add(self.addButton, 0, wx.EXPAND|wx.ALL, 2) | |
410 self.esizer.Add(self.editButton, 0, wx.EXPAND|wx.ALL, 3) | |
411 self.esizer.Add(self.deleteButton, 0, wx.EXPAND|wx.ALL, 2) | |
412 self.esizer.Add(self.saveButton, 0, wx.EXPAND|wx.ALL, 3) | |
413 self.esizer.Add(self.loadButton, 0, wx.EXPAND|wx.ALL, 2) | |
414 self.esizer.Add(self.clearButton, 0, wx.EXPAND|wx.ALL, 3) | |
415 | |
416 self.rollButton = wx.Button(self, wx.ID_ANY, "Roll New Inits") | |
417 self.Bind(wx.EVT_BUTTON, self.plugin.rollInit, self.rollButton) | |
418 self.startButton = wx.Button(self, wx.ID_ANY, "Start") | |
419 self.Bind(wx.EVT_BUTTON, self.plugin.startInit, self.startButton) | |
420 self.nextButton = wx.Button(self, wx.ID_ANY, "Next") | |
421 self.nextButton.Disable() | |
422 self.Bind(wx.EVT_BUTTON, self.plugin.advanceInit, self.nextButton) | |
423 self.stopButton = wx.Button(self, wx.ID_ANY, "Stop") | |
424 self.stopButton.Disable() | |
425 self.Bind(wx.EVT_BUTTON, self.plugin.stopInit, self.stopButton) | |
426 | |
427 self.asizer = wx.BoxSizer(wx.HORIZONTAL) | |
428 self.asizer.Add(self.rollButton, 0, wx.EXPAND|wx.ALL, 5) | |
429 self.asizer.Add(self.startButton, 0, wx.EXPAND|wx.ALL, 5) | |
430 self.asizer.Add(self.nextButton, 0, wx.EXPAND|wx.ALL, 5) | |
431 self.asizer.Add(self.stopButton, 0, wx.EXPAND|wx.ALL, 5) | |
432 | |
433 self.log.log("Exit InitFrame->buildButtons(self)", ORPG_DEBUG) | |
434 | |
435 def buildGUI(self): | |
436 self.log.log("Enter InitFrame->buildGUI(self)", ORPG_DEBUG) | |
437 | |
438 sizer = wx.GridBagSizer(hgap=1, vgap=1) | |
439 | |
440 self.initList = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_SINGLE_SEL|wx.LC_REPORT|wx.LC_HRULES) | |
441 self.initList.InsertColumn(0, "Name") | |
442 self.initList.InsertColumn(1, "Type") | |
443 self.initList.InsertColumn(2, "Duration") | |
444 self.initList.InsertColumn(3, "Init Mod") | |
445 self.initList.InsertColumn(4, "Init") | |
446 self.initList.InsertColumn(5, "Manualy Set") | |
447 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.selectInit, self.initList) | |
448 self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.deselectInit, self.initList) | |
449 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnMB_InitEdit, self.initList) | |
450 self.Bind(wx.EVT_LIST_ITEM_FOCUSED, self.Test, self.initList) | |
451 | |
452 self.nextMessage = wx.TextCtrl(self, wx.ID_ANY, "UP NEXT FOR THE KILLING") | |
453 msgsizer = wx.BoxSizer(wx.HORIZONTAL) | |
454 msgsizer.Add(wx.StaticText(self, wx.ID_ANY, "Next Message"), 0, wx.ALIGN_CENTER|wx.ALL, 5) | |
455 msgsizer.Add(self.nextMessage, 1, wx.EXPAND|wx.ALL, 5) | |
456 | |
457 self.initRollType = wx.Choice(self, wx.ID_ANY, choices=['d20']) | |
458 self.initRollType.SetSelection(0) | |
459 | |
460 sizer.Add(self.psizer, (0,0), flag=wx.EXPAND) | |
461 sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Init Roll Type'), (0,1), flag=wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL) | |
462 sizer.Add(msgsizer, (1,0), flag=wx.EXPAND) | |
463 sizer.Add(self.initRollType, (1,1), flag=wx.ALIGN_CENTER) | |
464 sizer.Add(self.initList, (2,0), flag=wx.EXPAND) | |
465 sizer.Add(self.esizer, (2,1), flag=wx.EXPAND) | |
466 sizer.Add(self.asizer, (3,0), flag=wx.EXPAND) | |
467 sizer.AddGrowableCol(0) | |
468 sizer.AddGrowableRow(2) | |
469 | |
470 self.SetSizer(sizer) | |
471 self.SetAutoLayout(True) | |
472 self.Fit() | |
473 | |
474 self.log.log("Exit InitFrame->buildGUI(self)", ORPG_DEBUG) | |
475 | |
476 def updateInit(self, init, type): | |
477 reset = False | |
478 if not self.startButton.IsEnabled() and self.initList.GetItemCount() > 0: | |
479 reset = True | |
480 name = self.currentInit.name | |
481 | |
482 | |
483 self.Freeze() | |
484 | |
485 if type == 'Add': | |
486 i = self.initList.InsertStringItem(self.initList.GetItemCount(), init.name) | |
487 self.initList.SetStringItem(i, 1, init.type) | |
488 self.initList.SetStringItem(i, 2, init.duration) | |
489 self.initList.SetStringItem(i, 3, init.initMod) | |
490 self.initList.SetStringItem(i, 4, init.init) | |
491 self.initList.SetStringItem(i, 5, init.manual) | |
492 self.initList.SetItemData(i, init) | |
493 else: | |
494 self.initList.SetStringItem(self.initIdx, 0, init.name) | |
495 self.initList.SetStringItem(self.initIdx, 1, init.type) | |
496 self.initList.SetStringItem(self.initIdx, 2, init.duration) | |
497 self.initList.SetStringItem(self.initIdx, 3, init.initMod) | |
498 self.initList.SetStringItem(self.initIdx, 4, init.init) | |
499 self.initList.SetStringItem(self.initIdx, 5, init.manual) | |
500 self.initList.SetItemData(self.initIdx, init) | |
501 | |
502 self.initList.SortItems(self.initSort) | |
503 self.initList.SetColumnWidth(0, wx.LIST_AUTOSIZE) | |
504 self.initList.SetColumnWidth(1, wx.LIST_AUTOSIZE) | |
505 self.initList.SetColumnWidth(2, wx.LIST_AUTOSIZE) | |
506 self.initList.SetColumnWidth(3, wx.LIST_AUTOSIZE) | |
507 | |
508 if reset: | |
509 for i in xrange(0, self.initList.GetItemCount()): | |
510 self.currentInit = i | |
511 if self.currentInit.name == name and type == 'Add': | |
512 break | |
513 elif self.currentInit.name == name and type == 'Edit': | |
514 self.currentInit = self.initIdx-1 | |
515 break | |
516 | |
517 self.initList.Select(self.initIdx) | |
518 else: | |
519 self.currentInit = 0 | |
520 self.Thaw() | |
521 | |
522 #Events | |
523 def Test(self, evt): | |
524 pass | |
525 | |
526 def selectInit(self, evt): | |
527 self.currentInit = evt.GetIndex() | |
528 self.initList.SetItemState(self.initIdx, 0, wx.LIST_STATE_SELECTED) | |
529 | |
530 def deselectInit(self, evt): | |
531 #self.currentInit = -1 | |
532 evt.Skip() | |
533 | |
534 def OnMB_InitAdd(self, evt): | |
535 addeditwnd = AddEditWnd(self, Init('New'), 'Add') | |
536 addeditwnd.Show() | |
537 | |
538 def OnMB_InitEdit(self, evt): | |
539 addeditwnd = AddEditWnd(self, self.currentInit, 'Edit') | |
540 addeditwnd.Show() | |
541 | |
542 def OnMB_InitDelete(self, evt): | |
543 if self.initIdx != -1: | |
544 self.initList.DeleteItem(self.initIdx) | |
545 self.currentInit = 0 | |
546 | |
547 def OnMB_InitClear(self, evt): | |
548 self.initList.DeleteAllItems() | |
549 self.initIdx = -1 | |
550 | |
551 def OnMB_InitSave(self, evt): | |
552 dlg = wx.TextEntryDialog(self, "Please Name This Init List", "New Init List") | |
553 if dlg.ShowModal() == wx.ID_OK: | |
554 saveas = dlg.GetValue() | |
555 dlg.Destroy() | |
556 else: | |
557 dlg.Destroy() | |
558 return | |
559 | |
560 self.Freeze() | |
561 cidx = self.initIdx | |
562 self.plugin.InitSaves[saveas] = [] | |
563 for i in xrange(0, self.initList.GetItemCount()): | |
564 self.currentInit = i | |
565 cinit = {} | |
566 cinit['name'] = self.currentInit.name | |
567 cinit['type'] = self.currentInit.type | |
568 cinit['duration'] = self.currentInit.duration | |
569 cinit['initMod'] = self.currentInit.initMod | |
570 cinit['init'] = self.currentInit.init | |
571 cinit['manual'] = self.currentInit.manual | |
572 self.plugin.InitSaves[saveas].append(cinit) | |
573 | |
574 self.currentInit = cidx | |
575 self.Thaw() | |
576 | |
577 self.plugin.plugindb.SetDict("xxsimpleinit", "InitSaves", self.plugin.InitSaves) | |
578 | |
579 | |
580 def OnMB_InitLoad(self, evt): | |
581 dlg = wx.Dialog(self, wx.ID_ANY, "Load Init List") | |
582 sz = wx.BoxSizer(wx.HORIZONTAL) | |
583 sz.Add(wx.StaticText(dlg, wx.ID_ANY, 'Select the Init List to Load'), 0, wx.ALIGN_CENTER) | |
584 selectList = wx.Choice(dlg, wx.ID_ANY, choices=self.plugin.InitSaves.keys()) | |
585 selectList.SetSelection(0) | |
586 sz.Add(selectList, 0, wx.EXPAND) | |
587 sz.Add(wx.Button(dlg, wx.ID_OK, 'Load'), 0) | |
588 sz.Add(wx.Button(dlg, wx.ID_CANCEL, 'Cancel'), 0) | |
589 dlg.Show() | |
590 | |
591 dlg.SetSizer(sz) | |
592 dlg.SetAutoLayout(True) | |
593 dlg.Fit() | |
594 | |
595 if dlg.ShowModal() == wx.ID_OK: | |
596 load = selectList.GetStringSelection() | |
597 dlg.Destroy() | |
598 else: | |
599 dlg.Destroy() | |
600 return | |
601 | |
602 self.Freeze() | |
603 self.OnMB_InitClear(None) | |
604 for newInit in self.plugin.InitSaves[load]: | |
605 init = Init(newInit['name'], newInit['type'], newInit['duration'], newInit['initMod'], newInit['init'], newInit['manual']) | |
606 self.updateInit(init, 'Add') | |
607 del init | |
608 | |
609 self.initList.SortItems(self.initSort) | |
610 self.currentInit = 0 | |
611 self.Thaw() | |
612 | |
613 #Getter/Setter | |
614 def GetSelectedInit(self): | |
615 return Init(self.initList.GetItem(self.initIdx, 0).GetText(),\ | |
616 self.initList.GetItem(self.initIdx, 1).GetText(),\ | |
617 self.initList.GetItem(self.initIdx, 2).GetText(),\ | |
618 self.initList.GetItem(self.initIdx, 3).GetText(),\ | |
619 self.initList.GetItem(self.initIdx, 4).GetText(),\ | |
620 self.initList.GetItem(self.initIdx, 5).GetText()) | |
621 | |
622 def SetSelectedInit(self, idx): | |
623 for i in xrange(0, self.initList.GetItemCount()): | |
624 self.initList.SetItemBackgroundColour(i, (255,255,255)) | |
625 | |
626 if idx >= self.initList.GetItemCount(): | |
627 self.initIdx = 0 | |
628 self.plugin.newRound() | |
629 else: | |
630 self.initIdx = idx | |
631 | |
632 if self.initIdx != -1: | |
633 self.initList.SetItemBackgroundColour(self.initIdx, (0,255,0)) | |
634 | |
635 #Properties | |
636 currentInit = property(GetSelectedInit, SetSelectedInit) | |
637 | |
638 class Init: | |
639 def __init__(self, *args, **kwargs): | |
640 """__init__(self, name, type='Player', duration='0', initMod='+0', init='0', manual='No')""" | |
641 if kwargs.has_key('name'): | |
642 self.name = kwargs['name'] | |
643 else: | |
644 try: | |
645 self.name = args[0] | |
646 except: | |
647 print 'Exception: Invalid initilization of ' + __name__ + ' Message. Missing name' | |
648 | |
649 try: | |
650 self.type = args[1] | |
651 except: | |
652 if kwargs.has_key('type'): | |
653 self.type = kwargs['type'] | |
654 else: | |
655 self.type = 'Player' | |
656 | |
657 try: | |
658 self.duration = args[2] | |
659 except: | |
660 if kwargs.has_key('duration'): | |
661 self.duration = kwargs['duration'] | |
662 else: | |
663 self.duration = '0' | |
664 | |
665 try: | |
666 self.initMod = args[3] | |
667 except: | |
668 if kwargs.has_key('initMod'): | |
669 self.initMod = kwargs['initMod'] | |
670 else: | |
671 self.initMod = '0' | |
672 | |
673 try: | |
674 self.init = args[4] | |
675 except: | |
676 if kwargs.has_key('init'): | |
677 self.init = kwargs['init'] | |
678 else: | |
679 self.init = '0' | |
680 | |
681 try: | |
682 self.manual = args[5] | |
683 except: | |
684 if kwargs.has_key('manual'): | |
685 self.manual = kwargs['manual'] | |
686 else: | |
687 self.manual = 'No' | |
688 | |
689 def __int__(self): | |
690 return int(self.init) | |
691 | |
692 | |
693 class AddEditWnd(wx.Frame): | |
694 def __init__(self, parent, Init, edittype="Add"): | |
695 self.parent = parent | |
696 self.edittype = edittype | |
697 if edittype == 'Add': | |
698 wndTitle = 'Add New Initiative Member' | |
699 else: | |
700 wndTitle = 'Edit Initive Member' | |
701 | |
702 wx.Frame.__init__(self, parent, wx.ID_ANY, title=wndTitle, style=wx.DEFAULT_FRAME_STYLE|wx.STAY_ON_TOP) | |
703 #self.MakeModal(True) | |
704 self.SetOwnBackgroundColour('#EFEFEF') | |
705 | |
706 self.currentInit = Init | |
707 | |
708 self.Freeze() | |
709 self.buildGUI() | |
710 self.Thaw() | |
711 | |
712 def buildGUI(self): | |
713 sizer = wx.GridBagSizer(hgap=1, vgap=1) | |
714 sizer.SetEmptyCellSize((0,0)) | |
715 | |
716 self.stDuration = wx.StaticText(self, wx.ID_ANY, 'Duration') | |
717 self.stInitiative = wx.StaticText(self, wx.ID_ANY, 'Initiative') | |
718 | |
719 sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Name'), (0,0), flag=wx.ALIGN_BOTTOM) | |
720 sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Type'), (0,1), flag=wx.ALIGN_BOTTOM) | |
721 sizer.Add(self.stDuration, (0,2), flag=wx.ALIGN_BOTTOM) | |
722 sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Int Mod'), (0,3), flag=wx.ALIGN_BOTTOM) | |
723 sizer.Add(self.stInitiative, (0,4), flag=wx.ALIGN_BOTTOM) | |
724 sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Manualy Set'), (0,5), flag=wx.ALIGN_BOTTOM) | |
725 | |
726 self.name = wx.TextCtrl(self, wx.ID_ANY) | |
727 self.type = wx.Choice(self, wx.ID_ANY, choices=['Player', 'NPC', 'Effect']) | |
728 self.type.SetSelection(0) | |
729 self.Bind(wx.EVT_CHOICE, self.typeSelect, self.type) | |
730 self.duration = wx.TextCtrl(self, wx.ID_ANY, '', size=(40,-1)) | |
731 self.duration.SetMaxLength(4) | |
732 self.duration.Bind(wx.EVT_CHAR, self.validateNumber) | |
733 self.initMod = wx.Choice(self, wx.ID_ANY, choices=['-20', '-19', '-18', '-17', '-16', '-15', '-14', '-13', '-12', '-11', '-10', '-9', '-8', '-7', '-6', '-5', '-4', '-3', '-2', '-1', '+0', '+1', '+2', '+3', '+4', '+5', '+6', '+7', '+8', '+9','+10', '+11', '+12', '+13', '+14', '+15', '+16', '+17', '+18', '+19', '+20']) | |
734 self.initMod.SetSelection(20) | |
735 self.initiative = wx.TextCtrl(self, wx.ID_ANY, '0', size=(40,-1)) | |
736 self.initiative.SetMaxLength(4) | |
737 self.initiative.Bind(wx.EVT_CHAR, self.validateNumber) | |
738 self.manual = wx.Choice(self, wx.ID_ANY, choices=['No', 'Yes']) | |
739 self.manual.SetSelection(0) | |
740 self.Bind(wx.EVT_CHOICE, self.manualSelect, self.manual) | |
741 | |
742 self.initiative.Hide() | |
743 self.stInitiative.Hide() | |
744 self.stDuration.Hide() | |
745 self.duration.Hide() | |
746 | |
747 if self.edittype == 'Edit': | |
748 self.name.SetValue(self.currentInit.name) | |
749 self.type.SetStringSelection(self.currentInit.type) | |
750 self.duration.SetValue(self.currentInit.duration) | |
751 self.initMod.SetStringSelection(self.currentInit.initMod) | |
752 self.initiative.SetValue(self.currentInit.init) | |
753 self.manual.SetStringSelection(self.currentInit.manual) | |
754 | |
755 self.manualSelect(None) | |
756 self.typeSelect(None) | |
757 | |
758 sizer.Add(self.name, (1,0), flag=wx.ALIGN_CENTER) | |
759 sizer.Add(self.type, (1,1), flag=wx.ALIGN_CENTER) | |
760 sizer.Add(self.duration, (1,2), flag=wx.ALIGN_CENTER) | |
761 sizer.Add(self.initMod, (1,3), flag=wx.ALIGN_CENTER) | |
762 sizer.Add(self.initiative, (1,4), flag=wx.ALIGN_CENTER) | |
763 sizer.Add(self.manual, (1,5), flag=wx.ALIGN_CENTER) | |
764 | |
765 self.okButton = wx.Button(self, wx.ID_OK, 'Ok') | |
766 self.cancelButton = wx.Button(self, wx.ID_CANCEL, 'Cancel') | |
767 | |
768 sizer.Add(self.okButton, (0,6), flag=wx.EXPAND) | |
769 sizer.Add(self.cancelButton, (1,6)) | |
770 self.Bind(wx.EVT_BUTTON, self.onOK, self.okButton) | |
771 self.Bind(wx.EVT_BUTTON, self.onCancel, self.cancelButton) | |
772 | |
773 self.SetSizer(sizer) | |
774 self.SetAutoLayout(True) | |
775 self.Fit() | |
776 | |
777 | |
778 #Events | |
779 def validateNumber(self, evt): | |
780 if evt.GetKeyCode() == wx.WXK_DELETE or evt.GetKeyCode() == wx.WXK_BACK or (evt.GetKeyCode() < 256 and chr(evt.GetKeyCode()) in string.digits): | |
781 evt.Skip() | |
782 else: | |
783 wx.Bell() | |
784 | |
785 def manualSelect(self, evt): | |
786 if self.manual.GetStringSelection() == 'Yes': | |
787 self.initiative.Show() | |
788 self.stInitiative.Show() | |
789 else: | |
790 self.initiative.Hide() | |
791 self.stInitiative.Hide() | |
792 | |
793 self.Fit() | |
794 | |
795 def typeSelect(self, evt): | |
796 if self.type.GetStringSelection() == 'Effect': | |
797 self.stDuration.Show() | |
798 self.duration.Show() | |
799 else: | |
800 self.stDuration.Hide() | |
801 self.duration.Hide() | |
802 | |
803 self.Fit() | |
804 | |
805 def onOK(self, evt): | |
806 self.currentInit.name = self.name.GetValue() | |
807 self.currentInit.type = self.type.GetStringSelection() | |
808 self.currentInit.duration = self.duration.GetValue() | |
809 self.currentInit.initMod = self.initMod.GetStringSelection() | |
810 self.currentInit.init = self.initiative.GetValue() | |
811 self.currentInit.manual = self.manual.GetStringSelection() | |
812 self.parent.updateInit(self.currentInit, self.edittype) | |
813 self.Close() | |
814 | |
815 def onCancel(self, evt): | |
816 self.Close() |