mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 15:04:44 +01:00
qt: Use QVariant instead of int for BitcoinUnit in QSettings
This change improves type safety.
This commit is contained in:
parent
5d254a234d
commit
75832fdc37
5 changed files with 63 additions and 11 deletions
|
@ -95,6 +95,8 @@ static void RegisterMetaTypes()
|
||||||
qRegisterMetaType<std::function<void()>>("std::function<void()>");
|
qRegisterMetaType<std::function<void()>>("std::function<void()>");
|
||||||
qRegisterMetaType<QMessageBox::Icon>("QMessageBox::Icon");
|
qRegisterMetaType<QMessageBox::Icon>("QMessageBox::Icon");
|
||||||
qRegisterMetaType<interfaces::BlockAndHeaderTipInfo>("interfaces::BlockAndHeaderTipInfo");
|
qRegisterMetaType<interfaces::BlockAndHeaderTipInfo>("interfaces::BlockAndHeaderTipInfo");
|
||||||
|
|
||||||
|
qRegisterMetaTypeStreamOperators<BitcoinUnit>("BitcoinUnit");
|
||||||
}
|
}
|
||||||
|
|
||||||
static QString GetLangTerritory()
|
static QString GetLangTerritory()
|
||||||
|
|
|
@ -250,3 +250,40 @@ CAmount BitcoinUnits::maxMoney()
|
||||||
{
|
{
|
||||||
return MAX_MONEY;
|
return MAX_MONEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
qint8 ToQint8(BitcoinUnit unit)
|
||||||
|
{
|
||||||
|
switch (unit) {
|
||||||
|
case BitcoinUnits::BTC: return 0;
|
||||||
|
case BitcoinUnits::mBTC: return 1;
|
||||||
|
case BitcoinUnits::uBTC: return 2;
|
||||||
|
case BitcoinUnits::SAT: return 3;
|
||||||
|
} // no default case, so the compiler can warn about missing cases
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
BitcoinUnit FromQint8(qint8 num)
|
||||||
|
{
|
||||||
|
switch (num) {
|
||||||
|
case 0: return BitcoinUnits::BTC;
|
||||||
|
case 1: return BitcoinUnits::mBTC;
|
||||||
|
case 2: return BitcoinUnits::uBTC;
|
||||||
|
case 3: return BitcoinUnits::SAT;
|
||||||
|
}
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
QDataStream& operator<<(QDataStream& out, const BitcoinUnit& unit)
|
||||||
|
{
|
||||||
|
return out << ToQint8(unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
QDataStream& operator>>(QDataStream& in, BitcoinUnit& unit)
|
||||||
|
{
|
||||||
|
qint8 input;
|
||||||
|
in >> input;
|
||||||
|
unit = FromQint8(input);
|
||||||
|
return in;
|
||||||
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <consensus/amount.h>
|
#include <consensus/amount.h>
|
||||||
|
|
||||||
#include <QAbstractListModel>
|
#include <QAbstractListModel>
|
||||||
|
#include <QDataStream>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
// U+2009 THIN SPACE = UTF-8 E2 80 89
|
// U+2009 THIN SPACE = UTF-8 E2 80 89
|
||||||
|
@ -45,6 +46,7 @@ public:
|
||||||
uBTC,
|
uBTC,
|
||||||
SAT
|
SAT
|
||||||
};
|
};
|
||||||
|
Q_ENUM(Unit)
|
||||||
|
|
||||||
enum class SeparatorStyle
|
enum class SeparatorStyle
|
||||||
{
|
{
|
||||||
|
@ -111,4 +113,7 @@ private:
|
||||||
};
|
};
|
||||||
typedef BitcoinUnits::Unit BitcoinUnit;
|
typedef BitcoinUnits::Unit BitcoinUnit;
|
||||||
|
|
||||||
|
QDataStream& operator<<(QDataStream& out, const BitcoinUnit& unit);
|
||||||
|
QDataStream& operator>>(QDataStream& in, BitcoinUnit& unit);
|
||||||
|
|
||||||
#endif // BITCOIN_QT_BITCOINUNITS_H
|
#endif // BITCOIN_QT_BITCOINUNITS_H
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <QLatin1Char>
|
#include <QLatin1Char>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
#include <QVariant>
|
||||||
|
|
||||||
const char *DEFAULT_GUI_PROXY_HOST = "127.0.0.1";
|
const char *DEFAULT_GUI_PROXY_HOST = "127.0.0.1";
|
||||||
|
|
||||||
|
@ -71,9 +72,16 @@ void OptionsModel::Init(bool resetSettings)
|
||||||
fMinimizeOnClose = settings.value("fMinimizeOnClose").toBool();
|
fMinimizeOnClose = settings.value("fMinimizeOnClose").toBool();
|
||||||
|
|
||||||
// Display
|
// Display
|
||||||
if (!settings.contains("nDisplayUnit"))
|
if (!settings.contains("DisplayBitcoinUnit")) {
|
||||||
settings.setValue("nDisplayUnit", BitcoinUnits::BTC);
|
settings.setValue("DisplayBitcoinUnit", QVariant::fromValue(BitcoinUnit::BTC));
|
||||||
nDisplayUnit = settings.value("nDisplayUnit").toInt();
|
}
|
||||||
|
QVariant unit = settings.value("DisplayBitcoinUnit");
|
||||||
|
if (unit.canConvert<BitcoinUnit>()) {
|
||||||
|
m_display_bitcoin_unit = unit.value<BitcoinUnit>();
|
||||||
|
} else {
|
||||||
|
m_display_bitcoin_unit = BitcoinUnit::BTC;
|
||||||
|
settings.setValue("DisplayBitcoinUnit", QVariant::fromValue(m_display_bitcoin_unit));
|
||||||
|
}
|
||||||
|
|
||||||
if (!settings.contains("strThirdPartyTxUrls"))
|
if (!settings.contains("strThirdPartyTxUrls"))
|
||||||
settings.setValue("strThirdPartyTxUrls", "");
|
settings.setValue("strThirdPartyTxUrls", "");
|
||||||
|
@ -356,7 +364,7 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const
|
||||||
return m_sub_fee_from_amount;
|
return m_sub_fee_from_amount;
|
||||||
#endif
|
#endif
|
||||||
case DisplayUnit:
|
case DisplayUnit:
|
||||||
return nDisplayUnit;
|
return QVariant::fromValue(m_display_bitcoin_unit);
|
||||||
case ThirdPartyTxUrls:
|
case ThirdPartyTxUrls:
|
||||||
return strThirdPartyTxUrls;
|
return strThirdPartyTxUrls;
|
||||||
case Language:
|
case Language:
|
||||||
|
@ -567,12 +575,11 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
|
||||||
/** Updates current unit in memory, settings and emits displayUnitChanged(newUnit) signal */
|
/** Updates current unit in memory, settings and emits displayUnitChanged(newUnit) signal */
|
||||||
void OptionsModel::setDisplayUnit(const QVariant &value)
|
void OptionsModel::setDisplayUnit(const QVariant &value)
|
||||||
{
|
{
|
||||||
if (!value.isNull())
|
if (!value.isNull()) {
|
||||||
{
|
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
nDisplayUnit = value.toInt();
|
m_display_bitcoin_unit = value.value<BitcoinUnit>();
|
||||||
settings.setValue("nDisplayUnit", nDisplayUnit);
|
settings.setValue("DisplayBitcoinUnit", QVariant::fromValue(m_display_bitcoin_unit));
|
||||||
Q_EMIT displayUnitChanged(nDisplayUnit);
|
Q_EMIT displayUnitChanged(static_cast<int>(m_display_bitcoin_unit));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#define BITCOIN_QT_OPTIONSMODEL_H
|
#define BITCOIN_QT_OPTIONSMODEL_H
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <qt/bitcoinunits.h>
|
||||||
#include <qt/guiconstants.h>
|
#include <qt/guiconstants.h>
|
||||||
|
|
||||||
#include <QAbstractListModel>
|
#include <QAbstractListModel>
|
||||||
|
@ -86,7 +87,7 @@ public:
|
||||||
bool getShowTrayIcon() const { return m_show_tray_icon; }
|
bool getShowTrayIcon() const { return m_show_tray_icon; }
|
||||||
bool getMinimizeToTray() const { return fMinimizeToTray; }
|
bool getMinimizeToTray() const { return fMinimizeToTray; }
|
||||||
bool getMinimizeOnClose() const { return fMinimizeOnClose; }
|
bool getMinimizeOnClose() const { return fMinimizeOnClose; }
|
||||||
int getDisplayUnit() const { return nDisplayUnit; }
|
int getDisplayUnit() const { return static_cast<int>(m_display_bitcoin_unit); }
|
||||||
QString getThirdPartyTxUrls() const { return strThirdPartyTxUrls; }
|
QString getThirdPartyTxUrls() const { return strThirdPartyTxUrls; }
|
||||||
bool getUseEmbeddedMonospacedFont() const { return m_use_embedded_monospaced_font; }
|
bool getUseEmbeddedMonospacedFont() const { return m_use_embedded_monospaced_font; }
|
||||||
bool getCoinControlFeatures() const { return fCoinControlFeatures; }
|
bool getCoinControlFeatures() const { return fCoinControlFeatures; }
|
||||||
|
@ -112,7 +113,7 @@ private:
|
||||||
bool fMinimizeToTray;
|
bool fMinimizeToTray;
|
||||||
bool fMinimizeOnClose;
|
bool fMinimizeOnClose;
|
||||||
QString language;
|
QString language;
|
||||||
int nDisplayUnit;
|
BitcoinUnit m_display_bitcoin_unit;
|
||||||
QString strThirdPartyTxUrls;
|
QString strThirdPartyTxUrls;
|
||||||
bool m_use_embedded_monospaced_font;
|
bool m_use_embedded_monospaced_font;
|
||||||
bool fCoinControlFeatures;
|
bool fCoinControlFeatures;
|
||||||
|
|
Loading…
Add table
Reference in a new issue