toybocks/toybocks.py
cecilkorik 053f435a0b initial import
--HG--
branch : toybocks
2010-03-26 03:50:24 +00:00

138 lines
4.1 KiB
Python
Executable file

import mainwnd
import wx
import backend
class customListCtrl(wx.ListCtrl):
def GetItemBackgroundColour(self, item):
return None
def OnGetItemText(self, item, col):
return self.gamelist[item].name
def GetItemData(self, item):
if hasattr(self, "gamelist"):
return self.gamelist[item].id
else:
return wx.ListCtrl.GetItemData(self, item)
mainwnd.customListCtrl = customListCtrl
class ToybocksMainWindow(mainwnd.MainWindow):
def __init__(self, *args, **kwds):
mainwnd.MainWindow.__init__(self, *args, **kwds)
self.emulator_thread = None
self.playlists.InsertColumn(0, "Selection")
# self.playlists.InsertStringItem(0, "(All Games)")
# self.playlists.InsertStringItem(1, "(None)")
self.games.InsertColumn(0, "Game")
self.games.SetColumnWidth(0, 1800)
# self.games.InsertStringItem(0, "Game One")
# self.games.InsertStringItem(1, "Testing 123")
# self.games.InsertStringItem(2, "Entry Test")
# self.games.InsertStringItem(3, "Listing Items")
# self.games.InsertStringItem(4, "Game 789")
backend.load_emulators()
backend.load_playlists()
pl = backend.playlist_list
c = 0
for p in pl:
self.playlists.InsertStringItem(c, p.name)
if p.id != None:
self.playlists.SetItemData(c, int(p.id))
else:
self.playlists.SetItemData(c, -1)
c += 1
p = pl[0]
self.games.playlist = p
self.games.gamelist = p.gamelist()
self.games.SetItemCount(len(self.games.gamelist))
self.games.RefreshItems(0, len(self.games.gamelist))
self.playlists.SetColumnWidth(0, 200)
self.playlists.SetColumnWidth(0, wx.LIST_AUTOSIZE)
self.playlists.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnChangePlaylist)
self.playlists.Bind(wx.EVT_LIST_KEY_DOWN, self.OnKeyUp)
#wx.EVT_LIST_KEY_DOWN(self.playlists, self.OnKeyUp)
self.playlists.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
self.games.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
TIMER_ID = 150
self.timer = wx.Timer(self, TIMER_ID)
self.Bind(wx.EVT_TIMER, self.OnTimer)
def OnChangePlaylist(self, event):
name, id, item = self.GetSelItem(self.playlists)
p = backend.playlist_table[id]
self.games.playlist = p
self.games.gamelist = p.gamelist()
self.games.SetItemCount(len(self.games.gamelist))
self.games.RefreshItems(0, len(self.games.gamelist))
#self.games.SetColumnWidth(0, wx.LIST_AUTOSIZE)
def OnTimer(self, event):
ep = self.emulator_thread
if ep and ep != True:
if not ep.is_alive():
self.timer.Stop()
ep.buffer.write("\nEmulator exited with return code %d\n" % (ep.proc.returncode,))
self.emulator_thread = None
item = self.games.FindItemData(-1, ep.game.id)
self.games.SetItemBackgroundColour(item, self.games.GetBackgroundColour())
def OnKeyUp(self, event):
key = event.GetKeyCode()
if key == wx.WXK_RETURN:
self.OnStartGame(None)
elif key == wx.WXK_LEFT:
self.playlists.SetFocus()
elif key == wx.WXK_RIGHT:
self.games.SetFocus()
else:
event.Skip()
def GetSelItem(self, box):
item = box.GetNextItem(-1, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED)
if item == -1:
return None
else:
return (box.GetItemText(item), box.GetItemData(item), item)
def OnStartGame(self, event):
if self.emulator_thread:
return
self.emulator_thread = True
name, id, item = self.GetSelItem(self.games)
print name, id, item
game = backend.get_game(id)
emuid = game.emu_id
if emuid == None:
emuid = backend.gamesystem_table[game.system_id].emu_id
emu = backend.emulator_table[emuid]
proc = emu.start_game(game)
self.emulator_thread = backend.EmulatorHandlerThread(game, proc)
self.emulator_thread.start()
self.timer.Start(1000)
self.games.SetItemBackgroundColour(item, wx.Colour(196,0,0))
class ToybocksApp(wx.App):
def OnInit(self):
wx.InitAllImageHandlers()
mainwnd = ToybocksMainWindow(None, -1, "")
self.SetTopWindow(mainwnd)
mainwnd.Show()
state = wx.LIST_STATE_FOCUSED|wx.LIST_STATE_SELECTED
mainwnd.playlists.SetItemState(0, state, state)
mainwnd.games.SetItemState(0, state, state)
mainwnd.playlists.SetFocus()
return 1
app = ToybocksApp(0)
app.MainLoop()