1 #include <QApplication>
7 #include "multisiginputentry.h"
8 #include "ui_multisiginputentry.h"
13 #include "walletmodel.h"
16 MultisigInputEntry::MultisigInputEntry(QWidget *parent) : QFrame(parent), ui(new Ui::MultisigInputEntry), model(0)
21 MultisigInputEntry::~MultisigInputEntry()
26 void MultisigInputEntry::setModel(WalletModel *model)
32 void MultisigInputEntry::clear()
34 ui->transactionId->clear();
35 ui->transactionOutput->clear();
36 ui->redeemScript->clear();
39 bool MultisigInputEntry::validate()
41 return (ui->transactionOutput->count() > 0);
44 CTxIn MultisigInputEntry::getInput()
46 unsigned int nOutput = ui->transactionOutput->currentIndex();
47 CTxIn input(COutPoint(txHash, nOutput));
52 int64_t MultisigInputEntry::getAmount()
55 unsigned int nOutput = ui->transactionOutput->currentIndex();
57 uint256 blockHash = 0;
59 if(GetTransaction(txHash, tx, blockHash))
61 if(nOutput < tx.vout.size())
63 const CTxOut& txOut = tx.vout[nOutput];
64 amount = txOut.nValue;
71 QString MultisigInputEntry::getRedeemScript()
73 return ui->redeemScript->text();
76 void MultisigInputEntry::setTransactionId(QString transactionId)
78 ui->transactionId->setText(transactionId);
81 void MultisigInputEntry::setTransactionOutputIndex(int index)
83 ui->transactionOutput->setCurrentIndex(index);
86 void MultisigInputEntry::setRemoveEnabled(bool enabled)
88 ui->deleteButton->setEnabled(enabled);
91 void MultisigInputEntry::on_pasteTransactionIdButton_clicked()
93 ui->transactionId->setText(QApplication::clipboard()->text());
96 void MultisigInputEntry::on_deleteButton_clicked()
98 emit removeEntry(this);
101 void MultisigInputEntry::on_pasteRedeemScriptButton_clicked()
103 ui->redeemScript->setText(QApplication::clipboard()->text());
106 void MultisigInputEntry::on_transactionId_textChanged(const QString &transactionId)
108 ui->transactionOutput->clear();
109 if(transactionId.isEmpty())
112 // Make list of transaction outputs
113 txHash.SetHex(transactionId.toStdString().c_str());
115 uint256 blockHash = 0;
116 if(!GetTransaction(txHash, tx, blockHash))
118 for(unsigned int i = 0; i < tx.vout.size(); i++)
122 const CTxOut& txOut = tx.vout[i];
123 int64_t amount = txOut.nValue;
125 amountStr.sprintf("%.6f", (double) amount / COIN);
126 CScript script = txOut.scriptPubKey;
128 if(ExtractDestination(script, addr))
130 CBitcoinAddress address(addr);
131 QString addressStr(address.ToString().c_str());
132 ui->transactionOutput->addItem(idStr + QString(" - ") + addressStr + QString(" - ") + amountStr + QString(" NVC"));
135 ui->transactionOutput->addItem(idStr + QString(" - ") + amountStr + QString(" NVC"));
139 void MultisigInputEntry::on_transactionOutput_currentIndexChanged(int index)
141 if(ui->transactionOutput->itemText(index).isEmpty())
145 uint256 blockHash = 0;
146 if(!GetTransaction(txHash, tx, blockHash))
148 const CTxOut& txOut = tx.vout[index];
149 CScript script = txOut.scriptPubKey;
151 if(script.IsPayToScriptHash())
153 ui->redeemScript->setEnabled(true);
157 // Try to find the redeem script
159 if(ExtractDestination(script, dest))
161 CScriptID scriptID = std::get<CScriptID>(dest);
162 CScript redeemScript;
163 if(model->getWallet()->GetCScript(scriptID, redeemScript))
164 ui->redeemScript->setText(HexStr(redeemScript.begin(), redeemScript.end()).c_str());
170 ui->redeemScript->setEnabled(false);