X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fqt%2Fcoincontroldialog.cpp;h=3f67ee658a0d3be229435dd7e4d1cb7bf8373fa8;hb=fbd44e84d5841867d36d295d4f347fd5e55d293f;hp=fc50c95d33697310712dafeb8a0b9f81f98f01c8;hpb=b589f0d7ab3093b5c25ad208197040931576f0d2;p=novacoin.git diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp index fc50c95..3f67ee6 100644 --- a/src/qt/coincontroldialog.cpp +++ b/src/qt/coincontroldialog.cpp @@ -2,6 +2,7 @@ #include "ui_coincontroldialog.h" #include "init.h" +#include "base58.h" #include "bitcoinunits.h" #include "walletmodel.h" #include "addresstablemodel.h" @@ -21,13 +22,14 @@ #include #include #include +#include using namespace std; QList CoinControlDialog::payAmounts; CCoinControl* CoinControlDialog::coinControl = new CCoinControl(); CoinControlDialog::CoinControlDialog(QWidget *parent) : - QDialog(parent, DIALOGWINDOWHINTS), + QWidget(parent, DIALOGWINDOWHINTS), ui(new Ui::CoinControlDialog), model(0) { @@ -103,11 +105,10 @@ CoinControlDialog::CoinControlDialog(QWidget *parent) : #endif connect(ui->treeWidget->header(), SIGNAL(sectionClicked(int)), this, SLOT(headerSectionClicked(int))); - // ok button - connect(ui->buttonBox, SIGNAL(clicked( QAbstractButton*)), this, SLOT(buttonBoxClicked(QAbstractButton*))); - // (un)select all connect(ui->pushButtonSelectAll, SIGNAL(clicked()), this, SLOT(buttonSelectAllClicked())); + + ui->treeWidget->headerItem()->setText(COLUMN_CHECKBOX, QString()); ui->treeWidget->setColumnWidth(COLUMN_CHECKBOX, 84); ui->treeWidget->setColumnWidth(COLUMN_AMOUNT, 100); @@ -153,10 +154,9 @@ QString CoinControlDialog::strPad(QString s, int nPadLength, QString sPadding) } // ok button -void CoinControlDialog::buttonBoxClicked(QAbstractButton* button) +void CoinControlDialog::on_buttonBox_accepted() { - if (ui->buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) - done(QDialog::Accepted); // closes the dialog + close(); // closes the dialog } // (un)select all @@ -416,7 +416,7 @@ QString CoinControlDialog::getPriorityLabel(double dPriority) else ui->labelLocked->setVisible(false); }*/ -void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog) +void CoinControlDialog::updateLabels(WalletModel *model, QWidget* dialog) { if (!model) return; @@ -491,19 +491,11 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog) // Priority dPriority = dPriorityInputs / nBytes; sPriorityLabel = CoinControlDialog::getPriorityLabel(dPriority); + bool fAllowFree = CTransaction::AllowFree(dPriority); // Fee int64_t nFee = nTransactionFee * (1 + (int64_t)nBytes / 1000); - // Min Fee - bool fAllowFree = CTransaction::AllowFree(dPriority); - - // Disable free transactions until 1 July 2014 - if (!fTestNet && txDummy.nTime < FEE_SWITCH_TIME) - { - fAllowFree = false; - } - int64_t nMinFee = txDummy.GetMinFee(1, fAllowFree, GMF_SEND, nBytes); nPayFee = max(nFee, nMinFee); @@ -512,24 +504,6 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog) { nChange = nAmount - nPayFee - nPayAmount; - // if sub-cent change is required, the fee must be raised to at least CTransaction::nMinTxFee - if (txDummy.nTime < FEE_SWITCH_TIME && !fTestNet) - { - if (nPayFee < CENT && nChange > 0 && nChange < CENT) - { - if (nChange < CENT) // change < 0.01 => simply move all change to fees - { - nPayFee = nChange; - nChange = 0; - } - else - { - nChange = nChange + nPayFee - CENT; - nPayFee = CENT; - } - } - } - if (nChange == 0) nBytes -= 34; } @@ -565,7 +539,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog) l2->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, nAmount)); // Amount l3->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, nPayFee, false, 3)); // Fee l4->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, nAfterFee)); // After Fee - l5->setText(((nBytes > 0) ? "~" : "") + QString::number(nBytes)); // Bytes + l5->setText(((nBytes > 0) ? ASYMP_UTF8 : "") + QString::number(nBytes)); // Bytes l6->setText(sPriorityLabel); // Priority l7->setText((fLowOutput ? (fDust ? tr("DUST") : tr("yes")) : tr("no"))); // Low Output / Dust l8->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, nChange)); // Change @@ -577,10 +551,10 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog) l8->setStyleSheet((nChange > 0 && nChange < CENT) ? "color:red;" : ""); // Change < 0.01BTC // tool tips - l5->setToolTip(tr("This label turns red, if the transaction size is bigger than 1000 bytes.\n\n This means a fee of at least %1 per kb is required.\n\n Can vary +/- 1 Byte per input.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, fTestNet || FEE_SWITCH_TIME < GetTime() ? MIN_TX_FEE : CENT))); - l6->setToolTip(tr("Transactions with higher priority get more likely into a block.\n\nThis label turns red, if the priority is smaller than \"medium\".\n\n This means a fee of at least %1 per kb is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, fTestNet || FEE_SWITCH_TIME < GetTime() ? MIN_TX_FEE : CENT))); - l7->setToolTip(tr("This label turns red, if any recipient receives an amount smaller than %1.\n\n This means a fee of at least %2 is required. \n\n Amounts below the minimum fee are shown as DUST.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CENT)).arg(BitcoinUnits::formatWithUnit(nDisplayUnit, fTestNet || FEE_SWITCH_TIME < GetTime() ? MIN_RELAY_TX_FEE : CENT))); - l8->setToolTip(tr("This label turns red, if the change is smaller than %1.\n\n This means a fee of at least %2 is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CENT)).arg(BitcoinUnits::formatWithUnit(nDisplayUnit, fTestNet || FEE_SWITCH_TIME < GetTime() ? MIN_TX_FEE : CENT))); + l5->setToolTip(tr("This label turns red, if the transaction size is bigger than 1000 bytes.\n\n This means a fee of at least %1 per kb is required.\n\n Can vary +/- 1 Byte per input.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, MIN_TX_FEE))); + l6->setToolTip(tr("Transactions with higher priority get more likely into a block.\n\nThis label turns red, if the priority is smaller than \"medium\".\n\n This means a fee of at least %1 per kb is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, MIN_TX_FEE))); + l7->setToolTip(tr("This label turns red, if any recipient receives an amount smaller than %1.\n\n This means a fee of at least %2 is required. \n\n Amounts below the minimum fee are shown as DUST.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CENT)).arg(BitcoinUnits::formatWithUnit(nDisplayUnit, MIN_RELAY_TX_FEE))); + l8->setToolTip(tr("This label turns red, if the change is smaller than %1.\n\n This means a fee of at least %2 is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CENT)).arg(BitcoinUnits::formatWithUnit(nDisplayUnit, MIN_TX_FEE))); dialog->findChild("labelCoinControlBytesText") ->setToolTip(l5->toolTip()); dialog->findChild("labelCoinControlPriorityText") ->setToolTip(l6->toolTip()); dialog->findChild("labelCoinControlLowOutputText")->setToolTip(l7->toolTip()); @@ -657,6 +631,7 @@ void CoinControlDialog::updateView() itemOutput->setCheckState(COLUMN_CHECKBOX,Qt::Unchecked); // address +/* CTxDestination outputAddress; QString sAddress = ""; if(ExtractDestination(out.tx->vout[out.i].scriptPubKey, outputAddress)) @@ -672,6 +647,52 @@ void CoinControlDialog::updateView() if (keyid && model->getPubKey(*keyid, pubkey) && !pubkey.IsCompressed()) nInputSize = 180; } +*/ + QString sAddress = ""; + txnouttype whichType; + std::vector vSolutions; + if (Solver(out.tx->vout[out.i].scriptPubKey, whichType, vSolutions)) + { + CTxDestination address; + if (whichType == TX_PUBKEY) + { + // Pay-to-Pubkey + CPubKey pubKey = CPubKey(vSolutions[0]); + address = pubKey.GetID(); + sAddress = CBitcoinAddress(address).ToString().c_str(); + + if (!pubKey.IsCompressed()) + nInputSize = 180; + } + else if (whichType == TX_PUBKEYHASH) + { + // Pay-to-PubkeyHash + address = CKeyID(uint160(vSolutions[0])); + sAddress = CBitcoinAddress(address).ToString().c_str(); + + CPubKey pubkey; + CKeyID *keyid = boost::get< CKeyID >(&address); + if (keyid && model->getPubKey(*keyid, pubkey) && !pubkey.IsCompressed()) + nInputSize = 180; + } + else if (whichType == TX_SCRIPTHASH) + { + // Pay-to-ScriptHash + address = CScriptID(uint160(vSolutions[0])); + sAddress = CBitcoinAddress(address).ToString().c_str(); + } + else if (whichType == TX_PUBKEY_DROP) + { + // Pay-to-Pubkey-R + CMalleableKeyView view; + pwalletMain->CheckOwnership(CPubKey(vSolutions[0]), CPubKey(vSolutions[1]), view); + sAddress = CBitcoinAddress(view.GetMalleablePubKey()).ToString().c_str(); + } + + // if listMode or change => show bitcoin address. In tree mode, address is not shown again for direct wallet address outputs + if (!treeMode || (!(sAddress == sWalletAddress))) + itemOutput->setText(COLUMN_ADDRESS, sAddress); + } // label if (!(sAddress == sWalletAddress)) // change @@ -763,3 +784,24 @@ void CoinControlDialog::updateView() sortView(sortColumn, sortOrder); ui->treeWidget->setEnabled(true); } + +void CoinControlDialog::keyPressEvent(QKeyEvent *event) +{ +#ifdef ANDROID + if(event->key() == Qt::Key_Back) + { + close(); + } +#else + if(event->key() == Qt::Key_Escape) + { + close(); + } +#endif +} + +void CoinControlDialog::closeEvent(QCloseEvent* e) +{ + QWidget::closeEvent(e); + emit beforeClose(); +}