Send money: confirmation popups added

This commit is contained in:
Ilya Kitaev 2016-06-28 22:37:14 +03:00
parent 409c5701e2
commit 39cb75e58c
4 changed files with 71 additions and 12 deletions

View File

@ -56,6 +56,7 @@ int main(int argc, char *argv[])
qmlRegisterUncreatableType<Wallet>("Bitmonero.Wallet", 1, 0, "Wallet", "Wallet can't be instantiated directly");
qmlRegisterUncreatableType<PendingTransaction>("Bitmonero.PendingTransaction", 1, 0, "PendingTransaction",
"PendingTransaction can't be instantiated directly");
qRegisterMetaType<PendingTransaction::Priority>();
QQmlApplicationEngine engine;

View File

@ -30,6 +30,7 @@ import QtQuick 2.2
import QtQuick.Window 2.0
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Dialogs 1.2
import Qt.labs.settings 1.0
import Bitmonero.Wallet 1.0
import Bitmonero.PendingTransaction 1.0
@ -47,6 +48,7 @@ ApplicationWindow {
property bool osx: false
property alias persistentSettings : persistentSettings
property var wallet;
property var transaction;
function altKeyReleased() { ctrlPressed = false; }
@ -133,6 +135,10 @@ ApplicationWindow {
wallet = walletManager.openWallet(wallet_path, "", persistentSettings.testnet);
if (wallet.status !== Wallet.Status_Ok) {
console.log("Error opening wallet: ", wallet.errorString);
informationPopup.title = qsTr("Error");
informationPopup.text = qsTr("Couldn't open wallet: ") + wallet.errorString;
informationPopup.icon = StandardIcon.Critical
informationPopup.open()
return;
}
console.log("Wallet opened successfully: ", wallet.errorString);
@ -169,6 +175,8 @@ ApplicationWindow {
return wallets.length > 0;
}
// called on "transfer"
function handlePayment(address, paymentId, amount, mixinCount, priority) {
console.log("Creating transaction: ")
console.log("\taddress: ", address,
@ -180,22 +188,53 @@ ApplicationWindow {
var amountxmr = walletManager.amountFromString(amount);
console.log("integer amount: ", amountxmr);
var pendingTransaction = wallet.createTransaction(address, paymentId, amountxmr, mixinCount, priority);
if (pendingTransaction.status !== PendingTransaction.Status_Ok) {
console.error("Can't create transaction: ", pendingTransaction.errorString);
transaction = wallet.createTransaction(address, paymentId, amountxmr, mixinCount, priority);
if (transaction.status !== PendingTransaction.Status_Ok) {
console.error("Can't create transaction: ", transaction.errorString);
informationPopup.title = qsTr("Error");
informationPopup.text = qsTr("Can't create transaction: ") + transaction.errorString
informationPopup.icon = StandardIcon.Critical
informationPopup.open();
// deleting transaction object, we don't want memleaks
wallet.disposeTransaction(transaction);
} else {
console.log("Transaction created, amount: " + walletManager.displayAmount(pendingTransaction.amount)
+ ", fee: " + walletManager.displayAmount(pendingTransaction.fee));
if (!pendingTransaction.commit()) {
console.log("Error committing transaction: " + pendingTransaction.errorString);
} else {
wallet.refresh();
}
console.log("Transaction created, amount: " + walletManager.displayAmount(transaction.amount)
+ ", fee: " + walletManager.displayAmount(transaction.fee));
// here we show confirmation popup;
transactionConfirmationPopup.title = qsTr("Confirmation")
transactionConfirmationPopup.text = qsTr("Please confirm transaction:\n\n")
+ "\naddress: " + address
+ "\npayment id: " + paymentId
+ "\namount: " + walletManager.displayAmount(transaction.amount)
+ "\nfee: " + walletManager.displayAmount(transaction.fee)
transactionConfirmationPopup.icon = StandardIcon.Question
transactionConfirmationPopup.open()
// committing transaction
}
}
// called after user confirms transaction
function handleTransactionConfirmed() {
if (!transaction.commit()) {
console.log("Error committing transaction: " + transaction.errorString);
informationPopup.title = qsTr("Error");
informationPopup.text = qsTr("Couldn't send the money: ") + transaction.errorString
informationPopup.icon = StandardIcon.Critical
} else {
informationPopup.title = qsTr("Information")
informationPopup.text = qsTr("Money sent successfully")
informationPopup.icon = StandardIcon.Information
}
wallet.disposeTransaction(pendingTransaction);
informationPopup.open()
wallet.refresh()
wallet.disposeTransaction(transaction)
}
visible: true
width: rightPanelExpanded ? 1269 : 1269 - 300
height: 800
@ -232,6 +271,24 @@ ApplicationWindow {
property string payment_id
}
// TODO: replace with customized popups
// Information dialog
MessageDialog {
id: informationPopup
standardButtons: StandardButton.Ok
}
// Confrirmation aka question dialog
MessageDialog {
id: transactionConfirmationPopup
standardButtons: StandardButton.Ok + StandardButton.Cancel
onAccepted: {
handleTransactionConfirmed()
}
}
Item {
id: rootItem
anchors.fill: parent

View File

@ -1,5 +1,6 @@
#include "PendingTransaction.h"
PendingTransaction::Status PendingTransaction::status() const
{
return static_cast<Status>(m_pimpl->status());

View File

@ -80,7 +80,7 @@ public:
//! creates transaction
Q_INVOKABLE PendingTransaction * createTransaction(const QString &dst_addr, const QString &payment_id,
quint64 amount, quint32 mixin_count,
PendingTransaction::Priority priority = PendingTransaction::Priority_Low);
PendingTransaction::Priority priority);
//! deletes transaction and frees memory
Q_INVOKABLE void disposeTransaction(PendingTransaction * t);