5 #if defined(HAVE_CONFIG_H)
16 #include <validation.h>
24 #include <QStringList>
31 QAbstractListModel(parent)
57 if (!settings.contains(
"fHideTrayIcon"))
58 settings.setValue(
"fHideTrayIcon",
false);
62 if (!settings.contains(
"fMinimizeToTray"))
63 settings.setValue(
"fMinimizeToTray",
false);
66 if (!settings.contains(
"fMinimizeOnClose"))
67 settings.setValue(
"fMinimizeOnClose",
false);
71 if (!settings.contains(
"nDisplayUnit"))
75 if (!settings.contains(
"strThirdPartyTxUrls"))
76 settings.setValue(
"strThirdPartyTxUrls",
"");
79 if (!settings.contains(
"fCoinControlFeatures"))
80 settings.setValue(
"fCoinControlFeatures",
false);
92 if (!settings.contains(
"bPrune"))
93 settings.setValue(
"bPrune",
false);
94 if (!settings.contains(
"nPruneSize"))
98 if (!settings.contains(
"nDatabaseCache"))
100 if (!
gArgs.
SoftSetArg(
"-dbcache", settings.value(
"nDatabaseCache").toString().toStdString()))
103 if (!settings.contains(
"nThreadsScriptVerif"))
105 if (!
gArgs.
SoftSetArg(
"-par", settings.value(
"nThreadsScriptVerif").toString().toStdString()))
108 if (!settings.contains(
"strDataDir"))
113 if (!settings.contains(
"bSpendZeroConfChange"))
114 settings.setValue(
"bSpendZeroConfChange",
true);
115 if (!
gArgs.
SoftSetBoolArg(
"-spendzeroconfchange", settings.value(
"bSpendZeroConfChange").toBool()))
120 if (!settings.contains(
"fUseUPnP"))
125 if (!settings.contains(
"fListen"))
130 if (!settings.contains(
"fUseProxy"))
131 settings.setValue(
"fUseProxy",
false);
132 if (!settings.contains(
"addrProxy"))
135 if ((settings.value(
"fUseProxy").toBool() && !
gArgs.
SoftSetArg(
"-proxy", settings.value(
"addrProxy").toString().toStdString())))
137 else if(!settings.value(
"fUseProxy").toBool() && !
gArgs.
GetArg(
"-proxy",
"").empty())
140 if (!settings.contains(
"fUseSeparateProxyTor"))
141 settings.setValue(
"fUseSeparateProxyTor",
false);
142 if (!settings.contains(
"addrSeparateProxyTor"))
145 if ((settings.value(
"fUseSeparateProxyTor").toBool() && !
gArgs.
SoftSetArg(
"-onion", settings.value(
"addrSeparateProxyTor").toString().toStdString())))
147 else if(!settings.value(
"fUseSeparateProxyTor").toBool() && !
gArgs.
GetArg(
"-onion",
"").empty())
151 if (!settings.contains(
"language"))
152 settings.setValue(
"language",
"");
153 if (!
gArgs.
SoftSetArg(
"-lang", settings.value(
"language").toString().toStdString()))
156 language = settings.value(
"language").toString();
164 for (
const QString& key : src.allKeys()) {
165 dst.setValue(key, src.value(key));
187 dataDir = settings.value(
"strDataDir", dataDir).toString();
193 settings.setValue(
"strDataDir", dataDir);
196 settings.setValue(
"fReset",
true);
218 if (!settings.contains(name)) {
222 QStringList ip_port = settings.value(name).toString().split(
":", QString::SkipEmptyParts);
223 if (ip_port.size() == 2) {
224 return {
true, ip_port.at(0), ip_port.at(1)};
232 settings.setValue(name, ip_port.
ip +
":" + ip_port.
port);
243 settings.setValue(
"bPrune", prune);
244 const int64_t prune_target_mib =
PruneGBtoMiB(settings.value(
"nPruneSize").toInt());
245 std::string prune_val = prune ?
ToString(prune_target_mib) :
"0";
257 const bool prune = prune_target_gb > 0;
260 settings.setValue(
"nPruneSize", prune_target_gb);
268 if(role == Qt::EditRole)
281 return settings.value(
"fUseUPnP");
290 return settings.value(
"fUseProxy",
false);
298 return settings.value(
"fUseSeparateProxyTor",
false);
306 return settings.value(
"bSpendZeroConfChange");
313 return settings.value(
"language");
317 return settings.value(
"bPrune");
319 return settings.value(
"nPruneSize");
321 return settings.value(
"nDatabaseCache");
323 return settings.value(
"nThreadsScriptVerif");
325 return settings.value(
"fListen");
336 bool successful =
true;
337 if(role == Qt::EditRole)
355 settings.setValue(
"fUseUPnP", value.toBool());
365 if (settings.value(
"fUseProxy") != value) {
366 settings.setValue(
"fUseProxy", value.toBool());
372 if (!ip_port.is_set || ip_port.ip != value.toString()) {
373 ip_port.ip = value.toString();
381 if (!ip_port.is_set || ip_port.port != value.toString()) {
382 ip_port.port = value.toString();
391 if (settings.value(
"fUseSeparateProxyTor") != value) {
392 settings.setValue(
"fUseSeparateProxyTor", value.toBool());
398 if (!ip_port.is_set || ip_port.ip != value.toString()) {
399 ip_port.ip = value.toString();
407 if (!ip_port.is_set || ip_port.port != value.toString()) {
408 ip_port.port = value.toString();
417 if (settings.value(
"bSpendZeroConfChange") != value) {
418 settings.setValue(
"bSpendZeroConfChange", value);
434 if (settings.value(
"language") != value) {
435 settings.setValue(
"language", value);
445 if (settings.value(
"bPrune") != value) {
446 settings.setValue(
"bPrune", value);
451 if (settings.value(
"nPruneSize") != value) {
452 settings.setValue(
"nPruneSize", value);
457 if (settings.value(
"nDatabaseCache") != value) {
458 settings.setValue(
"nDatabaseCache", value);
463 if (settings.value(
"nThreadsScriptVerif") != value) {
464 settings.setValue(
"nThreadsScriptVerif", value);
469 if (settings.value(
"fListen") != value) {
470 settings.setValue(
"fListen", value);
479 Q_EMIT dataChanged(index, index);
499 return settings.setValue(
"fRestartRequired", fRequired);
505 return settings.value(
"fRestartRequired",
false).toBool();
513 static const char strSettingsVersionKey[] =
"nSettingsVersion";
514 int settingsVersion = settings.contains(strSettingsVersionKey) ? settings.value(strSettingsVersionKey).toInt() : 0;
520 if (settingsVersion < 130000 && settings.contains(
"nDatabaseCache") && settings.value(
"nDatabaseCache").toLongLong() == 100)
528 if (settings.contains(
"addrProxy") && settings.value(
"addrProxy").toString().endsWith(
"%2")) {
534 if (settings.contains(
"addrSeparateProxyTor") && settings.value(
"addrSeparateProxyTor").toString().endsWith(
"%2")) {
static const int DEFAULT_SCRIPTCHECK_THREADS
-par default (number of script-checking threads, 0 = auto)
static constexpr int DEFAULT_PRUNE_TARGET_GB
static void BackupSettings(const fs::path &filename, const QSettings &src)
Back up a QSettings to an ini-formatted file.
void addOverriddenOption(const std::string &option)
void hideTrayIconChanged(bool)
bool SoftSetBoolArg(const std::string &strArg, bool fValue)
Set a boolean argument if it doesn't already have a value.
static void CopySettings(QSettings &dst, const QSettings &src)
Helper function to copy contents from one QSettings to another.
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
void SetPruneTargetGB(int prune_target_gb, bool force=false)
static const bool DEFAULT_LISTEN
-listen default
bool GetStartOnSystemStartup()
void coinControlFeaturesChanged(bool)
bool isRestartRequired() const
void ForceSetArg(const std::string &strArg, const std::string &strValue)
static int64_t PruneGBtoMiB(int gb)
Convert displayed prune target GB to configured MiB.
bool SoftSetArg(const std::string &strArg, const std::string &strValue)
Set an argument if it doesn't already have a value.
std::string ToString(const T &t)
Locale-independent version of std::to_string.
int rowCount(const QModelIndex &parent=QModelIndex()) const override
void setDisplayUnit(const QVariant &value)
Updates current unit in memory, settings and emits displayUnitChanged(newUnit) signal.
OptionsModel(QObject *parent=nullptr, bool resetSettings=false)
void SetPruneEnabled(bool prune, bool force=false)
const fs::path & GetDataDir(bool fNetSpecific)
const char * DEFAULT_GUI_PROXY_HOST
static const int64_t nDefaultDbCache
-dbcache default (MiB)
void Init(bool resetSettings=false)
void displayUnitChanged(int unit)
bool fCoinControlFeatures
static constexpr uint16_t DEFAULT_GUI_PROXY_PORT
interfaces::Node & node() const
virtual void mapPort(bool use_upnp)=0
Map port.
void setRestartRequired(bool fRequired)
QString strThirdPartyTxUrls
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
static const bool DEFAULT_UPNP
-upnp default
bool SetStartOnSystemStartup(bool fAutoStart)
QString getDefaultDataDirectory()
Determine default data directory for operating system.
QString boostPathToQString(const fs::path &path)
static ProxySetting GetProxySetting(QSettings &settings, const QString &name)
static const int CLIENT_VERSION
bitcoind-res.rc includes this file, but it cannot cope with real c++ code.
static const QString GetDefaultProxyAddress()
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
QString strOverriddenByCommandLine
static void SetProxySetting(QSettings &settings, const QString &name, const ProxySetting &ip_port)