Mercurial > traipse_dev
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/xxsimpleinit.py Tue Jul 14 16:41:58 2009 -0500 @@ -0,0 +1,816 @@ +import os +import orpg.pluginhandler +from orpg.orpgCore import * +import wx + +class Plugin(orpg.pluginhandler.PluginHandler): + # Initialization subroutine. + # + # !self : instance of self + # !openrpg : instance of the the base openrpg control + def __init__(self, plugindb, parent): + orpg.pluginhandler.PluginHandler.__init__(self, plugindb, parent) + self.orpgframe = open_rpg.get_component('frame') + + # The Following code should be edited to contain the proper information + self.name = 'Simple Init' + self.author = 'Dj Gilcrease' + self.help = 'This is a simplistic Init tool that does not relie on Chat message parsing' + + #You can set variables below here. Always set them to a blank value in this section. Use plugin_enabled + #to set their proper values. + + def plugin_menu(self): + self.menu = wx.Menu() + + self.toggle = self.menu.AppendCheckItem(wx.ID_ANY, 'Show') + self.topframe.Bind(wx.EVT_MENU, self.on_init, self.toggle) + self.toggle.Check(True) + + + def plugin_enabled(self): + self.plugin_addcommand('/inittoggle', self.on_init, '- This will Show or Hide the Init window') + self.plugin_addcommand('/rollinit', self.rollInit, '- This will roll a new set of Inits', False) + self.plugin_addcommand('/startcombat', self.startInit, '- This will start the combat', False) + self.plugin_addcommand('/nextplayer', self.advanceInit, '- This will advance the Initiative to the next Player', False) + self.plugin_addcommand('/stopcombat', self.stopInit, '- This will end the combat', False) + self.plugin_addcommand('/pausecombat', self.pauseInit, '- This will pause the auto Advancer', False) + + self.InitSaves = self.plugindb.GetDict("xxsimpleinit", "InitSaves", {}) + self.frame = InitFrame(self) + self.frame.Show() + self.advanceTimer = wx.Timer(self.frame, wx.NewId()) + self.frame.Bind(wx.EVT_TIMER, self.advanceInit, self.advanceTimer) + self.buttonTimer = wx.Timer(self.frame, wx.NewId()) + self.frame.Bind(wx.EVT_TIMER, self.buttonCheck, self.buttonTimer) + self.buttonTimer.Start(250) + self.autoAdvancePaused = False + #self.PluginMenu() + + def plugin_disabled(self): + self.plugin_removecmd('/inittoggle') + self.plugin_removecmd('/rollinit') + self.plugin_removecmd('/startcombat') + self.plugin_removecmd('/nextplayer') + self.plugin_removecmd('/stopcombat') + self.plugin_removecmd('/pausecombat') + + self.advanceTimer.Stop() + del self.advanceTimer + + self.buttonTimer.Stop() + del self.buttonTimer + + try: + self.frame.Destroy() + except: + pass + + def on_init(self, cmdargs): + if self.frame.IsShown(): + self.toggle.Check(False) + self.frame.Hide() + else: + self.toggle.Check(True) + self.frame.Show() + print self.toggle.IsChecked() + + def startInit(self, evt=None): + if self.frame.initList.GetItemCount() == 0: + self.chat.InfoPost('You need to add some stuff to the Init list before you start') + return + + if not self.frame.startButton.IsEnabled(): + self.chat.InfoPost('Combat Round has already started! You must Stop the current combat to start a new one.') + return + + self.orpgframe.Freeze() + self.frame.Freeze() + self.frame.nextButton.Enable() + self.frame.stopButton.Enable() + self.frame.startButton.Disable() + self.frame.rollButton.Disable() + self.frame.autoAdvanceCheck.Disable() + self.frame.autoAdvanceList.Disable() + self.frame.autoAdvanceToggle.Enable() + self.frame.addButton.Disable() + self.frame.editButton.Disable() + self.frame.deleteButton.Disable() + self.frame.saveButton.Disable() + self.frame.loadButton.Disable() + self.frame.clearButton.Disable() + + self.frame.currentInit = -1 + self.round = 0 + + self.chat.Post('<font color="#00ff00" size="4"><b>============ START COMBAT ============</b></font>', True, True) + self.advanceInit() + self.frame.Thaw() + + if self.frame.autoAdvanceCheck.IsChecked(): + time = int(60000*int(self.frame.autoAdvanceList.GetStringSelection())) + self.advanceTimer.Start(time) + else: + self.frame.addButton.Enable() + self.frame.editButton.Enable() + self.frame.deleteButton.Enable() + + if self.frame.IsShown(): + wx.CallAfter(self.frame.SetFocus) + + wx.CallAfter(self.orpgframe.Thaw) + + def stopInit(self, evt=None): + if not self.frame.stopButton.IsEnabled(): + self.chat.InfoPost('Combat is already ended!') + return + + self.frame.Freeze() + self.frame.nextButton.Disable() + self.frame.stopButton.Disable() + self.frame.startButton.Enable() + self.frame.rollButton.Enable() + self.frame.autoAdvanceCheck.Enable() + self.frame.autoAdvanceList.Enable() + self.frame.autoAdvanceToggle.Disable() + self.frame.addButton.Enable() + self.frame.editButton.Enable() + self.frame.deleteButton.Enable() + self.frame.saveButton.Enable() + self.frame.loadButton.Enable() + self.frame.clearButton.Enable() + + for i in xrange(0, self.frame.initList.GetItemCount()): + self.frame.currentInit = i + if self.frame.currentInit.type == 'Effect': + self.frame.initList.DeleteItem(i) + + self.frame.currentInit = 0 + + if self.autoAdvancePaused and self.frame.autoAdvanceCheck.IsChecked(): + self.pauseInit('No Adv') + self.frame.Thaw() + + self.advanceTimer.Stop() + self.chat.Post('<font color="#ff0000" size="4"><b>============ END COMBAT ============</b></font>', True, True) + + def advanceInit(self, evt=None): + if not self.frame.nextButton.IsEnabled(): + self.chat.InfoPost('You must first Start combat inorder to advance the initiative turn!') + return + + self.frame.currentInit = self.frame.initIdx+1 + if self.frame.currentInit.type == 'Effect': + newDur = str(int(self.frame.currentInit.duration)-1) + self.frame.initList.SetStringItem(self.frame.initIdx, 2, newDur) + 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>' + msg += '<tr><td align="center"><font color="#000000">' + self.frame.currentInit.name + ' has ' + newDur + ' rounds remaining</font></td></tr></table>' + self.chat.Post(msg, True, True) + wx.CallAfter(self.advanceInit) + else: + 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>' + msg += '<tr><td align="center"><b><font size="3"><font color="#ff0000">' + str(self.frame.initIdx+1) + ':</font> ' + msg += '<font color="#0000ff">(' + self.frame.currentInit.init + ')</font> ' + msg += '<font color="#000000">' + self.frame.currentInit.name + '</b></font></font></td></tr></table>' + self.chat.Post(msg, True, True) + + if self.frame.currentInit.type == 'Effect' and int(self.frame.currentInit.duration) <= 0: + self.frame.Freeze() + cidx = self.frame.initIdx + self.frame.initList.DeleteItem(cidx) + self.frame.currentInit = cidx + self.frame.Thaw() + + def pauseInit(self, evt=None): + self.frame.Freeze() + if not self.autoAdvancePaused: + self.frame.autoAdvanceToggle.SetLabel('Resume Auto Advance') + self.autoAdvancePaused = True + self.advanceTimer.Stop() + self.frame.nextButton.Disable() + self.frame.addButton.Enable() + self.frame.editButton.Enable() + self.frame.deleteButton.Enable() + else: + self.frame.autoAdvanceToggle.SetLabel('Pause Auto Advance') + self.frame.nextButton.Enable() + self.frame.addButton.Disable() + self.frame.editButton.Disable() + self.frame.deleteButton.Disable() + self.autoAdvancePaused = False + if evt != 'No Adv': + self.advanceInit() + self.advanceTimer.Start() + self.frame.Thaw() + + def newRound(self): + self.round += 1 + msg = '<br><hr><font color="#ff0000" size="4"><b>End of Round #' + str(self.round-1) + ', Starting Round #' + str(self.round) + '</b></font><hr>' + self.chat.Post(msg, True, True) + + def rollD20Init(self): + if not self.frame.rollButton.IsEnabled(): + self.chat.InfoPost("You cannot roll new Inits at this time") + return + self.orpgframe.Freeze() + self.frame.Freeze() + msg = '<br><font color="#0000ff" size="4"><b>============ START INIT LIST ============</b></font><br>' + msg += '<font color="#000000"><b>' + for i in xrange(0, self.frame.initList.GetItemCount()): + self.frame.currentInit = i + if self.frame.currentInit.manual == 'No': + initRoll = self.chat.ParseDice('[1d20' + self.frame.currentInit.initMod + ']') + + initRoll = initRoll.split('(') + initRoll = initRoll[1].replace(')','') + self.frame.initList.SetStringItem(i, 4, initRoll) + self.frame.initList.SetItemData(i, int(initRoll)) + else: + initRoll = self.frame.currentInit.init + + if self.frame.currentInit.type != 'Effect': + msg += '<br>' + self.frame.currentInit.name + ' = <font color="#ff0000">' + initRoll + '</font>' + + msg += '</b></font><br>' + + self.frame.initList.SortItems(self.frame.initSort) + msg += '<font color="#0000ff" size="4"><b>============ END INIT LIST ============</b></font>' + self.chat.Post(msg, True, True) + + self.frame.Thaw() + if self.frame.IsShown(): + wx.CallAfter(self.frame.SetFocus) + wx.CallAfter(self.orpgframe.Thaw) + + #Events + def rollInit(self, evt): + if self.frame.initRollType.GetStringSelection() == 'd20': + self.rollD20Init() + + def buttonCheck(self, evt): + if self.autoAdvancePaused: + return + if self.frame.initList.GetItemCount() == 0: + self.frame.Freeze() + self.advanceTimer.Stop() + self.frame.startButton.Disable() + self.frame.rollButton.Disable() + self.frame.nextButton.Disable() + self.frame.stopButton.Disable() + self.frame.editButton.Disable() + self.frame.deleteButton.Disable() + self.frame.saveButton.Disable() + self.frame.clearButton.Disable() + self.frame.Thaw() + elif not self.frame.stopButton.IsEnabled(): + self.frame.startButton.Enable() + self.frame.rollButton.Enable() + self.frame.editButton.Enable() + self.frame.deleteButton.Enable() + self.frame.saveButton.Enable() + self.frame.clearButton.Enable() + + if not self.frame.autoAdvanceCheck.IsChecked(): + self.frame.autoAdvanceToggle.Disable() + self.autoAdvancePaused = True + elif self.frame.autoAdvanceCheck.IsChecked() and self.frame.stopButton.IsEnabled(): + self.frame.autoAdvanceToggle.Enable() + +class InitFrame(wx.Frame): + def __init__(self, plugin): + self.plugin = plugin + self.toggle = plugin.toggle + self.log = open_rpg.get_component('log') + self.log.log("Enter InitFrame", ORPG_DEBUG) + + wx.Frame.__init__(self, None, wx.ID_ANY, title="Simple Init", style=wx.DEFAULT_FRAME_STYLE) + self.SetOwnBackgroundColour('#EFEFEF') + + self.dir_struct = open_rpg.get_component('dir_struct') + self.settings = open_rpg.get_component('settings') + self.xml = open_rpg.get_component('xml') + self.validate = open_rpg.get_component('validate') + + self.Freeze() + self.buildMenu() + self.buildButtons() + self.buildGUI() + wx.CallAfter(self.InitSetup) + + self.Bind(wx.EVT_CLOSE, self.onCloseWindow) + + self.log.log("Exit InitFrame", ORPG_DEBUG) + + def InitSetup(self): + self.chat = open_rpg.get_component('chat') + self.gametree = open_rpg.get_component('tree') + self.map = open_rpg.get_component('map') + self.session = open_rpg.get_component('session') + + self.initIdx = -1 + self.Thaw() + + def initSort(self, item1, item2): + if item1 == item2: + return 0 + elif item1 > item2: + return -1 + elif item1 < item2: + return 1 + + return 0 + + def onCloseWindow(self, evt): + self.Hide() + self.toggle.Check(False) + + def buildMenu(self): + self.log.log("Enter InitFrame->buildMenu(self)", ORPG_DEBUG) + + initmenu = wx.Menu() + + item = wx.MenuItem(initmenu, wx.ID_ANY, "Add\tInsert", "Add") + self.Bind(wx.EVT_MENU, self.OnMB_InitAdd, item) + initmenu.AppendItem(item) + + item = wx.MenuItem(initmenu, wx.ID_ANY, "Edit\tCtrl+E", "Edit") + self.Bind(wx.EVT_MENU, self.OnMB_InitEdit, item) + initmenu.AppendItem(item) + + item = wx.MenuItem(initmenu, wx.ID_ANY, "Delete\tCtrl+D", "Delete") + self.Bind(wx.EVT_MENU, self.OnMB_InitDelete, item) + initmenu.AppendItem(item) + + item = wx.MenuItem(initmenu, wx.ID_ANY, "Clear\tCtrl+C", "Clear") + self.Bind(wx.EVT_MENU, self.OnMB_InitClear, item) + initmenu.AppendItem(item) + + initmenu.AppendSeparator() + + item = wx.MenuItem(initmenu, wx.ID_ANY, "Next\tEnter", "Next") + self.Bind(wx.EVT_MENU, self.plugin.advanceInit, item) + initmenu.AppendItem(item) + + initmenu.AppendSeparator() + + item = wx.MenuItem(initmenu, wx.ID_ANY, "Save\tCtrl+S", "Save Current Init List") + self.Bind(wx.EVT_MENU, self.OnMB_InitSave, item) + initmenu.AppendItem(item) + + item = wx.MenuItem(initmenu, wx.ID_ANY, "Load", "Load New Init List") + self.Bind(wx.EVT_MENU, self.OnMB_InitLoad, item) + initmenu.AppendItem(item) + + menu = wx.MenuBar() + menu.Append(initmenu, "&Init") + + self.SetMenuBar(menu) + + self.log.log("Exit InitFrame->buildMenu(self)", ORPG_DEBUG) + + def buildButtons(self): + self.log.log("Enter InitFrame->buildButtons(self)", ORPG_DEBUG) + + self.autoAdvanceCheck = wx.CheckBox(self, wx.ID_ANY, "") + self.autoAdvanceCheck.SetValue(True) + self.autoAdvanceList = wx.Choice(self, wx.ID_ANY, choices=['1','2','3','4','5']) + self.autoAdvanceList.SetSelection(2) + self.autoAdvanceToggle = wx.Button(self, wx.ID_ANY, "Pause Auto Advance") + self.Bind(wx.EVT_BUTTON, self.plugin.pauseInit, self.autoAdvanceToggle) + self.autoAdvanceToggle.Disable() + + self.psizer = wx.BoxSizer(wx.HORIZONTAL) + self.psizer.Add(wx.StaticText(self, wx.ID_ANY, "Auto Advance"), 0, wx.ALIGN_CENTER|wx.ALL, 5) + self.psizer.Add(self.autoAdvanceCheck, 0, wx.ALIGN_CENTER|wx.ALL, 0) + self.psizer.Add(wx.StaticText(self, wx.ID_ANY, "Every"), 0, wx.ALIGN_CENTER|wx.ALL, 5) + self.psizer.Add(self.autoAdvanceList, 0, wx.ALIGN_CENTER|wx.ALL, 0) + self.psizer.Add(wx.StaticText(self, wx.ID_ANY, "Minutes"), 0, wx.ALIGN_CENTER|wx.ALL, 5) + self.psizer.Add(self.autoAdvanceToggle, 0, wx.ALIGN_CENTER|wx.ALL, 10) + + self.addButton = wx.Button(self, wx.ID_ANY, "Add") + self.Bind(wx.EVT_BUTTON, self.OnMB_InitAdd, self.addButton) + self.editButton = wx.Button(self, wx.ID_ANY, "Edit") + self.editButton.Disable() + self.Bind(wx.EVT_BUTTON, self.OnMB_InitEdit, self.editButton) + self.deleteButton = wx.Button(self, wx.ID_ANY, "Delete") + self.deleteButton.Disable() + self.Bind(wx.EVT_BUTTON, self.OnMB_InitDelete, self.deleteButton) + self.saveButton = wx.Button(self, wx.ID_ANY, "Save") + self.saveButton.Disable() + self.Bind(wx.EVT_BUTTON, self.OnMB_InitSave, self.saveButton) + self.loadButton = wx.Button(self, wx.ID_ANY, "Load") + self.Bind(wx.EVT_BUTTON, self.OnMB_InitLoad, self.loadButton) + self.clearButton = wx.Button(self, wx.ID_ANY, "Clear") + self.clearButton.Disable() + self.Bind(wx.EVT_BUTTON, self.OnMB_InitClear, self.clearButton) + + + self.esizer = wx.BoxSizer(wx.VERTICAL) + self.esizer.Add(self.addButton, 0, wx.EXPAND|wx.ALL, 2) + self.esizer.Add(self.editButton, 0, wx.EXPAND|wx.ALL, 3) + self.esizer.Add(self.deleteButton, 0, wx.EXPAND|wx.ALL, 2) + self.esizer.Add(self.saveButton, 0, wx.EXPAND|wx.ALL, 3) + self.esizer.Add(self.loadButton, 0, wx.EXPAND|wx.ALL, 2) + self.esizer.Add(self.clearButton, 0, wx.EXPAND|wx.ALL, 3) + + self.rollButton = wx.Button(self, wx.ID_ANY, "Roll New Inits") + self.Bind(wx.EVT_BUTTON, self.plugin.rollInit, self.rollButton) + self.startButton = wx.Button(self, wx.ID_ANY, "Start") + self.Bind(wx.EVT_BUTTON, self.plugin.startInit, self.startButton) + self.nextButton = wx.Button(self, wx.ID_ANY, "Next") + self.nextButton.Disable() + self.Bind(wx.EVT_BUTTON, self.plugin.advanceInit, self.nextButton) + self.stopButton = wx.Button(self, wx.ID_ANY, "Stop") + self.stopButton.Disable() + self.Bind(wx.EVT_BUTTON, self.plugin.stopInit, self.stopButton) + + self.asizer = wx.BoxSizer(wx.HORIZONTAL) + self.asizer.Add(self.rollButton, 0, wx.EXPAND|wx.ALL, 5) + self.asizer.Add(self.startButton, 0, wx.EXPAND|wx.ALL, 5) + self.asizer.Add(self.nextButton, 0, wx.EXPAND|wx.ALL, 5) + self.asizer.Add(self.stopButton, 0, wx.EXPAND|wx.ALL, 5) + + self.log.log("Exit InitFrame->buildButtons(self)", ORPG_DEBUG) + + def buildGUI(self): + self.log.log("Enter InitFrame->buildGUI(self)", ORPG_DEBUG) + + sizer = wx.GridBagSizer(hgap=1, vgap=1) + + self.initList = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_SINGLE_SEL|wx.LC_REPORT|wx.LC_HRULES) + self.initList.InsertColumn(0, "Name") + self.initList.InsertColumn(1, "Type") + self.initList.InsertColumn(2, "Duration") + self.initList.InsertColumn(3, "Init Mod") + self.initList.InsertColumn(4, "Init") + self.initList.InsertColumn(5, "Manualy Set") + self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.selectInit, self.initList) + self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.deselectInit, self.initList) + self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnMB_InitEdit, self.initList) + self.Bind(wx.EVT_LIST_ITEM_FOCUSED, self.Test, self.initList) + + self.nextMessage = wx.TextCtrl(self, wx.ID_ANY, "UP NEXT FOR THE KILLING") + msgsizer = wx.BoxSizer(wx.HORIZONTAL) + msgsizer.Add(wx.StaticText(self, wx.ID_ANY, "Next Message"), 0, wx.ALIGN_CENTER|wx.ALL, 5) + msgsizer.Add(self.nextMessage, 1, wx.EXPAND|wx.ALL, 5) + + self.initRollType = wx.Choice(self, wx.ID_ANY, choices=['d20']) + self.initRollType.SetSelection(0) + + sizer.Add(self.psizer, (0,0), flag=wx.EXPAND) + sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Init Roll Type'), (0,1), flag=wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL) + sizer.Add(msgsizer, (1,0), flag=wx.EXPAND) + sizer.Add(self.initRollType, (1,1), flag=wx.ALIGN_CENTER) + sizer.Add(self.initList, (2,0), flag=wx.EXPAND) + sizer.Add(self.esizer, (2,1), flag=wx.EXPAND) + sizer.Add(self.asizer, (3,0), flag=wx.EXPAND) + sizer.AddGrowableCol(0) + sizer.AddGrowableRow(2) + + self.SetSizer(sizer) + self.SetAutoLayout(True) + self.Fit() + + self.log.log("Exit InitFrame->buildGUI(self)", ORPG_DEBUG) + + def updateInit(self, init, type): + reset = False + if not self.startButton.IsEnabled() and self.initList.GetItemCount() > 0: + reset = True + name = self.currentInit.name + + + self.Freeze() + + if type == 'Add': + i = self.initList.InsertStringItem(self.initList.GetItemCount(), init.name) + self.initList.SetStringItem(i, 1, init.type) + self.initList.SetStringItem(i, 2, init.duration) + self.initList.SetStringItem(i, 3, init.initMod) + self.initList.SetStringItem(i, 4, init.init) + self.initList.SetStringItem(i, 5, init.manual) + self.initList.SetItemData(i, init) + else: + self.initList.SetStringItem(self.initIdx, 0, init.name) + self.initList.SetStringItem(self.initIdx, 1, init.type) + self.initList.SetStringItem(self.initIdx, 2, init.duration) + self.initList.SetStringItem(self.initIdx, 3, init.initMod) + self.initList.SetStringItem(self.initIdx, 4, init.init) + self.initList.SetStringItem(self.initIdx, 5, init.manual) + self.initList.SetItemData(self.initIdx, init) + + self.initList.SortItems(self.initSort) + self.initList.SetColumnWidth(0, wx.LIST_AUTOSIZE) + self.initList.SetColumnWidth(1, wx.LIST_AUTOSIZE) + self.initList.SetColumnWidth(2, wx.LIST_AUTOSIZE) + self.initList.SetColumnWidth(3, wx.LIST_AUTOSIZE) + + if reset: + for i in xrange(0, self.initList.GetItemCount()): + self.currentInit = i + if self.currentInit.name == name and type == 'Add': + break + elif self.currentInit.name == name and type == 'Edit': + self.currentInit = self.initIdx-1 + break + + self.initList.Select(self.initIdx) + else: + self.currentInit = 0 + self.Thaw() + + #Events + def Test(self, evt): + pass + + def selectInit(self, evt): + self.currentInit = evt.GetIndex() + self.initList.SetItemState(self.initIdx, 0, wx.LIST_STATE_SELECTED) + + def deselectInit(self, evt): + #self.currentInit = -1 + evt.Skip() + + def OnMB_InitAdd(self, evt): + addeditwnd = AddEditWnd(self, Init('New'), 'Add') + addeditwnd.Show() + + def OnMB_InitEdit(self, evt): + addeditwnd = AddEditWnd(self, self.currentInit, 'Edit') + addeditwnd.Show() + + def OnMB_InitDelete(self, evt): + if self.initIdx != -1: + self.initList.DeleteItem(self.initIdx) + self.currentInit = 0 + + def OnMB_InitClear(self, evt): + self.initList.DeleteAllItems() + self.initIdx = -1 + + def OnMB_InitSave(self, evt): + dlg = wx.TextEntryDialog(self, "Please Name This Init List", "New Init List") + if dlg.ShowModal() == wx.ID_OK: + saveas = dlg.GetValue() + dlg.Destroy() + else: + dlg.Destroy() + return + + self.Freeze() + cidx = self.initIdx + self.plugin.InitSaves[saveas] = [] + for i in xrange(0, self.initList.GetItemCount()): + self.currentInit = i + cinit = {} + cinit['name'] = self.currentInit.name + cinit['type'] = self.currentInit.type + cinit['duration'] = self.currentInit.duration + cinit['initMod'] = self.currentInit.initMod + cinit['init'] = self.currentInit.init + cinit['manual'] = self.currentInit.manual + self.plugin.InitSaves[saveas].append(cinit) + + self.currentInit = cidx + self.Thaw() + + self.plugin.plugindb.SetDict("xxsimpleinit", "InitSaves", self.plugin.InitSaves) + + + def OnMB_InitLoad(self, evt): + dlg = wx.Dialog(self, wx.ID_ANY, "Load Init List") + sz = wx.BoxSizer(wx.HORIZONTAL) + sz.Add(wx.StaticText(dlg, wx.ID_ANY, 'Select the Init List to Load'), 0, wx.ALIGN_CENTER) + selectList = wx.Choice(dlg, wx.ID_ANY, choices=self.plugin.InitSaves.keys()) + selectList.SetSelection(0) + sz.Add(selectList, 0, wx.EXPAND) + sz.Add(wx.Button(dlg, wx.ID_OK, 'Load'), 0) + sz.Add(wx.Button(dlg, wx.ID_CANCEL, 'Cancel'), 0) + dlg.Show() + + dlg.SetSizer(sz) + dlg.SetAutoLayout(True) + dlg.Fit() + + if dlg.ShowModal() == wx.ID_OK: + load = selectList.GetStringSelection() + dlg.Destroy() + else: + dlg.Destroy() + return + + self.Freeze() + self.OnMB_InitClear(None) + for newInit in self.plugin.InitSaves[load]: + init = Init(newInit['name'], newInit['type'], newInit['duration'], newInit['initMod'], newInit['init'], newInit['manual']) + self.updateInit(init, 'Add') + del init + + self.initList.SortItems(self.initSort) + self.currentInit = 0 + self.Thaw() + + #Getter/Setter + def GetSelectedInit(self): + return Init(self.initList.GetItem(self.initIdx, 0).GetText(),\ + self.initList.GetItem(self.initIdx, 1).GetText(),\ + self.initList.GetItem(self.initIdx, 2).GetText(),\ + self.initList.GetItem(self.initIdx, 3).GetText(),\ + self.initList.GetItem(self.initIdx, 4).GetText(),\ + self.initList.GetItem(self.initIdx, 5).GetText()) + + def SetSelectedInit(self, idx): + for i in xrange(0, self.initList.GetItemCount()): + self.initList.SetItemBackgroundColour(i, (255,255,255)) + + if idx >= self.initList.GetItemCount(): + self.initIdx = 0 + self.plugin.newRound() + else: + self.initIdx = idx + + if self.initIdx != -1: + self.initList.SetItemBackgroundColour(self.initIdx, (0,255,0)) + + #Properties + currentInit = property(GetSelectedInit, SetSelectedInit) + +class Init: + def __init__(self, *args, **kwargs): + """__init__(self, name, type='Player', duration='0', initMod='+0', init='0', manual='No')""" + if kwargs.has_key('name'): + self.name = kwargs['name'] + else: + try: + self.name = args[0] + except: + print 'Exception: Invalid initilization of ' + __name__ + ' Message. Missing name' + + try: + self.type = args[1] + except: + if kwargs.has_key('type'): + self.type = kwargs['type'] + else: + self.type = 'Player' + + try: + self.duration = args[2] + except: + if kwargs.has_key('duration'): + self.duration = kwargs['duration'] + else: + self.duration = '0' + + try: + self.initMod = args[3] + except: + if kwargs.has_key('initMod'): + self.initMod = kwargs['initMod'] + else: + self.initMod = '0' + + try: + self.init = args[4] + except: + if kwargs.has_key('init'): + self.init = kwargs['init'] + else: + self.init = '0' + + try: + self.manual = args[5] + except: + if kwargs.has_key('manual'): + self.manual = kwargs['manual'] + else: + self.manual = 'No' + + def __int__(self): + return int(self.init) + + +class AddEditWnd(wx.Frame): + def __init__(self, parent, Init, edittype="Add"): + self.parent = parent + self.edittype = edittype + if edittype == 'Add': + wndTitle = 'Add New Initiative Member' + else: + wndTitle = 'Edit Initive Member' + + wx.Frame.__init__(self, parent, wx.ID_ANY, title=wndTitle, style=wx.DEFAULT_FRAME_STYLE|wx.STAY_ON_TOP) + #self.MakeModal(True) + self.SetOwnBackgroundColour('#EFEFEF') + + self.currentInit = Init + + self.Freeze() + self.buildGUI() + self.Thaw() + + def buildGUI(self): + sizer = wx.GridBagSizer(hgap=1, vgap=1) + sizer.SetEmptyCellSize((0,0)) + + self.stDuration = wx.StaticText(self, wx.ID_ANY, 'Duration') + self.stInitiative = wx.StaticText(self, wx.ID_ANY, 'Initiative') + + sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Name'), (0,0), flag=wx.ALIGN_BOTTOM) + sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Type'), (0,1), flag=wx.ALIGN_BOTTOM) + sizer.Add(self.stDuration, (0,2), flag=wx.ALIGN_BOTTOM) + sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Int Mod'), (0,3), flag=wx.ALIGN_BOTTOM) + sizer.Add(self.stInitiative, (0,4), flag=wx.ALIGN_BOTTOM) + sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Manualy Set'), (0,5), flag=wx.ALIGN_BOTTOM) + + self.name = wx.TextCtrl(self, wx.ID_ANY) + self.type = wx.Choice(self, wx.ID_ANY, choices=['Player', 'NPC', 'Effect']) + self.type.SetSelection(0) + self.Bind(wx.EVT_CHOICE, self.typeSelect, self.type) + self.duration = wx.TextCtrl(self, wx.ID_ANY, '', size=(40,-1)) + self.duration.SetMaxLength(4) + self.duration.Bind(wx.EVT_CHAR, self.validateNumber) + 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']) + self.initMod.SetSelection(20) + self.initiative = wx.TextCtrl(self, wx.ID_ANY, '0', size=(40,-1)) + self.initiative.SetMaxLength(4) + self.initiative.Bind(wx.EVT_CHAR, self.validateNumber) + self.manual = wx.Choice(self, wx.ID_ANY, choices=['No', 'Yes']) + self.manual.SetSelection(0) + self.Bind(wx.EVT_CHOICE, self.manualSelect, self.manual) + + self.initiative.Hide() + self.stInitiative.Hide() + self.stDuration.Hide() + self.duration.Hide() + + if self.edittype == 'Edit': + self.name.SetValue(self.currentInit.name) + self.type.SetStringSelection(self.currentInit.type) + self.duration.SetValue(self.currentInit.duration) + self.initMod.SetStringSelection(self.currentInit.initMod) + self.initiative.SetValue(self.currentInit.init) + self.manual.SetStringSelection(self.currentInit.manual) + + self.manualSelect(None) + self.typeSelect(None) + + sizer.Add(self.name, (1,0), flag=wx.ALIGN_CENTER) + sizer.Add(self.type, (1,1), flag=wx.ALIGN_CENTER) + sizer.Add(self.duration, (1,2), flag=wx.ALIGN_CENTER) + sizer.Add(self.initMod, (1,3), flag=wx.ALIGN_CENTER) + sizer.Add(self.initiative, (1,4), flag=wx.ALIGN_CENTER) + sizer.Add(self.manual, (1,5), flag=wx.ALIGN_CENTER) + + self.okButton = wx.Button(self, wx.ID_OK, 'Ok') + self.cancelButton = wx.Button(self, wx.ID_CANCEL, 'Cancel') + + sizer.Add(self.okButton, (0,6), flag=wx.EXPAND) + sizer.Add(self.cancelButton, (1,6)) + self.Bind(wx.EVT_BUTTON, self.onOK, self.okButton) + self.Bind(wx.EVT_BUTTON, self.onCancel, self.cancelButton) + + self.SetSizer(sizer) + self.SetAutoLayout(True) + self.Fit() + + + #Events + def validateNumber(self, evt): + if evt.GetKeyCode() == wx.WXK_DELETE or evt.GetKeyCode() == wx.WXK_BACK or (evt.GetKeyCode() < 256 and chr(evt.GetKeyCode()) in string.digits): + evt.Skip() + else: + wx.Bell() + + def manualSelect(self, evt): + if self.manual.GetStringSelection() == 'Yes': + self.initiative.Show() + self.stInitiative.Show() + else: + self.initiative.Hide() + self.stInitiative.Hide() + + self.Fit() + + def typeSelect(self, evt): + if self.type.GetStringSelection() == 'Effect': + self.stDuration.Show() + self.duration.Show() + else: + self.stDuration.Hide() + self.duration.Hide() + + self.Fit() + + def onOK(self, evt): + self.currentInit.name = self.name.GetValue() + self.currentInit.type = self.type.GetStringSelection() + self.currentInit.duration = self.duration.GetValue() + self.currentInit.initMod = self.initMod.GetStringSelection() + self.currentInit.init = self.initiative.GetValue() + self.currentInit.manual = self.manual.GetStringSelection() + self.parent.updateInit(self.currentInit, self.edittype) + self.Close() + + def onCancel(self, evt): + self.Close()