11 #include <QApplication> 12 #include <QAbstractSpinBox> 13 #include <QHBoxLayout> 26 QAbstractSpinBox(parent),
30 setAlignment(Qt::AlignRight);
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 <qt/bitcoinamountfield.moc> 198 amount->setLocale(QLocale::c());
199 amount->installEventFilter(
this);
200 amount->setMaximumWidth(240);
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);
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());
bool validate()
Perform input validation, mark field as invalid if entered value is not valid.
Bitcoin unit definitions.
void setReadOnly(bool fReadOnly)
Make read-only.
QSpinBox that uses fixed-point numbers internally and uses our own formatting/parsing functions...
AmountSpinBox(QWidget *parent)
CAmount value(bool *valid_out=0) const
StepEnabled stepEnabled() const
QWidget * setupTabChain(QWidget *prev)
Qt messes up the tab chain by default in some cases (issue https://bugreports.qt-project.org/browse/QTBUG-10907), in these cases we have to set it up manually.
void setDisplayUnit(int unit)
QSize minimumSizeHint() const
bool eventFilter(QObject *object, QEvent *event)
Intercept focus-in event and ',' key presses.
QSize cachedMinimumSizeHint
static bool parse(int unit, const QString &value, CAmount *val_out)
Parse string to coin amount.
QValidator::State validate(QString &text, int &pos) const
void setValue(const CAmount &value)
int64_t CAmount
Amount in satoshis (Can be negative)
BitcoinAmountField(QWidget *parent=0)
void setEnabled(bool fEnabled)
Enable/Disable.
CAmount parse(const QString &text, bool *valid_out=0) const
Parse a string into a number of base monetary units and return validity.
void unitChanged(int idx)
void setSingleStep(const CAmount &step)
Set single step in satoshis.
bool event(QEvent *event)
void setValue(const QVariant &value)
void clear()
Make field empty and ready for new input.
void setValid(bool valid)
Mark current value as invalid in UI.
void setSingleStep(const CAmount &step)
void setDisplayUnit(int unit)
Change unit used to display amount.
void fixup(QString &input) const
void setValue(const CAmount &value)
static QString format(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=separatorStandard)
Format as string.
static CAmount maxMoney()
Return maximum number of base units (Satoshis)