Skip to content

Commit aa23960

Browse files
hebastojb55
authored andcommitted
qt, refactor: Make BitcoinUnits::Unit a scoped enum
1 parent 75832fd commit aa23960

18 files changed

+113
-107
lines changed

src/qt/bitcoinamountfield.cpp

+11-8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
#include <QHBoxLayout>
1515
#include <QKeyEvent>
1616
#include <QLineEdit>
17+
#include <QVariant>
18+
19+
#include <cassert>
1720

1821
/** QSpinBox that uses fixed-point numbers internally and uses our own
1922
* formatting/parsing functions.
@@ -96,7 +99,7 @@ class AmountSpinBox: public QAbstractSpinBox
9699
setValue(val);
97100
}
98101

99-
void setDisplayUnit(int unit)
102+
void setDisplayUnit(BitcoinUnit unit)
100103
{
101104
bool valid = false;
102105
CAmount val = value(&valid);
@@ -122,7 +125,7 @@ class AmountSpinBox: public QAbstractSpinBox
122125

123126
const QFontMetrics fm(fontMetrics());
124127
int h = lineEdit()->minimumSizeHint().height();
125-
int w = GUIUtil::TextWidth(fm, BitcoinUnits::format(BitcoinUnits::BTC, BitcoinUnits::maxMoney(), false, BitcoinUnits::SeparatorStyle::ALWAYS));
128+
int w = GUIUtil::TextWidth(fm, BitcoinUnits::format(BitcoinUnit::BTC, BitcoinUnits::maxMoney(), false, BitcoinUnits::SeparatorStyle::ALWAYS));
126129
w += 2; // cursor blinking space
127130

128131
QStyleOptionSpinBox opt;
@@ -148,7 +151,7 @@ class AmountSpinBox: public QAbstractSpinBox
148151
}
149152

150153
private:
151-
int currentUnit{BitcoinUnits::BTC};
154+
BitcoinUnit currentUnit{BitcoinUnit::BTC};
152155
CAmount singleStep{CAmount(100000)}; // satoshis
153156
mutable QSize cachedMinimumSizeHint;
154157
bool m_allow_empty{true};
@@ -326,14 +329,14 @@ void BitcoinAmountField::unitChanged(int idx)
326329
unit->setToolTip(unit->itemData(idx, Qt::ToolTipRole).toString());
327330

328331
// Determine new unit ID
329-
int newUnit = unit->itemData(idx, BitcoinUnits::UnitRole).toInt();
330-
331-
amount->setDisplayUnit(newUnit);
332+
QVariant new_unit = unit->currentData(BitcoinUnits::UnitRole);
333+
assert(new_unit.isValid());
334+
amount->setDisplayUnit(new_unit.value<BitcoinUnit>());
332335
}
333336

334-
void BitcoinAmountField::setDisplayUnit(int newUnit)
337+
void BitcoinAmountField::setDisplayUnit(BitcoinUnit new_unit)
335338
{
336-
unit->setValue(newUnit);
339+
unit->setValue(QVariant::fromValue(new_unit));
337340
}
338341

339342
void BitcoinAmountField::setSingleStep(const CAmount& step)

src/qt/bitcoinamountfield.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#define BITCOIN_QT_BITCOINAMOUNTFIELD_H
77

88
#include <consensus/amount.h>
9+
#include <qt/bitcoinunits.h>
910

1011
#include <QWidget>
1112

@@ -52,7 +53,7 @@ class BitcoinAmountField: public QWidget
5253
bool validate();
5354

5455
/** Change unit used to display amount. */
55-
void setDisplayUnit(int unit);
56+
void setDisplayUnit(BitcoinUnit new_unit);
5657

5758
/** Make field empty and ready for new input. */
5859
void clear();

src/qt/bitcoingui.cpp

+6-7
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,7 @@ void BitcoinGUI::showEvent(QShowEvent *event)
12431243
}
12441244

