diff --git a/Source/Core/Common/IniFile.cpp b/Source/Core/Common/IniFile.cpp index 642835ac90..6159c2897d 100644 --- a/Source/Core/Common/IniFile.cpp +++ b/Source/Core/Common/IniFile.cpp @@ -436,61 +436,6 @@ bool IniFile::Save(const std::string& filename) return File::RenameSync(temp, filename); } -bool IniFile::Get(const std::string& sectionName, const std::string& key, std::vector* values) -{ - Section *section = GetSection(sectionName); - if (!section) - return false; - return section->Get(key, values); -} - -bool IniFile::Get(const std::string& sectionName, const std::string& key, int* value, int defaultValue) -{ - Section *section = GetSection(sectionName); - if (!section) { - *value = defaultValue; - return false; - } else { - return section->Get(key, value, defaultValue); - } -} - -bool IniFile::Get(const std::string& sectionName, const std::string& key, u32* value, u32 defaultValue) -{ - Section *section = GetSection(sectionName); - if (!section) { - *value = defaultValue; - return false; - } else { - return section->Get(key, value, defaultValue); - } -} - -bool IniFile::Get(const std::string& sectionName, const std::string& key, bool* value, bool defaultValue) -{ - Section *section = GetSection(sectionName); - if (!section) { - *value = defaultValue; - return false; - } else { - return section->Get(key, value, defaultValue); - } -} - -bool IniFile::Get(const std::string& sectionName, const std::string& key, std::string* value, const std::string& defaultValue) -{ - Section* section = GetSection(sectionName); - if (!section) { - if (&defaultValue != &NULL_STRING) { - *value = defaultValue; - } - return false; - } - return section->Get(key, value, defaultValue); -} - - - // Unit test. TODO: Move to the real unit test framework. /* int main() diff --git a/Source/Core/Common/IniFile.h b/Source/Core/Common/IniFile.h index 6e80611f1d..1d006b802f 100644 --- a/Source/Core/Common/IniFile.h +++ b/Source/Core/Common/IniFile.h @@ -95,34 +95,11 @@ public: // Returns true if key exists in section bool Exists(const std::string& sectionName, const std::string& key) const; - // TODO: Get rid of these, in favor of the Section ones. - void Set(const std::string& sectionName, const std::string& key, const std::string& newValue) { - GetOrCreateSection(sectionName)->Set(key, newValue); - } - void Set(const std::string& sectionName, const std::string& key, int newValue) { - GetOrCreateSection(sectionName)->Set(key, newValue); - } - void Set(const std::string& sectionName, const std::string& key, u32 newValue) { - GetOrCreateSection(sectionName)->Set(key, newValue); - } - void Set(const std::string& sectionName, const std::string& key, bool newValue) { - GetOrCreateSection(sectionName)->Set(key, newValue); - } - void Set(const std::string& sectionName, const std::string& key, const std::vector& newValues) { - GetOrCreateSection(sectionName)->Set(key, newValues); - } - - // TODO: Get rid of these, in favor of the Section ones. - bool Get(const std::string& sectionName, const std::string& key, int* value, int defaultValue = 0); - bool Get(const std::string& sectionName, const std::string& key, u32* value, u32 defaultValue = 0); - bool Get(const std::string& sectionName, const std::string& key, bool* value, bool defaultValue = false); - bool Get(const std::string& sectionName, const std::string& key, std::vector* values); - bool Get(const std::string& sectionName, const std::string& key, std::string* value, const std::string& defaultValue = NULL_STRING); - template bool GetIfExists(const std::string& sectionName, const std::string& key, T value) { if (Exists(sectionName, key)) - return Get(sectionName, key, value); + return GetOrCreateSection(sectionName)->Get(key, value); + return false; } diff --git a/Source/Core/Core/BootManager.cpp b/Source/Core/Core/BootManager.cpp index c0e6eb989f..5e5f54afac 100644 --- a/Source/Core/Core/BootManager.cpp +++ b/Source/Core/Core/BootManager.cpp @@ -136,38 +136,43 @@ bool BootCore(const std::string& _rFilename) config_cache.bSetFrameSkip = false; // General settings - game_ini.Get("Core", "CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread); - game_ini.Get("Core", "SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle); - game_ini.Get("Core", "EnableFPRF", &StartUp.bEnableFPRF, StartUp.bEnableFPRF); - game_ini.Get("Core", "MMU", &StartUp.bMMU, StartUp.bMMU); - game_ini.Get("Core", "TLBHack", &StartUp.bTLBHack, StartUp.bTLBHack); - game_ini.Get("Core", "DCBZ", &StartUp.bDCBZOFF, StartUp.bDCBZOFF); - game_ini.Get("Core", "VBeam", &StartUp.bVBeamSpeedHack, StartUp.bVBeamSpeedHack); - game_ini.Get("Core", "SyncGPU", &StartUp.bSyncGPU, StartUp.bSyncGPU); - game_ini.Get("Core", "FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed); - game_ini.Get("Core", "BlockMerging", &StartUp.bMergeBlocks, StartUp.bMergeBlocks); - game_ini.Get("Core", "DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE); - game_ini.Get("Core", "DSPThread", &StartUp.bDSPThread, StartUp.bDSPThread); - game_ini.Get("Core", "GFXBackend", &StartUp.m_strVideoBackend, StartUp.m_strVideoBackend); - game_ini.Get("Core", "CPUCore", &StartUp.iCPUCore, StartUp.iCPUCore); - game_ini.Get("Core", "HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2); - if (game_ini.Get("Core", "FrameLimit", &SConfig::GetInstance().m_Framelimit, SConfig::GetInstance().m_Framelimit)) + IniFile::Section* core_section = game_ini.GetOrCreateSection("Core"); + IniFile::Section* dsp_section = game_ini.GetOrCreateSection("DSP"); + IniFile::Section* controls_section = game_ini.GetOrCreateSection("Controls"); + + core_section->Get("CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread); + core_section->Get("SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle); + core_section->Get("EnableFPRF", &StartUp.bEnableFPRF, StartUp.bEnableFPRF); + core_section->Get("MMU", &StartUp.bMMU, StartUp.bMMU); + core_section->Get("TLBHack", &StartUp.bTLBHack, StartUp.bTLBHack); + core_section->Get("DCBZ", &StartUp.bDCBZOFF, StartUp.bDCBZOFF); + core_section->Get("VBeam", &StartUp.bVBeamSpeedHack, StartUp.bVBeamSpeedHack); + core_section->Get("SyncGPU", &StartUp.bSyncGPU, StartUp.bSyncGPU); + core_section->Get("FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed); + core_section->Get("BlockMerging", &StartUp.bMergeBlocks, StartUp.bMergeBlocks); + core_section->Get("DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE); + core_section->Get("DSPThread", &StartUp.bDSPThread, StartUp.bDSPThread); + core_section->Get("GFXBackend", &StartUp.m_strVideoBackend, StartUp.m_strVideoBackend); + core_section->Get("CPUCore", &StartUp.iCPUCore, StartUp.iCPUCore); + core_section->Get("HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2); + if (core_section->Get("FrameLimit", &SConfig::GetInstance().m_Framelimit, SConfig::GetInstance().m_Framelimit)) config_cache.bSetFramelimit = true; - if (game_ini.Get("Core", "FrameSkip", &SConfig::GetInstance().m_FrameSkip)) + if (core_section->Get("FrameSkip", &SConfig::GetInstance().m_FrameSkip)) { config_cache.bSetFrameSkip = true; Movie::SetFrameSkipping(SConfig::GetInstance().m_FrameSkip); } - if (game_ini.Get("DSP", "Volume", &SConfig::GetInstance().m_Volume, SConfig::GetInstance().m_Volume)) + + if (dsp_section->Get("Volume", &SConfig::GetInstance().m_Volume, SConfig::GetInstance().m_Volume)) config_cache.bSetVolume = true; - game_ini.Get("DSP", "EnableJIT", &SConfig::GetInstance().m_DSPEnableJIT, SConfig::GetInstance().m_DSPEnableJIT); - game_ini.Get("DSP", "Backend", &SConfig::GetInstance().sBackend, SConfig::GetInstance().sBackend); + dsp_section->Get("EnableJIT", &SConfig::GetInstance().m_DSPEnableJIT, SConfig::GetInstance().m_DSPEnableJIT); + dsp_section->Get("Backend", &SConfig::GetInstance().sBackend, SConfig::GetInstance().sBackend); VideoBackend::ActivateBackend(StartUp.m_strVideoBackend); for (unsigned int i = 0; i < MAX_SI_CHANNELS; ++i) { int source; - game_ini.Get("Controls", StringFromFormat("PadType%u", i), &source, -1); + controls_section->Get(StringFromFormat("PadType%u", i), &source, -1); if (source >= (int) SIDEVICE_NONE && source <= (int) SIDEVICE_AM_BASEBOARD) { SConfig::GetInstance().m_SIDevice[i] = (SIDevices) source; @@ -184,7 +189,7 @@ bool BootCore(const std::string& _rFilename) int source; for (unsigned int i = 0; i < MAX_WIIMOTES; ++i) { - game_ini.Get("Controls", StringFromFormat("WiimoteSource%u", i), &source, -1); + controls_section->Get(StringFromFormat("WiimoteSource%u", i), &source, -1); if (source != -1 && g_wiimote_sources[i] != (unsigned) source && source >= WIIMOTE_SRC_NONE && source <= WIIMOTE_SRC_HYBRID) { config_cache.bSetWiimoteSource[i] = true; @@ -192,7 +197,7 @@ bool BootCore(const std::string& _rFilename) WiimoteReal::ChangeWiimoteSource(i, source); } } - game_ini.Get("Controls", "WiimoteSourceBB", &source, -1); + controls_section->Get("WiimoteSourceBB", &source, -1); if (source != -1 && g_wiimote_sources[WIIMOTE_BALANCE_BOARD] != (unsigned) source && (source == WIIMOTE_SRC_NONE || source == WIIMOTE_SRC_REAL)) { config_cache.bSetWiimoteSource[WIIMOTE_BALANCE_BOARD] = true; diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index c166ccaad4..5f9c6ce479 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -142,154 +142,198 @@ void SConfig::SaveSettings() IniFile ini; ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); // load first to not kill unknown stuff - // General - ini.Set("General", "LastFilename", m_LastFilename); - ini.Set("General", "ShowLag", m_ShowLag); - - // ISO folders - // clear removed folders - int oldPaths, - numPaths = (int)m_ISOFolder.size(); - ini.Get("General", "GCMPathes", &oldPaths, 0); - for (int i = numPaths; i < oldPaths; i++) - { - ini.DeleteKey("General", StringFromFormat("GCMPath%i", i)); - } - - ini.Set("General", "GCMPathes", numPaths); - - for (int i = 0; i < numPaths; i++) - { - ini.Set("General", StringFromFormat("GCMPath%i", i), m_ISOFolder[i]); - } - - ini.Set("General", "RecursiveGCMPaths", m_RecursiveISOFolder); - ini.Set("General", "NANDRootPath", m_NANDPath); - ini.Set("General", "WirelessMac", m_WirelessMac); - #ifdef USE_GDBSTUB - ini.Set("General", "GDBPort", m_LocalCoreStartupParameter.iGDBPort); - #endif - - // Interface - ini.Set("Interface", "ConfirmStop", m_LocalCoreStartupParameter.bConfirmStop); - ini.Set("Interface", "UsePanicHandlers", m_LocalCoreStartupParameter.bUsePanicHandlers); - ini.Set("Interface", "OnScreenDisplayMessages", m_LocalCoreStartupParameter.bOnScreenDisplayMessages); - ini.Set("Interface", "HideCursor", m_LocalCoreStartupParameter.bHideCursor); - ini.Set("Interface", "AutoHideCursor", m_LocalCoreStartupParameter.bAutoHideCursor); - ini.Set("Interface", "MainWindowPosX", (m_LocalCoreStartupParameter.iPosX == -32000) ? 0 : m_LocalCoreStartupParameter.iPosX); // TODO - HAX - ini.Set("Interface", "MainWindowPosY", (m_LocalCoreStartupParameter.iPosY == -32000) ? 0 : m_LocalCoreStartupParameter.iPosY); // TODO - HAX - ini.Set("Interface", "MainWindowWidth", m_LocalCoreStartupParameter.iWidth); - ini.Set("Interface", "MainWindowHeight", m_LocalCoreStartupParameter.iHeight); - ini.Set("Interface", "Language", m_InterfaceLanguage); - ini.Set("Interface", "ShowToolbar", m_InterfaceToolbar); - ini.Set("Interface", "ShowStatusbar", m_InterfaceStatusbar); - ini.Set("Interface", "ShowLogWindow", m_InterfaceLogWindow); - ini.Set("Interface", "ShowLogConfigWindow", m_InterfaceLogConfigWindow); - ini.Set("Interface", "ExtendedFPSInfo", m_InterfaceExtendedFPSInfo); - ini.Set("Interface", "ThemeName40", m_LocalCoreStartupParameter.theme_name); - - // Hotkeys - for (int i = 0; i < NUM_HOTKEYS; i++) - { - ini.Set("Hotkeys", g_HKData[i].IniText, m_LocalCoreStartupParameter.iHotkey[i]); - ini.Set("Hotkeys", std::string(g_HKData[i].IniText) + "Modifier", - m_LocalCoreStartupParameter.iHotkeyModifier[i]); - } - - // Display - ini.Set("Display", "FullscreenResolution", m_LocalCoreStartupParameter.strFullscreenResolution); - ini.Set("Display", "Fullscreen", m_LocalCoreStartupParameter.bFullscreen); - ini.Set("Display", "RenderToMain", m_LocalCoreStartupParameter.bRenderToMain); - ini.Set("Display", "RenderWindowXPos", m_LocalCoreStartupParameter.iRenderWindowXPos); - ini.Set("Display", "RenderWindowYPos", m_LocalCoreStartupParameter.iRenderWindowYPos); - ini.Set("Display", "RenderWindowWidth", m_LocalCoreStartupParameter.iRenderWindowWidth); - ini.Set("Display", "RenderWindowHeight", m_LocalCoreStartupParameter.iRenderWindowHeight); - ini.Set("Display", "RenderWindowAutoSize", m_LocalCoreStartupParameter.bRenderWindowAutoSize); - ini.Set("Display", "KeepWindowOnTop", m_LocalCoreStartupParameter.bKeepWindowOnTop); - ini.Set("Display", "ProgressiveScan", m_LocalCoreStartupParameter.bProgressive); - ini.Set("Display", "DisableScreenSaver", m_LocalCoreStartupParameter.bDisableScreenSaver); - ini.Set("Display", "ForceNTSCJ", m_LocalCoreStartupParameter.bForceNTSCJ); - - // Game List Control - ini.Set("GameList", "ListDrives", m_ListDrives); - ini.Set("GameList", "ListWad", m_ListWad); - ini.Set("GameList", "ListWii", m_ListWii); - ini.Set("GameList", "ListGC", m_ListGC); - ini.Set("GameList", "ListJap", m_ListJap); - ini.Set("GameList", "ListPal", m_ListPal); - ini.Set("GameList", "ListUsa", m_ListUsa); - ini.Set("GameList", "ListFrance", m_ListFrance); - ini.Set("GameList", "ListItaly", m_ListItaly); - ini.Set("GameList", "ListKorea", m_ListKorea); - ini.Set("GameList", "ListTaiwan", m_ListTaiwan); - ini.Set("GameList", "ListUnknown", m_ListUnknown); - ini.Set("GameList", "ListSort", m_ListSort); - ini.Set("GameList", "ListSortSecondary", m_ListSort2); - - ini.Set("GameList", "ColorCompressed", m_ColorCompressed); - - ini.Set("GameList", "ColumnPlatform", m_showSystemColumn); - ini.Set("GameList", "ColumnBanner", m_showBannerColumn); - ini.Set("GameList", "ColumnNotes", m_showNotesColumn); - ini.Set("GameList", "ColumnID", m_showIDColumn); - ini.Set("GameList", "ColumnRegion", m_showRegionColumn); - ini.Set("GameList", "ColumnSize", m_showSizeColumn); - ini.Set("GameList", "ColumnState", m_showStateColumn); - - // Core - ini.Set("Core", "HLE_BS2", m_LocalCoreStartupParameter.bHLE_BS2); - ini.Set("Core", "CPUCore", m_LocalCoreStartupParameter.iCPUCore); - ini.Set("Core", "Fastmem", m_LocalCoreStartupParameter.bFastmem); - ini.Set("Core", "CPUThread", m_LocalCoreStartupParameter.bCPUThread); - ini.Set("Core", "DSPThread", m_LocalCoreStartupParameter.bDSPThread); - ini.Set("Core", "DSPHLE", m_LocalCoreStartupParameter.bDSPHLE); - ini.Set("Core", "SkipIdle", m_LocalCoreStartupParameter.bSkipIdle); - ini.Set("Core", "DefaultGCM", m_LocalCoreStartupParameter.m_strDefaultGCM); - ini.Set("Core", "DVDRoot", m_LocalCoreStartupParameter.m_strDVDRoot); - ini.Set("Core", "Apploader", m_LocalCoreStartupParameter.m_strApploader); - ini.Set("Core", "EnableCheats", m_LocalCoreStartupParameter.bEnableCheats); - ini.Set("Core", "SelectedLanguage", m_LocalCoreStartupParameter.SelectedLanguage); - ini.Set("Core", "DPL2Decoder", m_LocalCoreStartupParameter.bDPL2Decoder); - ini.Set("Core", "Latency", m_LocalCoreStartupParameter.iLatency); - ini.Set("Core", "MemcardAPath", m_strMemoryCardA); - ini.Set("Core", "MemcardBPath", m_strMemoryCardB); - ini.Set("Core", "SlotA", m_EXIDevice[0]); - ini.Set("Core", "SlotB", m_EXIDevice[1]); - ini.Set("Core", "SerialPort1", m_EXIDevice[2]); - ini.Set("Core", "BBA_MAC", m_bba_mac); - for (int i = 0; i < MAX_SI_CHANNELS; ++i) - { - ini.Set("Core", StringFromFormat("SIDevice%i", i), m_SIDevice[i]); - } - ini.Set("Core", "WiiSDCard", m_WiiSDCard); - ini.Set("Core", "WiiKeyboard", m_WiiKeyboard); - ini.Set("Core", "WiimoteContinuousScanning", m_WiimoteContinuousScanning); - ini.Set("Core", "WiimoteEnableSpeaker", m_WiimoteEnableSpeaker); - ini.Set("Core", "RunCompareServer", m_LocalCoreStartupParameter.bRunCompareServer); - ini.Set("Core", "RunCompareClient", m_LocalCoreStartupParameter.bRunCompareClient); - ini.Set("Core", "FrameLimit", m_Framelimit); - ini.Set("Core", "FrameSkip", m_FrameSkip); - - // GFX Backend - ini.Set("Core", "GFXBackend", m_LocalCoreStartupParameter.m_strVideoBackend); - - // Movie - ini.Set("Movie", "PauseMovie", m_PauseMovie); - ini.Set("Movie", "Author", m_strMovieAuthor); - - // DSP - ini.Set("DSP", "EnableJIT", m_DSPEnableJIT); - ini.Set("DSP", "DumpAudio", m_DumpAudio); - ini.Set("DSP", "Backend", sBackend); - ini.Set("DSP", "Volume", m_Volume); - - // Fifo Player - ini.Set("FifoPlayer", "LoopReplay", m_LocalCoreStartupParameter.bLoopFifoReplay); + SaveGeneralSettings(ini); + SaveInterfaceSettings(ini); + SaveHotkeySettings(ini); + SaveDisplaySettings(ini); + SaveGameListSettings(ini); + SaveCoreSettings(ini); + SaveMovieSettings(ini); + SaveDSPSettings(ini); + SaveFifoPlayerSettings(ini); ini.Save(File::GetUserPath(F_DOLPHINCONFIG_IDX)); m_SYSCONF->Save(); } +void SConfig::SaveGeneralSettings(IniFile& ini) +{ + IniFile::Section* general = ini.GetOrCreateSection("General"); + + // General + general->Set("LastFilename", m_LastFilename); + general->Set("ShowLag", m_ShowLag); + + // ISO folders + // Clear removed folders + int oldPaths; + int numPaths = (int)m_ISOFolder.size(); + general->Get("GCMPathes", &oldPaths, 0); + for (int i = numPaths; i < oldPaths; i++) + { + ini.DeleteKey("General", StringFromFormat("GCMPath%i", i)); + } + + general->Set("GCMPathes", numPaths); + for (int i = 0; i < numPaths; i++) + { + general->Set(StringFromFormat("GCMPath%i", i), m_ISOFolder[i]); + } + + general->Set("RecursiveGCMPaths", m_RecursiveISOFolder); + general->Set("NANDRootPath", m_NANDPath); + general->Set("WirelessMac", m_WirelessMac); + +#ifdef USE_GDBSTUB + general->Set("GDBPort", m_LocalCoreStartupParameter.iGDBPort); +#endif +} + +void SConfig::SaveInterfaceSettings(IniFile& ini) +{ + IniFile::Section* interface = ini.GetOrCreateSection("Interface"); + + interface->Set("ConfirmStop", m_LocalCoreStartupParameter.bConfirmStop); + interface->Set("UsePanicHandlers", m_LocalCoreStartupParameter.bUsePanicHandlers); + interface->Set("OnScreenDisplayMessages", m_LocalCoreStartupParameter.bOnScreenDisplayMessages); + interface->Set("HideCursor", m_LocalCoreStartupParameter.bHideCursor); + interface->Set("AutoHideCursor", m_LocalCoreStartupParameter.bAutoHideCursor); + interface->Set("MainWindowPosX", (m_LocalCoreStartupParameter.iPosX == -32000) ? 0 : m_LocalCoreStartupParameter.iPosX); // TODO - HAX + interface->Set("MainWindowPosY", (m_LocalCoreStartupParameter.iPosY == -32000) ? 0 : m_LocalCoreStartupParameter.iPosY); // TODO - HAX + interface->Set("MainWindowWidth", m_LocalCoreStartupParameter.iWidth); + interface->Set("MainWindowHeight", m_LocalCoreStartupParameter.iHeight); + interface->Set("Language", m_InterfaceLanguage); + interface->Set("ShowToolbar", m_InterfaceToolbar); + interface->Set("ShowStatusbar", m_InterfaceStatusbar); + interface->Set("ShowLogWindow", m_InterfaceLogWindow); + interface->Set("ShowLogConfigWindow", m_InterfaceLogConfigWindow); + interface->Set("ExtendedFPSInfo", m_InterfaceExtendedFPSInfo); + interface->Set("ThemeName40", m_LocalCoreStartupParameter.theme_name); +} + +void SConfig::SaveHotkeySettings(IniFile& ini) +{ + IniFile::Section* hotkeys = ini.GetOrCreateSection("Hotkeys"); + + for (int i = 0; i < NUM_HOTKEYS; i++) + { + hotkeys->Set(g_HKData[i].IniText, m_LocalCoreStartupParameter.iHotkey[i]); + hotkeys->Set(std::string(g_HKData[i].IniText) + "Modifier", + m_LocalCoreStartupParameter.iHotkeyModifier[i]); + } +} + +void SConfig::SaveDisplaySettings(IniFile& ini) +{ + IniFile::Section* display = ini.GetOrCreateSection("Display"); + + display->Set("FullscreenResolution", m_LocalCoreStartupParameter.strFullscreenResolution); + display->Set("Fullscreen", m_LocalCoreStartupParameter.bFullscreen); + display->Set("RenderToMain", m_LocalCoreStartupParameter.bRenderToMain); + display->Set("RenderWindowXPos", m_LocalCoreStartupParameter.iRenderWindowXPos); + display->Set("RenderWindowYPos", m_LocalCoreStartupParameter.iRenderWindowYPos); + display->Set("RenderWindowWidth", m_LocalCoreStartupParameter.iRenderWindowWidth); + display->Set("RenderWindowHeight", m_LocalCoreStartupParameter.iRenderWindowHeight); + display->Set("RenderWindowAutoSize", m_LocalCoreStartupParameter.bRenderWindowAutoSize); + display->Set("KeepWindowOnTop", m_LocalCoreStartupParameter.bKeepWindowOnTop); + display->Set("ProgressiveScan", m_LocalCoreStartupParameter.bProgressive); + display->Set("DisableScreenSaver", m_LocalCoreStartupParameter.bDisableScreenSaver); + display->Set("ForceNTSCJ", m_LocalCoreStartupParameter.bForceNTSCJ); +} + +void SConfig::SaveGameListSettings(IniFile& ini) +{ + IniFile::Section* gamelist = ini.GetOrCreateSection("GameList"); + + gamelist->Set("ListDrives", m_ListDrives); + gamelist->Set("ListWad", m_ListWad); + gamelist->Set("ListWii", m_ListWii); + gamelist->Set("ListGC", m_ListGC); + gamelist->Set("ListJap", m_ListJap); + gamelist->Set("ListPal", m_ListPal); + gamelist->Set("ListUsa", m_ListUsa); + gamelist->Set("ListFrance", m_ListFrance); + gamelist->Set("ListItaly", m_ListItaly); + gamelist->Set("ListKorea", m_ListKorea); + gamelist->Set("ListTaiwan", m_ListTaiwan); + gamelist->Set("ListUnknown", m_ListUnknown); + gamelist->Set("ListSort", m_ListSort); + gamelist->Set("ListSortSecondary", m_ListSort2); + + gamelist->Set("ColorCompressed", m_ColorCompressed); + + gamelist->Set("ColumnPlatform", m_showSystemColumn); + gamelist->Set("ColumnBanner", m_showBannerColumn); + gamelist->Set("ColumnNotes", m_showNotesColumn); + gamelist->Set("ColumnID", m_showIDColumn); + gamelist->Set("ColumnRegion", m_showRegionColumn); + gamelist->Set("ColumnSize", m_showSizeColumn); + gamelist->Set("ColumnState", m_showStateColumn); +} + +void SConfig::SaveCoreSettings(IniFile& ini) +{ + IniFile::Section* core = ini.GetOrCreateSection("Core"); + + core->Set("HLE_BS2", m_LocalCoreStartupParameter.bHLE_BS2); + core->Set("CPUCore", m_LocalCoreStartupParameter.iCPUCore); + core->Set("Fastmem", m_LocalCoreStartupParameter.bFastmem); + core->Set("CPUThread", m_LocalCoreStartupParameter.bCPUThread); + core->Set("DSPThread", m_LocalCoreStartupParameter.bDSPThread); + core->Set("DSPHLE", m_LocalCoreStartupParameter.bDSPHLE); + core->Set("SkipIdle", m_LocalCoreStartupParameter.bSkipIdle); + core->Set("DefaultGCM", m_LocalCoreStartupParameter.m_strDefaultGCM); + core->Set("DVDRoot", m_LocalCoreStartupParameter.m_strDVDRoot); + core->Set("Apploader", m_LocalCoreStartupParameter.m_strApploader); + core->Set("EnableCheats", m_LocalCoreStartupParameter.bEnableCheats); + core->Set("SelectedLanguage", m_LocalCoreStartupParameter.SelectedLanguage); + core->Set("DPL2Decoder", m_LocalCoreStartupParameter.bDPL2Decoder); + core->Set("Latency", m_LocalCoreStartupParameter.iLatency); + core->Set("MemcardAPath", m_strMemoryCardA); + core->Set("MemcardBPath", m_strMemoryCardB); + core->Set("SlotA", m_EXIDevice[0]); + core->Set("SlotB", m_EXIDevice[1]); + core->Set("SerialPort1", m_EXIDevice[2]); + core->Set("BBA_MAC", m_bba_mac); + for (int i = 0; i < MAX_SI_CHANNELS; ++i) + { + core->Set(StringFromFormat("SIDevice%i", i), m_SIDevice[i]); + } + core->Set("WiiSDCard", m_WiiSDCard); + core->Set("WiiKeyboard", m_WiiKeyboard); + core->Set("WiimoteContinuousScanning", m_WiimoteContinuousScanning); + core->Set("WiimoteEnableSpeaker", m_WiimoteEnableSpeaker); + core->Set("RunCompareServer", m_LocalCoreStartupParameter.bRunCompareServer); + core->Set("RunCompareClient", m_LocalCoreStartupParameter.bRunCompareClient); + core->Set("FrameLimit", m_Framelimit); + core->Set("FrameSkip", m_FrameSkip); + core->Set("GFXBackend", m_LocalCoreStartupParameter.m_strVideoBackend); +} + +void SConfig::SaveMovieSettings(IniFile& ini) +{ + IniFile::Section* movie = ini.GetOrCreateSection("Movie"); + + movie->Set("PauseMovie", m_PauseMovie); + movie->Set("Author", m_strMovieAuthor); +} + +void SConfig::SaveDSPSettings(IniFile& ini) +{ + IniFile::Section* dsp = ini.GetOrCreateSection("DSP"); + + dsp->Set("EnableJIT", m_DSPEnableJIT); + dsp->Set("DumpAudio", m_DumpAudio); + dsp->Set("Backend", sBackend); + dsp->Set("Volume", m_Volume); +} + +void SConfig::SaveFifoPlayerSettings(IniFile& ini) +{ + IniFile::Section* fifoplayer = ini.GetOrCreateSection("FifoPlayer"); + + fifoplayer->Set("LoopReplay", m_LocalCoreStartupParameter.bLoopFifoReplay); +} void SConfig::LoadSettings() { @@ -297,181 +341,222 @@ void SConfig::LoadSettings() IniFile ini; ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); - // General - { - ini.Get("General", "LastFilename", &m_LastFilename); - ini.Get("General", "ShowLag", &m_ShowLag, false); - #ifdef USE_GDBSTUB - ini.Get("General", "GDBPort", &(m_LocalCoreStartupParameter.iGDBPort), -1); - #endif - - m_ISOFolder.clear(); - int numGCMPaths; - - if (ini.Get("General", "GCMPathes", &numGCMPaths, 0)) - { - for (int i = 0; i < numGCMPaths; i++) - { - std::string tmpPath; - ini.Get("General", StringFromFormat("GCMPath%i", i), &tmpPath, ""); - m_ISOFolder.push_back(std::move(tmpPath)); - } - } - - ini.Get("General", "RecursiveGCMPaths", &m_RecursiveISOFolder, false); - - ini.Get("General", "NANDRootPath", &m_NANDPath); - m_NANDPath = File::GetUserPath(D_WIIROOT_IDX, m_NANDPath); - DiscIO::cUIDsys::AccessInstance().UpdateLocation(); - DiscIO::CSharedContent::AccessInstance().UpdateLocation(); - ini.Get("General", "WirelessMac", &m_WirelessMac); - } - - { - // Interface - ini.Get("Interface", "ConfirmStop", &m_LocalCoreStartupParameter.bConfirmStop, true); - ini.Get("Interface", "UsePanicHandlers", &m_LocalCoreStartupParameter.bUsePanicHandlers, true); - ini.Get("Interface", "OnScreenDisplayMessages", &m_LocalCoreStartupParameter.bOnScreenDisplayMessages, true); - ini.Get("Interface", "HideCursor", &m_LocalCoreStartupParameter.bHideCursor, false); - ini.Get("Interface", "AutoHideCursor", &m_LocalCoreStartupParameter.bAutoHideCursor, false); - ini.Get("Interface", "MainWindowPosX", &m_LocalCoreStartupParameter.iPosX, 100); - ini.Get("Interface", "MainWindowPosY", &m_LocalCoreStartupParameter.iPosY, 100); - ini.Get("Interface", "MainWindowWidth", &m_LocalCoreStartupParameter.iWidth, 800); - ini.Get("Interface", "MainWindowHeight", &m_LocalCoreStartupParameter.iHeight, 600); - ini.Get("Interface", "Language", &m_InterfaceLanguage, 0); - ini.Get("Interface", "ShowToolbar", &m_InterfaceToolbar, true); - ini.Get("Interface", "ShowStatusbar", &m_InterfaceStatusbar, true); - ini.Get("Interface", "ShowLogWindow", &m_InterfaceLogWindow, false); - ini.Get("Interface", "ShowLogConfigWindow", &m_InterfaceLogConfigWindow, false); - ini.Get("Interface", "ExtendedFPSInfo", &m_InterfaceExtendedFPSInfo, false); - ini.Get("Interface", "ThemeName40", &m_LocalCoreStartupParameter.theme_name, "Clean"); - - // Hotkeys - for (int i = 0; i < NUM_HOTKEYS; i++) - { - ini.Get("Hotkeys", g_HKData[i].IniText, - &m_LocalCoreStartupParameter.iHotkey[i], g_HKData[i].DefaultKey); - ini.Get("Hotkeys", std::string(g_HKData[i].IniText) + "Modifier", - &m_LocalCoreStartupParameter.iHotkeyModifier[i], g_HKData[i].DefaultModifier); - } - - // Display - ini.Get("Display", "Fullscreen", &m_LocalCoreStartupParameter.bFullscreen, false); - ini.Get("Display", "FullscreenResolution", &m_LocalCoreStartupParameter.strFullscreenResolution, "Auto"); - ini.Get("Display", "RenderToMain", &m_LocalCoreStartupParameter.bRenderToMain, false); - ini.Get("Display", "RenderWindowXPos", &m_LocalCoreStartupParameter.iRenderWindowXPos, -1); - ini.Get("Display", "RenderWindowYPos", &m_LocalCoreStartupParameter.iRenderWindowYPos, -1); - ini.Get("Display", "RenderWindowWidth", &m_LocalCoreStartupParameter.iRenderWindowWidth, 640); - ini.Get("Display", "RenderWindowHeight", &m_LocalCoreStartupParameter.iRenderWindowHeight, 480); - ini.Get("Display", "RenderWindowAutoSize", &m_LocalCoreStartupParameter.bRenderWindowAutoSize, false); - ini.Get("Display", "KeepWindowOnTop", &m_LocalCoreStartupParameter.bKeepWindowOnTop, false); - ini.Get("Display", "ProgressiveScan", &m_LocalCoreStartupParameter.bProgressive, false); - ini.Get("Display", "DisableScreenSaver", &m_LocalCoreStartupParameter.bDisableScreenSaver, true); - ini.Get("Display", "ForceNTSCJ", &m_LocalCoreStartupParameter.bForceNTSCJ, false); - - // Game List Control - ini.Get("GameList", "ListDrives", &m_ListDrives, false); - ini.Get("GameList", "ListWad", &m_ListWad, true); - ini.Get("GameList", "ListWii", &m_ListWii, true); - ini.Get("GameList", "ListGC", &m_ListGC, true); - ini.Get("GameList", "ListJap", &m_ListJap, true); - ini.Get("GameList", "ListPal", &m_ListPal, true); - ini.Get("GameList", "ListUsa", &m_ListUsa, true); - - ini.Get("GameList", "ListFrance", &m_ListFrance, true); - ini.Get("GameList", "ListItaly", &m_ListItaly, true); - ini.Get("GameList", "ListKorea", &m_ListKorea, true); - ini.Get("GameList", "ListTaiwan", &m_ListTaiwan, true); - ini.Get("GameList", "ListUnknown", &m_ListUnknown, true); - ini.Get("GameList", "ListSort", &m_ListSort, 3); - ini.Get("GameList", "ListSortSecondary",&m_ListSort2, 0); - - // Determines if compressed games display in blue - ini.Get("GameList", "ColorCompressed", &m_ColorCompressed, true); - - // Gamelist columns toggles - ini.Get("GameList", "ColumnPlatform", &m_showSystemColumn, true); - ini.Get("GameList", "ColumnBanner", &m_showBannerColumn, true); - ini.Get("GameList", "ColumnNotes", &m_showNotesColumn, true); - ini.Get("GameList", "ColumnID", &m_showIDColumn, false); - ini.Get("GameList", "ColumnRegion", &m_showRegionColumn, true); - ini.Get("GameList", "ColumnSize", &m_showSizeColumn, true); - ini.Get("GameList", "ColumnState", &m_showStateColumn, true); - - // Core - ini.Get("Core", "HLE_BS2", &m_LocalCoreStartupParameter.bHLE_BS2, false); -#ifdef _M_X86 - ini.Get("Core", "CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 1); -#elif _M_ARM_32 - ini.Get("Core", "CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 3); -#else - ini.Get("Core", "CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 0); -#endif - ini.Get("Core", "Fastmem", &m_LocalCoreStartupParameter.bFastmem, true); - ini.Get("Core", "DSPThread", &m_LocalCoreStartupParameter.bDSPThread, false); - ini.Get("Core", "DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true); - ini.Get("Core", "CPUThread", &m_LocalCoreStartupParameter.bCPUThread, true); - ini.Get("Core", "SkipIdle", &m_LocalCoreStartupParameter.bSkipIdle, true); - ini.Get("Core", "DefaultGCM", &m_LocalCoreStartupParameter.m_strDefaultGCM); - ini.Get("Core", "DVDRoot", &m_LocalCoreStartupParameter.m_strDVDRoot); - ini.Get("Core", "Apploader", &m_LocalCoreStartupParameter.m_strApploader); - ini.Get("Core", "EnableCheats", &m_LocalCoreStartupParameter.bEnableCheats, false); - ini.Get("Core", "SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0); - ini.Get("Core", "DPL2Decoder", &m_LocalCoreStartupParameter.bDPL2Decoder, false); - ini.Get("Core", "Latency", &m_LocalCoreStartupParameter.iLatency, 2); - ini.Get("Core", "MemcardAPath", &m_strMemoryCardA); - ini.Get("Core", "MemcardBPath", &m_strMemoryCardB); - ini.Get("Core", "SlotA", (int*)&m_EXIDevice[0], EXIDEVICE_MEMORYCARD); - ini.Get("Core", "SlotB", (int*)&m_EXIDevice[1], EXIDEVICE_NONE); - ini.Get("Core", "SerialPort1", (int*)&m_EXIDevice[2], EXIDEVICE_NONE); - ini.Get("Core", "BBA_MAC", &m_bba_mac); - ini.Get("Core", "TimeProfiling", &m_LocalCoreStartupParameter.bJITILTimeProfiling, false); - ini.Get("Core", "OutputIR", &m_LocalCoreStartupParameter.bJITILOutputIR, false); - for (int i = 0; i < MAX_SI_CHANNELS; ++i) - { - ini.Get("Core", StringFromFormat("SIDevice%i", i), (u32*)&m_SIDevice[i], (i == 0) ? SIDEVICE_GC_CONTROLLER : SIDEVICE_NONE); - } - ini.Get("Core", "WiiSDCard", &m_WiiSDCard, false); - ini.Get("Core", "WiiKeyboard", &m_WiiKeyboard, false); - ini.Get("Core", "WiimoteContinuousScanning", &m_WiimoteContinuousScanning, false); - ini.Get("Core", "WiimoteEnableSpeaker", &m_WiimoteEnableSpeaker, true); - ini.Get("Core", "RunCompareServer", &m_LocalCoreStartupParameter.bRunCompareServer, false); - ini.Get("Core", "RunCompareClient", &m_LocalCoreStartupParameter.bRunCompareClient, false); - ini.Get("Core", "MMU", &m_LocalCoreStartupParameter.bMMU, false); - ini.Get("Core", "TLBHack", &m_LocalCoreStartupParameter.bTLBHack, false); - ini.Get("Core", "BBDumpPort", &m_LocalCoreStartupParameter.iBBDumpPort, -1); - ini.Get("Core", "VBeam", &m_LocalCoreStartupParameter.bVBeamSpeedHack, false); - ini.Get("Core", "SyncGPU", &m_LocalCoreStartupParameter.bSyncGPU, false); - ini.Get("Core", "FastDiscSpeed", &m_LocalCoreStartupParameter.bFastDiscSpeed, false); - ini.Get("Core", "DCBZ", &m_LocalCoreStartupParameter.bDCBZOFF, false); - ini.Get("Core", "FrameLimit", &m_Framelimit, 1); // auto frame limit by default - ini.Get("Core", "FrameSkip", &m_FrameSkip, 0); - - // GFX Backend - ini.Get("Core", "GFXBackend", &m_LocalCoreStartupParameter.m_strVideoBackend, ""); - - // Movie - ini.Get("Movie", "PauseMovie", &m_PauseMovie, false); - ini.Get("Movie", "Author", &m_strMovieAuthor, ""); - - // DSP - ini.Get("DSP", "EnableJIT", &m_DSPEnableJIT, true); - ini.Get("DSP", "DumpAudio", &m_DumpAudio, false); - #if defined __linux__ && HAVE_ALSA - ini.Get("DSP", "Backend", &sBackend, BACKEND_ALSA); - #elif defined __APPLE__ - ini.Get("DSP", "Backend", &sBackend, BACKEND_COREAUDIO); - #elif defined _WIN32 - ini.Get("DSP", "Backend", &sBackend, BACKEND_XAUDIO2); - #elif defined ANDROID - ini.Get("DSP", "Backend", &sBackend, BACKEND_OPENSLES); - #else - ini.Get("DSP", "Backend", &sBackend, BACKEND_NULLSOUND); - #endif - ini.Get("DSP", "Volume", &m_Volume, 100); - - ini.Get("FifoPlayer", "LoopReplay", &m_LocalCoreStartupParameter.bLoopFifoReplay, true); - } + LoadGeneralSettings(ini); + LoadInterfaceSettings(ini); + LoadHotkeySettings(ini); + LoadDisplaySettings(ini); + LoadGameListSettings(ini); + LoadCoreSettings(ini); + LoadMovieSettings(ini); + LoadDSPSettings(ini); + LoadFifoPlayerSettings(ini); m_SYSCONF = new SysConf(); } + +void SConfig::LoadGeneralSettings(IniFile& ini) +{ + IniFile::Section* general = ini.GetOrCreateSection("General"); + + general->Get("LastFilename", &m_LastFilename); + general->Get("ShowLag", &m_ShowLag, false); +#ifdef USE_GDBSTUB + general->Get("GDBPort", &(m_LocalCoreStartupParameter.iGDBPort), -1); +#endif + + m_ISOFolder.clear(); + int numGCMPaths; + + if (general->Get("GCMPathes", &numGCMPaths, 0)) + { + for (int i = 0; i < numGCMPaths; i++) + { + std::string tmpPath; + general->Get(StringFromFormat("GCMPath%i", i), &tmpPath, ""); + m_ISOFolder.push_back(std::move(tmpPath)); + } + } + + general->Get("RecursiveGCMPaths", &m_RecursiveISOFolder, false); + + general->Get("NANDRootPath", &m_NANDPath); + m_NANDPath = File::GetUserPath(D_WIIROOT_IDX, m_NANDPath); + DiscIO::cUIDsys::AccessInstance().UpdateLocation(); + DiscIO::CSharedContent::AccessInstance().UpdateLocation(); + general->Get("WirelessMac", &m_WirelessMac); +} + +void SConfig::LoadInterfaceSettings(IniFile& ini) +{ + IniFile::Section* interface = ini.GetOrCreateSection("Interface"); + + interface->Get("ConfirmStop", &m_LocalCoreStartupParameter.bConfirmStop, true); + interface->Get("UsePanicHandlers", &m_LocalCoreStartupParameter.bUsePanicHandlers, true); + interface->Get("OnScreenDisplayMessages", &m_LocalCoreStartupParameter.bOnScreenDisplayMessages, true); + interface->Get("HideCursor", &m_LocalCoreStartupParameter.bHideCursor, false); + interface->Get("AutoHideCursor", &m_LocalCoreStartupParameter.bAutoHideCursor, false); + interface->Get("MainWindowPosX", &m_LocalCoreStartupParameter.iPosX, 100); + interface->Get("MainWindowPosY", &m_LocalCoreStartupParameter.iPosY, 100); + interface->Get("MainWindowWidth", &m_LocalCoreStartupParameter.iWidth, 800); + interface->Get("MainWindowHeight", &m_LocalCoreStartupParameter.iHeight, 600); + interface->Get("Language", &m_InterfaceLanguage, 0); + interface->Get("ShowToolbar", &m_InterfaceToolbar, true); + interface->Get("ShowStatusbar", &m_InterfaceStatusbar, true); + interface->Get("ShowLogWindow", &m_InterfaceLogWindow, false); + interface->Get("ShowLogConfigWindow", &m_InterfaceLogConfigWindow, false); + interface->Get("ExtendedFPSInfo", &m_InterfaceExtendedFPSInfo, false); + interface->Get("ThemeName40", &m_LocalCoreStartupParameter.theme_name, "Clean"); +} + +void SConfig::LoadHotkeySettings(IniFile& ini) +{ + IniFile::Section* hotkeys = ini.GetOrCreateSection("Hotkeys"); + + for (int i = 0; i < NUM_HOTKEYS; i++) + { + hotkeys->Get(g_HKData[i].IniText, + &m_LocalCoreStartupParameter.iHotkey[i], g_HKData[i].DefaultKey); + hotkeys->Get(std::string(g_HKData[i].IniText) + "Modifier", + &m_LocalCoreStartupParameter.iHotkeyModifier[i], g_HKData[i].DefaultModifier); + } +} + +void SConfig::LoadDisplaySettings(IniFile& ini) +{ + IniFile::Section* display = ini.GetOrCreateSection("Display"); + + display->Get("Fullscreen", &m_LocalCoreStartupParameter.bFullscreen, false); + display->Get("FullscreenResolution", &m_LocalCoreStartupParameter.strFullscreenResolution, "Auto"); + display->Get("RenderToMain", &m_LocalCoreStartupParameter.bRenderToMain, false); + display->Get("RenderWindowXPos", &m_LocalCoreStartupParameter.iRenderWindowXPos, -1); + display->Get("RenderWindowYPos", &m_LocalCoreStartupParameter.iRenderWindowYPos, -1); + display->Get("RenderWindowWidth", &m_LocalCoreStartupParameter.iRenderWindowWidth, 640); + display->Get("RenderWindowHeight", &m_LocalCoreStartupParameter.iRenderWindowHeight, 480); + display->Get("RenderWindowAutoSize", &m_LocalCoreStartupParameter.bRenderWindowAutoSize, false); + display->Get("KeepWindowOnTop", &m_LocalCoreStartupParameter.bKeepWindowOnTop, false); + display->Get("ProgressiveScan", &m_LocalCoreStartupParameter.bProgressive, false); + display->Get("DisableScreenSaver", &m_LocalCoreStartupParameter.bDisableScreenSaver, true); + display->Get("ForceNTSCJ", &m_LocalCoreStartupParameter.bForceNTSCJ, false); +} + +void SConfig::LoadGameListSettings(IniFile& ini) +{ + IniFile::Section* gamelist = ini.GetOrCreateSection("GameList"); + + gamelist->Get("ListDrives", &m_ListDrives, false); + gamelist->Get("ListWad", &m_ListWad, true); + gamelist->Get("ListWii", &m_ListWii, true); + gamelist->Get("ListGC", &m_ListGC, true); + gamelist->Get("ListJap", &m_ListJap, true); + gamelist->Get("ListPal", &m_ListPal, true); + gamelist->Get("ListUsa", &m_ListUsa, true); + + gamelist->Get("ListFrance", &m_ListFrance, true); + gamelist->Get("ListItaly", &m_ListItaly, true); + gamelist->Get("ListKorea", &m_ListKorea, true); + gamelist->Get("ListTaiwan", &m_ListTaiwan, true); + gamelist->Get("ListUnknown", &m_ListUnknown, true); + gamelist->Get("ListSort", &m_ListSort, 3); + gamelist->Get("ListSortSecondary",&m_ListSort2, 0); + + // Determines if compressed games display in blue + gamelist->Get("ColorCompressed", &m_ColorCompressed, true); + + // Gamelist columns toggles + gamelist->Get("ColumnPlatform", &m_showSystemColumn, true); + gamelist->Get("ColumnBanner", &m_showBannerColumn, true); + gamelist->Get("ColumnNotes", &m_showNotesColumn, true); + gamelist->Get("ColumnID", &m_showIDColumn, false); + gamelist->Get("ColumnRegion", &m_showRegionColumn, true); + gamelist->Get("ColumnSize", &m_showSizeColumn, true); + gamelist->Get("ColumnState", &m_showStateColumn, true); +} + +void SConfig::LoadCoreSettings(IniFile& ini) +{ + IniFile::Section* core = ini.GetOrCreateSection("Core"); + + core->Get("HLE_BS2", &m_LocalCoreStartupParameter.bHLE_BS2, false); +#ifdef _M_X86 + core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 1); +#elif _M_ARM_32 + core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 3); +#else + core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 0); +#endif + core->Get("Fastmem", &m_LocalCoreStartupParameter.bFastmem, true); + core->Get("DSPThread", &m_LocalCoreStartupParameter.bDSPThread, false); + core->Get("DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true); + core->Get("CPUThread", &m_LocalCoreStartupParameter.bCPUThread, true); + core->Get("SkipIdle", &m_LocalCoreStartupParameter.bSkipIdle, true); + core->Get("DefaultGCM", &m_LocalCoreStartupParameter.m_strDefaultGCM); + core->Get("DVDRoot", &m_LocalCoreStartupParameter.m_strDVDRoot); + core->Get("Apploader", &m_LocalCoreStartupParameter.m_strApploader); + core->Get("EnableCheats", &m_LocalCoreStartupParameter.bEnableCheats, false); + core->Get("SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0); + core->Get("DPL2Decoder", &m_LocalCoreStartupParameter.bDPL2Decoder, false); + core->Get("Latency", &m_LocalCoreStartupParameter.iLatency, 2); + core->Get("MemcardAPath", &m_strMemoryCardA); + core->Get("MemcardBPath", &m_strMemoryCardB); + core->Get("SlotA", (int*)&m_EXIDevice[0], EXIDEVICE_MEMORYCARD); + core->Get("SlotB", (int*)&m_EXIDevice[1], EXIDEVICE_NONE); + core->Get("SerialPort1", (int*)&m_EXIDevice[2], EXIDEVICE_NONE); + core->Get("BBA_MAC", &m_bba_mac); + core->Get("TimeProfiling", &m_LocalCoreStartupParameter.bJITILTimeProfiling, false); + core->Get("OutputIR", &m_LocalCoreStartupParameter.bJITILOutputIR, false); + for (int i = 0; i < MAX_SI_CHANNELS; ++i) + { + core->Get(StringFromFormat("SIDevice%i", i), (u32*)&m_SIDevice[i], (i == 0) ? SIDEVICE_GC_CONTROLLER : SIDEVICE_NONE); + } + core->Get("WiiSDCard", &m_WiiSDCard, false); + core->Get("WiiKeyboard", &m_WiiKeyboard, false); + core->Get("WiimoteContinuousScanning", &m_WiimoteContinuousScanning, false); + core->Get("WiimoteEnableSpeaker", &m_WiimoteEnableSpeaker, true); + core->Get("RunCompareServer", &m_LocalCoreStartupParameter.bRunCompareServer, false); + core->Get("RunCompareClient", &m_LocalCoreStartupParameter.bRunCompareClient, false); + core->Get("MMU", &m_LocalCoreStartupParameter.bMMU, false); + core->Get("TLBHack", &m_LocalCoreStartupParameter.bTLBHack, false); + core->Get("BBDumpPort", &m_LocalCoreStartupParameter.iBBDumpPort, -1); + core->Get("VBeam", &m_LocalCoreStartupParameter.bVBeamSpeedHack, false); + core->Get("SyncGPU", &m_LocalCoreStartupParameter.bSyncGPU, false); + core->Get("FastDiscSpeed", &m_LocalCoreStartupParameter.bFastDiscSpeed, false); + core->Get("DCBZ", &m_LocalCoreStartupParameter.bDCBZOFF, false); + core->Get("FrameLimit", &m_Framelimit, 1); // auto frame limit by default + core->Get("FrameSkip", &m_FrameSkip, 0); + core->Get("GFXBackend", &m_LocalCoreStartupParameter.m_strVideoBackend, ""); +} + +void SConfig::LoadMovieSettings(IniFile& ini) +{ + IniFile::Section* movie = ini.GetOrCreateSection("Movie"); + + movie->Get("PauseMovie", &m_PauseMovie, false); + movie->Get("Author", &m_strMovieAuthor, ""); +} + +void SConfig::LoadDSPSettings(IniFile& ini) +{ + IniFile::Section* dsp = ini.GetOrCreateSection("DSP"); + + dsp->Get("EnableJIT", &m_DSPEnableJIT, true); + dsp->Get("DumpAudio", &m_DumpAudio, false); +#if defined __linux__ && HAVE_ALSA + dsp->Get("Backend", &sBackend, BACKEND_ALSA); +#elif defined __APPLE__ + dsp->Get("Backend", &sBackend, BACKEND_COREAUDIO); +#elif defined _WIN32 + dsp->Get("Backend", &sBackend, BACKEND_XAUDIO2); +#elif defined ANDROID + dsp->Get("Backend", &sBackend, BACKEND_OPENSLES); +#else + dsp->Get("Backend", &sBackend, BACKEND_NULLSOUND); +#endif + dsp->Get("Volume", &m_Volume, 100); +} + +void SConfig::LoadFifoPlayerSettings(IniFile& ini) +{ + IniFile::Section* fifoplayer = ini.GetOrCreateSection("FifoPlayer"); + + fifoplayer->Get("LoopReplay", &m_LocalCoreStartupParameter.bLoopFifoReplay, true); +} diff --git a/Source/Core/Core/ConfigManager.h b/Source/Core/Core/ConfigManager.h index afc2f14c52..0bda4cc132 100644 --- a/Source/Core/Core/ConfigManager.h +++ b/Source/Core/Core/ConfigManager.h @@ -114,5 +114,25 @@ private: SConfig(); ~SConfig(); + void SaveGeneralSettings(IniFile& ini); + void SaveInterfaceSettings(IniFile& ini); + void SaveDisplaySettings(IniFile& ini); + void SaveHotkeySettings(IniFile& ini); + void SaveGameListSettings(IniFile& ini); + void SaveCoreSettings(IniFile& ini); + void SaveDSPSettings(IniFile& ini); + void SaveMovieSettings(IniFile& ini); + void SaveFifoPlayerSettings(IniFile& ini); + + void LoadGeneralSettings(IniFile& ini); + void LoadInterfaceSettings(IniFile& ini); + void LoadDisplaySettings(IniFile& ini); + void LoadHotkeySettings(IniFile& ini); + void LoadGameListSettings(IniFile& ini); + void LoadCoreSettings(IniFile& ini); + void LoadDSPSettings(IniFile& ini); + void LoadMovieSettings(IniFile& ini); + void LoadFifoPlayerSettings(IniFile& ini); + static SConfig* m_Instance; }; diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp index 83660d9fe2..89ec347ada 100644 --- a/Source/Core/Core/Core.cpp +++ b/Source/Core/Core/Core.cpp @@ -208,9 +208,8 @@ bool Init() if (g_aspect_wide) { IniFile gameIni = _CoreParameter.LoadGameIni(); - gameIni.Get("Wii", "Widescreen", &g_aspect_wide, - !!SConfig::GetInstance().m_SYSCONF-> - GetData("IPL.AR")); + gameIni.GetOrCreateSection("Wii")->Get("Widescreen", &g_aspect_wide, + !!SConfig::GetInstance().m_SYSCONF->GetData("IPL.AR")); } // g_pWindowHandle is first the m_Panel handle, diff --git a/Source/Core/Core/HW/EXI_DeviceMemoryCard.cpp b/Source/Core/Core/HW/EXI_DeviceMemoryCard.cpp index 715b62698b..ecb2544b72 100644 --- a/Source/Core/Core/HW/EXI_DeviceMemoryCard.cpp +++ b/Source/Core/Core/HW/EXI_DeviceMemoryCard.cpp @@ -81,7 +81,7 @@ CEXIMemoryCard::CEXIMemoryCard(const int index) // Use a 16Mb (251 block) memory card for these games bool useMC251; IniFile gameIni = Core::g_CoreStartupParameter.LoadGameIni(); - gameIni.Get("Core", "MemoryCard251", &useMC251, false); + gameIni.GetOrCreateSection("Core")->Get("MemoryCard251", &useMC251, false); nintendo_card_id = MemCard2043Mb; if (useMC251) { diff --git a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp index fdd7b8eb1b..c0fe0576cc 100644 --- a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp +++ b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp @@ -25,7 +25,7 @@ bool CWII_IPC_HLE_Device_usb_kbd::Open(u32 _CommandAddress, u32 _Mode) INFO_LOG(WII_IPC_STM, "CWII_IPC_HLE_Device_usb_kbd: Open"); IniFile ini; ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); - ini.Get("USB Keyboard", "Layout", &m_KeyboardLayout, KBD_LAYOUT_QWERTY); + ini.GetOrCreateSection("USB Keyboard")->Get("Layout", &m_KeyboardLayout, KBD_LAYOUT_QWERTY); for (bool& pressed : m_OldKeyBuffer) { diff --git a/Source/Core/Core/PatchEngine.cpp b/Source/Core/Core/PatchEngine.cpp index deb843a6f0..652f58a044 100644 --- a/Source/Core/Core/PatchEngine.cpp +++ b/Source/Core/Core/PatchEngine.cpp @@ -132,7 +132,7 @@ static void LoadSpeedhacks(const std::string& section, IniFile& ini) for (const std::string& key : keys) { std::string value; - ini.Get(section, key, &value, "BOGUS"); + ini.GetOrCreateSection(section)->Get(key, &value, "BOGUS"); if (value != "BOGUS") { u32 address; diff --git a/Source/Core/DolphinWX/Android/ButtonManager.cpp b/Source/Core/DolphinWX/Android/ButtonManager.cpp index a1684ba5a6..5c2e5d1cc3 100644 --- a/Source/Core/DolphinWX/Android/ButtonManager.cpp +++ b/Source/Core/DolphinWX/Android/ButtonManager.cpp @@ -110,7 +110,7 @@ namespace ButtonManager bool hasbind = false; char modifier = '+'; std::string value; - ini.Get("Android", config.str(), &value, "None"); + ini.GetOrCreateSection("Android")->Get(config.str(), &value, "None"); if (value == "None") continue; if (std::string::npos != value.find("Axis")) diff --git a/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp b/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp index 1236dd84fe..41abb27300 100644 --- a/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp +++ b/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp @@ -62,14 +62,15 @@ void CCodeWindow::Load() // The font to override DebuggerFont with std::string fontDesc; - ini.Get("General", "DebuggerFont", &fontDesc); + + IniFile::Section* general = ini.GetOrCreateSection("General"); + general->Get("DebuggerFont", &fontDesc); + general->Get("AutomaticStart", &bAutomaticStart, false); + general->Get("BootToPause", &bBootToPause, true); + if (!fontDesc.empty()) DebuggerFont.SetNativeFontInfoUserDesc(StrToWxStr(fontDesc)); - // Boot to pause or not - ini.Get("General", "AutomaticStart", &bAutomaticStart, false); - ini.Get("General", "BootToPause", &bBootToPause, true); - const char* SettingName[] = { "Log", "LogConfig", @@ -85,19 +86,19 @@ void CCodeWindow::Load() // Decide what windows to show for (int i = 0; i <= IDM_VIDEOWINDOW - IDM_LOGWINDOW; i++) - ini.Get("ShowOnStart", SettingName[i], &bShowOnStart[i], false); + ini.GetOrCreateSection("ShowOnStart")->Get(SettingName[i], &bShowOnStart[i], false); // Get notebook affiliation - std::string _Section = "P - " + + std::string section = "P - " + ((Parent->ActivePerspective < Parent->Perspectives.size()) ? Parent->Perspectives[Parent->ActivePerspective].Name : "Perspective 1"); for (int i = 0; i <= IDM_CODEWINDOW - IDM_LOGWINDOW; i++) - ini.Get(_Section, SettingName[i], &iNbAffiliation[i], 0); + ini.GetOrCreateSection(section)->Get(SettingName[i], &iNbAffiliation[i], 0); // Get floating setting for (int i = 0; i <= IDM_CODEWINDOW - IDM_LOGWINDOW; i++) - ini.Get("Float", SettingName[i], &Parent->bFloatWindow[i], false); + ini.GetOrCreateSection("Float")->Get(SettingName[i], &Parent->bFloatWindow[i], false); } void CCodeWindow::Save() @@ -105,11 +106,10 @@ void CCodeWindow::Save() IniFile ini; ini.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); - ini.Set("General", "DebuggerFont", WxStrToStr(DebuggerFont.GetNativeFontInfoUserDesc())); - - // Boot to pause or not - ini.Set("General", "AutomaticStart", GetMenuBar()->IsChecked(IDM_AUTOMATICSTART)); - ini.Set("General", "BootToPause", GetMenuBar()->IsChecked(IDM_BOOTTOPAUSE)); + IniFile::Section* general = ini.GetOrCreateSection("General"); + general->Set("DebuggerFont", WxStrToStr(DebuggerFont.GetNativeFontInfoUserDesc())); + general->Set("AutomaticStart", GetMenuBar()->IsChecked(IDM_AUTOMATICSTART)); + general->Set("BootToPause", GetMenuBar()->IsChecked(IDM_BOOTTOPAUSE)); const char* SettingName[] = { "Log", @@ -126,16 +126,16 @@ void CCodeWindow::Save() // Save windows settings for (int i = IDM_LOGWINDOW; i <= IDM_VIDEOWINDOW; i++) - ini.Set("ShowOnStart", SettingName[i - IDM_LOGWINDOW], GetMenuBar()->IsChecked(i)); + ini.GetOrCreateSection("ShowOnStart")->Set(SettingName[i - IDM_LOGWINDOW], GetMenuBar()->IsChecked(i)); // Save notebook affiliations - std::string _Section = "P - " + Parent->Perspectives[Parent->ActivePerspective].Name; + std::string section = "P - " + Parent->Perspectives[Parent->ActivePerspective].Name; for (int i = 0; i <= IDM_CODEWINDOW - IDM_LOGWINDOW; i++) - ini.Set(_Section, SettingName[i], iNbAffiliation[i]); + ini.GetOrCreateSection(section)->Set(SettingName[i], iNbAffiliation[i]); // Save floating setting for (int i = IDM_LOGWINDOW_PARENT; i <= IDM_CODEWINDOW_PARENT; i++) - ini.Set("Float", SettingName[i - IDM_LOGWINDOW_PARENT], !!FindWindowById(i)); + ini.GetOrCreateSection("Float")->Set(SettingName[i - IDM_LOGWINDOW_PARENT], !!FindWindowById(i)); ini.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); } diff --git a/Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp b/Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp index 682a6733a1..fa09024ef3 100644 --- a/Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp +++ b/Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp @@ -88,10 +88,11 @@ void GFXDebuggerPanel::SaveSettings() const GetSize().GetWidth() < 1000 && GetSize().GetHeight() < 1000) { - file.Set("VideoWindow", "x", GetPosition().x); - file.Set("VideoWindow", "y", GetPosition().y); - file.Set("VideoWindow", "w", GetSize().GetWidth()); - file.Set("VideoWindow", "h", GetSize().GetHeight()); + IniFile::Section* video_window = file.GetOrCreateSection("VideoWindow"); + video_window->Set("x", GetPosition().x); + video_window->Set("y", GetPosition().y); + video_window->Set("w", GetSize().GetWidth()); + video_window->Set("h", GetSize().GetHeight()); } file.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); @@ -102,11 +103,17 @@ void GFXDebuggerPanel::LoadSettings() IniFile file; file.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); - int x = 100, y = 100, w = 100, h = 100; - file.Get("VideoWindow", "x", &x, GetPosition().x); - file.Get("VideoWindow", "y", &y, GetPosition().y); - file.Get("VideoWindow", "w", &w, GetSize().GetWidth()); - file.Get("VideoWindow", "h", &h, GetSize().GetHeight()); + int x = 100; + int y = 100; + int w = 100; + int h = 100; + + IniFile::Section* video_window = file.GetOrCreateSection("VideoWindow"); + video_window->Get("x", &x, GetPosition().x); + video_window->Get("y", &y, GetPosition().y); + video_window->Get("w", &w, GetSize().GetWidth()); + video_window->Get("h", &h, GetSize().GetHeight()); + SetSize(x, y, w, h); } diff --git a/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp b/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp index ed2fe66b45..53184d7116 100644 --- a/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp +++ b/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp @@ -127,25 +127,29 @@ CMemoryWindow::CMemoryWindow(wxWindow* parent, wxWindowID id, sizerBig->Fit(this); } -void CMemoryWindow::Save(IniFile& _IniFile) const +void CMemoryWindow::Save(IniFile& ini) const { // Prevent these bad values that can happen after a crash or hanging if (GetPosition().x != -32000 && GetPosition().y != -32000) { - _IniFile.Set("MemoryWindow", "x", GetPosition().x); - _IniFile.Set("MemoryWindow", "y", GetPosition().y); - _IniFile.Set("MemoryWindow", "w", GetSize().GetWidth()); - _IniFile.Set("MemoryWindow", "h", GetSize().GetHeight()); + IniFile::Section* mem_window = ini.GetOrCreateSection("MemoryWindow"); + mem_window->Set("x", GetPosition().x); + mem_window->Set("y", GetPosition().y); + mem_window->Set("w", GetSize().GetWidth()); + mem_window->Set("h", GetSize().GetHeight()); } } -void CMemoryWindow::Load(IniFile& _IniFile) +void CMemoryWindow::Load(IniFile& ini) { int x, y, w, h; - _IniFile.Get("MemoryWindow", "x", &x, GetPosition().x); - _IniFile.Get("MemoryWindow", "y", &y, GetPosition().y); - _IniFile.Get("MemoryWindow", "w", &w, GetSize().GetWidth()); - _IniFile.Get("MemoryWindow", "h", &h, GetSize().GetHeight()); + + IniFile::Section* mem_window = ini.GetOrCreateSection("MemoryWindow"); + mem_window->Get("x", &x, GetPosition().x); + mem_window->Get("y", &y, GetPosition().y); + mem_window->Get("w", &w, GetSize().GetWidth()); + mem_window->Get("h", &h, GetSize().GetHeight()); + SetSize(x, y, w, h); } diff --git a/Source/Core/DolphinWX/FrameAui.cpp b/Source/Core/DolphinWX/FrameAui.cpp index 04efd4b7e5..eabb5160ad 100644 --- a/Source/Core/DolphinWX/FrameAui.cpp +++ b/Source/Core/DolphinWX/FrameAui.cpp @@ -835,8 +835,10 @@ void CFrame::LoadIniPerspectives() IniFile ini; ini.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); - ini.Get("Perspectives", "Perspectives", &_Perspectives, "Perspective 1"); - ini.Get("Perspectives", "Active", &ActivePerspective, 0); + + IniFile::Section* perspectives = ini.GetOrCreateSection("Perspectives"); + perspectives->Get("Perspectives", &_Perspectives, "Perspective 1"); + perspectives->Get("Active", &ActivePerspective, 0); SplitString(_Perspectives, ',', VPerspectives); for (auto& VPerspective : VPerspectives) @@ -853,13 +855,15 @@ void CFrame::LoadIniPerspectives() } _Section = StringFromFormat("P - %s", Tmp.Name.c_str()); - ini.Get(_Section, "Perspective", &_Perspective, - "layout2|" - "name=Pane 0;caption=Pane 0;state=768;dir=5;prop=100000;|" - "name=Pane 1;caption=Pane 1;state=31458108;dir=4;prop=100000;|" - "dock_size(5,0,0)=22|dock_size(4,0,0)=333|"); - ini.Get(_Section, "Width", &_Widths, "70,25"); - ini.Get(_Section, "Height", &_Heights, "80,80"); + + IniFile::Section* perspec_section = ini.GetOrCreateSection(_Section); + perspec_section->Get("Perspective", &_Perspective, + "layout2|" + "name=Pane 0;caption=Pane 0;state=768;dir=5;prop=100000;|" + "name=Pane 1;caption=Pane 1;state=31458108;dir=4;prop=100000;|" + "dock_size(5,0,0)=22|dock_size(4,0,0)=333|"); + perspec_section->Get("Width", &_Widths, "70,25"); + perspec_section->Get("Height", &_Heights, "80,80"); Tmp.Perspective = StrToWxStr(_Perspective); @@ -926,14 +930,17 @@ void CFrame::SaveIniPerspectives() STmp += Perspective.Name + ","; } STmp = STmp.substr(0, STmp.length()-1); - ini.Set("Perspectives", "Perspectives", STmp); - ini.Set("Perspectives", "Active", ActivePerspective); + + IniFile::Section* perspectives = ini.GetOrCreateSection("Perspectives"); + perspectives->Set("Perspectives", STmp); + perspectives->Set("Active", ActivePerspective); // Save the perspectives for (auto& Perspective : Perspectives) { std::string _Section = "P - " + Perspective.Name; - ini.Set(_Section, "Perspective", WxStrToStr(Perspective.Perspective)); + IniFile::Section* perspec_section = ini.GetOrCreateSection(_Section); + perspec_section->Set("Perspective", WxStrToStr(Perspective.Perspective)); std::string SWidth = "", SHeight = ""; for (u32 j = 0; j < Perspective.Width.size(); j++) @@ -945,8 +952,8 @@ void CFrame::SaveIniPerspectives() SWidth = SWidth.substr(0, SWidth.length()-1); SHeight = SHeight.substr(0, SHeight.length()-1); - ini.Set(_Section, "Width", SWidth); - ini.Set(_Section, "Height", SHeight); + perspec_section->Set("Width", SWidth); + perspec_section->Set("Height", SHeight); } ini.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); diff --git a/Source/Core/DolphinWX/ISOFile.cpp b/Source/Core/DolphinWX/ISOFile.cpp index 63c30f10bb..891d194df8 100644 --- a/Source/Core/DolphinWX/ISOFile.cpp +++ b/Source/Core/DolphinWX/ISOFile.cpp @@ -127,8 +127,10 @@ GameListItem::GameListItem(const std::string& _rFileName) IniFile ini; ini.Load(File::GetSysDirectory() + GAMESETTINGS_DIR DIR_SEP + m_UniqueID + ".ini"); ini.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + m_UniqueID + ".ini", true); - ini.Get("EmuState", "EmulationStateId", &m_emu_state); - ini.Get("EmuState", "EmulationIssues", &m_issues); + + IniFile::Section* emu_state = ini.GetOrCreateSection("EmuState"); + emu_state->Get("EmulationStateId", &m_emu_state); + emu_state->Get("EmulationIssues", &m_issues); } if (!m_pImage.empty()) diff --git a/Source/Core/DolphinWX/ISOProperties.cpp b/Source/Core/DolphinWX/ISOProperties.cpp index 71445c15d9..f5884f03d9 100644 --- a/Source/Core/DolphinWX/ISOProperties.cpp +++ b/Source/Core/DolphinWX/ISOProperties.cpp @@ -1019,9 +1019,9 @@ void CISOProperties::SetCheckboxValueFromGameini(const char* section, const char { // Prefer local gameini value over default gameini value. bool value; - if (GameIniLocal.Get(section, key, &value)) + if (GameIniLocal.GetOrCreateSection(section)->Get(key, &value)) checkbox->Set3StateValue((wxCheckBoxState)value); - else if (GameIniDefault.Get(section, key, &value)) + else if (GameIniDefault.GetOrCreateSection(section)->Get(key, &value)) checkbox->Set3StateValue((wxCheckBoxState)value); else checkbox->Set3StateValue(wxCHK_UNDETERMINED); @@ -1042,34 +1042,39 @@ void CISOProperties::LoadGameConfig() SetCheckboxValueFromGameini("Wii", "Widescreen", EnableWideScreen); SetCheckboxValueFromGameini("Video", "UseBBox", UseBBox); + IniFile::Section* default_video = GameIniDefault.GetOrCreateSection("Video"); + IniFile::Section* local_video = GameIniLocal.GetOrCreateSection("Video"); + // First set values from default gameini, then apply values from local gameini int iTemp; - GameIniDefault.Get("Video", "ProjectionHack", &iTemp); + default_video->Get("ProjectionHack", &iTemp); PHackEnable->SetValue(!!iTemp); - if (GameIniLocal.Get("Video", "ProjectionHack", &iTemp)) + if (local_video->Get("ProjectionHack", &iTemp)) PHackEnable->SetValue(!!iTemp); - GameIniDefault.Get("Video", "PH_SZNear", &PHack_Data.PHackSZNear); + default_video->Get("PH_SZNear", &PHack_Data.PHackSZNear); if (GameIniLocal.GetIfExists("Video", "PH_SZNear", &iTemp)) PHack_Data.PHackSZNear = !!iTemp; - GameIniDefault.Get("Video", "PH_SZFar", &PHack_Data.PHackSZFar); + default_video->Get("PH_SZFar", &PHack_Data.PHackSZFar); if (GameIniLocal.GetIfExists("Video", "PH_SZFar", &iTemp)) PHack_Data.PHackSZFar = !!iTemp; std::string sTemp; - GameIniDefault.Get("Video", "PH_ZNear", &PHack_Data.PHZNear); + default_video->Get("PH_ZNear", &PHack_Data.PHZNear); if (GameIniLocal.GetIfExists("Video", "PH_ZNear", &sTemp)) PHack_Data.PHZNear = sTemp; - GameIniDefault.Get("Video", "PH_ZFar", &PHack_Data.PHZFar); + default_video->Get("PH_ZFar", &PHack_Data.PHZFar); if (GameIniLocal.GetIfExists("Video", "PH_ZFar", &sTemp)) PHack_Data.PHZFar = sTemp; - GameIniDefault.Get("EmuState", "EmulationStateId", &iTemp, 0/*Not Set*/); + + IniFile::Section* default_emustate = GameIniDefault.GetOrCreateSection("EmuState"); + default_emustate->Get("EmulationStateId", &iTemp, 0/*Not Set*/); EmuState->SetSelection(iTemp); if (GameIniLocal.GetIfExists("EmuState", "EmulationStateId", &iTemp)) EmuState->SetSelection(iTemp); - GameIniDefault.Get("EmuState", "EmulationIssues", &sTemp); + default_emustate->Get("EmulationIssues", &sTemp); if (!sTemp.empty()) EmuIssues->SetValue(StrToWxStr(sTemp)); if (GameIniLocal.GetIfExists("EmuState", "EmulationIssues", &sTemp)) @@ -1092,13 +1097,13 @@ void CISOProperties::SaveGameIniValueFrom3StateCheckbox(const char* section, con if (checkbox->Get3StateValue() == wxCHK_UNDETERMINED) GameIniLocal.DeleteKey(section, key); else if (!GameIniDefault.Exists(section, key)) - GameIniLocal.Set(section, key, checkbox_val); + GameIniLocal.GetOrCreateSection(section)->Set(key, checkbox_val); else { bool default_value; - GameIniDefault.Get(section, key, &default_value); + GameIniDefault.GetOrCreateSection(section)->Get(key, &default_value); if (default_value != checkbox_val) - GameIniLocal.Set(section, key, checkbox_val); + GameIniLocal.GetOrCreateSection(section)->Set(key, checkbox_val); else GameIniLocal.DeleteKey(section, key); } @@ -1122,13 +1127,13 @@ bool CISOProperties::SaveGameConfig() #define SAVE_IF_NOT_DEFAULT(section, key, val, def) do { \ if (GameIniDefault.Exists((section), (key))) { \ std::remove_reference::type tmp__; \ - GameIniDefault.Get((section), (key), &tmp__); \ + GameIniDefault.GetOrCreateSection((section))->Get((key), &tmp__); \ if ((val) != tmp__) \ - GameIniLocal.Set((section), (key), (val)); \ + GameIniLocal.GetOrCreateSection((section))->Set((key), (val)); \ else \ GameIniLocal.DeleteKey((section), (key)); \ } else if ((val) != (def)) \ - GameIniLocal.Set((section), (key), (val)); \ + GameIniLocal.GetOrCreateSection((section))->Set((key), (val)); \ else \ GameIniLocal.DeleteKey((section), (key)); \ } while (0) diff --git a/Source/Core/DolphinWX/LogConfigWindow.cpp b/Source/Core/DolphinWX/LogConfigWindow.cpp index 6498668869..624aad92ae 100644 --- a/Source/Core/DolphinWX/LogConfigWindow.cpp +++ b/Source/Core/DolphinWX/LogConfigWindow.cpp @@ -117,9 +117,11 @@ void LogConfigWindow::LoadSettings() IniFile ini; ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX)); + IniFile::Section* options = ini.GetOrCreateSection("Options"); + // Retrieve the verbosity value from the config ini file. int verbosity; - ini.Get("Options", "Verbosity", &verbosity, 0); + options->Get("Verbosity", &verbosity, 0); // Ensure the verbosity level is valid. if (verbosity < 1) @@ -131,16 +133,16 @@ void LogConfigWindow::LoadSettings() m_verbosity->SetSelection(verbosity - 1); // Get the logger output settings from the config ini file. - ini.Get("Options", "WriteToFile", &m_writeFile, false); + options->Get("WriteToFile", &m_writeFile, false); m_writeFileCB->SetValue(m_writeFile); - ini.Get("Options", "WriteToConsole", &m_writeConsole, true); + options->Get("WriteToConsole", &m_writeConsole, true); m_writeConsoleCB->SetValue(m_writeConsole); - ini.Get("Options", "WriteToWindow", &m_writeWindow, true); + options->Get("WriteToWindow", &m_writeWindow, true); m_writeWindowCB->SetValue(m_writeWindow); #ifdef _MSC_VER if (IsDebuggerPresent()) { - ini.Get("Options", "WriteToDebugger", &m_writeDebugger, true); + options->Get("WriteToDebugger", &m_writeDebugger, true); m_writeDebuggerCB->SetValue(m_writeDebugger); } else @@ -154,7 +156,7 @@ void LogConfigWindow::LoadSettings() for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) { bool log_enabled; - ini.Get("Logs", m_LogManager->GetShortName((LogTypes::LOG_TYPE)i), &log_enabled, true); + ini.GetOrCreateSection("Logs")->Get(m_LogManager->GetShortName((LogTypes::LOG_TYPE)i), &log_enabled, true); if (log_enabled) enableAll = false; @@ -168,22 +170,20 @@ void LogConfigWindow::SaveSettings() IniFile ini; ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX)); - // Save the verbosity level. - ini.Set("Options", "Verbosity", m_verbosity->GetSelection() + 1); - - // Save the enabled/disabled states of the logger outputs to the config ini. - ini.Set("Options", "WriteToFile", m_writeFile); - ini.Set("Options", "WriteToConsole", m_writeConsole); - ini.Set("Options", "WriteToWindow", m_writeWindow); + IniFile::Section* options = ini.GetOrCreateSection("Options"); + options->Set("Verbosity", m_verbosity->GetSelection() + 1); + options->Set("WriteToFile", m_writeFile); + options->Set("WriteToConsole", m_writeConsole); + options->Set("WriteToWindow", m_writeWindow); #ifdef _MSC_VER if (IsDebuggerPresent()) - ini.Set("Options", "WriteToDebugger", m_writeDebugger); + options->Set("WriteToDebugger", m_writeDebugger); #endif // Save all enabled/disabled states of the log types to the config ini. for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) { - ini.Set("Logs", m_LogManager->GetShortName((LogTypes::LOG_TYPE)i), m_checks->IsChecked(i)); + ini.GetOrCreateSection("Logs")->Set(m_LogManager->GetShortName((LogTypes::LOG_TYPE)i), m_checks->IsChecked(i)); } ini.Save(File::GetUserPath(F_LOGGERCONFIG_IDX)); diff --git a/Source/Core/DolphinWX/LogWindow.cpp b/Source/Core/DolphinWX/LogWindow.cpp index 15be942b20..0260595a29 100644 --- a/Source/Core/DolphinWX/LogWindow.cpp +++ b/Source/Core/DolphinWX/LogWindow.cpp @@ -69,13 +69,15 @@ void CLogWindow::CreateGUIControls() IniFile ini; ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX)); - ini.Get("LogWindow", "x", &x, Parent->GetSize().GetX() / 2); - ini.Get("LogWindow", "y", &y, Parent->GetSize().GetY()); - ini.Get("LogWindow", "pos", &winpos, wxAUI_DOCK_RIGHT); + IniFile::Section* options = ini.GetOrCreateSection("Options"); + IniFile::Section* log_window = ini.GetOrCreateSection("LogWindow"); + log_window->Get("x", &x, Parent->GetSize().GetX() / 2); + log_window->Get("y", &y, Parent->GetSize().GetY()); + log_window->Get("pos", &winpos, wxAUI_DOCK_RIGHT); // Set up log listeners int verbosity; - ini.Get("Options", "Verbosity", &verbosity, 0); + options->Get("Verbosity", &verbosity, 0); // Ensure the verbosity level is valid if (verbosity < 1) @@ -84,12 +86,12 @@ void CLogWindow::CreateGUIControls() verbosity = MAX_LOGLEVEL; // Get the logger output settings from the config ini file. - ini.Get("Options", "WriteToFile", &m_writeFile, false); - ini.Get("Options", "WriteToWindow", &m_writeWindow, true); + options->Get("WriteToFile", &m_writeFile, false); + options->Get("WriteToWindow", &m_writeWindow, true); #ifdef _MSC_VER if (IsDebuggerPresent()) { - ini.Get("Options", "WriteToDebugger", &m_writeDebugger, true); + options->Get("WriteToDebugger", &m_writeDebugger, true); } else #endif @@ -97,10 +99,11 @@ void CLogWindow::CreateGUIControls() m_writeDebugger = false; } + IniFile::Section* logs = ini.GetOrCreateSection("Logs"); for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) { bool enable; - ini.Get("Logs", m_LogManager->GetShortName((LogTypes::LOG_TYPE)i), &enable, true); + logs->Get(m_LogManager->GetShortName((LogTypes::LOG_TYPE)i), &enable, true); if (m_writeWindow && enable) m_LogManager->AddListener((LogTypes::LOG_TYPE)i, this); @@ -133,12 +136,12 @@ void CLogWindow::CreateGUIControls() LogFont.push_back(DebuggerFont); int font; - ini.Get("Options", "Font", &font, 0); + options->Get("Font", &font, 0); m_FontChoice->SetSelection(font); // Word wrap bool wrap_lines; - ini.Get("Options", "WrapLines", &wrap_lines, false); + options->Get("WrapLines", &wrap_lines, false); m_WrapLine = new wxCheckBox(this, IDM_WRAPLINE, _("Word Wrap")); m_WrapLine->SetValue(wrap_lines); @@ -190,12 +193,16 @@ void CLogWindow::SaveSettings() if (!Parent->g_pCodeWindow) { - ini.Set("LogWindow", "x", x); - ini.Set("LogWindow", "y", y); - ini.Set("LogWindow", "pos", winpos); + IniFile::Section* log_window = ini.GetOrCreateSection("LogWindow"); + log_window->Set("x", x); + log_window->Set("y", y); + log_window->Set("pos", winpos); } - ini.Set("Options", "Font", m_FontChoice->GetSelection()); - ini.Set("Options", "WrapLines", m_WrapLine->IsChecked()); + + IniFile::Section* options = ini.GetOrCreateSection("Options"); + options->Set("Font", m_FontChoice->GetSelection()); + options->Set("WrapLines", m_WrapLine->IsChecked()); + ini.Save(File::GetUserPath(F_LOGGERCONFIG_IDX)); } diff --git a/Source/Core/DolphinWX/Main.cpp b/Source/Core/DolphinWX/Main.cpp index 9a46de1963..0891c3b74f 100644 --- a/Source/Core/DolphinWX/Main.cpp +++ b/Source/Core/DolphinWX/Main.cpp @@ -413,7 +413,7 @@ void DolphinApp::InitLanguageSupport() IniFile ini; ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); - ini.Get("Interface", "Language", &language, wxLANGUAGE_DEFAULT); + ini.GetOrCreateSection("Interface")->Get("Language", &language, wxLANGUAGE_DEFAULT); // Load language if possible, fall back to system default otherwise if (wxLocale::IsAvailable(language)) diff --git a/Source/Core/DolphinWX/MainAndroid.cpp b/Source/Core/DolphinWX/MainAndroid.cpp index 2d42600ea1..cf3b96fa71 100644 --- a/Source/Core/DolphinWX/MainAndroid.cpp +++ b/Source/Core/DolphinWX/MainAndroid.cpp @@ -298,7 +298,7 @@ JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetConfig ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string(file)); std::string value; - ini.Get(section, key, &value, defaultValue); + ini.GetOrCreateSection(section)->Get(key, &value, defaultValue); return env->NewStringUTF(value.c_str()); } @@ -313,7 +313,7 @@ jstring jValue) ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string(file)); - ini.Set(section, key, value); + ini.GetOrCreateSection(section)->Set(key, value); ini.Save(File::GetUserPath(D_CONFIG_IDX) + std::string(file)); } diff --git a/Source/Core/DolphinWX/PHackSettings.cpp b/Source/Core/DolphinWX/PHackSettings.cpp index 3326a85ae9..af20038ef5 100644 --- a/Source/Core/DolphinWX/PHackSettings.cpp +++ b/Source/Core/DolphinWX/PHackSettings.cpp @@ -98,7 +98,7 @@ void CPHackSettings::LoadPHackData() if (!PHPresetsIni.Exists(sIndex, "Title")) break; - PHPresetsIni.Get(sIndex, "Title", &sTemp); + PHPresetsIni.GetOrCreateSection(sIndex)->Get("Title", &sTemp); if (sTemp.empty()) sTemp = WxStrToStr(_("(UNKNOWN)")); @@ -129,13 +129,14 @@ void CPHackSettings::SetRefresh(wxCommandEvent& event) index -= 2; sIndex = std::to_string(index); - PHPresetsIni.Get(sIndex, "PH_SZNear", &bTemp); + IniFile::Section* proj_hack = PHPresetsIni.GetOrCreateSection(sIndex); + proj_hack->Get("PH_SZNear", &bTemp); PHackSZNear->Set3StateValue((wxCheckBoxState)bTemp); - PHPresetsIni.Get(sIndex, "PH_SZFar", &bTemp); + proj_hack->Get("PH_SZFar", &bTemp); PHackSZFar->Set3StateValue((wxCheckBoxState)bTemp); - PHPresetsIni.Get(sIndex, "PH_ZNear", &sTemp); + proj_hack->Get("PH_ZNear", &sTemp); PHackZNear->SetValue(StrToWxStr(sTemp)); - PHPresetsIni.Get(sIndex, "PH_ZFar", &sTemp); + proj_hack->Get("PH_ZFar", &sTemp); PHackZFar->SetValue(StrToWxStr(sTemp)); } } diff --git a/Source/Core/InputCommon/InputConfig.cpp b/Source/Core/InputCommon/InputConfig.cpp index 859036c69e..b2f972fecb 100644 --- a/Source/Core/InputCommon/InputConfig.cpp +++ b/Source/Core/InputCommon/InputConfig.cpp @@ -36,16 +36,21 @@ bool InputPlugin::LoadConfig(bool isGC) type = "Wiimote"; path = "Profiles/Wiimote/"; } + game_ini.Load(File::GetSysDirectory() + GAMESETTINGS_DIR DIR_SEP + SConfig::GetInstance().m_LocalCoreStartupParameter.GetUniqueID() + ".ini"); game_ini.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + SConfig::GetInstance().m_LocalCoreStartupParameter.GetUniqueID() + ".ini", true); + IniFile::Section* control_section = game_ini.GetOrCreateSection("Controls"); + for (int i = 0; i < 4; i++) { - if (game_ini.Exists("Controls", type + "Profile" + num[i])) + if (control_section->Exists(type + "Profile" + num[i])) { - if (game_ini.Get("Controls", type + "Profile" + num[i], &profile[i])) + if (control_section->Get(type + "Profile" + num[i], &profile[i])) { if (File::Exists(File::GetUserPath(D_CONFIG_IDX) + path + profile[i] + ".ini")) + { useProfile[i] = true; + } else { // TODO: Having a PanicAlert for this is dumb. diff --git a/Source/Core/VideoBackends/Software/SWVideoConfig.cpp b/Source/Core/VideoBackends/Software/SWVideoConfig.cpp index 091eab35fa..0e4338eb84 100644 --- a/Source/Core/VideoBackends/Software/SWVideoConfig.cpp +++ b/Source/Core/VideoBackends/Software/SWVideoConfig.cpp @@ -38,24 +38,29 @@ void SWVideoConfig::Load(const char* ini_file) IniFile iniFile; iniFile.Load(ini_file); - iniFile.Get("Hardware", "Fullscreen", &bFullscreen, 0); // Hardware - iniFile.Get("Hardware", "RenderToMainframe", &renderToMainframe, false); + IniFile::Section* hardware = iniFile.GetOrCreateSection("Hardware"); + hardware->Get("Fullscreen", &bFullscreen, 0); // Hardware + hardware->Get("RenderToMainframe", &renderToMainframe, false); - iniFile.Get("Rendering", "HwRasterizer", &bHwRasterizer, false); - iniFile.Get("Rendering", "BypassXFB", &bBypassXFB, false); - iniFile.Get("Rendering", "ZComploc", &bZComploc, true); - iniFile.Get("Rendering", "ZFreeze", &bZFreeze, true); + IniFile::Section* rendering = iniFile.GetOrCreateSection("Rendering"); + rendering->Get("HwRasterizer", &bHwRasterizer, false); + rendering->Get("BypassXFB", &bBypassXFB, false); + rendering->Get("ZComploc", &bZComploc, true); + rendering->Get("ZFreeze", &bZFreeze, true); - iniFile.Get("Info", "ShowStats", &bShowStats, false); + IniFile::Section* info = iniFile.GetOrCreateSection("Info"); + info->Get("ShowStats", &bShowStats, false); - iniFile.Get("Utility", "DumpTexture", &bDumpTextures, false); - iniFile.Get("Utility", "DumpObjects", &bDumpObjects, false); - iniFile.Get("Utility", "DumpFrames", &bDumpFrames, false); - iniFile.Get("Utility", "DumpTevStages", &bDumpTevStages, false); - iniFile.Get("Utility", "DumpTevTexFetches", &bDumpTevTextureFetches, false); + IniFile::Section* utility = iniFile.GetOrCreateSection("Utility"); + utility->Get("DumpTexture", &bDumpTextures, false); + utility->Get("DumpObjects", &bDumpObjects, false); + utility->Get("DumpFrames", &bDumpFrames, false); + utility->Get("DumpTevStages", &bDumpTevStages, false); + utility->Get("DumpTevTexFetches", &bDumpTevTextureFetches, false); - iniFile.Get("Misc", "DrawStart", &drawStart, 0); - iniFile.Get("Misc", "DrawEnd", &drawEnd, 100000); + IniFile::Section* misc = iniFile.GetOrCreateSection("Misc"); + misc->Get("DrawStart", &drawStart, 0); + misc->Get("DrawEnd", &drawEnd, 100000); } void SWVideoConfig::Save(const char* ini_file) @@ -63,24 +68,29 @@ void SWVideoConfig::Save(const char* ini_file) IniFile iniFile; iniFile.Load(ini_file); - iniFile.Set("Hardware", "Fullscreen", bFullscreen); - iniFile.Set("Hardware", "RenderToMainframe", renderToMainframe); + IniFile::Section* hardware = iniFile.GetOrCreateSection("Hardware"); + hardware->Set("Fullscreen", bFullscreen); + hardware->Set("RenderToMainframe", renderToMainframe); - iniFile.Set("Rendering", "HwRasterizer", bHwRasterizer); - iniFile.Set("Rendering", "BypassXFB", bBypassXFB); - iniFile.Set("Rendering", "ZComploc", bZComploc); - iniFile.Set("Rendering", "ZFreeze", bZFreeze); + IniFile::Section* rendering = iniFile.GetOrCreateSection("Rendering"); + rendering->Set("HwRasterizer", bHwRasterizer); + rendering->Set("BypassXFB", bBypassXFB); + rendering->Set("ZComploc", bZComploc); + rendering->Set("ZFreeze", bZFreeze); - iniFile.Set("Info", "ShowStats", bShowStats); + IniFile::Section* info = iniFile.GetOrCreateSection("Info"); + info->Set("ShowStats", bShowStats); - iniFile.Set("Utility", "DumpTexture", bDumpTextures); - iniFile.Set("Utility", "DumpObjects", bDumpObjects); - iniFile.Set("Utility", "DumpFrames", bDumpFrames); - iniFile.Set("Utility", "DumpTevStages", bDumpTevStages); - iniFile.Set("Utility", "DumpTevTexFetches", bDumpTevTextureFetches); + IniFile::Section* utility = iniFile.GetOrCreateSection("Utility"); + utility->Set("DumpTexture", bDumpTextures); + utility->Set("DumpObjects", bDumpObjects); + utility->Set("DumpFrames", bDumpFrames); + utility->Set("DumpTevStages", bDumpTevStages); + utility->Set("DumpTevTexFetches", bDumpTevTextureFetches); - iniFile.Set("Misc", "DrawStart", drawStart); - iniFile.Set("Misc", "DrawEnd", drawEnd); + IniFile::Section* misc = iniFile.GetOrCreateSection("Misc"); + misc->Set("DrawStart", drawStart); + misc->Set("DrawEnd", drawEnd); iniFile.Save(ini_file); } diff --git a/Source/Core/VideoCommon/VideoConfig.cpp b/Source/Core/VideoCommon/VideoConfig.cpp index c2440035b1..bb8d698508 100644 --- a/Source/Core/VideoCommon/VideoConfig.cpp +++ b/Source/Core/VideoCommon/VideoConfig.cpp @@ -44,63 +44,63 @@ void VideoConfig::Load(const std::string& ini_file) IniFile iniFile; iniFile.Load(ini_file); - iniFile.Get("Hardware", "VSync", &bVSync, 0); // Hardware - iniFile.Get("Settings", "wideScreenHack", &bWidescreenHack, false); - iniFile.Get("Settings", "AspectRatio", &iAspectRatio, (int)ASPECT_AUTO); - iniFile.Get("Settings", "Crop", &bCrop, false); - iniFile.Get("Settings", "UseXFB", &bUseXFB, 0); - iniFile.Get("Settings", "UseRealXFB", &bUseRealXFB, 0); - iniFile.Get("Settings", "SafeTextureCacheColorSamples", &iSafeTextureCache_ColorSamples,128); - iniFile.Get("Settings", "ShowFPS", &bShowFPS, false); // Settings - iniFile.Get("Settings", "LogFPSToFile", &bLogFPSToFile, false); - iniFile.Get("Settings", "ShowInputDisplay", &bShowInputDisplay, false); - iniFile.Get("Settings", "OverlayStats", &bOverlayStats, false); - iniFile.Get("Settings", "OverlayProjStats", &bOverlayProjStats, false); - iniFile.Get("Settings", "ShowEFBCopyRegions", &bShowEFBCopyRegions, false); - iniFile.Get("Settings", "DumpTextures", &bDumpTextures, 0); - iniFile.Get("Settings", "HiresTextures", &bHiresTextures, 0); - iniFile.Get("Settings", "DumpEFBTarget", &bDumpEFBTarget, 0); - iniFile.Get("Settings", "DumpFrames", &bDumpFrames, 0); - iniFile.Get("Settings", "FreeLook", &bFreeLook, 0); - iniFile.Get("Settings", "UseFFV1", &bUseFFV1, 0); - iniFile.Get("Settings", "AnaglyphStereo", &bAnaglyphStereo, false); - iniFile.Get("Settings", "AnaglyphStereoSeparation", &iAnaglyphStereoSeparation, 200); - iniFile.Get("Settings", "AnaglyphFocalAngle", &iAnaglyphFocalAngle, 0); - iniFile.Get("Settings", "EnablePixelLighting", &bEnablePixelLighting, 0); - iniFile.Get("Settings", "FastDepthCalc", &bFastDepthCalc, true); + IniFile::Section* hardware = iniFile.GetOrCreateSection("Hardware"); + hardware->Get("VSync", &bVSync, 0); + hardware->Get("Adapter", &iAdapter, 0); - iniFile.Get("Settings", "MSAA", &iMultisampleMode, 0); - iniFile.Get("Settings", "EFBScale", &iEFBScale, (int) SCALE_1X); // native + IniFile::Section* settings = iniFile.GetOrCreateSection("Settings"); + settings->Get("wideScreenHack", &bWidescreenHack, false); + settings->Get("AspectRatio", &iAspectRatio, (int)ASPECT_AUTO); + settings->Get("Crop", &bCrop, false); + settings->Get("UseXFB", &bUseXFB, 0); + settings->Get("UseRealXFB", &bUseRealXFB, 0); + settings->Get("SafeTextureCacheColorSamples", &iSafeTextureCache_ColorSamples,128); + settings->Get("ShowFPS", &bShowFPS, false); + settings->Get("LogFPSToFile", &bLogFPSToFile, false); + settings->Get("ShowInputDisplay", &bShowInputDisplay, false); + settings->Get("OverlayStats", &bOverlayStats, false); + settings->Get("OverlayProjStats", &bOverlayProjStats, false); + settings->Get("ShowEFBCopyRegions", &bShowEFBCopyRegions, false); + settings->Get("DumpTextures", &bDumpTextures, 0); + settings->Get("HiresTextures", &bHiresTextures, 0); + settings->Get("DumpEFBTarget", &bDumpEFBTarget, 0); + settings->Get("DumpFrames", &bDumpFrames, 0); + settings->Get("FreeLook", &bFreeLook, 0); + settings->Get("UseFFV1", &bUseFFV1, 0); + settings->Get("AnaglyphStereo", &bAnaglyphStereo, false); + settings->Get("AnaglyphStereoSeparation", &iAnaglyphStereoSeparation, 200); + settings->Get("AnaglyphFocalAngle", &iAnaglyphFocalAngle, 0); + settings->Get("EnablePixelLighting", &bEnablePixelLighting, 0); + settings->Get("FastDepthCalc", &bFastDepthCalc, true); + settings->Get("MSAA", &iMultisampleMode, 0); + settings->Get("EFBScale", &iEFBScale, (int) SCALE_1X); // native + settings->Get("DstAlphaPass", &bDstAlphaPass, false); + settings->Get("TexFmtOverlayEnable", &bTexFmtOverlayEnable, 0); + settings->Get("TexFmtOverlayCenter", &bTexFmtOverlayCenter, 0); + settings->Get("WireFrame", &bWireFrame, 0); + settings->Get("DisableFog", &bDisableFog, 0); + settings->Get("OMPDecoder", &bOMPDecoder, false); + settings->Get("EnableShaderDebugging", &bEnableShaderDebugging, false); - iniFile.Get("Settings", "DstAlphaPass", &bDstAlphaPass, false); + IniFile::Section* enhancements = iniFile.GetOrCreateSection("Enhancements"); + enhancements->Get("ForceFiltering", &bForceFiltering, 0); + enhancements->Get("MaxAnisotropy", &iMaxAnisotropy, 0); // NOTE - this is x in (1 << x) + enhancements->Get("PostProcessingShader", &sPostProcessingShader, ""); + enhancements->Get("Enable3dVision", &b3DVision, false); - iniFile.Get("Settings", "TexFmtOverlayEnable", &bTexFmtOverlayEnable, 0); - iniFile.Get("Settings", "TexFmtOverlayCenter", &bTexFmtOverlayCenter, 0); - iniFile.Get("Settings", "WireFrame", &bWireFrame, 0); - iniFile.Get("Settings", "DisableFog", &bDisableFog, 0); - - iniFile.Get("Settings", "OMPDecoder", &bOMPDecoder, false); - - iniFile.Get("Settings", "EnableShaderDebugging", &bEnableShaderDebugging, false); - - iniFile.Get("Enhancements", "ForceFiltering", &bForceFiltering, 0); - iniFile.Get("Enhancements", "MaxAnisotropy", &iMaxAnisotropy, 0); // NOTE - this is x in (1 << x) - iniFile.Get("Enhancements", "PostProcessingShader", &sPostProcessingShader, ""); - iniFile.Get("Enhancements", "Enable3dVision", &b3DVision, false); - - iniFile.Get("Hacks", "EFBAccessEnable", &bEFBAccessEnable, true); - iniFile.Get("Hacks", "EFBCopyEnable", &bEFBCopyEnable, true); - iniFile.Get("Hacks", "EFBToTextureEnable", &bCopyEFBToTexture, true); - iniFile.Get("Hacks", "EFBScaledCopy", &bCopyEFBScaled, true); - iniFile.Get("Hacks", "EFBCopyCacheEnable", &bEFBCopyCacheEnable, false); - iniFile.Get("Hacks", "EFBEmulateFormatChanges", &bEFBEmulateFormatChanges, false); - - iniFile.Get("Hardware", "Adapter", &iAdapter, 0); + IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks"); + hacks->Get("EFBAccessEnable", &bEFBAccessEnable, true); + hacks->Get("EFBCopyEnable", &bEFBCopyEnable, true); + hacks->Get("EFBToTextureEnable", &bCopyEFBToTexture, true); + hacks->Get("EFBScaledCopy", &bCopyEFBScaled, true); + hacks->Get("EFBCopyCacheEnable", &bEFBCopyCacheEnable, false); + hacks->Get("EFBEmulateFormatChanges", &bEFBEmulateFormatChanges, false); // Load common settings iniFile.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); + IniFile::Section* interface = iniFile.GetOrCreateSection("Interface"); bool bTmp; - iniFile.Get("Interface", "UsePanicHandlers", &bTmp, true); + interface->Get("UsePanicHandlers", &bTmp, true); SetEnableAlert(bTmp); // Shader Debugging causes a huge slowdown and it's easy to forget about it @@ -216,56 +216,58 @@ void VideoConfig::Save(const std::string& ini_file) { IniFile iniFile; iniFile.Load(ini_file); - iniFile.Set("Hardware", "VSync", bVSync); - iniFile.Set("Settings", "AspectRatio", iAspectRatio); - iniFile.Set("Settings", "Crop", bCrop); - iniFile.Set("Settings", "wideScreenHack", bWidescreenHack); - iniFile.Set("Settings", "UseXFB", bUseXFB); - iniFile.Set("Settings", "UseRealXFB", bUseRealXFB); - iniFile.Set("Settings", "SafeTextureCacheColorSamples", iSafeTextureCache_ColorSamples); - iniFile.Set("Settings", "ShowFPS", bShowFPS); - iniFile.Set("Settings", "LogFPSToFile", bLogFPSToFile); - iniFile.Set("Settings", "ShowInputDisplay", bShowInputDisplay); - iniFile.Set("Settings", "OverlayStats", bOverlayStats); - iniFile.Set("Settings", "OverlayProjStats", bOverlayProjStats); - iniFile.Set("Settings", "DumpTextures", bDumpTextures); - iniFile.Set("Settings", "HiresTextures", bHiresTextures); - iniFile.Set("Settings", "DumpEFBTarget", bDumpEFBTarget); - iniFile.Set("Settings", "DumpFrames", bDumpFrames); - iniFile.Set("Settings", "FreeLook", bFreeLook); - iniFile.Set("Settings", "UseFFV1", bUseFFV1); - iniFile.Set("Settings", "AnaglyphStereo", bAnaglyphStereo); - iniFile.Set("Settings", "AnaglyphStereoSeparation", iAnaglyphStereoSeparation); - iniFile.Set("Settings", "AnaglyphFocalAngle", iAnaglyphFocalAngle); - iniFile.Set("Settings", "EnablePixelLighting", bEnablePixelLighting); - iniFile.Set("Settings", "FastDepthCalc", bFastDepthCalc); - iniFile.Set("Settings", "ShowEFBCopyRegions", bShowEFBCopyRegions); - iniFile.Set("Settings", "MSAA", iMultisampleMode); - iniFile.Set("Settings", "EFBScale", iEFBScale); - iniFile.Set("Settings", "TexFmtOverlayEnable", bTexFmtOverlayEnable); - iniFile.Set("Settings", "TexFmtOverlayCenter", bTexFmtOverlayCenter); - iniFile.Set("Settings", "Wireframe", bWireFrame); - iniFile.Set("Settings", "DstAlphaPass", bDstAlphaPass); - iniFile.Set("Settings", "DisableFog", bDisableFog); + IniFile::Section* hardware = iniFile.GetOrCreateSection("Hardware"); + hardware->Set("VSync", bVSync); + hardware->Set("Adapter", iAdapter); - iniFile.Set("Settings", "OMPDecoder", bOMPDecoder); + IniFile::Section* settings = iniFile.GetOrCreateSection("Settings"); + settings->Set("AspectRatio", iAspectRatio); + settings->Set("Crop", bCrop); + settings->Set("wideScreenHack", bWidescreenHack); + settings->Set("UseXFB", bUseXFB); + settings->Set("UseRealXFB", bUseRealXFB); + settings->Set("SafeTextureCacheColorSamples", iSafeTextureCache_ColorSamples); + settings->Set("ShowFPS", bShowFPS); + settings->Set("LogFPSToFile", bLogFPSToFile); + settings->Set("ShowInputDisplay", bShowInputDisplay); + settings->Set("OverlayStats", bOverlayStats); + settings->Set("OverlayProjStats", bOverlayProjStats); + settings->Set("DumpTextures", bDumpTextures); + settings->Set("HiresTextures", bHiresTextures); + settings->Set("DumpEFBTarget", bDumpEFBTarget); + settings->Set("DumpFrames", bDumpFrames); + settings->Set("FreeLook", bFreeLook); + settings->Set("UseFFV1", bUseFFV1); + settings->Set("AnaglyphStereo", bAnaglyphStereo); + settings->Set("AnaglyphStereoSeparation", iAnaglyphStereoSeparation); + settings->Set("AnaglyphFocalAngle", iAnaglyphFocalAngle); + settings->Set("EnablePixelLighting", bEnablePixelLighting); + settings->Set("FastDepthCalc", bFastDepthCalc); + settings->Set("ShowEFBCopyRegions", bShowEFBCopyRegions); + settings->Set("MSAA", iMultisampleMode); + settings->Set("EFBScale", iEFBScale); + settings->Set("TexFmtOverlayEnable", bTexFmtOverlayEnable); + settings->Set("TexFmtOverlayCenter", bTexFmtOverlayCenter); + settings->Set("Wireframe", bWireFrame); + settings->Set("DstAlphaPass", bDstAlphaPass); + settings->Set("DisableFog", bDisableFog); + settings->Set("OMPDecoder", bOMPDecoder); + settings->Set("EnableShaderDebugging", bEnableShaderDebugging); - iniFile.Set("Settings", "EnableShaderDebugging", bEnableShaderDebugging); + IniFile::Section* enhancements = iniFile.GetOrCreateSection("Enhancements"); + enhancements->Set("ForceFiltering", bForceFiltering); + enhancements->Set("MaxAnisotropy", iMaxAnisotropy); + enhancements->Set("PostProcessingShader", sPostProcessingShader); + enhancements->Set("Enable3dVision", b3DVision); - iniFile.Set("Enhancements", "ForceFiltering", bForceFiltering); - iniFile.Set("Enhancements", "MaxAnisotropy", iMaxAnisotropy); - iniFile.Set("Enhancements", "PostProcessingShader", sPostProcessingShader); - iniFile.Set("Enhancements", "Enable3dVision", b3DVision); - - iniFile.Set("Hacks", "EFBAccessEnable", bEFBAccessEnable); - iniFile.Set("Hacks", "EFBCopyEnable", bEFBCopyEnable); - iniFile.Set("Hacks", "EFBToTextureEnable", bCopyEFBToTexture); - iniFile.Set("Hacks", "EFBScaledCopy", bCopyEFBScaled); - iniFile.Set("Hacks", "EFBCopyCacheEnable", bEFBCopyCacheEnable); - iniFile.Set("Hacks", "EFBEmulateFormatChanges", bEFBEmulateFormatChanges); - - iniFile.Set("Hardware", "Adapter", iAdapter); + IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks"); + hacks->Set("EFBAccessEnable", bEFBAccessEnable); + hacks->Set("EFBCopyEnable", bEFBCopyEnable); + hacks->Set("EFBToTextureEnable", bCopyEFBToTexture); + hacks->Set("EFBScaledCopy", bCopyEFBScaled); + hacks->Set("EFBCopyCacheEnable", bEFBCopyCacheEnable); + hacks->Set("EFBEmulateFormatChanges", bEFBEmulateFormatChanges); iniFile.Save(ini_file); }