Bitcoin Core  29.1.0
P2P Digital Currency
optionsmodel.h
Go to the documentation of this file.
1 // Copyright (c) 2011-2022 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_QT_OPTIONSMODEL_H
6 #define BITCOIN_QT_OPTIONSMODEL_H
7 
8 #include <cstdint>
9 #include <qt/bitcoinunits.h>
10 #include <qt/guiconstants.h>
11 
12 #include <QAbstractListModel>
13 #include <QFont>
14 
15 #include <assert.h>
16 #include <variant>
17 
18 struct bilingual_str;
19 namespace interfaces {
20 class Node;
21 }
22 
23 extern const char *DEFAULT_GUI_PROXY_HOST;
24 static constexpr uint16_t DEFAULT_GUI_PROXY_PORT = 9050;
25 
29 static inline int PruneMiBtoGB(int64_t mib) { return (mib * 1024 * 1024 + GB_BYTES - 1) / GB_BYTES; }
30 
34 static inline int64_t PruneGBtoMiB(int gb) { return gb * GB_BYTES / 1024 / 1024; }
35 
42 class OptionsModel : public QAbstractListModel
43 {
44  Q_OBJECT
45 
46 public:
47  explicit OptionsModel(interfaces::Node& node, QObject *parent = nullptr);
48 
49  enum OptionID {
50  StartAtStartup, // bool
51  ShowTrayIcon, // bool
52  MinimizeToTray, // bool
53  MapPortNatpmp, // bool
54  MinimizeOnClose, // bool
55  ProxyUse, // bool
56  ProxyIP, // QString
57  ProxyPort, // int
58  ProxyUseTor, // bool
59  ProxyIPTor, // QString
60  ProxyPortTor, // int
61  DisplayUnit, // BitcoinUnit
62  ThirdPartyTxUrls, // QString
63  Language, // QString
64  FontForMoney, // FontChoice
68  Prune, // bool
69  PruneSize, // int
70  DatabaseCache, // int
71  ExternalSignerPath, // QString
73  Listen, // bool
74  Server, // bool
76  MaskValues, // bool
78  };
79 
80  enum class FontChoiceAbstract {
83  };
84  typedef std::variant<FontChoiceAbstract, QFont> FontChoice;
86  static QFont getFontForChoice(const FontChoice& fc);
87 
88  bool Init(bilingual_str& error);
89  void Reset();
90 
91  int rowCount(const QModelIndex & parent = QModelIndex()) const override;
92  QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const override;
93  bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole) override;
94  QVariant getOption(OptionID option, const std::string& suffix="") const;
95  bool setOption(OptionID option, const QVariant& value, const std::string& suffix="");
97  void setDisplayUnit(const QVariant& new_unit);
98 
99  /* Explicit getters */
100  bool getShowTrayIcon() const { return m_show_tray_icon; }
101  bool getMinimizeToTray() const { return fMinimizeToTray; }
102  bool getMinimizeOnClose() const { return fMinimizeOnClose; }
104  QString getThirdPartyTxUrls() const { return strThirdPartyTxUrls; }
105  QFont getFontForMoney() const;
110 
112  bool hasSigner();
113 
114  /* Explicit setters */
115  void SetPruneTargetGB(int prune_target_gb);
116 
117  /* Restart flag helper */
118  void setRestartRequired(bool fRequired);
119  bool isRestartRequired() const;
120 
121  interfaces::Node& node() const { return m_node; }
122 
123 private:
125  /* Qt-only settings */
129  QString language;
137 
138  /* settings that were overridden by command-line */
140 
141  static QString FontChoiceToString(const OptionsModel::FontChoice&);
142  static FontChoice FontChoiceFromString(const QString&);
143 
144  // Add option to list of GUI options overridden through command line/config file
145  void addOverriddenOption(const std::string &option);
146 
147  // Check settings version and upgrade default values if required
148  void checkAndMigrate();
149 
150 Q_SIGNALS:
151  void displayUnitChanged(BitcoinUnit unit);
152  void coinControlFeaturesChanged(bool);
153  void showTrayIconChanged(bool);
154  void fontForMoneyChanged(const QFont&);
155 };
156 
157 Q_DECLARE_METATYPE(OptionsModel::FontChoice)
158 
159 #endif // BITCOIN_QT_OPTIONSMODEL_H
Unit
Bitcoin units.
Definition: bitcoinunits.h:42
void addOverriddenOption(const std::string &option)
FontChoice m_font_money
Definition: optionsmodel.h:132
Bilingual messages:
Definition: translation.h:24
bool m_mask_values
Definition: optionsmodel.h:136
bool hasSigner()
Whether -signer was set or not.
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
const QString & getOverriddenByCommandLine()
Definition: optionsmodel.h:109
void SetPruneTargetGB(int prune_target_gb)
QString language
Definition: optionsmodel.h:129
BitcoinUnit getDisplayUnit() const
Definition: optionsmodel.h:103
static const FontChoice UseBestSystemFont
Definition: optionsmodel.h:85
BitcoinUnit m_display_bitcoin_unit
Definition: optionsmodel.h:130
void coinControlFeaturesChanged(bool)
bool getShowTrayIcon() const
Definition: optionsmodel.h:100
static constexpr uint64_t GB_BYTES
Definition: guiconstants.h:58
const char * DEFAULT_GUI_PROXY_HOST
static int64_t PruneGBtoMiB(int gb)
Convert displayed prune target GB to configured MiB.
Definition: optionsmodel.h:34
std::variant< FontChoiceAbstract, QFont > FontChoice
Definition: optionsmodel.h:84
static QString FontChoiceToString(const OptionsModel::FontChoice &)
bool fMinimizeOnClose
Definition: optionsmodel.h:128
bool Init(bilingual_str &error)
bool isRestartRequired() const
bool getSubFeeFromAmount() const
Definition: optionsmodel.h:107
interfaces::Node & node() const
Definition: optionsmodel.h:121
bool setOption(OptionID option, const QVariant &value, const std::string &suffix="")
static FontChoice FontChoiceFromString(const QString &)
int rowCount(const QModelIndex &parent=QModelIndex()) const override
void displayUnitChanged(BitcoinUnit unit)
interfaces::Node & m_node
Definition: optionsmodel.h:124
bool fMinimizeToTray
Definition: optionsmodel.h:127
QVariant getOption(OptionID option, const std::string &suffix="") const
static int PruneMiBtoGB(int64_t mib)
Convert configured prune target MiB to displayed GB.
Definition: optionsmodel.h:29
bool m_show_tray_icon
Definition: optionsmodel.h:126
bool getEnablePSBTControls() const
Definition: optionsmodel.h:108
QString getThirdPartyTxUrls() const
Definition: optionsmodel.h:104
bool fCoinControlFeatures
Definition: optionsmodel.h:133
bool getCoinControlFeatures() const
Definition: optionsmodel.h:106
bool m_enable_psbt_controls
Definition: optionsmodel.h:135
Definition: messages.h:20
static constexpr uint16_t DEFAULT_GUI_PROXY_PORT
Definition: optionsmodel.h:24
void checkAndMigrate()
static QFont getFontForChoice(const FontChoice &fc)
bool getMinimizeOnClose() const
Definition: optionsmodel.h:102
void setRestartRequired(bool fRequired)
Interface from Qt to configuration data structure for Bitcoin client.
Definition: optionsmodel.h:42
QString strThirdPartyTxUrls
Definition: optionsmodel.h:131
bool getMinimizeToTray() const
Definition: optionsmodel.h:101
QFont getFontForMoney() const
bool m_sub_fee_from_amount
Definition: optionsmodel.h:134
OptionsModel(interfaces::Node &node, QObject *parent=nullptr)
void fontForMoneyChanged(const QFont &)
Top-level interface for a bitcoin node (bitcoind process).
Definition: node.h:70
void setDisplayUnit(const QVariant &new_unit)
Updates current unit in memory, settings and emits displayUnitChanged(new_unit) signal.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
QString strOverriddenByCommandLine
Definition: optionsmodel.h:139
void showTrayIconChanged(bool)