Files
mfe9/app.py
Rich e446f9cce4 .
2023-12-07 15:22:21 +00:00

320 lines
13 KiB
Python

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()