/****** Closes the main window ******/ void main_menu::closeEvent(QCloseEvent* event) { //Close the core if(main_menu::gbe_plus != NULL) { main_menu::gbe_plus->shutdown(); main_menu::gbe_plus->core_emu::~core_emu(); } //Save .ini options config::gb_type = settings->sys_type->currentIndex(); config::use_cheats = (settings->cheats->isChecked()) ? true : false; config::mute = (settings->sound_on->isChecked()) ? false : true; config::volume = settings->volume->value(); config::use_opengl = (settings->ogl->isChecked()) ? true : false; config::use_haptics = (settings->rumble_on->isChecked()) ? true : false; switch(settings->freq->currentIndex()) { case 0: config::sample_rate = 48000.0; break; case 1: config::sample_rate = 44100.0; break; case 2: config::sample_rate = 22050.0; break; case 3: config::sample_rate = 11025.0; break; } save_ini_file(); //Close SDL SDL_Quit(); //Exit the application exit(0); }
void preset_user_interface(UniversalInterface& ui, stdx::fun_ref<void(UniversalInterface&)> target , char const* defaultFile, char const* activeFilePath, ui::UniversalInterface::InteractionParam<char const*> activeFileChange , char const* groupName, UniqueElementIdentifier id) { if (!id.value) id = UEI(preset_user_interface); if (auto presetGroup = ui::Group(ui, id)) { uintptr_t controlIdentifier = 0; ui.addText(controlIdentifier++, (groupName) ? groupName : "Preset", "", nullptr); auto&& loadPreset = [&](char const* file) { try { activeFilePath = defaultFile = nullptr; // warning: everything may change if (activeFileChange) activeFileChange->updateValue(file); load_ini_file(file, target); } catch(...) { stdx::prompt(appx::exception_string().c_str(), "Error applying preset"); } }; if (activeFilePath) { auto hiddenIdentifier = controlIdentifier++; if (activeFilePath[0]) ui.addHidden(hiddenIdentifier, "active", activeFilePath, loadPreset); } ui.addButton(controlIdentifier++, (activeFilePath && activeFilePath[0] && defaultFile && defaultFile[0]) ? defaultFile : "load", [&]() { auto mf = stdx::prompt_file_compat(defaultFile, "Ini files=*.ini|All files=*.*", stdx::dialog::open, true); for (auto&&f : mf) loadPreset(f.c_str()); }); ui.addButton(controlIdentifier++, "save", [&]() { auto mf = stdx::prompt_file_compat(defaultFile, "Ini files=*.ini|All files=*.*", stdx::dialog::save); for (auto&&f : mf) { try { activeFilePath = defaultFile = nullptr; // warning: everything may change if (activeFileChange) activeFileChange->updateValue(f.c_str()); save_ini_file(f.c_str(), target); } catch(...) { stdx::prompt(appx::exception_string().c_str(), "Error saving preset"); } } }); } }
/********************************************************************************* *函数名称:int param_load(void) *功能描述:将ini文件参数加载进来,如果为空则创建文件,如果没有某一个参数,则添加该参数 *输 入: none *输 出: none *返 回 值: 0:成功读取,大于0:读取时发现需要更新,-1:表示失败 *--------------------------------------------------------------------------------- * @修改人 修改时间 修改内容 * 白养民 2015-06-08 创建 *********************************************************************************/ int param_load(void) { int i,i_sect; const char *file =DF_PARAM_INI_FILE; char read_val[BUF_SIZE]={0}; char buf[MAX_FILE_SIZE]={0}; int age; int file_size; int ret_val = 0; long temp_val; memset(buf,0,sizeof(buf)); load_ini_file(file,buf,&file_size); for( i_sect = 0; i_sect < sizeof( tbl_ini_lookup ) / sizeof( struct _st_tbl_ini_lookup ); i_sect++ ) { for( i = 0; i < tbl_ini_lookup[i_sect].param_size / sizeof( st_tbl_id_lookup ); i++ ) { //printf("%s\n",tbl_id_lookup[i].id); memset(read_val,0,sizeof(read_val)); ret_val += read_profile_write_buf(tbl_ini_lookup[i_sect].section, tbl_ini_lookup[i_sect].param[i].id,read_val, BUF_SIZE,tbl_ini_lookup[i_sect].param[i].default_val,buf); if(tbl_ini_lookup[i_sect].param[i].type <= TYPE_DWORD) { temp_val = atoi(read_val); memcpy(tbl_ini_lookup[i_sect].param[i].val,(uint8_t *)&(temp_val),tbl_ini_lookup[i_sect].param[i].type); } else if(tbl_ini_lookup[i_sect].param[i].type != TYPE_CAN) { memcpy(tbl_ini_lookup[i_sect].param[i].val,(uint8_t *)(read_val),tbl_ini_lookup[i_sect].param[i].type); } else { Ascii_To_Hex(tbl_ini_lookup[i_sect].param[i].val,read_val,8); } } } if(ret_val) { save_ini_file(file,buf); printf("****************存储数据更新!***********************\n"); } return ret_val; }
/********************************************************************************* *函数名称:int param_save_ex(char * section) *功能描述:将所有当前参数保存 *输 入: section :ini文件参数对应的的section *输 出: none *返 回 值: 0:成功,非0:表示失败, -1 表示打开文件失败 *--------------------------------------------------------------------------------- * @修改人 修改时间 修改内容 * 白养民 2015-06-08 创建 *********************************************************************************/ int param_save_ex(char * section) { int i,i_sect; const char *file =DF_PARAM_INI_FILE; char write_val[BUF_SIZE]={0}; char buf[MAX_FILE_SIZE]={0}; int age; int file_size; int ret_val = 0; long temp_val; u32 ul_data; if(load_ini_file(file,buf,&file_size)) return -1; for( i_sect = 0; i_sect < sizeof( tbl_ini_lookup ) / sizeof( struct _st_tbl_ini_lookup ); i_sect++ ) { if((strlen(section) == 0)||(strncmp(section,tbl_ini_lookup[i_sect].section,strlen(tbl_ini_lookup[i_sect].section)) == 0)) { for( i = 0; i < tbl_ini_lookup[i_sect].param_size / sizeof( st_tbl_id_lookup ); i++ ) { memset(write_val,0,sizeof(write_val)); switch(tbl_ini_lookup[i_sect].param[i].type) { case TYPE_BYTE: { ul_data=*(uint8_t *)tbl_ini_lookup[i_sect].param[i].val; } case TYPE_WORD: { ul_data=*(uint16_t *)tbl_ini_lookup[i_sect].param[i].val; } case TYPE_DWORD: { ul_data=*(uint32_t *)tbl_ini_lookup[i_sect].param[i].val; sprintf(write_val,"%d",ul_data); break; } case TYPE_CAN: { Hex_To_Ascii(write_val, tbl_ini_lookup[i_sect].param[i].val, 8); break; } /* case TYPE_STR: { memset(buffer,0,sizeof(buffer)); memcpy(buffer,tbl_id_lookup[i].val,32); rt_kprintf("\"%s\";",buffer); break; } */ default : { memcpy(write_val,tbl_ini_lookup[i_sect].param[i].val,tbl_ini_lookup[i_sect].param[i].type); break; } } write_profile_string_buf(tbl_ini_lookup[i_sect].section,tbl_ini_lookup[i_sect].param[i].id,write_val,buf); } } } return save_ini_file(file,buf); }