12451245
#ifdef ENABLE_WALLET
1246-
void BitcoinGUI::incomingTransaction(const QString& date, int unit, const CAmount& amount, const QString& type, const QString& address, const QString& label, const QString& walletName)
1246+
void BitcoinGUI::incomingTransaction(const QString& date, BitcoinUnit unit, const CAmount& amount, const QString& type, const QString& address, const QString& label, const QString& walletName)
12471247
{
12481248
// On new transaction, make an info balloon
12491249
QString msg = tr("Date: %1\n").arg(date) +
@@ -1494,11 +1494,10 @@ UnitDisplayStatusBarControl::UnitDisplayStatusBarControl(const PlatformStyle *pl
14941494
{
14951495
createContextMenu();
14961496
setToolTip(tr("Unit to show amounts in. Click to select another unit."));
1497-
QList<BitcoinUnits::Unit> units = BitcoinUnits::availableUnits();
1497+
QList<BitcoinUnit> units = BitcoinUnits::availableUnits();
14981498
int max_width = 0;
14991499
const QFontMetrics fm(font());
1500-
for (const BitcoinUnits::Unit unit : units)
1501-
{
1500+
for (const BitcoinUnit unit : units) {
15021501
max_width = qMax(max_width, GUIUtil::TextWidth(fm, BitcoinUnits::longName(unit)));
15031502
}
15041503
setMinimumSize(max_width, 0);
@@ -1528,8 +1527,8 @@ void UnitDisplayStatusBarControl::changeEvent(QEvent* e)
15281527
void UnitDisplayStatusBarControl::createContextMenu()
15291528
{
15301529
menu = new QMenu(this);
1531-
for (const BitcoinUnits::Unit u : BitcoinUnits::availableUnits()) {
1532-
menu->addAction(BitcoinUnits::longName(u))->setData(QVariant(u));
1530+
for (const BitcoinUnit u : BitcoinUnits::availableUnits()) {
1531+
menu->addAction(BitcoinUnits::longName(u))->setData(QVariant::fromValue(u));
15331532
}
15341533
connect(menu, &QMenu::triggered, this, &UnitDisplayStatusBarControl::onMenuSelection);
15351534
}
@@ -1550,7 +1549,7 @@ void UnitDisplayStatusBarControl::setOptionsModel(OptionsModel *_optionsModel)
15501549
}
15511550

15521551
/** When Display Units are changed on OptionsModel it will refresh the display text of the control on the status bar */
1553-
void UnitDisplayStatusBarControl::updateDisplayUnit(int newUnits)
1552+
void UnitDisplayStatusBarControl::updateDisplayUnit(BitcoinUnit newUnits)
15541553
{
15551554
setText(BitcoinUnits::longName(newUnits));
15561555
}

src/qt/bitcoingui.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <config/bitcoin-config.h>
1010
#endif
1111

12+
#include <qt/bitcoinunits.h>
1213
#include <qt/guiutil.h>
1314
#include <qt/optionsdialog.h>
1415

@@ -260,7 +261,7 @@ public Q_SLOTS:
260261
bool handlePaymentRequest(const SendCoinsRecipient& recipient);
261262

262263
/** Show incoming transaction notification for new transactions. */
263-
void incomingTransaction(const QString& date, int unit, const CAmount& amount, const QString& type, const QString& address, const QString& label, const QString& walletName);
264+
void incomingTransaction(const QString& date, BitcoinUnit unit, const CAmount& amount, const QString& type, const QString& address, const QString& label, const QString& walletName);
264265
#endif // ENABLE_WALLET
265266

266267
private:
@@ -341,7 +342,7 @@ class UnitDisplayStatusBarControl : public QLabel
341342

342343
private Q_SLOTS:
343344
/** When Display Units are changed on OptionsModel it will refresh the display text of the control on the status bar */
344-
void updateDisplayUnit(int newUnits);
345+
void updateDisplayUnit(BitcoinUnit newUnits);
345346
/** Tells underlying optionsModel to update its current display unit. */
346347
void onMenuSelection(QAction* action);
347348
};

src/qt/bitcoinunits.cpp

+50-50
Original file line numberDiff line numberDiff line change
@@ -18,89 +18,89 @@ BitcoinUnits::BitcoinUnits(QObject *parent):
1818
{
1919
}
2020

21-
QList<BitcoinUnits::Unit> BitcoinUnits::availableUnits()
21+
QList<BitcoinUnit> BitcoinUnits::availableUnits()
2222
{
23-
QList<BitcoinUnits::Unit> unitlist;
24-
unitlist.append(BTC);
25-
unitlist.append(mBTC);
26-
unitlist.append(uBTC);
27-
unitlist.append(SAT);
23+
QList<BitcoinUnit> unitlist;
24+
unitlist.append(Unit::BTC);
25+
unitlist.append(Unit::mBTC);
26+
unitlist.append(Unit::uBTC);
27+
unitlist.append(Unit::SAT);
2828
return unitlist;
2929
}
3030

31-
bool BitcoinUnits::valid(int unit)
31+
bool BitcoinUnits::valid(Unit unit)
3232
{
3333
switch(unit)
3434
{
35-
case BTC:
36-
case mBTC:
37-
case uBTC:
38-
case SAT:
35+
case Unit::BTC:
36+
case Unit::mBTC:
37+
case Unit::uBTC:
38+
case Unit::SAT:
3939
return true;
4040
default:
4141
return false;
4242
}
4343
}
4444

45-
QString BitcoinUnits::longName(int unit)
45+
QString BitcoinUnits::longName(Unit unit)
4646
{
4747
switch(unit)
4848
{
49-
case BTC: return QString("BTC");
50-
case mBTC: return QString("mBTC");
51-
case uBTC: return QString::fromUtf8("µBTC (bits)");
52-
case SAT: return QString("Satoshi (sat)");
49+
case Unit::BTC: return QString("BTC");
50+
case Unit::mBTC: return QString("mBTC");
51+
case Unit::uBTC: return QString::fromUtf8("µBTC (bits)");
52+
case Unit::SAT: return QString("Satoshi (sat)");
5353
default: return QString("???");
5454
}
5555
}
5656

57-
QString BitcoinUnits::shortName(int unit)
57+
QString BitcoinUnits::shortName(Unit unit)
5858
{
5959
switch(unit)
6060
{
61-
case uBTC: return QString::fromUtf8("bits");
62-
case SAT: return QString("sat");
61+
case Unit::uBTC: return QString::fromUtf8("bits");
62+
case Unit::SAT: return QString("sat");
6363
default: return longName(unit);
6464
}
6565
}
6666

67-
QString BitcoinUnits::description(int unit)
67+
QString BitcoinUnits::description(Unit unit)
6868
{
6969
switch(unit)
7070
{
71-
case BTC: return QString("Bitcoins");
72-
case mBTC: return QString("Milli-Bitcoins (1 / 1" THIN_SP_UTF8 "000)");
73-
case uBTC: return QString("Micro-Bitcoins (bits) (1 / 1" THIN_SP_UTF8 "000" THIN_SP_UTF8 "000)");
74-
case SAT: return QString("Satoshi (sat) (1 / 100" THIN_SP_UTF8 "000" THIN_SP_UTF8 "000)");
71+
case Unit::BTC: return QString("Bitcoins");
72+
case Unit::mBTC: return QString("Milli-Bitcoins (1 / 1" THIN_SP_UTF8 "000)");
73+
case Unit::uBTC: return QString("Micro-Bitcoins (bits) (1 / 1" THIN_SP_UTF8 "000" THIN_SP_UTF8 "000)");
74+
case Unit::SAT: return QString("Satoshi (sat) (1 / 100" THIN_SP_UTF8 "000" THIN_SP_UTF8 "000)");
7575
default: return QString("???");
7676
}
7777
}
7878

79-
qint64 BitcoinUnits::factor(int unit)
79+
qint64 BitcoinUnits::factor(Unit unit)
8080
{
8181
switch(unit)
8282
{
83-
case BTC: return 100000000;
84-
case mBTC: return 100000;
85-
case uBTC: return 100;
86-
case SAT: return 1;
87-
default: return 100000000;
83+
case Unit::BTC: return 100'000'000;
84+
case Unit::mBTC: return 100'000;
85+
case Unit::uBTC: return 100;
86+
case Unit::SAT: return 1;
87+
default: return 100'000'000;
8888
}
8989
}
9090

91-
int BitcoinUnits::decimals(int unit)
91+
int BitcoinUnits::decimals(Unit unit)
9292
{
9393
switch(unit)
9494
{
95-
case BTC: return 8;
96-
case mBTC: return 5;
97-
case uBTC: return 2;
98-
case SAT: return 0;
95+
case Unit::BTC: return 8;
96+
case Unit::mBTC: return 5;
97+
case Unit::uBTC: return 2;
98+
case Unit::SAT: return 0;
9999
default: return 0;
100100
}
101101
}
102102

103-
QString BitcoinUnits::format(int unit, const CAmount& nIn, bool fPlus, SeparatorStyle separators, bool justify)
103+
QString BitcoinUnits::format(Unit unit, const CAmount& nIn, bool fPlus, SeparatorStyle separators, bool justify)
104104
{
105105
// Note: not using straight sprintf here because we do NOT want
106106
// localized number formatting.
@@ -147,19 +147,19 @@ QString BitcoinUnits::format(int unit, const CAmount& nIn, bool fPlus, Separator
147147
// Please take care to use formatHtmlWithUnit instead, when
148148
// appropriate.
149149

150-
QString BitcoinUnits::formatWithUnit(int unit, const CAmount& amount, bool plussign, SeparatorStyle separators)
150+
QString BitcoinUnits::formatWithUnit(Unit unit, const CAmount& amount, bool plussign, SeparatorStyle separators)
151151
{
152152
return format(unit, amount, plussign, separators) + QString(" ") + shortName(unit);
153153
}
154154

155-
QString BitcoinUnits::formatHtmlWithUnit(int unit, const CAmount& amount, bool plussign, SeparatorStyle separators)
155+
QString BitcoinUnits::formatHtmlWithUnit(Unit unit, const CAmount& amount, bool plussign, SeparatorStyle separators)
156156
{
157157
QString str(formatWithUnit(unit, amount, plussign, separators));
158158
str.replace(QChar(THIN_SP_CP), QString(THIN_SP_HTML));
159159
return QString("<span style='white-space: nowrap;'>%1</span>").arg(str);
160160
}
161161

162-
QString BitcoinUnits::formatWithPrivacy(int unit, const CAmount& amount, SeparatorStyle separators, bool privacy)
162+
QString BitcoinUnits::formatWithPrivacy(Unit unit, const CAmount& amount, SeparatorStyle separators, bool privacy)
163163
{
164164
assert(amount >= 0);
165165
QString value;
@@ -171,7 +171,7 @@ QString BitcoinUnits::formatWithPrivacy(int unit, const CAmount& amount, Separat
171171
return value + QString(" ") + shortName(unit);
172172
}
173173

174-
bool BitcoinUnits::parse(int unit, const QString &value, CAmount *val_out)
174+
bool BitcoinUnits::parse(Unit unit, const QString& value, CAmount* val_out)
175175
{
176176
if(!valid(unit) || value.isEmpty())
177177
return false; // Refuse to parse invalid unit or empty string
@@ -210,7 +210,7 @@ bool BitcoinUnits::parse(int unit, const QString &value, CAmount *val_out)
210210
return ok;
211211
}
212212

213-
QString BitcoinUnits::getAmountColumnTitle(int unit)
213+
QString BitcoinUnits::getAmountColumnTitle(Unit unit)
214214
{
215215
QString amountTitle = QObject::tr("Amount");
216216
if (BitcoinUnits::valid(unit))
@@ -240,7 +240,7 @@ QVariant BitcoinUnits::data(const QModelIndex &index, int role) const
240240
case Qt::ToolTipRole:
241241
return QVariant(description(unit));
242242
case UnitRole:
243-
return QVariant(static_cast<int>(unit));
243+
return QVariant::fromValue(unit);
244244
}
245245
}
246246
return QVariant();
@@ -255,21 +255,21 @@ namespace {
255255
qint8 ToQint8(BitcoinUnit unit)
256256
{
257257
switch (unit) {
258-
case BitcoinUnits::BTC: return 0;
259-
case BitcoinUnits::mBTC: return 1;
260-
case BitcoinUnits::uBTC: return 2;
261-
case BitcoinUnits::SAT: return 3;
258+
case BitcoinUnit::BTC: return 0;
259+
case BitcoinUnit::mBTC: return 1;
260+
case BitcoinUnit::uBTC: return 2;
261+
case BitcoinUnit::SAT: return 3;
262262
} // no default case, so the compiler can warn about missing cases
263263
assert(false);
264264
}
265265

266266
BitcoinUnit FromQint8(qint8 num)
267267
{
268268
switch (num) {
269-
case 0: return BitcoinUnits::BTC;
270-
case 1: return BitcoinUnits::mBTC;
271-
case 2: return BitcoinUnits::uBTC;
272-
case 3: return BitcoinUnits::SAT;
269+
case 0: return BitcoinUnit::BTC;
270+
case 1: return BitcoinUnit::mBTC;
271+
case 2: return BitcoinUnit::uBTC;
272+
case 3: return BitcoinUnit::SAT;
273273
}
274274
assert(false);
275275
}

0 commit comments

Comments
 (0)