306 lines
13 KiB
Python
306 lines
13 KiB
Python
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()
|