bool FeEmulatorEditMenu::on_option_select( FeConfigContext &ctx, FeBaseConfigMenu *& submenu ) { FeMenuOpt &o = ctx.curr_opt(); if ( !m_emulator ) return true; switch ( o.opaque ) { case 1: // Edit artwork m_art_menu.set_art( m_emulator, o.setting ); submenu = &m_art_menu; break; case 2: // Add new artwork m_art_menu.set_art( m_emulator, "" ); submenu = &m_art_menu; break; case 3: // Generate Romlist { // Make sure m_emulator is set with all the configured info // for ( int i=0; i < FeEmulatorInfo::LAST_INDEX; i++ ) m_emulator->set_info( (FeEmulatorInfo::Index)i, ctx.opt_list[i].get_value() ); // Do some checks and confirmation before launching the Generator // std::vector<std::string> paths = m_emulator->get_paths(); for ( std::vector<std::string>::const_iterator itr = paths.begin(); itr != paths.end(); ++itr ) { std::string rom_path = clean_path( *itr ); if ( !directory_exists( rom_path ) ) { if ( ctx.confirm_dialog( "Rom path '$1' not found, proceed anyways?", rom_path ) == false ) return false; else break; // only bug the user once if there are multiple paths configured } } std::string emu_name = m_emulator->get_info( FeEmulatorInfo::Name ); if ( m_romlist_exists ) { if ( ctx.confirm_dialog( "Overwrite existing '$1' list?", emu_name ) == false ) return false; } FePresent *fep = FePresent::script_get_fep(); if ( fep ) fep->set_video_play_state( false ); ctx.fe_settings.build_romlist( emu_name, gen_ui_update, &ctx, ctx.help_msg ); if ( fep ) fep->set_video_play_state( fep->get_video_toggle() ); // // If we don't have a display configured for this romlist, // configure one now // if ( !ctx.fe_settings.check_romlist_configured( emu_name ) ) { FeDisplayInfo *new_disp = ctx.fe_settings.create_display( emu_name ); new_disp->set_info( FeDisplayInfo::Romlist, emu_name ); } ctx.save_req = true; m_parent_save = true; } break; case 4: // Scrape Artwork { FePresent *fep = FePresent::script_get_fep(); if ( fep ) fep->set_video_play_state( false ); std::string emu_name = m_emulator->get_info( FeEmulatorInfo::Name ); ctx.fe_settings.scrape_artwork( emu_name, scrape_ui_update, &ctx, ctx.help_msg ); if ( fep ) fep->set_video_play_state( fep->get_video_toggle() ); } break; case 5: // Delete this Emulator { std::string name = m_emulator->get_info(FeEmulatorInfo::Name); if ( ctx.confirm_dialog( "Delete emulator '$1'?", name ) == false ) return false; ctx.fe_settings.delete_emulator( m_emulator->get_info(FeEmulatorInfo::Name) ); } break; case 100: // Hotkey input { std::string res; FeInputMap::Command conflict( FeInputMap::LAST_COMMAND ); ctx.input_map_dialog( "Press Exit Hotkey", res, conflict ); bool save=false; if ( o.get_value().compare( res ) != 0 ) save = true; else { if ( ctx.confirm_dialog( "Clear Exit Hotkey?", res )) { res.clear(); save = true; } } if ( save ) { o.set_value( res ); ctx.save_req = true; } } break; default: break; } return true; }