12#include <QApplication>
13#include <QAbstractSpinBox>
27 QAbstractSpinBox(parent)
29 setAlignment(Qt::AlignRight);
34 QValidator::State
validate(QString &text,
int &pos)
const override
37 return QValidator::Intermediate;
41 return valid ? QValidator::Intermediate : QValidator::Invalid;
44 void fixup(QString &input)
const override
54 val =
parse(input, &valid);
60 lineEdit()->setText(input);
66 return parse(text(), valid_out);
123 const QFontMetrics fm(fontMetrics());
124 int h = lineEdit()->minimumSizeHint().height();
128 QStyleOptionSpinBox opt;
129 initStyleOption(&opt);
132 opt.rect.setSize(hint + extra);
133 extra += hint - style()->subControlRect(QStyle::CC_SpinBox, &opt,
134 QStyle::SC_SpinBoxEditField,
this).size();
136 opt.rect.setSize(hint + extra);
137 extra += hint - style()->subControlRect(QStyle::CC_SpinBox, &opt,
138 QStyle::SC_SpinBoxEditField,
this).size();
145 .expandedTo(QApplication::globalStrut());
174 return valid ? val : 0;
180 if (
event->type() == QEvent::KeyPress ||
event->type() == QEvent::KeyRelease)
182 QKeyEvent *keyEvent =
static_cast<QKeyEvent *
>(
event);
183 if (keyEvent->key() == Qt::Key_Comma)
186 QKeyEvent periodKeyEvent(
event->type(), Qt::Key_Period, keyEvent->modifiers(),
".", keyEvent->isAutoRepeat(), keyEvent->count());
187 return QAbstractSpinBox::event(&periodKeyEvent);
190 return QAbstractSpinBox::event(
event);
197 if (text().isEmpty())
198 return StepUpEnabled;
200 StepEnabled rv = StepNone;
205 rv |= StepDownEnabled;
216#include <qt/bitcoinamountfield.moc>
223 amount->setLocale(QLocale::c());
224 amount->installEventFilter(
this);
225 amount->setMaximumWidth(240);
227 QHBoxLayout *layout =
new QHBoxLayout(
this);
228 layout->addWidget(
amount);
231 layout->addWidget(
unit);
232 layout->addStretch(1);
233 layout->setContentsMargins(0,0,0,0);
237 setFocusPolicy(Qt::TabFocus);
251 unit->setCurrentIndex(0);
256 amount->setEnabled(fEnabled);
257 unit->setEnabled(fEnabled);
271 amount->setStyleSheet(
"");
278 if (event->type() == QEvent::FocusIn)
283 return QWidget::eventFilter(
object, event);
288 QWidget::setTabOrder(prev,
amount);
320 amount->setReadOnly(fReadOnly);
326 unit->setToolTip(
unit->itemData(idx, Qt::ToolTipRole).toString());
int64_t CAmount
Amount in satoshis (Can be negative)
QSpinBox that uses fixed-point numbers internally and uses our own formatting/parsing functions.
void SetMinValue(const CAmount &value)
bool event(QEvent *event) override
void setSingleStep(const CAmount &step)
AmountSpinBox(QWidget *parent)
QValidator::State validate(QString &text, int &pos) const override
CAmount value(bool *valid_out=nullptr) const
StepEnabled stepEnabled() const override
QSize cachedMinimumSizeHint
void fixup(QString &input) const override
CAmount parse(const QString &text, bool *valid_out=nullptr) const
Parse a string into a number of base monetary units and return validity.
void stepBy(int steps) override
void SetMaxValue(const CAmount &value)
QSize minimumSizeHint() const override
void setValue(const CAmount &value)
void SetAllowEmpty(bool allow)
void setDisplayUnit(int unit)
void setEnabled(bool fEnabled)
Enable/Disable.
void SetMaxValue(const CAmount &value)
Set the maximum value in satoshis.
void setSingleStep(const CAmount &step)
Set single step in satoshis.
void SetMinValue(const CAmount &value)
Set the minimum value in satoshis.
bool eventFilter(QObject *object, QEvent *event) override
Intercept focus-in event and ',' key presses.
void setReadOnly(bool fReadOnly)
Make read-only.
BitcoinAmountField(QWidget *parent=nullptr)
void unitChanged(int idx)
void setDisplayUnit(int unit)
Change unit used to display amount.
void clear()
Make field empty and ready for new input.
bool validate()
Perform input validation, mark field as invalid if entered value is not valid.
QWidget * setupTabChain(QWidget *prev)
Qt messes up the tab chain by default in some cases (issue https://bugreports.qt-project....
void setValid(bool valid)
Mark current value as invalid in UI.
void setValue(const CAmount &value)
void SetAllowEmpty(bool allow)
If allow empty is set to false the field will be set to the minimum allowed value if left empty.
Bitcoin unit definitions.
@ UnitRole
Unit identifier.
static bool parse(int unit, const QString &value, CAmount *val_out)
Parse string to coin amount.
static CAmount maxMoney()
Return maximum number of base units (Satoshis)
static QString format(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD, bool justify=false)
Format as string.
void setValue(const QVariant &value)
int TextWidth(const QFontMetrics &fm, const QString &text)
Returns the distance in pixels appropriate for drawing a subsequent character after text.