5 #if defined(HAVE_CONFIG_H) 22 #include <validation.h> 26 #include <QLatin1Char> 28 #include <QStringList> 58 default:
throw std::logic_error(
strprintf(
"GUI option %i has no corresponding node setting.", option));
86 assert(!prune_enabled || prune_size_gb >= 1);
110 return std::max(1, prune_size.toInt());
119 static std::string
ProxyString(
bool is_set, QString
ip, QString port);
147 if (!settings.contains(
"fHideTrayIcon")) {
148 settings.setValue(
"fHideTrayIcon",
false);
153 if (!settings.contains(
"fMinimizeToTray"))
154 settings.setValue(
"fMinimizeToTray",
false);
157 if (!settings.contains(
"fMinimizeOnClose"))
158 settings.setValue(
"fMinimizeOnClose",
false);
162 if (!settings.contains(
"DisplayBitcoinUnit")) {
163 settings.setValue(
"DisplayBitcoinUnit", QVariant::fromValue(
BitcoinUnit::BTC));
165 QVariant unit = settings.value(
"DisplayBitcoinUnit");
173 if (!settings.contains(
"strThirdPartyTxUrls"))
174 settings.setValue(
"strThirdPartyTxUrls",
"");
177 if (!settings.contains(
"fCoinControlFeatures"))
178 settings.setValue(
"fCoinControlFeatures",
false);
181 if (!settings.contains(
"enable_psbt_controls")) {
182 settings.setValue(
"enable_psbt_controls",
false);
194 }
catch (
const std::exception& e) {
197 error.original =
strprintf(
"Could not read setting \"%s\", %s.", setting, e.what());
198 error.translated = tr(
"Could not read setting \"%1\", %2.").arg(QString::fromStdString(setting), e.what()).toStdString();
206 if (!settings.contains(
"strDataDir"))
211 if (!settings.contains(
"SubFeeFromAmount")) {
212 settings.setValue(
"SubFeeFromAmount",
false);
218 if (!settings.contains(
"UseEmbeddedMonospacedFont")) {
219 settings.setValue(
"UseEmbeddedMonospacedFont",
"true");
224 m_mask_values = settings.value(
"mask_values",
false).toBool();
234 for (
const QString& key : src.allKeys()) {
235 dst.setValue(key, src.value(key));
260 dataDir = settings.value(
"strDataDir", dataDir).toString();
266 settings.setValue(
"strDataDir", dataDir);
269 settings.setValue(
"fReset",
true);
285 if (proxy.isEmpty()) {
290 if (ip_port.size() == 2) {
291 return {
true, ip_port.at(0), ip_port.at(1)};
304 return is_set ? QString(
ip +
":" + port).toStdString() :
"";
341 if(role == Qt::EditRole)
351 bool successful =
true;
352 if(role == Qt::EditRole)
357 Q_EMIT dataChanged(index, index);
398 }
else if (suffix.empty()) {
409 }
else if (suffix.empty()) {
435 return settings.value(
"enable_psbt_controls");
440 suffix.empty() ?
getOption(option,
"-prev") :
459 auto changed = [&] {
return value.isValid() && value !=
getOption(option, suffix); };
462 bool successful =
true;
480 update(value.toBool());
486 update(value.toBool());
498 if (suffix.empty() && !value.toBool())
setOption(option,
true,
"-prev");
528 if (suffix.empty() && !value.toBool())
setOption(option,
true,
"-prev");
558 update(value.toBool());
564 update(value.toString().toStdString());
585 update(value.toString().toStdString());
605 if (suffix.empty() && !value.toBool())
setOption(option,
true,
"-prev");
623 update(static_cast<int64_t>(value.toLongLong()));
629 update(static_cast<int64_t>(value.toLongLong()));
636 update(value.toBool());
663 return settings.setValue(
"fRestartRequired", fRequired);
669 return settings.value(
"fRestartRequired",
false).toBool();
682 static const char strSettingsVersionKey[] =
"nSettingsVersion";
683 int settingsVersion = settings.contains(strSettingsVersionKey) ? settings.value(strSettingsVersionKey).toInt() : 0;
689 if (settingsVersion < 130000 && settings.contains(
"nDatabaseCache") && settings.value(
"nDatabaseCache").toLongLong() == 100)
697 if (settings.contains(
"addrProxy") && settings.value(
"addrProxy").toString().endsWith(
"%2")) {
703 if (settings.contains(
"addrSeparateProxyTor") && settings.value(
"addrSeparateProxyTor").toString().endsWith(
"%2")) {
708 auto migrate_setting = [&](
OptionID option,
const QString& qt_name) {
709 if (!settings.contains(qt_name))
return;
710 QVariant value = settings.value(qt_name);
724 settings.remove(qt_name);
735 migrate_setting(
Listen,
"fListen");
736 migrate_setting(
Server,
"server");
737 migrate_setting(
PruneSize,
"nPruneSize");
738 migrate_setting(
Prune,
"bPrune");
739 migrate_setting(
ProxyIP,
"addrProxy");
740 migrate_setting(
ProxyUse,
"fUseProxy");
741 migrate_setting(
ProxyIPTor,
"addrSeparateProxyTor");
742 migrate_setting(
ProxyUseTor,
"fUseSeparateProxyTor");
743 migrate_setting(
Language,
"language");
virtual common::SettingsValue getPersistentSetting(const std::string &name)=0
Return setting value from <datadir>/settings.json or bitcoin.conf.
static std::string ProxyString(bool is_set, QString ip, QString port)
static const int DEFAULT_SCRIPTCHECK_THREADS
-par default (number of script-checking threads, 0 = auto)
static void UpdateRwSetting(interfaces::Node &node, OptionsModel::OptionID option, const std::string &suffix, const common::SettingsValue &value)
Call node.updateRwSetting() with Bitcoin 22.x workaround.
static const char * SettingName(OptionsModel::OptionID option)
Map GUI option ID to node setting name.
virtual void resetSettings()=0
Clear all settings in <datadir>/settings.json and store a backup of previous settings in <datadir>/se...
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)
bool hasSigner()
Whether -signer was set or not.
static common::SettingsValue PruneSetting(bool prune_enabled, int prune_size_gb)
Convert enabled/size values to bitcoin -prune setting.
static int ParsePruneSizeGB(const QVariant &prune_size)
Parse pruning size value provided by user in GUI or loaded from QSettings (windows registry key or qt...
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
static const bool DEFAULT_LISTEN
-listen default
void SetPruneTargetGB(int prune_target_gb)
BitcoinUnit m_display_bitcoin_unit
bool GetStartOnSystemStartup()
void coinControlFeaturesChanged(bool)
void useEmbeddedMonospacedFontChanged(bool)
static int64_t PruneGBtoMiB(int gb)
Convert displayed prune target GB to configured MiB.
const std::string & getValStr() const
static int PruneSizeGB(const common::SettingsValue &prune_setting)
Get pruning size value to show in GUI from bitcoin -prune setting.
bool Init(bilingual_str &error)
bool isRestartRequired() const
static const bool DEFAULT_SPEND_ZEROCONF_CHANGE
Default for -spendzeroconfchange.
interfaces::Node & node() const
static constexpr bool DEFAULT_UPNP
bool setOption(OptionID option, const QVariant &value, const std::string &suffix="")
int rowCount(const QModelIndex &parent=QModelIndex()) const override
void displayUnitChanged(BitcoinUnit unit)
std::optional< std::string > SettingToString(const common::SettingsValue &value)
QVariant getOption(OptionID option, const std::string &suffix="") const
std::optional< bool > SettingToBool(const common::SettingsValue &value)
static bool PruneEnabled(const common::SettingsValue &prune_setting)
Get pruning enabled value to show in GUI from bitcoin -prune setting.
const char * DEFAULT_GUI_PROXY_HOST
static const int64_t nDefaultDbCache
-dbcache default (MiB)
static CService ip(uint32_t i)
static int PruneMiBtoGB(int64_t mib)
Convert configured prune target MiB to displayed GB.
bool fCoinControlFeatures
bool m_enable_psbt_controls
static constexpr uint16_t DEFAULT_GUI_PROXY_PORT
virtual void initParameterInteraction()=0
Init parameter interaction.
QStringList SplitSkipEmptyParts(const QString &string, const SeparatorType &separator)
Splits the string into substrings wherever separator occurs, and returns the list of those strings...
static constexpr bool DEFAULT_NATPMP
bool m_use_embedded_monospaced_font
void setRestartRequired(bool fRequired)
bool error(const char *fmt, const Args &... args)
QString strThirdPartyTxUrls
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
static ProxySetting ParseProxyString(const std::string &proxy)
bool m_sub_fee_from_amount
bool SetStartOnSystemStartup(bool fAutoStart)
std::optional< int64_t > SettingToInt(const common::SettingsValue &value)
OptionsModel(interfaces::Node &node, QObject *parent=nullptr)
virtual void forceSetting(const std::string &name, const common::SettingsValue &value)=0
Force a setting value to be applied, overriding any other configuration source, but not being persist...
static QString GetDefaultProxyAddress()
QString getDefaultDataDirectory()
Determine default data directory for operating system.
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
static const int CLIENT_VERSION
bitcoind-res.rc includes this file, but it cannot cope with real c++ code.
virtual void mapPort(bool use_upnp, bool use_natpmp)=0
Map port.
Top-level interface for a bitcoin node (bitcoind process).
void setDisplayUnit(const QVariant &new_unit)
Updates current unit in memory, settings and emits displayUnitChanged(new_unit) signal.
QString PathToQString(const fs::path &path)
Convert OS specific boost path to QString through UTF-8.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
QString strOverriddenByCommandLine
const fs::path & GetDataDirNet() const
Get data directory path with appended network identifier.
void showTrayIconChanged(bool)