Files
renderdoc/qrenderdoc/Code/PersistantConfig.h
T
baldurk 637d4089e2 Rename colour to color in public API code
* Following the principle of least surprise, color tends to be more
  commonly used in APIs and graphics code even outside the USA.
2017-04-18 14:57:37 +01:00

201 lines
10 KiB
C++

/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016-2017 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#pragma once
#include <QDateTime>
#include <QList>
#include <QMap>
#include <QString>
#include <QVariant>
#include "RemoteHost.h"
typedef QMap<QString, QString> QStringMap;
struct SPIRVDisassembler
{
SPIRVDisassembler() {}
SPIRVDisassembler(const QVariant &var)
{
QVariantMap map = var.toMap();
if(map.contains("name"))
name = map["name"].toString();
if(map.contains("executable"))
executable = map["executable"].toString();
if(map.contains("args"))
args = map["args"].toString();
}
operator QVariant() const
{
QVariantMap map;
map["name"] = name;
map["executable"] = executable;
map["args"] = args;
return map;
}
QString name;
QString executable;
QString args;
};
#define CONFIG_SETTING_VAL(access, variantType, type, name, defaultValue) \
access: \
type name = defaultValue;
#define CONFIG_SETTING(access, variantType, type, name) \
access: \
type name;
#define CONFIG_SETTINGS() \
\
CONFIG_SETTING_VAL(public, QString, QString, LastLogPath, "") \
\
CONFIG_SETTING(public, QVariantList, QList<QString>, RecentLogFiles) \
\
CONFIG_SETTING_VAL(public, QString, QString, LastCapturePath, "") \
\
CONFIG_SETTING_VAL(public, QString, QString, LastCaptureExe, "") \
\
CONFIG_SETTING(public, QVariantList, QList<QString>, RecentCaptureSettings) \
\
CONFIG_SETTING_VAL(public, int, int, CallstackLevelSkip, 0) \
\
CONFIG_SETTING_VAL(public, QString, QString, TemporaryCaptureDirectory, "") \
\
CONFIG_SETTING_VAL(public, QString, QString, DefaultCaptureSaveDirectory, "") \
\
CONFIG_SETTING_VAL(public, bool, bool, TextureViewer_ResetRange, false) \
\
CONFIG_SETTING_VAL(public, bool, bool, TextureViewer_PerTexSettings, true) \
\
CONFIG_SETTING_VAL(public, bool, bool, ShaderViewer_FriendlyNaming, true) \
\
CONFIG_SETTING_VAL(public, bool, bool, AlwaysReplayLocally, false) \
\
CONFIG_SETTING_VAL(public, int, int, LocalProxyAPI, -1) \
\
CONFIG_SETTING_VAL(public, int, TimeUnit, EventBrowser_TimeUnit, TimeUnit::Microseconds) \
\
CONFIG_SETTING_VAL(public, bool, bool, EventBrowser_HideEmpty, false) \
\
CONFIG_SETTING_VAL(public, bool, bool, EventBrowser_HideAPICalls, false) \
\
CONFIG_SETTING_VAL(public, bool, bool, EventBrowser_ApplyColors, true) \
\
CONFIG_SETTING_VAL(public, bool, bool, EventBrowser_ColorEventRow, true) \
\
CONFIG_SETTING_VAL(public, int, int, Formatter_MinFigures, 2) \
\
CONFIG_SETTING_VAL(public, int, int, Formatter_MaxFigures, 5) \
\
CONFIG_SETTING_VAL(public, int, int, Formatter_NegExp, 5) \
\
CONFIG_SETTING_VAL(public, int, int, Formatter_PosExp, 7) \
\
CONFIG_SETTING_VAL(public, bool, bool, Font_PreferMonospaced, false) \
\
CONFIG_SETTING_VAL(public, QString, QString, Android_AdbExecutablePath, "") \
\
CONFIG_SETTING_VAL(public, int, int, Android_MaxConnectTimeout, 30) \
\
CONFIG_SETTING_VAL(public, bool, bool, CheckUpdate_AllowChecks, true) \
\
CONFIG_SETTING_VAL(public, bool, bool, CheckUpdate_UpdateAvailable, false) \
\
CONFIG_SETTING_VAL(public, QString, QString, CheckUpdate_UpdateResponse, "") \
\
CONFIG_SETTING_VAL(public, QDateTime, QDateTime, CheckUpdate_LastUpdate, \
QDateTime(QDate(2012, 06, 27), QTime(0, 0, 0))) \
\
CONFIG_SETTING_VAL(public, QDateTime, QDateTime, DegradedLog_LastUpdate, \
QDateTime(QDate(2015, 01, 01), QTime(0, 0, 0))) \
\
CONFIG_SETTING_VAL(public, bool, bool, Tips_HasSeenFirst, false) \
\
CONFIG_SETTING_VAL(public, bool, bool, AllowGlobalHook, false) \
\
CONFIG_SETTING(public, QVariantList, QList<SPIRVDisassembler>, SPIRVDisassemblers) \
\
CONFIG_SETTING(private, QVariantMap, QStringMap, ConfigSettings) \
\
CONFIG_SETTING(private, QVariantList, QList<RemoteHost>, RemoteHostList)
class PersistantConfig
{
public:
enum class TimeUnit : int
{
Seconds = 0,
Milliseconds,
Microseconds,
Nanoseconds,
Count,
};
// Runtime list of dynamically allocated hosts.
// Saved to/from private RemoteHostList in CONFIG_SETTINGS()
QList<RemoteHost *> RemoteHosts;
void AddAndroidHosts();
CONFIG_SETTINGS()
public:
PersistantConfig() {}
~PersistantConfig();
bool Load(const QString &filename);
bool Save();
void SetupFormatting();
static QString UnitPrefix(TimeUnit t)
{
if(t == TimeUnit::Seconds)
return "s";
else if(t == TimeUnit::Milliseconds)
return "ms";
else if(t == TimeUnit::Microseconds)
return "µs";
else if(t == TimeUnit::Nanoseconds)
return "ns";
return "s";
}
static void AddRecentFile(QList<QString> &recentList, const QString &file, int maxItems);
void SetConfigSetting(const QString &name, const QString &value);
QString GetConfigSetting(const QString &name);
private:
bool Deserialize(const QString &filename);
bool Serialize(const QString &filename);
QVariantMap storeValues() const;
void applyValues(const QVariantMap &values);
QString m_Filename;
};