Merge pull request #500 from lioncash/ini

Use only section-based ini reading.
This commit is contained in:
Pierre Bourdon 2014-06-22 17:21:45 +02:00
commit 5dff577339
24 changed files with 742 additions and 661 deletions

View File

@ -436,61 +436,6 @@ bool IniFile::Save(const std::string& filename)
return File::RenameSync(temp, filename); return File::RenameSync(temp, filename);
} }
bool IniFile::Get(const std::string& sectionName, const std::string& key, std::vector<std::string>* 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. // Unit test. TODO: Move to the real unit test framework.
/* /*
int main() int main()

View File

@ -95,34 +95,11 @@ public:
// Returns true if key exists in section // Returns true if key exists in section
bool Exists(const std::string& sectionName, const std::string& key) const; 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<std::string>& 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<std::string>* values);
bool Get(const std::string& sectionName, const std::string& key, std::string* value, const std::string& defaultValue = NULL_STRING);
template<typename T> bool GetIfExists(const std::string& sectionName, const std::string& key, T value) template<typename T> bool GetIfExists(const std::string& sectionName, const std::string& key, T value)
{ {
if (Exists(sectionName, key)) if (Exists(sectionName, key))
return Get(sectionName, key, value); return GetOrCreateSection(sectionName)->Get(key, value);
return false; return false;
} }

View File

@ -136,38 +136,43 @@ bool BootCore(const std::string& _rFilename)
config_cache.bSetFrameSkip = false; config_cache.bSetFrameSkip = false;
// General settings // General settings
game_ini.Get("Core", "CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread); IniFile::Section* core_section = game_ini.GetOrCreateSection("Core");
game_ini.Get("Core", "SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle); IniFile::Section* dsp_section = game_ini.GetOrCreateSection("DSP");
game_ini.Get("Core", "EnableFPRF", &StartUp.bEnableFPRF, StartUp.bEnableFPRF); IniFile::Section* controls_section = game_ini.GetOrCreateSection("Controls");
game_ini.Get("Core", "MMU", &StartUp.bMMU, StartUp.bMMU);
game_ini.Get("Core", "TLBHack", &StartUp.bTLBHack, StartUp.bTLBHack); core_section->Get("CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread);
game_ini.Get("Core", "DCBZ", &StartUp.bDCBZOFF, StartUp.bDCBZOFF); core_section->Get("SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle);
game_ini.Get("Core", "VBeam", &StartUp.bVBeamSpeedHack, StartUp.bVBeamSpeedHack); core_section->Get("EnableFPRF", &StartUp.bEnableFPRF, StartUp.bEnableFPRF);
game_ini.Get("Core", "SyncGPU", &StartUp.bSyncGPU, StartUp.bSyncGPU); core_section->Get("MMU", &StartUp.bMMU, StartUp.bMMU);
game_ini.Get("Core", "FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed); core_section->Get("TLBHack", &StartUp.bTLBHack, StartUp.bTLBHack);
game_ini.Get("Core", "BlockMerging", &StartUp.bMergeBlocks, StartUp.bMergeBlocks); core_section->Get("DCBZ", &StartUp.bDCBZOFF, StartUp.bDCBZOFF);
game_ini.Get("Core", "DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE); core_section->Get("VBeam", &StartUp.bVBeamSpeedHack, StartUp.bVBeamSpeedHack);
game_ini.Get("Core", "DSPThread", &StartUp.bDSPThread, StartUp.bDSPThread); core_section->Get("SyncGPU", &StartUp.bSyncGPU, StartUp.bSyncGPU);
game_ini.Get("Core", "GFXBackend", &StartUp.m_strVideoBackend, StartUp.m_strVideoBackend); core_section->Get("FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed);
game_ini.Get("Core", "CPUCore", &StartUp.iCPUCore, StartUp.iCPUCore); core_section->Get("BlockMerging", &StartUp.bMergeBlocks, StartUp.bMergeBlocks);
game_ini.Get("Core", "HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2); core_section->Get("DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE);
if (game_ini.Get("Core", "FrameLimit", &SConfig::GetInstance().m_Framelimit, SConfig::GetInstance().m_Framelimit)) 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; 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; config_cache.bSetFrameSkip = true;
Movie::SetFrameSkipping(SConfig::GetInstance().m_FrameSkip); 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; config_cache.bSetVolume = true;
game_ini.Get("DSP", "EnableJIT", &SConfig::GetInstance().m_DSPEnableJIT, SConfig::GetInstance().m_DSPEnableJIT); dsp_section->Get("EnableJIT", &SConfig::GetInstance().m_DSPEnableJIT, SConfig::GetInstance().m_DSPEnableJIT);
game_ini.Get("DSP", "Backend", &SConfig::GetInstance().sBackend, SConfig::GetInstance().sBackend); dsp_section->Get("Backend", &SConfig::GetInstance().sBackend, SConfig::GetInstance().sBackend);
VideoBackend::ActivateBackend(StartUp.m_strVideoBackend); VideoBackend::ActivateBackend(StartUp.m_strVideoBackend);
for (unsigned int i = 0; i < MAX_SI_CHANNELS; ++i) for (unsigned int i = 0; i < MAX_SI_CHANNELS; ++i)
{ {
int source; 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) if (source >= (int) SIDEVICE_NONE && source <= (int) SIDEVICE_AM_BASEBOARD)
{ {
SConfig::GetInstance().m_SIDevice[i] = (SIDevices) source; SConfig::GetInstance().m_SIDevice[i] = (SIDevices) source;
@ -184,7 +189,7 @@ bool BootCore(const std::string& _rFilename)
int source; int source;
for (unsigned int i = 0; i < MAX_WIIMOTES; ++i) 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) if (source != -1 && g_wiimote_sources[i] != (unsigned) source && source >= WIIMOTE_SRC_NONE && source <= WIIMOTE_SRC_HYBRID)
{ {
config_cache.bSetWiimoteSource[i] = true; config_cache.bSetWiimoteSource[i] = true;
@ -192,7 +197,7 @@ bool BootCore(const std::string& _rFilename)
WiimoteReal::ChangeWiimoteSource(i, source); 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)) 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; config_cache.bSetWiimoteSource[WIIMOTE_BALANCE_BOARD] = true;

View File

@ -142,154 +142,198 @@ void SConfig::SaveSettings()
IniFile ini; IniFile ini;
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); // load first to not kill unknown stuff ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); // load first to not kill unknown stuff
// General SaveGeneralSettings(ini);
ini.Set("General", "LastFilename", m_LastFilename); SaveInterfaceSettings(ini);
ini.Set("General", "ShowLag", m_ShowLag); SaveHotkeySettings(ini);
SaveDisplaySettings(ini);
// ISO folders SaveGameListSettings(ini);
// clear removed folders SaveCoreSettings(ini);
int oldPaths, SaveMovieSettings(ini);
numPaths = (int)m_ISOFolder.size(); SaveDSPSettings(ini);
ini.Get("General", "GCMPathes", &oldPaths, 0); SaveFifoPlayerSettings(ini);
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);
ini.Save(File::GetUserPath(F_DOLPHINCONFIG_IDX)); ini.Save(File::GetUserPath(F_DOLPHINCONFIG_IDX));
m_SYSCONF->Save(); 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() void SConfig::LoadSettings()
{ {
@ -297,181 +341,222 @@ void SConfig::LoadSettings()
IniFile ini; IniFile ini;
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX));
// General LoadGeneralSettings(ini);
{ LoadInterfaceSettings(ini);
ini.Get("General", "LastFilename", &m_LastFilename); LoadHotkeySettings(ini);
ini.Get("General", "ShowLag", &m_ShowLag, false); LoadDisplaySettings(ini);
#ifdef USE_GDBSTUB LoadGameListSettings(ini);
ini.Get("General", "GDBPort", &(m_LocalCoreStartupParameter.iGDBPort), -1); LoadCoreSettings(ini);
#endif 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(); m_ISOFolder.clear();
int numGCMPaths; int numGCMPaths;
if (ini.Get("General", "GCMPathes", &numGCMPaths, 0)) if (general->Get("GCMPathes", &numGCMPaths, 0))
{ {
for (int i = 0; i < numGCMPaths; i++) for (int i = 0; i < numGCMPaths; i++)
{ {
std::string tmpPath; std::string tmpPath;
ini.Get("General", StringFromFormat("GCMPath%i", i), &tmpPath, ""); general->Get(StringFromFormat("GCMPath%i", i), &tmpPath, "");
m_ISOFolder.push_back(std::move(tmpPath)); m_ISOFolder.push_back(std::move(tmpPath));
} }
} }
ini.Get("General", "RecursiveGCMPaths", &m_RecursiveISOFolder, false); general->Get("RecursiveGCMPaths", &m_RecursiveISOFolder, false);
ini.Get("General", "NANDRootPath", &m_NANDPath); general->Get("NANDRootPath", &m_NANDPath);
m_NANDPath = File::GetUserPath(D_WIIROOT_IDX, m_NANDPath); m_NANDPath = File::GetUserPath(D_WIIROOT_IDX, m_NANDPath);
DiscIO::cUIDsys::AccessInstance().UpdateLocation(); DiscIO::cUIDsys::AccessInstance().UpdateLocation();
DiscIO::CSharedContent::AccessInstance().UpdateLocation(); DiscIO::CSharedContent::AccessInstance().UpdateLocation();
ini.Get("General", "WirelessMac", &m_WirelessMac); general->Get("WirelessMac", &m_WirelessMac);
} }
{ void SConfig::LoadInterfaceSettings(IniFile& ini)
// Interface {
ini.Get("Interface", "ConfirmStop", &m_LocalCoreStartupParameter.bConfirmStop, true); IniFile::Section* interface = ini.GetOrCreateSection("Interface");
ini.Get("Interface", "UsePanicHandlers", &m_LocalCoreStartupParameter.bUsePanicHandlers, true);
ini.Get("Interface", "OnScreenDisplayMessages", &m_LocalCoreStartupParameter.bOnScreenDisplayMessages, true); interface->Get("ConfirmStop", &m_LocalCoreStartupParameter.bConfirmStop, true);
ini.Get("Interface", "HideCursor", &m_LocalCoreStartupParameter.bHideCursor, false); interface->Get("UsePanicHandlers", &m_LocalCoreStartupParameter.bUsePanicHandlers, true);
ini.Get("Interface", "AutoHideCursor", &m_LocalCoreStartupParameter.bAutoHideCursor, false); interface->Get("OnScreenDisplayMessages", &m_LocalCoreStartupParameter.bOnScreenDisplayMessages, true);
ini.Get("Interface", "MainWindowPosX", &m_LocalCoreStartupParameter.iPosX, 100); interface->Get("HideCursor", &m_LocalCoreStartupParameter.bHideCursor, false);
ini.Get("Interface", "MainWindowPosY", &m_LocalCoreStartupParameter.iPosY, 100); interface->Get("AutoHideCursor", &m_LocalCoreStartupParameter.bAutoHideCursor, false);
ini.Get("Interface", "MainWindowWidth", &m_LocalCoreStartupParameter.iWidth, 800); interface->Get("MainWindowPosX", &m_LocalCoreStartupParameter.iPosX, 100);
ini.Get("Interface", "MainWindowHeight", &m_LocalCoreStartupParameter.iHeight, 600); interface->Get("MainWindowPosY", &m_LocalCoreStartupParameter.iPosY, 100);
ini.Get("Interface", "Language", &m_InterfaceLanguage, 0); interface->Get("MainWindowWidth", &m_LocalCoreStartupParameter.iWidth, 800);
ini.Get("Interface", "ShowToolbar", &m_InterfaceToolbar, true); interface->Get("MainWindowHeight", &m_LocalCoreStartupParameter.iHeight, 600);
ini.Get("Interface", "ShowStatusbar", &m_InterfaceStatusbar, true); interface->Get("Language", &m_InterfaceLanguage, 0);
ini.Get("Interface", "ShowLogWindow", &m_InterfaceLogWindow, false); interface->Get("ShowToolbar", &m_InterfaceToolbar, true);
ini.Get("Interface", "ShowLogConfigWindow", &m_InterfaceLogConfigWindow, false); interface->Get("ShowStatusbar", &m_InterfaceStatusbar, true);
ini.Get("Interface", "ExtendedFPSInfo", &m_InterfaceExtendedFPSInfo, false); interface->Get("ShowLogWindow", &m_InterfaceLogWindow, false);
ini.Get("Interface", "ThemeName40", &m_LocalCoreStartupParameter.theme_name, "Clean"); 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");
// Hotkeys
for (int i = 0; i < NUM_HOTKEYS; i++) for (int i = 0; i < NUM_HOTKEYS; i++)
{ {
ini.Get("Hotkeys", g_HKData[i].IniText, hotkeys->Get(g_HKData[i].IniText,
&m_LocalCoreStartupParameter.iHotkey[i], g_HKData[i].DefaultKey); &m_LocalCoreStartupParameter.iHotkey[i], g_HKData[i].DefaultKey);
ini.Get("Hotkeys", std::string(g_HKData[i].IniText) + "Modifier", hotkeys->Get(std::string(g_HKData[i].IniText) + "Modifier",
&m_LocalCoreStartupParameter.iHotkeyModifier[i], g_HKData[i].DefaultModifier); &m_LocalCoreStartupParameter.iHotkeyModifier[i], g_HKData[i].DefaultModifier);
} }
}
// Display void SConfig::LoadDisplaySettings(IniFile& ini)
ini.Get("Display", "Fullscreen", &m_LocalCoreStartupParameter.bFullscreen, false); {
ini.Get("Display", "FullscreenResolution", &m_LocalCoreStartupParameter.strFullscreenResolution, "Auto"); IniFile::Section* display = ini.GetOrCreateSection("Display");
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 display->Get("Fullscreen", &m_LocalCoreStartupParameter.bFullscreen, false);
ini.Get("GameList", "ListDrives", &m_ListDrives, false); display->Get("FullscreenResolution", &m_LocalCoreStartupParameter.strFullscreenResolution, "Auto");
ini.Get("GameList", "ListWad", &m_ListWad, true); display->Get("RenderToMain", &m_LocalCoreStartupParameter.bRenderToMain, false);
ini.Get("GameList", "ListWii", &m_ListWii, true); display->Get("RenderWindowXPos", &m_LocalCoreStartupParameter.iRenderWindowXPos, -1);
ini.Get("GameList", "ListGC", &m_ListGC, true); display->Get("RenderWindowYPos", &m_LocalCoreStartupParameter.iRenderWindowYPos, -1);
ini.Get("GameList", "ListJap", &m_ListJap, true); display->Get("RenderWindowWidth", &m_LocalCoreStartupParameter.iRenderWindowWidth, 640);
ini.Get("GameList", "ListPal", &m_ListPal, true); display->Get("RenderWindowHeight", &m_LocalCoreStartupParameter.iRenderWindowHeight, 480);
ini.Get("GameList", "ListUsa", &m_ListUsa, true); 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);
}
ini.Get("GameList", "ListFrance", &m_ListFrance, true); void SConfig::LoadGameListSettings(IniFile& ini)
ini.Get("GameList", "ListItaly", &m_ListItaly, true); {
ini.Get("GameList", "ListKorea", &m_ListKorea, true); IniFile::Section* gamelist = ini.GetOrCreateSection("GameList");
ini.Get("GameList", "ListTaiwan", &m_ListTaiwan, true);
ini.Get("GameList", "ListUnknown", &m_ListUnknown, true); gamelist->Get("ListDrives", &m_ListDrives, false);
ini.Get("GameList", "ListSort", &m_ListSort, 3); gamelist->Get("ListWad", &m_ListWad, true);
ini.Get("GameList", "ListSortSecondary",&m_ListSort2, 0); 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 // Determines if compressed games display in blue
ini.Get("GameList", "ColorCompressed", &m_ColorCompressed, true); gamelist->Get("ColorCompressed", &m_ColorCompressed, true);
// Gamelist columns toggles // Gamelist columns toggles
ini.Get("GameList", "ColumnPlatform", &m_showSystemColumn, true); gamelist->Get("ColumnPlatform", &m_showSystemColumn, true);
ini.Get("GameList", "ColumnBanner", &m_showBannerColumn, true); gamelist->Get("ColumnBanner", &m_showBannerColumn, true);
ini.Get("GameList", "ColumnNotes", &m_showNotesColumn, true); gamelist->Get("ColumnNotes", &m_showNotesColumn, true);
ini.Get("GameList", "ColumnID", &m_showIDColumn, false); gamelist->Get("ColumnID", &m_showIDColumn, false);
ini.Get("GameList", "ColumnRegion", &m_showRegionColumn, true); gamelist->Get("ColumnRegion", &m_showRegionColumn, true);
ini.Get("GameList", "ColumnSize", &m_showSizeColumn, true); gamelist->Get("ColumnSize", &m_showSizeColumn, true);
ini.Get("GameList", "ColumnState", &m_showStateColumn, true); gamelist->Get("ColumnState", &m_showStateColumn, true);
}
// Core void SConfig::LoadCoreSettings(IniFile& ini)
ini.Get("Core", "HLE_BS2", &m_LocalCoreStartupParameter.bHLE_BS2, false); {
IniFile::Section* core = ini.GetOrCreateSection("Core");
core->Get("HLE_BS2", &m_LocalCoreStartupParameter.bHLE_BS2, false);
#ifdef _M_X86 #ifdef _M_X86
ini.Get("Core", "CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 1); core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 1);
#elif _M_ARM_32 #elif _M_ARM_32
ini.Get("Core", "CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 3); core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 3);
#else #else
ini.Get("Core", "CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 0); core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 0);
#endif #endif
ini.Get("Core", "Fastmem", &m_LocalCoreStartupParameter.bFastmem, true); core->Get("Fastmem", &m_LocalCoreStartupParameter.bFastmem, true);
ini.Get("Core", "DSPThread", &m_LocalCoreStartupParameter.bDSPThread, false); core->Get("DSPThread", &m_LocalCoreStartupParameter.bDSPThread, false);
ini.Get("Core", "DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true); core->Get("DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true);
ini.Get("Core", "CPUThread", &m_LocalCoreStartupParameter.bCPUThread, true); core->Get("CPUThread", &m_LocalCoreStartupParameter.bCPUThread, true);
ini.Get("Core", "SkipIdle", &m_LocalCoreStartupParameter.bSkipIdle, true); core->Get("SkipIdle", &m_LocalCoreStartupParameter.bSkipIdle, true);
ini.Get("Core", "DefaultGCM", &m_LocalCoreStartupParameter.m_strDefaultGCM); core->Get("DefaultGCM", &m_LocalCoreStartupParameter.m_strDefaultGCM);
ini.Get("Core", "DVDRoot", &m_LocalCoreStartupParameter.m_strDVDRoot); core->Get("DVDRoot", &m_LocalCoreStartupParameter.m_strDVDRoot);
ini.Get("Core", "Apploader", &m_LocalCoreStartupParameter.m_strApploader); core->Get("Apploader", &m_LocalCoreStartupParameter.m_strApploader);
ini.Get("Core", "EnableCheats", &m_LocalCoreStartupParameter.bEnableCheats, false); core->Get("EnableCheats", &m_LocalCoreStartupParameter.bEnableCheats, false);
ini.Get("Core", "SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0); core->Get("SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0);
ini.Get("Core", "DPL2Decoder", &m_LocalCoreStartupParameter.bDPL2Decoder, false); core->Get("DPL2Decoder", &m_LocalCoreStartupParameter.bDPL2Decoder, false);
ini.Get("Core", "Latency", &m_LocalCoreStartupParameter.iLatency, 2); core->Get("Latency", &m_LocalCoreStartupParameter.iLatency, 2);
ini.Get("Core", "MemcardAPath", &m_strMemoryCardA); core->Get("MemcardAPath", &m_strMemoryCardA);
ini.Get("Core", "MemcardBPath", &m_strMemoryCardB); core->Get("MemcardBPath", &m_strMemoryCardB);
ini.Get("Core", "SlotA", (int*)&m_EXIDevice[0], EXIDEVICE_MEMORYCARD); core->Get("SlotA", (int*)&m_EXIDevice[0], EXIDEVICE_MEMORYCARD);
ini.Get("Core", "SlotB", (int*)&m_EXIDevice[1], EXIDEVICE_NONE); core->Get("SlotB", (int*)&m_EXIDevice[1], EXIDEVICE_NONE);
ini.Get("Core", "SerialPort1", (int*)&m_EXIDevice[2], EXIDEVICE_NONE); core->Get("SerialPort1", (int*)&m_EXIDevice[2], EXIDEVICE_NONE);
ini.Get("Core", "BBA_MAC", &m_bba_mac); core->Get("BBA_MAC", &m_bba_mac);
ini.Get("Core", "TimeProfiling", &m_LocalCoreStartupParameter.bJITILTimeProfiling, false); core->Get("TimeProfiling", &m_LocalCoreStartupParameter.bJITILTimeProfiling, false);
ini.Get("Core", "OutputIR", &m_LocalCoreStartupParameter.bJITILOutputIR, false); core->Get("OutputIR", &m_LocalCoreStartupParameter.bJITILOutputIR, false);
for (int i = 0; i < MAX_SI_CHANNELS; ++i) 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); core->Get(StringFromFormat("SIDevice%i", i), (u32*)&m_SIDevice[i], (i == 0) ? SIDEVICE_GC_CONTROLLER : SIDEVICE_NONE);
} }
ini.Get("Core", "WiiSDCard", &m_WiiSDCard, false); core->Get("WiiSDCard", &m_WiiSDCard, false);
ini.Get("Core", "WiiKeyboard", &m_WiiKeyboard, false); core->Get("WiiKeyboard", &m_WiiKeyboard, false);
ini.Get("Core", "WiimoteContinuousScanning", &m_WiimoteContinuousScanning, false); core->Get("WiimoteContinuousScanning", &m_WiimoteContinuousScanning, false);
ini.Get("Core", "WiimoteEnableSpeaker", &m_WiimoteEnableSpeaker, true); core->Get("WiimoteEnableSpeaker", &m_WiimoteEnableSpeaker, true);
ini.Get("Core", "RunCompareServer", &m_LocalCoreStartupParameter.bRunCompareServer, false); core->Get("RunCompareServer", &m_LocalCoreStartupParameter.bRunCompareServer, false);
ini.Get("Core", "RunCompareClient", &m_LocalCoreStartupParameter.bRunCompareClient, false); core->Get("RunCompareClient", &m_LocalCoreStartupParameter.bRunCompareClient, false);
ini.Get("Core", "MMU", &m_LocalCoreStartupParameter.bMMU, false); core->Get("MMU", &m_LocalCoreStartupParameter.bMMU, false);
ini.Get("Core", "TLBHack", &m_LocalCoreStartupParameter.bTLBHack, false); core->Get("TLBHack", &m_LocalCoreStartupParameter.bTLBHack, false);
ini.Get("Core", "BBDumpPort", &m_LocalCoreStartupParameter.iBBDumpPort, -1); core->Get("BBDumpPort", &m_LocalCoreStartupParameter.iBBDumpPort, -1);
ini.Get("Core", "VBeam", &m_LocalCoreStartupParameter.bVBeamSpeedHack, false); core->Get("VBeam", &m_LocalCoreStartupParameter.bVBeamSpeedHack, false);
ini.Get("Core", "SyncGPU", &m_LocalCoreStartupParameter.bSyncGPU, false); core->Get("SyncGPU", &m_LocalCoreStartupParameter.bSyncGPU, false);
ini.Get("Core", "FastDiscSpeed", &m_LocalCoreStartupParameter.bFastDiscSpeed, false); core->Get("FastDiscSpeed", &m_LocalCoreStartupParameter.bFastDiscSpeed, false);
ini.Get("Core", "DCBZ", &m_LocalCoreStartupParameter.bDCBZOFF, false); core->Get("DCBZ", &m_LocalCoreStartupParameter.bDCBZOFF, false);
ini.Get("Core", "FrameLimit", &m_Framelimit, 1); // auto frame limit by default core->Get("FrameLimit", &m_Framelimit, 1); // auto frame limit by default
ini.Get("Core", "FrameSkip", &m_FrameSkip, 0); core->Get("FrameSkip", &m_FrameSkip, 0);
core->Get("GFXBackend", &m_LocalCoreStartupParameter.m_strVideoBackend, "");
// GFX Backend }
ini.Get("Core", "GFXBackend", &m_LocalCoreStartupParameter.m_strVideoBackend, "");
void SConfig::LoadMovieSettings(IniFile& ini)
// Movie {
ini.Get("Movie", "PauseMovie", &m_PauseMovie, false); IniFile::Section* movie = ini.GetOrCreateSection("Movie");
ini.Get("Movie", "Author", &m_strMovieAuthor, "");
movie->Get("PauseMovie", &m_PauseMovie, false);
// DSP movie->Get("Author", &m_strMovieAuthor, "");
ini.Get("DSP", "EnableJIT", &m_DSPEnableJIT, true); }
ini.Get("DSP", "DumpAudio", &m_DumpAudio, false);
#if defined __linux__ && HAVE_ALSA void SConfig::LoadDSPSettings(IniFile& ini)
ini.Get("DSP", "Backend", &sBackend, BACKEND_ALSA); {
#elif defined __APPLE__ IniFile::Section* dsp = ini.GetOrCreateSection("DSP");
ini.Get("DSP", "Backend", &sBackend, BACKEND_COREAUDIO);
#elif defined _WIN32 dsp->Get("EnableJIT", &m_DSPEnableJIT, true);
ini.Get("DSP", "Backend", &sBackend, BACKEND_XAUDIO2); dsp->Get("DumpAudio", &m_DumpAudio, false);
#elif defined ANDROID #if defined __linux__ && HAVE_ALSA
ini.Get("DSP", "Backend", &sBackend, BACKEND_OPENSLES); dsp->Get("Backend", &sBackend, BACKEND_ALSA);
#else #elif defined __APPLE__
ini.Get("DSP", "Backend", &sBackend, BACKEND_NULLSOUND); dsp->Get("Backend", &sBackend, BACKEND_COREAUDIO);
#endif #elif defined _WIN32
ini.Get("DSP", "Volume", &m_Volume, 100); dsp->Get("Backend", &sBackend, BACKEND_XAUDIO2);
#elif defined ANDROID
ini.Get("FifoPlayer", "LoopReplay", &m_LocalCoreStartupParameter.bLoopFifoReplay, true); dsp->Get("Backend", &sBackend, BACKEND_OPENSLES);
} #else
dsp->Get("Backend", &sBackend, BACKEND_NULLSOUND);
m_SYSCONF = new SysConf(); #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);
} }

View File

@ -114,5 +114,25 @@ private:
SConfig(); SConfig();
~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; static SConfig* m_Instance;
}; };

View File

@ -208,9 +208,8 @@ bool Init()
if (g_aspect_wide) if (g_aspect_wide)
{ {
IniFile gameIni = _CoreParameter.LoadGameIni(); IniFile gameIni = _CoreParameter.LoadGameIni();
gameIni.Get("Wii", "Widescreen", &g_aspect_wide, gameIni.GetOrCreateSection("Wii")->Get("Widescreen", &g_aspect_wide,
!!SConfig::GetInstance().m_SYSCONF-> !!SConfig::GetInstance().m_SYSCONF->GetData<u8>("IPL.AR"));
GetData<u8>("IPL.AR"));
} }
// g_pWindowHandle is first the m_Panel handle, // g_pWindowHandle is first the m_Panel handle,

View File

@ -80,7 +80,7 @@ CEXIMemoryCard::CEXIMemoryCard(const int index)
// Use a 16Mb (251 block) memory card for these games // Use a 16Mb (251 block) memory card for these games
bool useMC251; bool useMC251;
IniFile gameIni = Core::g_CoreStartupParameter.LoadGameIni(); IniFile gameIni = Core::g_CoreStartupParameter.LoadGameIni();
gameIni.Get("Core", "MemoryCard251", &useMC251, false); gameIni.GetOrCreateSection("Core")->Get("MemoryCard251", &useMC251, false);
nintendo_card_id = MemCard2043Mb; nintendo_card_id = MemCard2043Mb;
if (useMC251) if (useMC251)
{ {

View File

@ -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"); INFO_LOG(WII_IPC_STM, "CWII_IPC_HLE_Device_usb_kbd: Open");
IniFile ini; IniFile ini;
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); 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) for (bool& pressed : m_OldKeyBuffer)
{ {

View File

@ -132,7 +132,7 @@ static void LoadSpeedhacks(const std::string& section, IniFile& ini)
for (const std::string& key : keys) for (const std::string& key : keys)
{ {
std::string value; std::string value;
ini.Get(section, key, &value, "BOGUS"); ini.GetOrCreateSection(section)->Get(key, &value, "BOGUS");
if (value != "BOGUS") if (value != "BOGUS")
{ {
u32 address; u32 address;

View File

@ -110,7 +110,7 @@ namespace ButtonManager
bool hasbind = false; bool hasbind = false;
char modifier = '+'; char modifier = '+';
std::string value; std::string value;
ini.Get("Android", config.str(), &value, "None"); ini.GetOrCreateSection("Android")->Get(config.str(), &value, "None");
if (value == "None") if (value == "None")
continue; continue;
if (std::string::npos != value.find("Axis")) if (std::string::npos != value.find("Axis"))

View File

@ -62,14 +62,15 @@ void CCodeWindow::Load()
// The font to override DebuggerFont with // The font to override DebuggerFont with
std::string fontDesc; 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()) if (!fontDesc.empty())
DebuggerFont.SetNativeFontInfoUserDesc(StrToWxStr(fontDesc)); DebuggerFont.SetNativeFontInfoUserDesc(StrToWxStr(fontDesc));
// Boot to pause or not
ini.Get("General", "AutomaticStart", &bAutomaticStart, false);
ini.Get("General", "BootToPause", &bBootToPause, true);
const char* SettingName[] = { const char* SettingName[] = {
"Log", "Log",
"LogConfig", "LogConfig",
@ -85,19 +86,19 @@ void CCodeWindow::Load()
// Decide what windows to show // Decide what windows to show
for (int i = 0; i <= IDM_VIDEOWINDOW - IDM_LOGWINDOW; i++) 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 // Get notebook affiliation
std::string _Section = "P - " + std::string section = "P - " +
((Parent->ActivePerspective < Parent->Perspectives.size()) ((Parent->ActivePerspective < Parent->Perspectives.size())
? Parent->Perspectives[Parent->ActivePerspective].Name : "Perspective 1"); ? Parent->Perspectives[Parent->ActivePerspective].Name : "Perspective 1");
for (int i = 0; i <= IDM_CODEWINDOW - IDM_LOGWINDOW; i++) 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 // Get floating setting
for (int i = 0; i <= IDM_CODEWINDOW - IDM_LOGWINDOW; i++) 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() void CCodeWindow::Save()
@ -105,11 +106,10 @@ void CCodeWindow::Save()
IniFile ini; IniFile ini;
ini.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); ini.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX));
ini.Set("General", "DebuggerFont", WxStrToStr(DebuggerFont.GetNativeFontInfoUserDesc())); IniFile::Section* general = ini.GetOrCreateSection("General");
general->Set("DebuggerFont", WxStrToStr(DebuggerFont.GetNativeFontInfoUserDesc()));
// Boot to pause or not general->Set("AutomaticStart", GetMenuBar()->IsChecked(IDM_AUTOMATICSTART));
ini.Set("General", "AutomaticStart", GetMenuBar()->IsChecked(IDM_AUTOMATICSTART)); general->Set("BootToPause", GetMenuBar()->IsChecked(IDM_BOOTTOPAUSE));
ini.Set("General", "BootToPause", GetMenuBar()->IsChecked(IDM_BOOTTOPAUSE));
const char* SettingName[] = { const char* SettingName[] = {
"Log", "Log",
@ -126,16 +126,16 @@ void CCodeWindow::Save()
// Save windows settings // Save windows settings
for (int i = IDM_LOGWINDOW; i <= IDM_VIDEOWINDOW; i++) 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 // 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++) 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 // Save floating setting
for (int i = IDM_LOGWINDOW_PARENT; i <= IDM_CODEWINDOW_PARENT; i++) 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)); ini.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX));
} }

View File

@ -88,10 +88,11 @@ void GFXDebuggerPanel::SaveSettings() const
GetSize().GetWidth() < 1000 && GetSize().GetWidth() < 1000 &&
GetSize().GetHeight() < 1000) GetSize().GetHeight() < 1000)
{ {
file.Set("VideoWindow", "x", GetPosition().x); IniFile::Section* video_window = file.GetOrCreateSection("VideoWindow");
file.Set("VideoWindow", "y", GetPosition().y); video_window->Set("x", GetPosition().x);
file.Set("VideoWindow", "w", GetSize().GetWidth()); video_window->Set("y", GetPosition().y);
file.Set("VideoWindow", "h", GetSize().GetHeight()); video_window->Set("w", GetSize().GetWidth());
video_window->Set("h", GetSize().GetHeight());
} }
file.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); file.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX));
@ -102,11 +103,17 @@ void GFXDebuggerPanel::LoadSettings()
IniFile file; IniFile file;
file.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); file.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX));
int x = 100, y = 100, w = 100, h = 100; int x = 100;
file.Get("VideoWindow", "x", &x, GetPosition().x); int y = 100;
file.Get("VideoWindow", "y", &y, GetPosition().y); int w = 100;
file.Get("VideoWindow", "w", &w, GetSize().GetWidth()); int h = 100;
file.Get("VideoWindow", "h", &h, GetSize().GetHeight());
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); SetSize(x, y, w, h);
} }

View File

@ -127,25 +127,29 @@ CMemoryWindow::CMemoryWindow(wxWindow* parent, wxWindowID id,
sizerBig->Fit(this); 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 // Prevent these bad values that can happen after a crash or hanging
if (GetPosition().x != -32000 && GetPosition().y != -32000) if (GetPosition().x != -32000 && GetPosition().y != -32000)
{ {
_IniFile.Set("MemoryWindow", "x", GetPosition().x); IniFile::Section* mem_window = ini.GetOrCreateSection("MemoryWindow");
_IniFile.Set("MemoryWindow", "y", GetPosition().y); mem_window->Set("x", GetPosition().x);
_IniFile.Set("MemoryWindow", "w", GetSize().GetWidth()); mem_window->Set("y", GetPosition().y);
_IniFile.Set("MemoryWindow", "h", GetSize().GetHeight()); 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; int x, y, w, h;
_IniFile.Get("MemoryWindow", "x", &x, GetPosition().x);
_IniFile.Get("MemoryWindow", "y", &y, GetPosition().y); IniFile::Section* mem_window = ini.GetOrCreateSection("MemoryWindow");
_IniFile.Get("MemoryWindow", "w", &w, GetSize().GetWidth()); mem_window->Get("x", &x, GetPosition().x);
_IniFile.Get("MemoryWindow", "h", &h, GetSize().GetHeight()); 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); SetSize(x, y, w, h);
} }

View File

@ -835,8 +835,10 @@ void CFrame::LoadIniPerspectives()
IniFile ini; IniFile ini;
ini.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); 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); SplitString(_Perspectives, ',', VPerspectives);
for (auto& VPerspective : VPerspectives) for (auto& VPerspective : VPerspectives)
@ -853,13 +855,15 @@ void CFrame::LoadIniPerspectives()
} }
_Section = StringFromFormat("P - %s", Tmp.Name.c_str()); _Section = StringFromFormat("P - %s", Tmp.Name.c_str());
ini.Get(_Section, "Perspective", &_Perspective,
IniFile::Section* perspec_section = ini.GetOrCreateSection(_Section);
perspec_section->Get("Perspective", &_Perspective,
"layout2|" "layout2|"
"name=Pane 0;caption=Pane 0;state=768;dir=5;prop=100000;|" "name=Pane 0;caption=Pane 0;state=768;dir=5;prop=100000;|"
"name=Pane 1;caption=Pane 1;state=31458108;dir=4;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|"); "dock_size(5,0,0)=22|dock_size(4,0,0)=333|");
ini.Get(_Section, "Width", &_Widths, "70,25"); perspec_section->Get("Width", &_Widths, "70,25");
ini.Get(_Section, "Height", &_Heights, "80,80"); perspec_section->Get("Height", &_Heights, "80,80");
Tmp.Perspective = StrToWxStr(_Perspective); Tmp.Perspective = StrToWxStr(_Perspective);
@ -926,14 +930,17 @@ void CFrame::SaveIniPerspectives()
STmp += Perspective.Name + ","; STmp += Perspective.Name + ",";
} }
STmp = STmp.substr(0, STmp.length()-1); 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 // Save the perspectives
for (auto& Perspective : Perspectives) for (auto& Perspective : Perspectives)
{ {
std::string _Section = "P - " + Perspective.Name; 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 = ""; std::string SWidth = "", SHeight = "";
for (u32 j = 0; j < Perspective.Width.size(); j++) for (u32 j = 0; j < Perspective.Width.size(); j++)
@ -945,8 +952,8 @@ void CFrame::SaveIniPerspectives()
SWidth = SWidth.substr(0, SWidth.length()-1); SWidth = SWidth.substr(0, SWidth.length()-1);
SHeight = SHeight.substr(0, SHeight.length()-1); SHeight = SHeight.substr(0, SHeight.length()-1);
ini.Set(_Section, "Width", SWidth); perspec_section->Set("Width", SWidth);
ini.Set(_Section, "Height", SHeight); perspec_section->Set("Height", SHeight);
} }
ini.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX)); ini.Save(File::GetUserPath(F_DEBUGGERCONFIG_IDX));

View File

@ -127,8 +127,10 @@ GameListItem::GameListItem(const std::string& _rFileName)
IniFile ini; IniFile ini;
ini.Load(File::GetSysDirectory() + GAMESETTINGS_DIR DIR_SEP + m_UniqueID + ".ini"); ini.Load(File::GetSysDirectory() + GAMESETTINGS_DIR DIR_SEP + m_UniqueID + ".ini");
ini.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + m_UniqueID + ".ini", true); 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()) if (!m_pImage.empty())

View File

@ -1019,9 +1019,9 @@ void CISOProperties::SetCheckboxValueFromGameini(const char* section, const char
{ {
// Prefer local gameini value over default gameini value. // Prefer local gameini value over default gameini value.
bool value; bool value;
if (GameIniLocal.Get(section, key, &value)) if (GameIniLocal.GetOrCreateSection(section)->Get(key, &value))
checkbox->Set3StateValue((wxCheckBoxState)value); checkbox->Set3StateValue((wxCheckBoxState)value);
else if (GameIniDefault.Get(section, key, &value)) else if (GameIniDefault.GetOrCreateSection(section)->Get(key, &value))
checkbox->Set3StateValue((wxCheckBoxState)value); checkbox->Set3StateValue((wxCheckBoxState)value);
else else
checkbox->Set3StateValue(wxCHK_UNDETERMINED); checkbox->Set3StateValue(wxCHK_UNDETERMINED);
@ -1042,34 +1042,39 @@ void CISOProperties::LoadGameConfig()
SetCheckboxValueFromGameini("Wii", "Widescreen", EnableWideScreen); SetCheckboxValueFromGameini("Wii", "Widescreen", EnableWideScreen);
SetCheckboxValueFromGameini("Video", "UseBBox", UseBBox); 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 // First set values from default gameini, then apply values from local gameini
int iTemp; int iTemp;
GameIniDefault.Get("Video", "ProjectionHack", &iTemp); default_video->Get("ProjectionHack", &iTemp);
PHackEnable->SetValue(!!iTemp); PHackEnable->SetValue(!!iTemp);
if (GameIniLocal.Get("Video", "ProjectionHack", &iTemp)) if (local_video->Get("ProjectionHack", &iTemp))
PHackEnable->SetValue(!!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)) if (GameIniLocal.GetIfExists("Video", "PH_SZNear", &iTemp))
PHack_Data.PHackSZNear = !!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)) if (GameIniLocal.GetIfExists("Video", "PH_SZFar", &iTemp))
PHack_Data.PHackSZFar = !!iTemp; PHack_Data.PHackSZFar = !!iTemp;
std::string sTemp; 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)) if (GameIniLocal.GetIfExists("Video", "PH_ZNear", &sTemp))
PHack_Data.PHZNear = 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)) if (GameIniLocal.GetIfExists("Video", "PH_ZFar", &sTemp))
PHack_Data.PHZFar = 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); EmuState->SetSelection(iTemp);
if (GameIniLocal.GetIfExists("EmuState", "EmulationStateId", &iTemp)) if (GameIniLocal.GetIfExists("EmuState", "EmulationStateId", &iTemp))
EmuState->SetSelection(iTemp); EmuState->SetSelection(iTemp);
GameIniDefault.Get("EmuState", "EmulationIssues", &sTemp); default_emustate->Get("EmulationIssues", &sTemp);
if (!sTemp.empty()) if (!sTemp.empty())
EmuIssues->SetValue(StrToWxStr(sTemp)); EmuIssues->SetValue(StrToWxStr(sTemp));
if (GameIniLocal.GetIfExists("EmuState", "EmulationIssues", &sTemp)) if (GameIniLocal.GetIfExists("EmuState", "EmulationIssues", &sTemp))
@ -1092,13 +1097,13 @@ void CISOProperties::SaveGameIniValueFrom3StateCheckbox(const char* section, con
if (checkbox->Get3StateValue() == wxCHK_UNDETERMINED) if (checkbox->Get3StateValue() == wxCHK_UNDETERMINED)
GameIniLocal.DeleteKey(section, key); GameIniLocal.DeleteKey(section, key);
else if (!GameIniDefault.Exists(section, key)) else if (!GameIniDefault.Exists(section, key))
GameIniLocal.Set(section, key, checkbox_val); GameIniLocal.GetOrCreateSection(section)->Set(key, checkbox_val);
else else
{ {
bool default_value; bool default_value;
GameIniDefault.Get(section, key, &default_value); GameIniDefault.GetOrCreateSection(section)->Get(key, &default_value);
if (default_value != checkbox_val) if (default_value != checkbox_val)
GameIniLocal.Set(section, key, checkbox_val); GameIniLocal.GetOrCreateSection(section)->Set(key, checkbox_val);
else else
GameIniLocal.DeleteKey(section, key); GameIniLocal.DeleteKey(section, key);
} }
@ -1122,13 +1127,13 @@ bool CISOProperties::SaveGameConfig()
#define SAVE_IF_NOT_DEFAULT(section, key, val, def) do { \ #define SAVE_IF_NOT_DEFAULT(section, key, val, def) do { \
if (GameIniDefault.Exists((section), (key))) { \ if (GameIniDefault.Exists((section), (key))) { \
std::remove_reference<decltype((val))>::type tmp__; \ std::remove_reference<decltype((val))>::type tmp__; \
GameIniDefault.Get((section), (key), &tmp__); \ GameIniDefault.GetOrCreateSection((section))->Get((key), &tmp__); \
if ((val) != tmp__) \ if ((val) != tmp__) \
GameIniLocal.Set((section), (key), (val)); \ GameIniLocal.GetOrCreateSection((section))->Set((key), (val)); \
else \ else \
GameIniLocal.DeleteKey((section), (key)); \ GameIniLocal.DeleteKey((section), (key)); \
} else if ((val) != (def)) \ } else if ((val) != (def)) \
GameIniLocal.Set((section), (key), (val)); \ GameIniLocal.GetOrCreateSection((section))->Set((key), (val)); \
else \ else \
GameIniLocal.DeleteKey((section), (key)); \ GameIniLocal.DeleteKey((section), (key)); \
} while (0) } while (0)

View File

@ -117,9 +117,11 @@ void LogConfigWindow::LoadSettings()
IniFile ini; IniFile ini;
ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX)); ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX));
IniFile::Section* options = ini.GetOrCreateSection("Options");
// Retrieve the verbosity value from the config ini file. // Retrieve the verbosity value from the config ini file.
int verbosity; int verbosity;
ini.Get("Options", "Verbosity", &verbosity, 0); options->Get("Verbosity", &verbosity, 0);
// Ensure the verbosity level is valid. // Ensure the verbosity level is valid.
if (verbosity < 1) if (verbosity < 1)
@ -131,16 +133,16 @@ void LogConfigWindow::LoadSettings()
m_verbosity->SetSelection(verbosity - 1); m_verbosity->SetSelection(verbosity - 1);
// Get the logger output settings from the config ini file. // 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); m_writeFileCB->SetValue(m_writeFile);
ini.Get("Options", "WriteToConsole", &m_writeConsole, true); options->Get("WriteToConsole", &m_writeConsole, true);
m_writeConsoleCB->SetValue(m_writeConsole); m_writeConsoleCB->SetValue(m_writeConsole);
ini.Get("Options", "WriteToWindow", &m_writeWindow, true); options->Get("WriteToWindow", &m_writeWindow, true);
m_writeWindowCB->SetValue(m_writeWindow); m_writeWindowCB->SetValue(m_writeWindow);
#ifdef _MSC_VER #ifdef _MSC_VER
if (IsDebuggerPresent()) if (IsDebuggerPresent())
{ {
ini.Get("Options", "WriteToDebugger", &m_writeDebugger, true); options->Get("WriteToDebugger", &m_writeDebugger, true);
m_writeDebuggerCB->SetValue(m_writeDebugger); m_writeDebuggerCB->SetValue(m_writeDebugger);
} }
else else
@ -154,7 +156,7 @@ void LogConfigWindow::LoadSettings()
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
{ {
bool log_enabled; 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) if (log_enabled)
enableAll = false; enableAll = false;
@ -168,22 +170,20 @@ void LogConfigWindow::SaveSettings()
IniFile ini; IniFile ini;
ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX)); ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX));
// Save the verbosity level. IniFile::Section* options = ini.GetOrCreateSection("Options");
ini.Set("Options", "Verbosity", m_verbosity->GetSelection() + 1); options->Set("Verbosity", m_verbosity->GetSelection() + 1);
options->Set("WriteToFile", m_writeFile);
// Save the enabled/disabled states of the logger outputs to the config ini. options->Set("WriteToConsole", m_writeConsole);
ini.Set("Options", "WriteToFile", m_writeFile); options->Set("WriteToWindow", m_writeWindow);
ini.Set("Options", "WriteToConsole", m_writeConsole);
ini.Set("Options", "WriteToWindow", m_writeWindow);
#ifdef _MSC_VER #ifdef _MSC_VER
if (IsDebuggerPresent()) if (IsDebuggerPresent())
ini.Set("Options", "WriteToDebugger", m_writeDebugger); options->Set("WriteToDebugger", m_writeDebugger);
#endif #endif
// Save all enabled/disabled states of the log types to the config ini. // Save all enabled/disabled states of the log types to the config ini.
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) 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)); ini.Save(File::GetUserPath(F_LOGGERCONFIG_IDX));

View File

@ -69,13 +69,15 @@ void CLogWindow::CreateGUIControls()
IniFile ini; IniFile ini;
ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX)); ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX));
ini.Get("LogWindow", "x", &x, Parent->GetSize().GetX() / 2); IniFile::Section* options = ini.GetOrCreateSection("Options");
ini.Get("LogWindow", "y", &y, Parent->GetSize().GetY()); IniFile::Section* log_window = ini.GetOrCreateSection("LogWindow");
ini.Get("LogWindow", "pos", &winpos, wxAUI_DOCK_RIGHT); 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 // Set up log listeners
int verbosity; int verbosity;
ini.Get("Options", "Verbosity", &verbosity, 0); options->Get("Verbosity", &verbosity, 0);
// Ensure the verbosity level is valid // Ensure the verbosity level is valid
if (verbosity < 1) if (verbosity < 1)
@ -84,12 +86,12 @@ void CLogWindow::CreateGUIControls()
verbosity = MAX_LOGLEVEL; verbosity = MAX_LOGLEVEL;
// Get the logger output settings from the config ini file. // Get the logger output settings from the config ini file.
ini.Get("Options", "WriteToFile", &m_writeFile, false); options->Get("WriteToFile", &m_writeFile, false);
ini.Get("Options", "WriteToWindow", &m_writeWindow, true); options->Get("WriteToWindow", &m_writeWindow, true);
#ifdef _MSC_VER #ifdef _MSC_VER
if (IsDebuggerPresent()) if (IsDebuggerPresent())
{ {
ini.Get("Options", "WriteToDebugger", &m_writeDebugger, true); options->Get("WriteToDebugger", &m_writeDebugger, true);
} }
else else
#endif #endif
@ -97,10 +99,11 @@ void CLogWindow::CreateGUIControls()
m_writeDebugger = false; m_writeDebugger = false;
} }
IniFile::Section* logs = ini.GetOrCreateSection("Logs");
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
{ {
bool enable; 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) if (m_writeWindow && enable)
m_LogManager->AddListener((LogTypes::LOG_TYPE)i, this); m_LogManager->AddListener((LogTypes::LOG_TYPE)i, this);
@ -133,12 +136,12 @@ void CLogWindow::CreateGUIControls()
LogFont.push_back(DebuggerFont); LogFont.push_back(DebuggerFont);
int font; int font;
ini.Get("Options", "Font", &font, 0); options->Get("Font", &font, 0);
m_FontChoice->SetSelection(font); m_FontChoice->SetSelection(font);
// Word wrap // Word wrap
bool wrap_lines; 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 = new wxCheckBox(this, IDM_WRAPLINE, _("Word Wrap"));
m_WrapLine->SetValue(wrap_lines); m_WrapLine->SetValue(wrap_lines);
@ -190,12 +193,16 @@ void CLogWindow::SaveSettings()
if (!Parent->g_pCodeWindow) if (!Parent->g_pCodeWindow)
{ {
ini.Set("LogWindow", "x", x); IniFile::Section* log_window = ini.GetOrCreateSection("LogWindow");
ini.Set("LogWindow", "y", y); log_window->Set("x", x);
ini.Set("LogWindow", "pos", winpos); 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)); ini.Save(File::GetUserPath(F_LOGGERCONFIG_IDX));
} }

View File

@ -413,7 +413,7 @@ void DolphinApp::InitLanguageSupport()
IniFile ini; IniFile ini;
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); 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 // Load language if possible, fall back to system default otherwise
if (wxLocale::IsAvailable(language)) if (wxLocale::IsAvailable(language))

View File

@ -298,7 +298,7 @@ JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetConfig
ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string(file)); ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string(file));
std::string value; std::string value;
ini.Get(section, key, &value, defaultValue); ini.GetOrCreateSection(section)->Get(key, &value, defaultValue);
return env->NewStringUTF(value.c_str()); return env->NewStringUTF(value.c_str());
} }
@ -313,7 +313,7 @@ jstring jValue)
ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string(file)); 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)); ini.Save(File::GetUserPath(D_CONFIG_IDX) + std::string(file));
} }

View File

@ -98,7 +98,7 @@ void CPHackSettings::LoadPHackData()
if (!PHPresetsIni.Exists(sIndex, "Title")) if (!PHPresetsIni.Exists(sIndex, "Title"))
break; break;
PHPresetsIni.Get(sIndex, "Title", &sTemp); PHPresetsIni.GetOrCreateSection(sIndex)->Get("Title", &sTemp);
if (sTemp.empty()) if (sTemp.empty())
sTemp = WxStrToStr(_("(UNKNOWN)")); sTemp = WxStrToStr(_("(UNKNOWN)"));
@ -129,13 +129,14 @@ void CPHackSettings::SetRefresh(wxCommandEvent& event)
index -= 2; index -= 2;
sIndex = std::to_string(index); 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); PHackSZNear->Set3StateValue((wxCheckBoxState)bTemp);
PHPresetsIni.Get(sIndex, "PH_SZFar", &bTemp); proj_hack->Get("PH_SZFar", &bTemp);
PHackSZFar->Set3StateValue((wxCheckBoxState)bTemp); PHackSZFar->Set3StateValue((wxCheckBoxState)bTemp);
PHPresetsIni.Get(sIndex, "PH_ZNear", &sTemp); proj_hack->Get("PH_ZNear", &sTemp);
PHackZNear->SetValue(StrToWxStr(sTemp)); PHackZNear->SetValue(StrToWxStr(sTemp));
PHPresetsIni.Get(sIndex, "PH_ZFar", &sTemp); proj_hack->Get("PH_ZFar", &sTemp);
PHackZFar->SetValue(StrToWxStr(sTemp)); PHackZFar->SetValue(StrToWxStr(sTemp));
} }
} }

View File

@ -36,16 +36,21 @@ bool InputPlugin::LoadConfig(bool isGC)
type = "Wiimote"; type = "Wiimote";
path = "Profiles/Wiimote/"; path = "Profiles/Wiimote/";
} }
game_ini.Load(File::GetSysDirectory() + GAMESETTINGS_DIR DIR_SEP + SConfig::GetInstance().m_LocalCoreStartupParameter.GetUniqueID() + ".ini"); 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); 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++) 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")) if (File::Exists(File::GetUserPath(D_CONFIG_IDX) + path + profile[i] + ".ini"))
{
useProfile[i] = true; useProfile[i] = true;
}
else else
{ {
// TODO: Having a PanicAlert for this is dumb. // TODO: Having a PanicAlert for this is dumb.

View File

@ -38,24 +38,29 @@ void SWVideoConfig::Load(const char* ini_file)
IniFile iniFile; IniFile iniFile;
iniFile.Load(ini_file); iniFile.Load(ini_file);
iniFile.Get("Hardware", "Fullscreen", &bFullscreen, 0); // Hardware IniFile::Section* hardware = iniFile.GetOrCreateSection("Hardware");
iniFile.Get("Hardware", "RenderToMainframe", &renderToMainframe, false); hardware->Get("Fullscreen", &bFullscreen, 0); // Hardware
hardware->Get("RenderToMainframe", &renderToMainframe, false);
iniFile.Get("Rendering", "HwRasterizer", &bHwRasterizer, false); IniFile::Section* rendering = iniFile.GetOrCreateSection("Rendering");
iniFile.Get("Rendering", "BypassXFB", &bBypassXFB, false); rendering->Get("HwRasterizer", &bHwRasterizer, false);
iniFile.Get("Rendering", "ZComploc", &bZComploc, true); rendering->Get("BypassXFB", &bBypassXFB, false);
iniFile.Get("Rendering", "ZFreeze", &bZFreeze, true); 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::Section* utility = iniFile.GetOrCreateSection("Utility");
iniFile.Get("Utility", "DumpObjects", &bDumpObjects, false); utility->Get("DumpTexture", &bDumpTextures, false);
iniFile.Get("Utility", "DumpFrames", &bDumpFrames, false); utility->Get("DumpObjects", &bDumpObjects, false);
iniFile.Get("Utility", "DumpTevStages", &bDumpTevStages, false); utility->Get("DumpFrames", &bDumpFrames, false);
iniFile.Get("Utility", "DumpTevTexFetches", &bDumpTevTextureFetches, false); utility->Get("DumpTevStages", &bDumpTevStages, false);
utility->Get("DumpTevTexFetches", &bDumpTevTextureFetches, false);
iniFile.Get("Misc", "DrawStart", &drawStart, 0); IniFile::Section* misc = iniFile.GetOrCreateSection("Misc");
iniFile.Get("Misc", "DrawEnd", &drawEnd, 100000); misc->Get("DrawStart", &drawStart, 0);
misc->Get("DrawEnd", &drawEnd, 100000);
} }
void SWVideoConfig::Save(const char* ini_file) void SWVideoConfig::Save(const char* ini_file)
@ -63,24 +68,29 @@ void SWVideoConfig::Save(const char* ini_file)
IniFile iniFile; IniFile iniFile;
iniFile.Load(ini_file); iniFile.Load(ini_file);
iniFile.Set("Hardware", "Fullscreen", bFullscreen); IniFile::Section* hardware = iniFile.GetOrCreateSection("Hardware");
iniFile.Set("Hardware", "RenderToMainframe", renderToMainframe); hardware->Set("Fullscreen", bFullscreen);
hardware->Set("RenderToMainframe", renderToMainframe);
iniFile.Set("Rendering", "HwRasterizer", bHwRasterizer); IniFile::Section* rendering = iniFile.GetOrCreateSection("Rendering");
iniFile.Set("Rendering", "BypassXFB", bBypassXFB); rendering->Set("HwRasterizer", bHwRasterizer);
iniFile.Set("Rendering", "ZComploc", bZComploc); rendering->Set("BypassXFB", bBypassXFB);
iniFile.Set("Rendering", "ZFreeze", bZFreeze); 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::Section* utility = iniFile.GetOrCreateSection("Utility");
iniFile.Set("Utility", "DumpObjects", bDumpObjects); utility->Set("DumpTexture", bDumpTextures);
iniFile.Set("Utility", "DumpFrames", bDumpFrames); utility->Set("DumpObjects", bDumpObjects);
iniFile.Set("Utility", "DumpTevStages", bDumpTevStages); utility->Set("DumpFrames", bDumpFrames);
iniFile.Set("Utility", "DumpTevTexFetches", bDumpTevTextureFetches); utility->Set("DumpTevStages", bDumpTevStages);
utility->Set("DumpTevTexFetches", bDumpTevTextureFetches);
iniFile.Set("Misc", "DrawStart", drawStart); IniFile::Section* misc = iniFile.GetOrCreateSection("Misc");
iniFile.Set("Misc", "DrawEnd", drawEnd); misc->Set("DrawStart", drawStart);
misc->Set("DrawEnd", drawEnd);
iniFile.Save(ini_file); iniFile.Save(ini_file);
} }

View File

@ -44,63 +44,63 @@ void VideoConfig::Load(const std::string& ini_file)
IniFile iniFile; IniFile iniFile;
iniFile.Load(ini_file); iniFile.Load(ini_file);
iniFile.Get("Hardware", "VSync", &bVSync, 0); // Hardware IniFile::Section* hardware = iniFile.GetOrCreateSection("Hardware");
iniFile.Get("Settings", "wideScreenHack", &bWidescreenHack, false); hardware->Get("VSync", &bVSync, 0);
iniFile.Get("Settings", "AspectRatio", &iAspectRatio, (int)ASPECT_AUTO); hardware->Get("Adapter", &iAdapter, 0);
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.Get("Settings", "MSAA", &iMultisampleMode, 0); IniFile::Section* settings = iniFile.GetOrCreateSection("Settings");
iniFile.Get("Settings", "EFBScale", &iEFBScale, (int) SCALE_1X); // native 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::Section* hacks = iniFile.GetOrCreateSection("Hacks");
iniFile.Get("Settings", "TexFmtOverlayCenter", &bTexFmtOverlayCenter, 0); hacks->Get("EFBAccessEnable", &bEFBAccessEnable, true);
iniFile.Get("Settings", "WireFrame", &bWireFrame, 0); hacks->Get("EFBCopyEnable", &bEFBCopyEnable, true);
iniFile.Get("Settings", "DisableFog", &bDisableFog, 0); hacks->Get("EFBToTextureEnable", &bCopyEFBToTexture, true);
hacks->Get("EFBScaledCopy", &bCopyEFBScaled, true);
iniFile.Get("Settings", "OMPDecoder", &bOMPDecoder, false); hacks->Get("EFBCopyCacheEnable", &bEFBCopyCacheEnable, false);
hacks->Get("EFBEmulateFormatChanges", &bEFBEmulateFormatChanges, 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);
// Load common settings // Load common settings
iniFile.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); iniFile.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX));
IniFile::Section* interface = iniFile.GetOrCreateSection("Interface");
bool bTmp; bool bTmp;
iniFile.Get("Interface", "UsePanicHandlers", &bTmp, true); interface->Get("UsePanicHandlers", &bTmp, true);
SetEnableAlert(bTmp); SetEnableAlert(bTmp);
// Shader Debugging causes a huge slowdown and it's easy to forget about it // 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 iniFile;
iniFile.Load(ini_file); 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::Section* hardware = iniFile.GetOrCreateSection("Hardware");
iniFile.Set("Settings", "MSAA", iMultisampleMode); hardware->Set("VSync", bVSync);
iniFile.Set("Settings", "EFBScale", iEFBScale); hardware->Set("Adapter", iAdapter);
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.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::Section* hacks = iniFile.GetOrCreateSection("Hacks");
iniFile.Set("Enhancements", "MaxAnisotropy", iMaxAnisotropy); hacks->Set("EFBAccessEnable", bEFBAccessEnable);
iniFile.Set("Enhancements", "PostProcessingShader", sPostProcessingShader); hacks->Set("EFBCopyEnable", bEFBCopyEnable);
iniFile.Set("Enhancements", "Enable3dVision", b3DVision); hacks->Set("EFBToTextureEnable", bCopyEFBToTexture);
hacks->Set("EFBScaledCopy", bCopyEFBScaled);
iniFile.Set("Hacks", "EFBAccessEnable", bEFBAccessEnable); hacks->Set("EFBCopyCacheEnable", bEFBCopyCacheEnable);
iniFile.Set("Hacks", "EFBCopyEnable", bEFBCopyEnable); hacks->Set("EFBEmulateFormatChanges", bEFBEmulateFormatChanges);
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.Save(ini_file); iniFile.Save(ini_file);
} }