import sys # from pprint import pprint import pygame import csvfile import gui as guimodule import mame import mess from configfile import cfg, config_write, get_emu, get_emulators, set_emu from utils import addscanlines, image_from_data, run_emulator BLACK = (0, 0, 0) WHITE = (255, 255, 255) GREY = (70, 70, 70) DARKGREY = (50, 50, 50) class app(object): def __init__(self): if get_emu('EmulatorType') == 'MAME': self.roms = mame.MameROMs(cfg['datadir'], cfg['HideMature'], get_emu()) if get_emu('EmulatorType') == 'MESS': self.roms = mess.MessROMs(cfg['datadir'], get_emu()) if get_emu('EmulatorType') == 'CSV': self.roms = csvfile.csvROMs(cfg['datadir'], get_emu()) self.update_menus() pygame.init() pygame.font.init() iconsurface = pygame.image.load("arcade.png") pygame.display.set_icon(iconsurface) if cfg['FullScreen']: self.screen = pygame.display.set_mode( (cfg['ResolutionX'], cfg['ResolutionY']), pygame.FULLSCREEN) else: self.screen = pygame.display.set_mode((cfg['ResolutionX'], cfg['ResolutionY'])) self.font = pygame.font.Font( pygame.font.match_font(cfg['Font']), cfg['FontSize']) self.status_surface = pygame.Surface(( # pylint: disable=E1121 cfg['ResolutionX'], self.font.get_height())) self.oldmouse = pygame.mouse.set_visible(False) pygame.key.set_repeat(100, 30) self.listwidth = int(cfg['ResolutionX'] / 2) self.gui = guimodule.gui(self.screen) self.gui.add_menu( 0, 0, self.listwidth, cfg['ResolutionY'] - self.font.get_height(), border=False, data=self.roms, fg=(255, 255, 255), bg=(0, 0, 0), name='MainList', startitem=get_emu('CurrentGame'), itemattop=get_emu('GameAtTop')) self.gui.render() def update_menus(self): rootmenu = [ 'Show Artwork', 'Categories', 'Sort', 'Hide Clones' if get_emu('ShowClones') else 'Show Clones', 'Change Emulator', 'Quit' ] sortmenu = ['Name Asc', 'Name Dec', 'Year Asc', 'Year Dec'] emulatormenu = get_emulators() self.menus = { 'rootmenu': rootmenu, 'sortmenu': sortmenu, 'emulatormenu': emulatormenu, 'categorymenu': self.roms.categories } def run(self): keyup = False quitcount = 0 while True: event = self.gui.waitevent() if event: if event.type == pygame.QUIT: break if event.type == pygame.KEYDOWN: keyup = False if event.key == pygame.K_ESCAPE and self.gui.currentobject == 1: # Main List quitcount += 1 if quitcount == cfg['QuitKeyPresses']: break elif event.key == pygame.K_ESCAPE: quitcount = 0 if self.gui.currentobject > 1: self.gui.deletelastobject() else: quitcount = 0 if event.key in cfg[ 'KeySelect'] and self.gui.currentobject == 1: if sys.platform == 'darwin': print('Running %s' % self.roms[self.gui.getcurrentitem()].name) run_emulator( get_emu('EmulatorType'), get_emu('EXE'), self.roms[self.gui.getcurrentitem()].name) elif event.key in cfg[ 'KeyGameHistory'] and self.gui.currentobject == 1: history = self.roms.get_history( self.roms[self.gui.getcurrentitem()]) if history: self.gui.add_notepad(-1, -1, 800, 600, history, True, WHITE, DARKGREY, 'history', 'Game History') elif event.key in cfg[ 'KeyGameInfo'] and self.gui.currentobject == 1: info = self.roms.get_info( self.roms[self.gui.getcurrentitem()]) if info: self.gui.add_notepad(-1, -1, 800, 600, info, True, WHITE, DARKGREY, 'info', 'Game Information') elif event.key in cfg[ 'KeyPopup'] and self.gui.currentobject == 1: self.gui.add_menu(40, 40, -1, -1, self.menus['rootmenu'], True, WHITE, GREY, 'rootmenu', 0) elif event.key in cfg[ 'KeyPopup'] and self.gui.currentobject > 1: self.gui.deletelastobject() elif event.key in cfg['KeyShowArtwork']: pass # TODO: copy from below elif event.key in cfg['KeySelect']: currentitem = self.gui.getcurrentitem() menuname = self.gui.getmenuname() item = self.menus[menuname][currentitem] if menuname == 'rootmenu': if item == 'Quit': break elif item == 'Show Artwork': print('hello') aw = self.roms.get_artwork( self.roms[self.gui.getcurrentitem(0)]) if aw != []: self.gui.add_image_notepad( -1, -1, 800, 600, aw, True, WHITE, DARKGREY, 'artwork', 'Artwork') elif item == 'Categories': self.gui.add_menu( 80, 45, -1, -(self.screen.get_height() - 45 - (self.font.get_height() * 2) - 8), self.menus['categorymenu'], True, WHITE, GREY, 'categorymenu', 0) elif item == 'Sort': self.gui.add_menu(80, 45, -1, -1, self.menus['sortmenu'], True, WHITE, GREY, 'sortmenu', 0) elif item == 'Show Clones': set_emu('ShowClones', True) self.update_menus() self.roms.filter() self.gui.deleteallmenus() self.gui.setcurrentitem(0) elif item == 'Hide Clones': set_emu('ShowClones', False) self.update_menus() self.roms.filter() self.gui.deleteallmenus() self.gui.setcurrentitem(0) elif item == 'Change Emulator': self.gui.add_menu( 80, 45, -1, -(self.screen.get_height() - 45 - (self.font.get_height() * 2) - 8), self.menus['emulatormenu'], True, WHITE, GREY, 'emulatormenu', 0) elif menuname == 'sortmenu': set_emu('Sort', item) self.roms.filter() self.gui.deleteallmenus() elif menuname == 'categorymenu': set_emu('Category', item) self.roms.filter() self.gui.deleteallmenus() self.gui.setcurrentitem(0) elif menuname == 'emulatormenu': cfg['Emulator'] = item if get_emu('EmulatorType') == 'MAME': self.roms = mame.MameROMs( cfg['datadir'], cfg['HideMature'], get_emu()) if get_emu('EmulatorType') == 'MESS': self.roms = mess.MessROMs( cfg['datadir'], get_emu()) if get_emu('EmulatorType') == 'CSV': self.roms = csvfile.csvROMs( cfg['datadir'], get_emu()) self.update_menus() self.gui.deleteallmenus() self.gui.deletelastobject() self.gui.add_menu( 0, 0, self.listwidth, cfg['ResolutionY'] - self.font.get_height(), border=False, data=self.roms, fg=(255, 255, 255), bg=(0, 0, 0), name='MainList', startitem=get_emu('CurrentGame'), itemattop=get_emu('GameAtTop')) if event.type == pygame.KEYUP: keyup = True if self.gui.currentobject == 1 and self.roms: currentitem = self.gui.getcurrentitem() self.screen.fill(BLACK) self.status_surface.fill((128, 128, 128)) if keyup: pass if cfg['AlwaysChangeSnap'] or keyup: data = self.roms.get_snap(self.roms[currentitem], 'snap') screenshot_surface = image_from_data(data, (508, 480)) if cfg['ScanLines']: screenshot_surface = addscanlines(screenshot_surface) self.screen.blit( screenshot_surface, (self.listwidth + 2 + ( (self.screen.get_width() - self.listwidth + 2) / 2) - (screenshot_surface.get_width() / 2), 102)) data = self.roms.get_snap(self.roms[currentitem], 'marquee') marquee_surface = image_from_data(data, (640, 100)) self.screen.blit( marquee_surface, (self.listwidth + 2 + ( (self.screen.get_width() - self.listwidth + 2) / 2) - (marquee_surface.get_width() / 2), 0)) data = self.roms.get_snap(self.roms[currentitem], 'title') title_surface = image_from_data( data, (640, cfg['ResolutionY'] - (screenshot_surface.get_height() + marquee_surface.get_height() + 4 + self.status_surface.get_height()))) self.screen.blit( title_surface, (self.listwidth + 2 + ( (self.screen.get_width() - self.listwidth + 2) / 2) - (title_surface.get_width() / 2), (screenshot_surface.get_height() + marquee_surface.get_height() + 4))) size = self.font.size( '%d / %d %s' % (currentitem + 1, len(self.roms), get_emu('Sort')))[0] self.status_surface.blit( self.font.render( '%d / %d %s' % (currentitem + 1, len(self.roms), get_emu('Sort')), True, BLACK, (128, 128, 128)), (cfg['ResolutionX'] - size - 5, 0)) self.status_surface.blit( self.font.render( '%s %s' % (self.roms[currentitem].year, self.roms[currentitem].category), True, BLACK, (128, 128, 128)), (5, 0)) try: self.screen.blit( self.status_surface, (0, cfg['ResolutionY'] - self.font.get_height())) except: pass self.gui.render() pygame.mouse.set_visible(self.oldmouse) pygame.key.set_repeat() set_emu('CurrentGame', self.gui.getcurrentitem()) set_emu('GameAtTop', self.gui.getitemattop()) config_write()