From 7c422e3651ff997904de8c200013d8e6073ae743 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 7 Feb 2017 15:13:00 +0000 Subject: [PATCH] Add Load/Save functions around Deserialize/Serialise in config * This lets us do some processing before saving and after loading regardless of the path the load/save takes. --- qrenderdoc/Code/CaptureContext.cpp | 4 +- qrenderdoc/Code/PersistantConfig.cpp | 44 +++++++++++++++++- qrenderdoc/Code/PersistantConfig.h | 6 ++- qrenderdoc/Code/qrenderdoc.cpp | 4 +- qrenderdoc/Windows/Dialogs/SettingsDialog.cpp | 46 +++++++++---------- qrenderdoc/Windows/MainWindow.cpp | 2 +- 6 files changed, 75 insertions(+), 31 deletions(-) diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index b3af25e7a..5eb86506e 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -175,7 +175,7 @@ void CaptureContext::LoadLogfileThreaded(const QString &logFile, const QString & m_LogLocal = local; - Config.Serialize(); + Config.Save(); m_LoadProgress = 0.0f; m_PostloadProgress = 0.0f; @@ -203,7 +203,7 @@ void CaptureContext::LoadLogfileThreaded(const QString &logFile, const QString & { PersistantConfig::AddRecentFile(Config.RecentLogFiles, origFilename, 10); - Config.Serialize(); + Config.Save(); } m_EventID = 0; diff --git a/qrenderdoc/Code/PersistantConfig.cpp b/qrenderdoc/Code/PersistantConfig.cpp index 4de6e5612..96f726b79 100644 --- a/qrenderdoc/Code/PersistantConfig.cpp +++ b/qrenderdoc/Code/PersistantConfig.cpp @@ -136,7 +136,7 @@ bool PersistantConfig::Deserialize(const QString &filename) return false; } -bool PersistantConfig::Serialize(QString filename) +bool PersistantConfig::Serialize(const QString &filename) { if(filename != "") m_Filename = filename; @@ -216,6 +216,48 @@ PersistantConfig::~PersistantConfig() delete h; } +bool PersistantConfig::Load(const QString &filename) +{ + bool ret = Deserialize(filename); + + // perform some sanitisation to make sure config is always in sensible state + for(const QString &key : ConfigSettings.keys()) + { + // redundantly set each setting so it is flushed to the core dll + SetConfigSetting(key, ConfigSettings[key]); + } + + // localhost should always be available as a remote host + bool foundLocalhost = false; + + for(RemoteHost host : RemoteHostList) + { + RemoteHosts.push_back(new RemoteHost(host)); + + if(host.Hostname == "localhost") + foundLocalhost = true; + } + + if(!foundLocalhost) + { + RemoteHost *host = new RemoteHost(); + host->Hostname = "localhost"; + RemoteHosts.insert(RemoteHosts.begin(), host); + } + + return ret; +} + +bool PersistantConfig::Save() +{ + // update serialize list + RemoteHostList.clear(); + for(RemoteHost *host : RemoteHosts) + RemoteHostList.push_back(*host); + + return Serialize(m_Filename); +} + void PersistantConfig::SetupFormatting() { Formatter::setParams(Formatter_MinFigures, Formatter_MaxFigures, Formatter_NegExp, diff --git a/qrenderdoc/Code/PersistantConfig.h b/qrenderdoc/Code/PersistantConfig.h index 9c803ebde..24c002332 100644 --- a/qrenderdoc/Code/PersistantConfig.h +++ b/qrenderdoc/Code/PersistantConfig.h @@ -134,8 +134,8 @@ public: public: PersistantConfig() {} ~PersistantConfig(); - bool Deserialize(QString filename); - bool Serialize(QString filename = ""); + bool Load(const QString &filename); + bool Save(); void SetupFormatting(); @@ -159,6 +159,8 @@ public: QString GetConfigSetting(QString name); private: + bool Deserialize(const QString &filename); + bool Serialize(const QString &filename); QVariantMap storeValues() const; void applyValues(const QVariantMap &values); diff --git a/qrenderdoc/Code/qrenderdoc.cpp b/qrenderdoc/Code/qrenderdoc.cpp index e19115023..c40a058cb 100644 --- a/qrenderdoc/Code/qrenderdoc.cpp +++ b/qrenderdoc/Code/qrenderdoc.cpp @@ -130,7 +130,7 @@ int main(int argc, char *argv[]) QString configFilename = CaptureContext::ConfigFile("UI.config"); - if(!config.Deserialize(configFilename)) + if(!config.Load(configFilename)) { RDDialog::critical( NULL, "Error loading config", @@ -151,7 +151,7 @@ int main(int argc, char *argv[]) QCoreApplication::sendPostedEvents(); } - config.Serialize(); + config.Save(); } delete[] argv_mod; diff --git a/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp b/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp index 433317bc1..4ff272878 100644 --- a/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp @@ -136,7 +136,7 @@ void SettingsDialog::formatter_valueChanged(int val) m_Ctx->Config.SetupFormatting(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_tempDirectory_textEdited(const QString &dir) @@ -146,7 +146,7 @@ void SettingsDialog::on_tempDirectory_textEdited(const QString &dir) else m_Ctx->Config.TemporaryCaptureDirectory = ""; - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_saveDirectory_textEdited(const QString &dir) @@ -154,7 +154,7 @@ void SettingsDialog::on_saveDirectory_textEdited(const QString &dir) if(QDir(dir).exists() || dir == "") m_Ctx->Config.DefaultCaptureSaveDirectory = dir; - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_browseSaveCaptureDirectory_clicked() @@ -165,14 +165,14 @@ void SettingsDialog::on_browseSaveCaptureDirectory_clicked() if(dir != "") m_Ctx->Config.DefaultCaptureSaveDirectory = dir; - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_AllowGlobalHook_toggled(bool checked) { m_Ctx->Config.AllowGlobalHook = ui->AllowGlobalHook->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); if(m_Ctx->hasCaptureDialog()) m_Ctx->captureDialog()->updateGlobalHook(); @@ -182,7 +182,7 @@ void SettingsDialog::on_CheckUpdate_AllowChecks_toggled(bool checked) { m_Ctx->Config.CheckUpdate_AllowChecks = ui->CheckUpdate_AllowChecks->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_Font_PreferMonospaced_toggled(bool checked) @@ -191,14 +191,14 @@ void SettingsDialog::on_Font_PreferMonospaced_toggled(bool checked) m_Ctx->Config.SetupFormatting(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_AlwaysReplayLocally_toggled(bool checked) { m_Ctx->Config.AlwaysReplayLocally = ui->AlwaysReplayLocally->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } // core @@ -221,14 +221,14 @@ void SettingsDialog::on_TextureViewer_PerTexSettings_toggled(bool checked) { m_Ctx->Config.TextureViewer_PerTexSettings = ui->TextureViewer_PerTexSettings->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_TextureViewer_ResetRange_toggled(bool checked) { m_Ctx->Config.TextureViewer_ResetRange = ui->TextureViewer_ResetRange->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } // shader viewer @@ -236,7 +236,7 @@ void SettingsDialog::on_ShaderViewer_FriendlyNaming_toggled(bool checked) { m_Ctx->Config.ShaderViewer_FriendlyNaming = ui->ShaderViewer_FriendlyNaming->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_ExternalDisassemblerEnabled_toggled(bool checked) @@ -244,7 +244,7 @@ void SettingsDialog::on_ExternalDisassemblerEnabled_toggled(bool checked) // TODO external disassembler // m_Ctx->Config.ExternalDisassemblerEnabled = ui->ExternalDisassemblerEnabled->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_browseExtDisasemble_clicked() @@ -256,14 +256,14 @@ void SettingsDialog::on_externalDisassemblePath_textEdited(const QString &disasm { // TODO external disassembler - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_externalDisassemblerArgs_textEdited(const QString &args) { // TODO external disassembler - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } // event browser @@ -275,35 +275,35 @@ void SettingsDialog::on_EventBrowser_TimeUnit_currentIndexChanged(int index) m_Ctx->Config.EventBrowser_TimeUnit = (PersistantConfig::TimeUnit)ui->EventBrowser_TimeUnit->currentIndex(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_EventBrowser_HideEmpty_toggled(bool checked) { m_Ctx->Config.EventBrowser_HideEmpty = ui->EventBrowser_HideEmpty->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_EventBrowser_HideAPICalls_toggled(bool checked) { m_Ctx->Config.EventBrowser_HideAPICalls = ui->EventBrowser_HideAPICalls->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_EventBrowser_ApplyColours_toggled(bool checked) { m_Ctx->Config.EventBrowser_ApplyColours = ui->EventBrowser_ApplyColours->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_EventBrowser_ColourEventRow_toggled(bool checked) { m_Ctx->Config.EventBrowser_ColourEventRow = ui->EventBrowser_ColourEventRow->isChecked(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } // android @@ -315,7 +315,7 @@ void SettingsDialog::on_browseTempCaptureDirectory_clicked() if(dir != "") m_Ctx->Config.TemporaryCaptureDirectory = dir; - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_browseAdbPath_clicked() @@ -327,14 +327,14 @@ void SettingsDialog::on_browseAdbPath_clicked() if(adb != "") m_Ctx->Config.Android_AdbExecutablePath = adb; - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_Android_MaxConnectTimeout_valueChanged(double timeout) { m_Ctx->Config.Android_MaxConnectTimeout = ui->Android_MaxConnectTimeout->value(); - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } void SettingsDialog::on_Android_AdbExecutablePath_textEdited(const QString &adb) @@ -342,5 +342,5 @@ void SettingsDialog::on_Android_AdbExecutablePath_textEdited(const QString &adb) if(QFileInfo::exists(adb)) m_Ctx->Config.Android_AdbExecutablePath = adb; - m_Ctx->Config.Serialize(); + m_Ctx->Config.Save(); } diff --git a/qrenderdoc/Windows/MainWindow.cpp b/qrenderdoc/Windows/MainWindow.cpp index ae4dbf31d..15c6dbb82 100644 --- a/qrenderdoc/Windows/MainWindow.cpp +++ b/qrenderdoc/Windows/MainWindow.cpp @@ -385,7 +385,7 @@ void MainWindow::LoadLogfile(const QString &filename, bool temporary, bool local { m_Core.Config.AlwaysReplayLocally = true; - m_Core.Config.Serialize(Core.ConfigFilename); + m_Ctx->Config.Save(); } } */