def __init__(self, WinMain): """setup cp viewer window""" #set main window self.WinMain = WinMain self.layout_filename = '' self.cpviewer_ok = True #open cpviewer viewer ini self.cpviewer_ini = MameWahIni(os.path.join(CONFIG_DIR, 'cpviewer.ini'), 'default') if os.path.exists(os.path.join(CONFIG_DIR, 'ini', self.WinMain.current_emu + '.cpv')): self.cpviewer_ini = MameWahIni(os.path.join(CONFIG_DIR, 'ini', self.WinMain.current_emu + '.cpv'), 'default') self.ctrls_ini_filename = self.cpviewer_ini.get('controls_ini_file') if not os.path.isfile(self.ctrls_ini_filename): self.WinMain.log_msg("Warning: controls file: [%s] does not exist" % (self.ctrls_ini_filename)) self.cpviewer_ok = False self.layout_filename = self.cpviewer_ini.get('viewer_layout') if not os.path.exists(self.layout_filename): self.WinMain.log_msg("Warning: CPViewer layout file: [%s] does not exist" % (self.layout_filename)) self.cpviewer_ok = False #build gui self.winCPViewer = gtk.Fixed() self.winCPViewer.set_has_window(True) self.imgBackground = gtk.Image() self.winCPViewer.add(self.imgBackground) self.WinMain.fixd.add(self.winCPViewer) self.imgBackground.show() self.winCPViewer.show() self.ctrls_ini = self.get_controls_ini(self.ctrls_ini_filename) if self.ctrls_ini is None: self.cpviewer_ok = False self.app_number = 0
def __init__(self, glade_filename, window_name, emu_name, emu_list_idx): """build the window""" WahCade.__init__(self) GladeSupport.__init__(self, glade_filename, window_name, constants.app_name) self.config_dir = CONFIG_DIR self.emu_name = emu_name self.emu_list_idx = emu_list_idx #games list self.tvwList, self.lsList, self.tvwsList = self.setup_treeview( columns=[ 'Game Name', 'ROM Name', 'Year', 'Manufacturer', 'Clone Of', 'Rom Of', 'Display Type', 'Screen Type', 'Controller Type', 'Driver Status', 'Colour Status', 'Sound Status', 'Category' ], column_types=[gobject.TYPE_STRING] * self.NUM_COLS, container=self.scwList, edit_cell_cb=self.on_tvwList_edited, resizeable_cols=True, highlight_rows=False) #self.tvwList.connect('row-activated', self.on_tvwList_activated) self.tvwList.connect('key-release-event', self.on_tvwList_key_event) #activate multiple selection mode on tvwsList self.tvwsList.set_mode(gtk.SELECTION_MULTIPLE) #load lists i = 0 emu_game_lists = [] while True: ini_file = os.path.join(self.config_dir, 'ini', '%s-%s.ini' % (self.emu_name, i)) if os.path.isfile(ini_file): list_ini = MameWahIni(ini_file) emu_game_lists.append(list_ini.get('list_title')) i += 1 else: break l = ['%s: %s' % (i, r) for i, r in enumerate(emu_game_lists)] self.setup_combo_box(self.cboList, l) #setup filters & emu ini emu_ini_filename = os.path.join(self.config_dir, 'ini', '%s.ini' % (self.emu_name)) if os.path.isfile(emu_ini_filename): self.emu_ini = MameWahIni(emu_ini_filename) #filters._mameinfo_file = os.path.join(self.emu_ini.get('dat_file')) filters._catver_ini = os.path.join( self.emu_ini.get('catver_ini_file')) else: print _("Error: Emulator Ini file: [%s] doesn't exist" % (emu_ini_filename)) #load filter self.new_iter = None self.new_path = None self.new_col = 0 self.list_altered = False self.cboList.set_active(self.emu_list_idx)
def build_filelist(self, type, ext="ini", regex="(?<=-)\d+", emu="", sep=""): """return array of files numbers matching regex value""" filelist = [] fileset = glob.glob( os.path.join(CONFIG_DIR, ext, emu + sep + '*.' + ext)) for file in fileset: m = re.search(regex, file) if m is not None: if type == "int": filelist.append(self.return_listnum(file)) elif type == "glist": if os.path.isfile(file): list_ini = MameWahIni(file) filelist.append('%s: %s' % (self.return_listnum(file), list_ini.get('list_title'))) else: filelist.append(file) filelist.sort() return filelist
def __init__(self, glade_filename, window_name, WinSetup): """build the dialog""" GladeSupport.__init__(self, glade_filename, window_name, APP_NAME) self.dlgAddEmu.set_transient_for(WinSetup.winSetup) self.dlgAddEmu.set_position(gtk.WIN_POS_CENTER_ON_PARENT) #winsetup class self.WinSetup = WinSetup #create new emulator list self.tvw, self.ls, self.tvws = self.setup_treeview( columns = [_('Select an Emulator Template...')], column_types = [gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING], container = self.scw, resizeable_cols = False) #get list of available templates emu_ini_files = glob.glob(os.path.join(APP_PATH, 'templates', '*.ini')) for emu_ini in emu_ini_files: ini = MameWahIni(emu_ini) if not ini.has_option('list_title'): basename = os.path.splitext(os.path.basename(emu_ini))[0] self.ls.append( ('%s (%s)' % (ini.get('emulator_title'), basename), basename, emu_ini)) #set dialog size num = len(self.ls) if num > 10: num = 10 self.dlgAddEmu.set_size_request(320, 120 + (num * 15)) #sort self.ls.set_sort_column_id(0, gtk.SORT_ASCENDING)
def buildemulist(self): emu_lists = [] emu_ini_files = self.build_filelist("", "ini", "(.*(?<!=-))") for emu_ini in emu_ini_files: ini = MameWahIni(emu_ini) if not ini.has_option('list_title'): emu_lists.append( [ini.get('emulator_title'), os.path.splitext(os.path.basename(emu_ini))[0],ini]) return emu_lists
def __init__(self, WinMain): #set main window self.WinMain = WinMain self.layout_filename = '' self.histview_ok = True #open history viewer ini self.histview_ini = MameWahIni(os.path.join(CONFIG_DIR, 'histview.ini'), 'default', '0.16') if os.path.exists(os.path.join(CONFIG_DIR, 'ini', self.WinMain.current_emu + '.his')): self.cpviewer_ini = MameWahIni(os.path.join(CONFIG_DIR, 'ini', self.WinMain.current_emu + '.his'), 'default') if not os.path.isfile(self.histview_ini.get('history_dat_file')): self.WinMain.log_msg("Warning: history file: [%s] does not exist" % ( self.histview_ini.get('history_dat_file'))) self.histview_ok = False self.layout_filename = self.histview_ini.get('history_layout') if not os.path.isfile(self.layout_filename): self.WinMain.log_msg("Warning: history layout: [%s] does not exist" % (self.layout_filename)) self.histview_ok = False #build the window self.winHistory = gtk.Fixed() self.winHistory.set_has_window(True) self.imgBackground = gtk.Image() self.lblHeading = gtk.Label() self.sclHistory = ScrollList() self.winHistory.add(self.imgBackground) self.winHistory.add(self.make_evb_widget(self.lblHeading)) self.winHistory.add(self.sclHistory.fixd) WinMain.fixd.add(self.winHistory) self.imgBackground.show() self.lblHeading.show() self.winHistory.show() #build list self.lsHistory = [] self.sclHistory.auto_update = True self.sclHistory.display_limiters = self.WinMain.wahcade_ini.getint('show_list_arrows', 0) #widgets self._histview_items = [ (8, self.lblHeading), (21, self.sclHistory)] #get history self.history = self.read_history(self.histview_ini.get('history_dat_file')) #app number self.app_number = 0
def on_cboLists_changed(self, *args): """emulator list combo""" #get settings for current emu list self.emu_list_idx = self.cboLists.get_active() emu_list_ini = MameWahIni( os.path.join(CONFIG_DIR, 'ini', '%s-%s.ini' % (self.emu_name, self.emu_list_idx))) if self.emu_list_idx >= 1: if emu_list_ini.get('list_type') != 'normal': self.show_msg_dialog( msg=_('List Type must be "normal" to generate filters')) self.cboLists.set_active(0) return if self.emu_list_idx >= 0: self.load_filter()
def show_about_dialog(self, app_name, config_dir): """about dialog""" #open controller ini file self.ctrlr_ini = MameWahIni(os.path.join(config_dir, 'ctrlr', 'default.ini'), 'ctrlr') #create about dialog dlg = gtk.AboutDialog() dlg.set_name(app_name) dlg.set_version('\n%s "%s"' % (VERSION, VERSION_NAME)) dlg.set_logo(gtk.gdk.pixbuf_new_from_file( os.path.join(APP_PATH, 'pixmaps', 'Rcade-logo.png'))) gtk.about_dialog_set_url_hook(self.show_website, None) dlg.set_website('https://github.com/thevoiceless/wc-testing') dlg.set_website_label('github source') dlg.set_authors([ 'Andy Balcombe', 'Zach McGaughey', 'Devin Wilson', 'Terek Campbell', 'Riley Moses', 'John Kelly', 'Bug Reports and Patches:', ' Sylvain Fauveau', ' Robbforce', ' Jim Merullo', ' SeTTleR', ' Mike Crawford', ' Mike Schwartz', ' Nellistc', ' Captbaritone', ' Delphipool', ' 3NF', ' Zerodiv', ' Natrix', ' Bonzo', ' Battlecat', ' Krisbee', ' Buks', ' KillsTheWeak', ' Martin Kalitis', ' Zerojay', ' Dave Baer', ' Spudgunman', ' RomKnight', ' Jason Carter', ' Zombie', ' Pinball Wizard', ' hamelg', ' 3vi1', ' Vítor Baptista', ' Enrico Magrella', ' and anyone I\'ve forgotten...', '', 'Translations:', ' de: SeTTleR', ' es: Nicolás Álvarez', ' fr: Sylvain Faveau', ' it: Diego Pierotto', ' sv: Daniel Nylander', '', 'bdist_debian.py: Gene Cash', '', ]) dlg.set_artists(['Riley Moses', 'John Kelly', 'Andy Balcombe', 'Buks', 'Battlecat']) dlg.set_copyright('ReadyTalk') dlg.set_comments('Thanks to:\nMinWah and also the Mame / xMame team') dlg.set_translator_credits(_('translator-credits')) dlg.set_license(open(os.path.join(APP_PATH, 'doc', 'COPYING')).read()) dlg.connect('key_press_event', self.on_dlgAbout_key_press) dlg.run() dlg.hide()
def __init__(self, glade_filename, window_name, emu_name): """build the window""" WahCade.__init__(self) GladeSupport.__init__(self, glade_filename, window_name, constants.app_name) self.config_dir = CONFIG_DIR #print "emu_name=",emu_name self.emu_name = emu_name self.emu_list_idx = 0 #setup tree & lists self.tsFilter = gtk.TreeStore(str, gobject.TYPE_BOOLEAN, str) self.tvwFilter = gtk.TreeView(model=self.tsFilter) #text col cellrt = gtk.CellRendererText() tvcol = gtk.TreeViewColumn(_('Filter')) tvcol.pack_start(cellrt, True) tvcol.add_attribute(cellrt, 'text', 0) tvcol.set_resizable(True) #checkbox col crt = gtk.CellRendererToggle() crt.set_property('activatable', True) crt.connect('toggled', self.on_tvwFilter_toggled, self.tsFilter) tvcol2 = gtk.TreeViewColumn(_('Selected?'), crt) tvcol2.add_attribute(crt, 'active', 1) #add columns to treeview self.tvwFilter.append_column(tvcol) self.tvwFilter.append_column(tvcol2) #self.tvwFilter.set_rules_hint(True) self.tvwFilter.show() self.scwFilter.add(self.tvwFilter) #games list self.tvwGames, self.lsGames, self.tvwsGames = self.setup_treeview( columns=['Games'], column_types=[gobject.TYPE_STRING], container=self.scwGameList, resizeable_cols=True, highlight_rows=False) #load lists i = 0 emu_game_lists = [] while True: ini_file = os.path.join(CONFIG_DIR, 'ini', '%s-%s.ini' % (self.emu_name, i)) if os.path.isfile(ini_file): list_ini = MameWahIni(ini_file) emu_game_lists.append(list_ini.get('list_title')) i += 1 else: break l = ['%s: %s' % (i, r) for i, r in enumerate(emu_game_lists)] #setup filters & emu ini emu_ini_filename = os.path.join(CONFIG_DIR, 'ini', '%s.ini' % (self.emu_name)) if os.path.isfile(emu_ini_filename): self.emu_ini = MameWahIni(emu_ini_filename) #filters._mameinfo_file = os.path.join(self.emu_ini.get('dat_file')) filters._catver_ini = os.path.join( self.emu_ini.get('catver_ini_file')) else: print _("Error: Emulator Ini file: [%s] doesn't exist" % (emu_ini_filename)) #filter values if os.path.isfile(self.emu_ini.get('dat_file')): self._display_clones = [[_('No'), 'no'], [_('Yes'), 'yes'], [ _('Only if better than Parent'), 'better' ]] self._filter_sections = [ ['filter_type', _('Display Clones')], ['year', _('Year Filters')], ['manufacturer', _('Manufacturer Filters')], ['driver', _('BIOS Filters')], ['display_type', _('Screen Type Filters')], ['screen_type', _('Screen Orientation Filters')], ['controller_type', _('Input Type Filters')], ['driver_status', _('General Status Filters')], ['colour_status', _('Colour Status Filters')], ['sound_status', _('Sound Status Filters')], ['category', _('Category Filters')] ] elif os.path.isfile(self.emu_ini.get('catver_ini_file')): self._filter_sections = [['category', _('Category Filters')]] else: self._filter_sections = [] self.setup_combo_box(self.cboLists, l) #load filter self.cboLists.set_active(self.emu_list_idx) self.filter_altered = False
def get_matching_filename(self, file_prefixes, file_formats): """return the filename if it exists from given formats & path file_prefixes = [(dir_name, filename), ...] file_formats = [file_ext1, file_ext2, ...] """ p = re.compile('(\.[^\.]+$)|(\s(\(|\[).+(?<=(\)|\]|\s))\.[^\.]+$)') self.wahcade_ini = MameWahIni(os.path.join(CONFIG_DIR, 'wahcade.ini')) l = self.wahcade_ini.get('layout') fz = self.wahcade_ini.getint('fuzzy_artwork_search') #check lower & upper case filenames for each given prefix & format for dirname, fp in file_prefixes: if fp == '##random##': for ff in file_formats: fnl = walk_dir(dirname, False, '*.%s' % ff.lower(), False) + \ walk_dir(dirname, False, '*.%s' % ff.upper(), False) #return first valid match for filename in fnl: if os.path.isfile(filename): return filename elif fp != '': if file_formats != '': # Check if this is a layout if l not in dirname: if fz: # NB: we append a fake extension here to support the regex currently - sairuk # handles . appearing in filename being treated as an ext fileset = glob.iglob( os.path.join(CONFIG_DIR, dirname, re.sub(p, '', fp + ".fix") + "*")) for filename in fileset: fn = os.path.basename(filename.lower()) f = re.sub(p, '', fn) g = re.search(re.escape(f), fp.lower()) if f and g is not None: if f == g.group(0): return filename else: self.log_msg( " [ARTWORK] No match for " + fp + " in " + dirname, 1) else: for ff in file_formats: basename = '%s.%s' % (fp, ff) #build list of possible filenames fnl = [ os.path.join(dirname, basename), os.path.join(dirname, basename.lower()), os.path.join(dirname, basename.upper()) ] #return first valid match for filename in fnl: if os.path.isfile(filename): return filename else: for ff in file_formats: basename = '%s.%s' % (fp, ff) #build list of possible filenames fnl = [ os.path.join(dirname, basename), os.path.join(dirname, basename.lower()), os.path.join(dirname, basename.upper()) ] #return first valid match for filename in fnl: if os.path.isfile(filename): return filename else: filename = os.path.join(dirname, fp) if os.path.isfile(filename): return filename #done - nothing found return ''
def load_emulator_settings(self, ini_name, emu_ini, default_list=0): """load emu settings""" # Default For Screens self.txeMameXMLFile.set_sensitive(True) self.btnMameXMLFile.set_sensitive(True) self.btnMameXMLGen.set_sensitive(True) self.btnEmuListFilter.set_sensitive(True) self.txeEmuTitle.set_text(emu_ini.get('emulator_title')) self.txeEmuExe.set_text(emu_ini.get('emulator_executable')) self.txeEmuCmdLine.set_text(emu_ini.get('commandline_format')) self.txeEmuAltCmdLine1.set_text(emu_ini.get('alt_commandline_format_1')) self.txeEmuAltCmdLine2.set_text(emu_ini.get('alt_commandline_format_2')) self.txeEmuRomExt.set_text(emu_ini.get('rom_extension')) self.txeEmuRomDir.set_text(emu_ini.get('rom_path')) self.txeEmuNMSFile.set_text(emu_ini.get('nms_file')) #list gen type ini_lgen = emu_ini.get('list_generation_method') lgen_idx = [idx for idx, r in enumerate(self.emu_list_gen_types) if ini_lgen in r[0]][0] self.cboEmuListGen.set_active(lgen_idx) #artwork for idx, emu_art in enumerate(self.emu_artwork_txe): emu_art.set_text(emu_ini.get('artwork_%s_image_path' % (idx + 1))) self.txeEmuMovieDir.set_text(emu_ini.get('movie_preview_path')) self.spnEmuMovieNum.set_value(emu_ini.getint('movie_artwork_no')) self.cboeEmuExtApp1.child.set_text(emu_ini.get('app_1_executable')) self.txeEmuExtApp1.set_text(emu_ini.get('app_1_commandline_format')) self.cboeEmuExtApp2.child.set_text(emu_ini.get('app_2_executable')) self.txeEmuExtApp2.set_text(emu_ini.get('app_2_commandline_format')) self.cboeEmuExtApp3.child.set_text(emu_ini.get('app_3_executable')) self.txeEmuExtApp3.set_text(emu_ini.get('app_3_commandline_format')) self.txeEmuExtAuto.set_text(emu_ini.get('auto_launch_apps')) #screen saver ini_scr = emu_ini.get('saver_type') scr_idx = [idx for idx, r in enumerate(self.emu_scrsave_types) if r[0] == ini_scr][0] self.cboEmuScrSaver.set_active(scr_idx) self.txeEmuScrMovieDir.set_text(emu_ini.get('movie_path')) self.txeEmuScrExternal.set_text(emu_ini.get('scr_file')) #load lists self.emu_game_lists = [] ini_files = self.build_filelist("", "ini", "(?<=-)\d+", ini_name, "-") for ini_file in ini_files: if os.path.isfile(ini_file): list_ini = MameWahIni(ini_file) self.emu_game_lists.append([list_ini.get('list_title'), list_ini]) l = ['%s: %s' % (i, r[0]) for i, r in enumerate(self.emu_game_lists)] self.setup_combo_box(self.cboEmuLists, l) self.cboEmuLists.set_active(default_list) self.txeMameXMLFile.set_text(emu_ini.get('dat_file')) self.txeMameCatver.set_text(emu_ini.get('catver_ini_file')) #mame only if not ini_name in MAME_INI_FILES: self.txeMameXMLFile.set_sensitive(False) self.btnMameXMLFile.set_sensitive(False) self.btnMameXMLGen.set_sensitive(False) if emu_ini.get('catver_ini_file') == "": self.btnEmuListFilter.set_sensitive(False)
def __init__(self, glade_filename, window_name, config_opts, config_args): """build the window""" WahCade.__init__(self) GladeSupport.__init__(self, glade_filename, window_name, APP_NAME) #command-line options self.config_opts = config_opts #set default config location (create / update as necessary) self.config_dir = CONFIG_DIR if not os.path.exists(self.config_dir): self.copy_user_config('all') else: #update current config self.copy_user_config() #keys list self.tvwKeys, self.lsKeys, self.tvwsKeys = self.setup_treeview( columns = ['Function', 'Key'], column_types = [gobject.TYPE_STRING, gobject.TYPE_STRING], container = self.scwKeys, resizeable_cols = False) self.lsKeys.set_sort_column_id(0, gtk.SORT_ASCENDING) self.tvwKeys.connect('row-activated', self.on_tvwKeys_row_activated) self.tvwKeys.set_tooltip_text(_('Double-Click a row to change a Key...')) #set max width for keys column (stops window getting too wide) col = self.tvwKeys.get_column(1) col.set_max_width(200) #get ini files self.wahcade_ini = MameWahIni(os.path.join(self.config_dir, 'wahcade.ini')) self.histview_ini = MameWahIni(os.path.join(self.config_dir, 'histview.ini')) self.cpviewer_ini = MameWahIni(os.path.join(self.config_dir, 'cpviewer.ini')) self.ctrlr_ini = MameWahIni(os.path.join(self.config_dir, 'ctrlr', 'default.ini'), 'ctrlr') #emu stuff self.emu_list_gen_types = [ [['rom_folder'], 'Rom Directory'], [['rom_folder_vs_listxml', 'list_xml'], 'XML File'], [['rom_folder_vs_dat_file', 'dat_file'], 'DAT File']] self.emu_scrsave_types = [ ['blank_screen', 'Blank Screen'], ['slideshow', 'Slide Show'], ['movie', 'Movies'], ['launch_scr', 'Launch External Screen Saver']] self.emu_list_types = [ ['normal', 'Normal'], ['most_played', 'Most Played'], ['longest_played', 'Longest Played'], ['hi2text_supported', 'High Score Supported'], ['xml_remote', 'XML Remote']] self.music_movie_mix = [ ['mute_movies', 'Mute Movies'], ['merge', 'Mix with Music']] self.emu_artwork_txe = [ self.txeEmuArt1, self.txeEmuArt2, self.txeEmuArt3, self.txeEmuArt4, self.txeEmuArt5, self.txeEmuArt6, self.txeEmuArt7, self.txeEmuArt8, self.txeEmuArt9, self.txeEmuArt10] self.emu_artwork_btn = [ self.btnEmuArt1, self.btnEmuArt2, self.btnEmuArt3, self.btnEmuArt4, self.btnEmuArt5, self.btnEmuArt6, self.btnEmuArt7, self.btnEmuArt8, self.btnEmuArt9, self.btnEmuArt10] #setup combo boxes self.setup_combo_box(self.cboEmuScrSaver, [r[1] for r in self.emu_scrsave_types]) self.setup_combo_box(self.cboEmuListGen, [r[1] for r in self.emu_list_gen_types]) self.setup_combo_box(self.cboEmuListType, [r[1] for r in self.emu_list_types]) self.setup_combo_box(self.cboWCMovieMix, [r[1] for r in self.music_movie_mix]) #global joy self.joystick = joystick.joystick() self.joystick.use_all_controls() #get default window size & pos self.do_events() w, h = self.wahcade_ini.get('setup_window_size', 'default', '400x400').split('x') self.winSetup.resize(width=int(w), height=int(h)) #load settings self.load_settings() self.setup_altered = False #set icon sizes settings = gtk.settings_get_default() settings.set_string_property('gtk-icon-sizes', 'gtk-button=16,16', '')