aboutsummaryrefslogtreecommitdiff
path: root/src/qt/sendcoinsentry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qt/sendcoinsentry.cpp')
-rw-r--r--src/qt/sendcoinsentry.cpp159
1 files changed, 159 insertions, 0 deletions
diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp
new file mode 100644
index 0000000000..d98400c260
--- /dev/null
+++ b/src/qt/sendcoinsentry.cpp
@@ -0,0 +1,159 @@
+#include "sendcoinsentry.h"
+#include "ui_sendcoinsentry.h"
+#include "guiutil.h"
+#include "bitcoinunits.h"
+#include "addressbookpage.h"
+#include "walletmodel.h"
+#include "optionsmodel.h"
+#include "addresstablemodel.h"
+
+#include <QApplication>
+#include <QClipboard>
+
+SendCoinsEntry::SendCoinsEntry(QWidget *parent) :
+ QFrame(parent),
+ ui(new Ui::SendCoinsEntry),
+ model(0)
+{
+ ui->setupUi(this);
+
+#ifdef Q_WS_MAC
+ ui->payToLayout->setSpacing(4);
+#endif
+
+#if QT_VERSION >= 0x040700
+ ui->payTo->setPlaceholderText(tr("Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"));
+ ui->addAsLabel->setPlaceholderText(tr("Enter a label for this address to add it to your address book"));
+#endif
+ setFocusPolicy(Qt::TabFocus);
+ setFocusProxy(ui->payTo);
+
+ GUIUtil::setupAddressWidget(ui->payTo, this);
+}
+
+SendCoinsEntry::~SendCoinsEntry()
+{
+ delete ui;
+}
+
+void SendCoinsEntry::on_pasteButton_clicked()
+{
+ // Paste text from clipboard into recipient field
+ ui->payTo->setText(QApplication::clipboard()->text());
+}
+
+void SendCoinsEntry::on_addressBookButton_clicked()
+{
+ if(!model)
+ return;
+ AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::SendingTab, this);
+ dlg.setModel(model->getAddressTableModel());
+ if(dlg.exec())
+ {
+ ui->payTo->setText(dlg.getReturnValue());
+ ui->payAmount->setFocus();
+ }
+}
+
+void SendCoinsEntry::on_payTo_textChanged(const QString &address)
+{
+ if(!model)
+ return;
+ // Fill in label from address book, if no label is filled in yet
+ if(ui->addAsLabel->text().isEmpty())
+ ui->addAsLabel->setText(model->getAddressTableModel()->labelForAddress(address));}
+
+void SendCoinsEntry::setModel(WalletModel *model)
+{
+ this->model = model;
+}
+
+void SendCoinsEntry::setRemoveEnabled(bool enabled)
+{
+ ui->deleteButton->setEnabled(enabled);
+}
+
+void SendCoinsEntry::clear()
+{
+ ui->payTo->clear();
+ ui->addAsLabel->clear();
+ ui->payAmount->clear();
+ ui->payTo->setFocus();
+ if(model && model->getOptionsModel())
+ {
+ ui->payAmount->setDisplayUnit(model->getOptionsModel()->getDisplayUnit());
+ }
+}
+
+void SendCoinsEntry::on_deleteButton_clicked()
+{
+ emit removeEntry(this);
+}
+
+bool SendCoinsEntry::validate()
+{
+ // Check input validity
+ bool retval = true;
+
+ if(!ui->payAmount->validate())
+ {
+ retval = false;
+ }
+ else
+ {
+ if(ui->payAmount->value() <= 0)
+ {
+ // Cannot send 0 coins or less
+ ui->payAmount->setValid(false);
+ retval = false;
+ }
+ }
+
+ if(!ui->payTo->hasAcceptableInput() ||
+ (model && !model->validateAddress(ui->payTo->text())))
+ {
+ ui->payTo->setValid(false);
+ retval = false;
+ }
+
+ return retval;
+}
+
+SendCoinsRecipient SendCoinsEntry::getValue()
+{
+ SendCoinsRecipient rv;
+
+ rv.address = ui->payTo->text();
+ rv.label = ui->addAsLabel->text();
+ rv.amount = ui->payAmount->value();
+
+ return rv;
+}
+
+QWidget *SendCoinsEntry::setupTabChain(QWidget *prev)
+{
+ QWidget::setTabOrder(prev, ui->payTo);
+ QWidget::setTabOrder(ui->payTo, ui->addressBookButton);
+ QWidget::setTabOrder(ui->addressBookButton, ui->pasteButton);
+ QWidget::setTabOrder(ui->pasteButton, ui->deleteButton);
+ QWidget::setTabOrder(ui->deleteButton, ui->addAsLabel);
+ return ui->payAmount->setupTabChain(ui->addAsLabel);
+}
+
+void SendCoinsEntry::setValue(const SendCoinsRecipient &value)
+{
+ ui->payTo->setText(value.address);
+ ui->addAsLabel->setText(value.label);
+ ui->payAmount->setValue(value.amount);
+}
+
+bool SendCoinsEntry::isClear()
+{
+ return ui->payTo->text().isEmpty();
+}
+
+void SendCoinsEntry::setFocus()
+{
+ ui->payTo->setFocus();
+}
+