diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-07-18 13:49:46 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-07-18 13:59:26 +0200 |
commit | 40d2d6922318957f1784dda735f24690baca027c (patch) | |
tree | 625bcc61f651e974314bf3da41223fb6c348a485 /src/qt/bitcoinamountfield.cpp | |
parent | 5bb765507b394e1fe205355b0b9937d95f8a39e6 (diff) | |
parent | 7149499fd85d5adea23c9c3057944c3f2f69a2d2 (diff) | |
download | bitcoin-40d2d6922318957f1784dda735f24690baca027c.tar.xz |
Merge pull request #4167
7149499 Add comments re BitcoinUnits::formatWithUnit/formatHtmlWithUnit (Roy Badami)
f7d70c6 Remove unused fAlign argument from BitcoinUnits::format and friends (Roy Badami)
2e4fee2 Show bitcoin quantities with full precision, even in the presence of trailing zeros (Roy Badami)
7007402 Implement SI-style (thin space) thoudands separator (Roy Badami)
Diffstat (limited to 'src/qt/bitcoinamountfield.cpp')
-rw-r--r-- | src/qt/bitcoinamountfield.cpp | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/src/qt/bitcoinamountfield.cpp b/src/qt/bitcoinamountfield.cpp index 25ad0c66af..e047c278b7 100644 --- a/src/qt/bitcoinamountfield.cpp +++ b/src/qt/bitcoinamountfield.cpp @@ -14,6 +14,51 @@ #include <QKeyEvent> #include <qmath.h> // for qPow() +// QDoubleSpinBox that shows SI-style thin space thousands separators +class AmountSpinBox: public QDoubleSpinBox +{ +public: + explicit AmountSpinBox(QWidget *parent): + QDoubleSpinBox(parent) + { + } + QString textFromValue(double value) const + { + QStringList parts = QDoubleSpinBox::textFromValue(value).split("."); + QString quotient_str = parts[0]; + QString remainder_str; + if(parts.size() > 1) + remainder_str = parts[1]; + + // Code duplication between here and BitcoinUnits::format + // TODO: Figure out how to share this code + QChar thin_sp(THIN_SP_CP); + int q_size = quotient_str.size(); + if (q_size > 4) + for (int i = 3; i < q_size; i += 3) + quotient_str.insert(q_size - i, thin_sp); + + int r_size = remainder_str.size(); + if (r_size > 4) + for (int i = 3, adj = 0; i < r_size; i += 3, adj++) + remainder_str.insert(i + adj, thin_sp); + + if(remainder_str.isEmpty()) + return quotient_str; + else + return quotient_str + QString(".") + remainder_str; + } + QValidator::State validate (QString &text, int &pos) const + { + QString s(BitcoinUnits::removeSpaces(text)); + return QDoubleSpinBox::validate(s, pos); + } + double valueFromText(const QString& text) const + { + return QDoubleSpinBox::valueFromText(BitcoinUnits::removeSpaces(text)); + } +}; + BitcoinAmountField::BitcoinAmountField(QWidget *parent) : QWidget(parent), amount(0), @@ -21,7 +66,7 @@ BitcoinAmountField::BitcoinAmountField(QWidget *parent) : { nSingleStep = 100000; // satoshis - amount = new QDoubleSpinBox(this); + amount = new AmountSpinBox(this); amount->setLocale(QLocale::c()); amount->installEventFilter(this); amount->setMaximumWidth(170); @@ -52,7 +97,7 @@ void BitcoinAmountField::setText(const QString &text) if (text.isEmpty()) amount->clear(); else - amount->setValue(text.toDouble()); + amount->setValue(BitcoinUnits::removeSpaces(text).toDouble()); } void BitcoinAmountField::clear() |