#include "bitcoinamountfield.h"
+#include "qvalidatedlineedit.h"
+#include "bitcoinunits.h"
#include <QLabel>
#include <QLineEdit>
BitcoinAmountField::BitcoinAmountField(QWidget *parent):
QWidget(parent), amount(0), decimals(0)
{
- amount = new QLineEdit(this);
- amount->setValidator(new QRegExpValidator(QRegExp("[0-9]+"), this));
+ amount = new QValidatedLineEdit(this);
+ amount->setValidator(new QRegExpValidator(QRegExp("[0-9]*"), this));
amount->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
amount->installEventFilter(this);
- amount->setMaximumWidth(80);
- decimals = new QLineEdit(this);
+ amount->setMaximumWidth(100);
+ decimals = new QValidatedLineEdit(this);
decimals->setValidator(new QRegExpValidator(QRegExp("[0-9]+"), this));
decimals->setMaxLength(8);
decimals->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
layout->addWidget(amount);
layout->addWidget(new QLabel(QString(".")));
layout->addWidget(decimals);
+ layout->addWidget(new QLabel(QString(" ") + BitcoinUnits::name(BitcoinUnits::BTC)));
layout->addStretch(1);
+ layout->setContentsMargins(0,0,0,0);
- setFocusPolicy(Qt::TabFocus);
setLayout(layout);
+
+ setFocusPolicy(Qt::TabFocus);
setFocusProxy(amount);
// If one if the widgets changes, the combined content changes as well
amount->setText(parts[0]);
decimals->setText(parts[1]);
}
+ else
+ {
+ amount->setText(QString());
+ decimals->setText(QString());
+ }
+}
+
+void BitcoinAmountField::clear()
+{
+ amount->clear();
+ decimals->clear();
+}
+
+bool BitcoinAmountField::validate()
+{
+ bool valid = true;
+ if(decimals->text().isEmpty())
+ {
+ decimals->setValid(false);
+ valid = false;
+ }
+ if(!BitcoinUnits::parse(BitcoinUnits::BTC, text(), 0))
+ {
+ amount->setValid(false);
+ decimals->setValid(false);
+ valid = false;
+ }
+
+ return valid;
}
QString BitcoinAmountField::text() const
{
+ if(decimals->text().isEmpty())
+ {
+ return QString();
+ }
return amount->text() + QString(".") + decimals->text();
}
if(keyEvent->key() == Qt::Key_Period || keyEvent->key() == Qt::Key_Comma)
{
decimals->setFocus();
+ decimals->selectAll();
}
}
return false;
}
+
+QWidget *BitcoinAmountField::setupTabChain(QWidget *prev)
+{
+ QWidget::setTabOrder(prev, amount);
+ QWidget::setTabOrder(amount, decimals);
+ return decimals;
+}