11 #include <QApplication>
12 #include <QAbstractSpinBox>
13 #include <QHBoxLayout>
26 QAbstractSpinBox(parent),
30 setAlignment(Qt::AlignRight);
32 connect(lineEdit(), SIGNAL(textEdited(QString)),
this, SIGNAL(
valueChanged()));
35 QValidator::State
validate(QString &text,
int &pos)
const
38 return QValidator::Intermediate;
42 return valid ? QValidator::Intermediate : QValidator::Invalid;
45 void fixup(QString &input)
const
52 lineEdit()->setText(input);
58 return parse(text(), valid_out);
100 const QFontMetrics fm(fontMetrics());
101 int h = lineEdit()->minimumSizeHint().height();
105 QStyleOptionSpinBox opt;
106 initStyleOption(&opt);
109 opt.rect.setSize(hint + extra);
110 extra += hint - style()->subControlRect(QStyle::CC_SpinBox, &opt,
111 QStyle::SC_SpinBoxEditField,
this).size();
113 opt.rect.setSize(hint + extra);
114 extra += hint - style()->subControlRect(QStyle::CC_SpinBox, &opt,
115 QStyle::SC_SpinBoxEditField,
this).size();
122 .expandedTo(QApplication::globalStrut());
148 return valid ? val : 0;
154 if (
event->type() == QEvent::KeyPress ||
event->type() == QEvent::KeyRelease)
156 QKeyEvent *keyEvent =
static_cast<QKeyEvent *
>(
event);
157 if (keyEvent->key() == Qt::Key_Comma)
160 QKeyEvent periodKeyEvent(
event->type(), Qt::Key_Period, keyEvent->modifiers(),
".", keyEvent->isAutoRepeat(), keyEvent->count());
161 return QAbstractSpinBox::event(&periodKeyEvent);
164 return QAbstractSpinBox::event(
event);
171 if (text().isEmpty())
172 return StepUpEnabled;
180 rv |= StepDownEnabled;
191 #include "bitcoinamountfield.moc"
198 amount->setLocale(QLocale::c());
199 amount->installEventFilter(
this);
200 amount->setMaximumWidth(170);
202 QHBoxLayout *layout =
new QHBoxLayout(
this);
203 layout->addWidget(
amount);
206 layout->addWidget(
unit);
207 layout->addStretch(1);
208 layout->setContentsMargins(0,0,0,0);
212 setFocusPolicy(Qt::TabFocus);
217 connect(
unit, SIGNAL(currentIndexChanged(
int)),
this, SLOT(
unitChanged(
int)));
226 unit->setCurrentIndex(0);
231 amount->setEnabled(fEnabled);
232 unit->setEnabled(fEnabled);
246 amount->setStyleSheet(
"");
253 if (event->type() == QEvent::FocusIn)
258 return QWidget::eventFilter(
object, event);
263 QWidget::setTabOrder(prev,
amount);
280 amount->setReadOnly(fReadOnly);
286 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 fixup(QString &input) const
void setSingleStep(const CAmount &step)
AmountSpinBox(QWidget *parent)
QSize minimumSizeHint() const
QSize cachedMinimumSizeHint
CAmount parse(const QString &text, bool *valid_out=0) const
Parse a string into a number of base monetary units and return validity.
StepEnabled stepEnabled() const
CAmount value(bool *valid_out=0) const
void setValue(const CAmount &value)
void setDisplayUnit(int unit)
bool event(QEvent *event)
QValidator::State validate(QString &text, int &pos) const
void setEnabled(bool fEnabled)
Enable/Disable.
void setSingleStep(const CAmount &step)
Set single step in satoshis.
void setReadOnly(bool fReadOnly)
Make read-only.
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.
BitcoinAmountField(QWidget *parent=0)
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.
bool eventFilter(QObject *object, QEvent *event)
Intercept focus-in event and ',' key presses.
void setValue(const CAmount &value)
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=separatorStandard)
Format as string.
void setValue(const QVariant &value)