5 #include <QInputDialog>
7 #include <QListWidgetItem>
15 #include "messagepage.h"
16 #include "ui_messagepage.h"
18 #include "addressbookpage.h"
20 #include "walletmodel.h"
22 MessagePage::MessagePage(QWidget *parent) :
24 ui(new Ui::MessagePage)
28 GUIUtil::setupAddressWidget(ui->signFrom, this);
31 MessagePage::~MessagePage()
36 void MessagePage::setModel(WalletModel *model)
41 void MessagePage::setAddress(QString addr)
43 ui->signFrom->setText(addr);
44 ui->message->setFocus();
47 void MessagePage::on_pasteButton_clicked()
49 setAddress(QApplication::clipboard()->text());
52 void MessagePage::on_addressBookButton_clicked()
54 AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::ReceivingTab, this);
55 dlg.setModel(model->getAddressTableModel());
58 setAddress(dlg.getReturnValue());
62 void MessagePage::on_copyToClipboard_clicked()
64 QApplication::clipboard()->setText(ui->signature->text());
67 void MessagePage::on_signMessage_clicked()
69 QString address = ui->signFrom->text();
71 CBitcoinAddress addr(address.toStdString());
74 QMessageBox::critical(this, tr("Error signing"), tr("%1 is not a valid address.").arg(address),
75 QMessageBox::Abort, QMessageBox::Abort);
79 WalletModel::UnlockContext ctx(model->requestUnlock());
82 // Unlock wallet was cancelled
87 if (!pwalletMain->GetKey(addr, key))
89 QMessageBox::critical(this, tr("Error signing"), tr("Private key for %1 is not available.").arg(address),
90 QMessageBox::Abort, QMessageBox::Abort);
94 CDataStream ss(SER_GETHASH);
95 ss << strMessageMagic;
96 ss << ui->message->document()->toPlainText().toStdString();
98 std::vector<unsigned char> vchSig;
99 if (!key.SignCompact(Hash(ss.begin(), ss.end()), vchSig))
101 QMessageBox::critical(this, tr("Error signing"), tr("Sign failed"),
102 QMessageBox::Abort, QMessageBox::Abort);
105 ui->signature->setText(QString::fromStdString(EncodeBase64(&vchSig[0], vchSig.size())));
106 ui->signature->setFont(GUIUtil::bitcoinAddressFont());