5#include <bitcoin-build-config.h>
22#include <validation.h>
55 default:
throw std::logic_error(
strprintf(
"GUI option %i has no corresponding node setting.",
option));
124 if (std::holds_alternative<FontChoiceAbstract>(
f)) {
175 if (!
settings.contains(
"fHideTrayIcon")) {
176 settings.setValue(
"fHideTrayIcon",
false);
181 if (!
settings.contains(
"fMinimizeToTray"))
182 settings.setValue(
"fMinimizeToTray",
false);
185 if (!
settings.contains(
"fMinimizeOnClose"))
186 settings.setValue(
"fMinimizeOnClose",
false);
190 if (!
settings.contains(
"DisplayBitcoinUnit")) {
191 settings.setValue(
"DisplayBitcoinUnit", QVariant::fromValue(BitcoinUnit::BTC));
201 if (!
settings.contains(
"strThirdPartyTxUrls"))
202 settings.setValue(
"strThirdPartyTxUrls",
"");
205 if (!
settings.contains(
"fCoinControlFeatures"))
206 settings.setValue(
"fCoinControlFeatures",
false);
209 if (!
settings.contains(
"enable_psbt_controls")) {
210 settings.setValue(
"enable_psbt_controls",
false);
222 }
catch (
const std::exception&
e) {
226 error.
translated =
tr(
"Could not read setting \"%1\", %2.").arg(QString::fromStdString(setting),
e.what()).toStdString();
234 if (!
settings.contains(
"strDataDir"))
239 if (!
settings.contains(
"SubFeeFromAmount")) {
240 settings.setValue(
"SubFeeFromAmount",
false);
246 if (
settings.contains(
"FontForMoney")) {
248 }
else if (
settings.contains(
"UseEmbeddedMonospacedFont")) {
249 if (
settings.value(
"UseEmbeddedMonospacedFont").toBool()) {
268 dst.setValue(key,
src.value(key));
293 dataDir =
settings.value(
"strDataDir", dataDir).toString();
299 settings.setValue(
"strDataDir", dataDir);
318 if (proxy.isEmpty()) {
326 if (
hostname.find(
':') != std::string::npos) {
329 return {
true, QString::fromStdString(
hostname), QString::number(port)};
342 return is_set ?
QString(
ip +
":" + port).toStdString() :
"";
379 if(role == Qt::EditRole)
390 if(role == Qt::EditRole)
427 }
else if (
suffix.empty()) {
438 }
else if (
suffix.empty()) {
464 return settings.value(
"enable_psbt_controls");
489 if (std::holds_alternative<FontChoiceAbstract>(
fc)) {
491 f.setWeight(QFont::Bold);
493 f = std::get<QFont>(
fc);
527 update(value.toBool());
599 update(value.toBool());
605 update(value.toString().toStdString());
626 update(value.toString().toStdString());
668 update(
static_cast<int64_t>(value.toLongLong()));
674 update(
static_cast<int64_t>(value.toLongLong()));
681 update(value.toBool());
714 return settings.value(
"fRestartRequired",
false).toBool();
742 if (
settings.contains(
"addrProxy") &&
settings.value(
"addrProxy").toString().endsWith(
"%2")) {
748 if (
settings.contains(
"addrSeparateProxyTor") &&
settings.value(
"addrSeparateProxyTor").toString().endsWith(
"%2")) {
std::optional< bool > SettingToBool(const common::SettingsValue &value)
std::optional< std::string > SettingToString(const common::SettingsValue &value)
static std::string SettingName(const std::string &arg)
static constexpr int DEFAULT_SCRIPTCHECK_THREADS
-par default (number of script-checking threads, 0 = auto)
fs::path GetDataDirNet() const
Get data directory path with appended network identifier.
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
BitcoinUnit m_display_bitcoin_unit
QString strOverriddenByCommandLine
std::variant< FontChoiceAbstract, QFont > FontChoice
bool isRestartRequired() const
QFont getFontForMoney() const
bool fCoinControlFeatures
interfaces::Node & node() const
void coinControlFeaturesChanged(bool)
QString strThirdPartyTxUrls
int rowCount(const QModelIndex &parent=QModelIndex()) const override
bool m_sub_fee_from_amount
bool setOption(OptionID option, const QVariant &value, const std::string &suffix="")
void displayUnitChanged(BitcoinUnit unit)
void SetPruneTargetGB(int prune_target_gb)
bool Init(bilingual_str &error)
void showTrayIconChanged(bool)
OptionsModel(interfaces::Node &node, QObject *parent=nullptr)
bool hasSigner()
Whether -signer was set or not.
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
bool m_enable_psbt_controls
QVariant getOption(OptionID option, const std::string &suffix="") const
void setDisplayUnit(const QVariant &new_unit)
Updates current unit in memory, settings and emits displayUnitChanged(new_unit) signal.
static FontChoice FontChoiceFromString(const QString &)
static QFont getFontForChoice(const FontChoice &fc)
void fontForMoneyChanged(const QFont &)
static QString FontChoiceToString(const OptionsModel::FontChoice &)
void addOverriddenOption(const std::string &option)
static const FontChoice UseBestSystemFont
void setRestartRequired(bool fRequired)
const std::string & getValStr() const
Top-level interface for a bitcoin node (bitcoind process).
virtual void mapPort(bool enable)=0
Map port.
virtual common::SettingsValue getPersistentSetting(const std::string &name)=0
Return setting value from <datadir>/settings.json or bitcoin.conf.
virtual void resetSettings()=0
Clear all settings in <datadir>/settings.json and store a backup of previous settings in <datadir>/se...
virtual void initParameterInteraction()=0
Init parameter interaction.
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 const int CLIENT_VERSION
static CService ip(uint32_t i)
static constexpr int DEFAULT_PRUNE_TARGET_GB
static constexpr bool DEFAULT_NATPMP
QFont fixedPitchFont(bool use_embedded_font)
QString getDefaultDataDirectory()
Determine default data directory for operating system.
bool SetStartOnSystemStartup(bool fAutoStart)
QString PathToQString(const fs::path &path)
Convert OS specific boost path to QString through UTF-8.
bool GetStartOnSystemStartup()
size_t GetDefaultDBCache()
static const bool DEFAULT_SPEND_ZEROCONF_CHANGE
Default for -spendzeroconfchange.
static const bool DEFAULT_LISTEN
-listen default
static constexpr size_t DEFAULT_DB_CACHE
-dbcache default (bytes)
static void CopySettings(QSettings &dst, const QSettings &src)
Helper function to copy contents from one QSettings to another.
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 const QLatin1String fontchoice_str_embedded
static ProxySetting ParseProxyString(const std::string &proxy)
static QString GetDefaultProxyAddress()
static int PruneSizeGB(const common::SettingsValue &prune_setting)
Get pruning size value to show in GUI from bitcoin -prune setting.
static const char * SettingName(OptionsModel::OptionID option)
Map GUI option ID to node setting name.
static const QString fontchoice_str_custom_prefix
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 bool PruneEnabled(const common::SettingsValue &prune_setting)
Get pruning enabled value to show in GUI from bitcoin -prune setting.
static std::string ProxyString(bool is_set, QString ip, QString port)
static void BackupSettings(const fs::path &filename, const QSettings &src)
Back up a QSettings to an ini-formatted file.
const char * DEFAULT_GUI_PROXY_HOST
static const QLatin1String fontchoice_str_best_system
static common::SettingsValue PruneSetting(bool prune_enabled, int prune_size_gb)
Convert enabled/size values to bitcoin -prune setting.
static int PruneMiBtoGB(int64_t mib)
Convert configured prune target MiB to displayed GB.
static int64_t PruneGBtoMiB(int gb)
Convert displayed prune target GB to configured MiB.
static constexpr uint16_t DEFAULT_GUI_PROXY_PORT
bool SplitHostPort(std::string_view in, uint16_t &portOut, std::string &hostOut)
Splits socket address string into host string and port value.
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.