import sys import pygame from pyvidplayer2 import Video from gui import gui import mame from config import cfg, get_emu # 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((cfg["ResolutionX"], self.font.get_height())) # pylint: disable=E1121 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()