aboutsummaryrefslogtreecommitdiff
path: root/src/qt
diff options
context:
space:
mode:
Diffstat (limited to 'src/qt')
-rw-r--r--src/qt/addresstablemodel.cpp37
-rw-r--r--src/qt/bitcoingui.cpp7
-rw-r--r--src/qt/coincontroldialog.cpp12
-rw-r--r--src/qt/optionsmodel.cpp5
-rw-r--r--src/qt/optionsmodel.h1
-rw-r--r--src/qt/paymentserver.cpp1
-rw-r--r--src/qt/sendcoinsdialog.cpp57
-rw-r--r--src/qt/sendcoinsentry.cpp7
-rw-r--r--src/qt/walletmodel.cpp5
9 files changed, 67 insertions, 65 deletions
diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp
index 5e7d8e6178..2987e5fdda 100644
--- a/src/qt/addresstablemodel.cpp
+++ b/src/qt/addresstablemodel.cpp
@@ -244,33 +244,34 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
if(role == Qt::EditRole)
{
- switch(index.column())
+ LOCK(wallet->cs_wallet); /* For SetAddressBook / DelAddressBook */
+ CTxDestination curAddress = CBitcoinAddress(rec->address.toStdString()).Get();
+ if(index.column() == Label)
{
- case Label:
// Do nothing, if old label == new label
if(rec->label == value.toString())
{
editStatus = NO_CHANGES;
return false;
}
- wallet->SetAddressBook(CBitcoinAddress(rec->address.toStdString()).Get(), value.toString().toStdString(), strPurpose);
- break;
- case Address:
- // Do nothing, if old address == new address
- if(CBitcoinAddress(rec->address.toStdString()) == CBitcoinAddress(value.toString().toStdString()))
+ wallet->SetAddressBook(curAddress, value.toString().toStdString(), strPurpose);
+ } else if(index.column() == Address) {
+ CTxDestination newAddress = CBitcoinAddress(value.toString().toStdString()).Get();
+ // Refuse to set invalid address, set error status and return false
+ if(boost::get<CNoDestination>(&newAddress))
{
- editStatus = NO_CHANGES;
+ editStatus = INVALID_ADDRESS;
return false;
}
- // Refuse to set invalid address, set error status and return false
- else if(!walletModel->validateAddress(value.toString()))
+ // Do nothing, if old address == new address
+ else if(newAddress == curAddress)
{
- editStatus = INVALID_ADDRESS;
+ editStatus = NO_CHANGES;
return false;
}
// Check for duplicate addresses to prevent accidental deletion of addresses, if you try
// to paste an existing address over another address (with a different label)
- else if(wallet->mapAddressBook.count(CBitcoinAddress(value.toString().toStdString()).Get()))
+ else if(wallet->mapAddressBook.count(newAddress))
{
editStatus = DUPLICATE_ADDRESS;
return false;
@@ -278,15 +279,11 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
// Double-check that we're not overwriting a receiving address
else if(rec->type == AddressTableEntry::Sending)
{
- {
- LOCK(wallet->cs_wallet);
- // Remove old entry
- wallet->DelAddressBook(CBitcoinAddress(rec->address.toStdString()).Get());
- // Add new entry with new address
- wallet->SetAddressBook(CBitcoinAddress(value.toString().toStdString()).Get(), rec->label.toStdString(), strPurpose);
- }
+ // Remove old entry
+ wallet->DelAddressBook(curAddress);
+ // Add new entry with new address
+ wallet->SetAddressBook(newAddress, rec->label.toStdString(), strPurpose);
}
- break;
}
return true;
}
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index 2d0f51a3fb..6be5a64015 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -684,8 +684,11 @@ void BitcoinGUI::message(const QString &title, const QString &message, unsigned
if (!(buttons = (QMessageBox::StandardButton)(style & CClientUIInterface::BTN_MASK)))
buttons = QMessageBox::Ok;
- // Ensure we get users attention
- showNormalIfMinimized();
+ // Ensure we get users attention, but only if main window is visible
+ // as we don't want to pop up the main window for messages that happen before
+ // initialization is finished.
+ if(!(style & CClientUIInterface::NOSHOWGUI))
+ showNormalIfMinimized();
QMessageBox mBox((QMessageBox::Icon)nMBoxIcon, strTitle, message, buttons, this);
int r = mBox.exec();
if (ret != NULL)
diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp
index b4e6aeb1dd..e1a9140f45 100644
--- a/src/qt/coincontroldialog.cpp
+++ b/src/qt/coincontroldialog.cpp
@@ -449,7 +449,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
}
}
- QString sPriorityLabel = "";
+ QString sPriorityLabel = tr("none");
int64_t nAmount = 0;
int64_t nPayFee = 0;
int64_t nAfterFee = 0;
@@ -593,10 +593,10 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
l8->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, nChange)); // Change
// turn labels "red"
- l5->setStyleSheet((nBytes >= 1000) ? "color:red;" : ""); // Bytes >= 1000
- l6->setStyleSheet((!AllowFree(dPriority)) ? "color:red;" : ""); // Priority < "medium"
- l7->setStyleSheet((fLowOutput) ? "color:red;" : ""); // Low Output = "yes"
- l8->setStyleSheet((nChange > 0 && nChange < CENT) ? "color:red;" : ""); // Change < 0.01BTC
+ l5->setStyleSheet((nBytes >= 1000) ? "color:red;" : ""); // Bytes >= 1000
+ l6->setStyleSheet((dPriority > 0 && !AllowFree(dPriority)) ? "color:red;" : ""); // Priority < "medium"
+ l7->setStyleSheet((fLowOutput) ? "color:red;" : ""); // Low Output = "yes"
+ l8->setStyleSheet((nChange > 0 && nChange < CENT) ? "color:red;" : ""); // Change < 0.01BTC
// tool tips
QString toolTip1 = tr("This label turns red, if the transaction size is greater than 1000 bytes.") + "<br /><br />";
@@ -604,7 +604,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
toolTip1 += tr("Can vary +/- 1 byte per input.");
QString toolTip2 = tr("Transactions with higher priority are more likely to get included into a block.") + "<br /><br />";
- toolTip2 += tr("This label turns red, if the priority is smaller than \"medium\"") + "<br /><br />";
+ toolTip2 += tr("This label turns red, if the priority is smaller than \"medium\".") + "<br /><br />";
toolTip2 += tr("This means a fee of at least %1 per kB is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CTransaction::nMinTxFee));
QString toolTip3 = tr("This label turns red, if any recipient receives an amount smaller than %1.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CENT)) + "<br /><br />";
diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp
index 363f432d62..b64b0dff8b 100644
--- a/src/qt/optionsmodel.cpp
+++ b/src/qt/optionsmodel.cpp
@@ -307,11 +307,6 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
return successful;
}
-qint64 OptionsModel::getTransactionFee()
-{
- return (qint64) nTransactionFee;
-}
-
bool OptionsModel::getProxySettings(QString& proxyIP, quint16 &proxyPort) const
{
std::string proxy = GetArg("-proxy", "");
diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h
index 5bb563cc36..a50153c768 100644
--- a/src/qt/optionsmodel.h
+++ b/src/qt/optionsmodel.h
@@ -48,7 +48,6 @@ public:
bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
/* Explicit getters */
- qint64 getTransactionFee();
bool getMinimizeToTray() { return fMinimizeToTray; }
bool getMinimizeOnClose() { return fMinimizeOnClose; }
int getDisplayUnit() { return nDisplayUnit; }
diff --git a/src/qt/paymentserver.cpp b/src/qt/paymentserver.cpp
index ba5c06064f..cfa87c16ba 100644
--- a/src/qt/paymentserver.cpp
+++ b/src/qt/paymentserver.cpp
@@ -548,6 +548,7 @@ void PaymentServer::fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipien
else {
CPubKey newKey;
if (wallet->GetKeyFromPool(newKey)) {
+ LOCK(wallet->cs_wallet); // SetAddressBook
CKeyID keyID = newKey.GetID();
wallet->SetAddressBook(keyID, strAccount, "refund");
diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
index 4bf5c3c479..92be835c56 100644
--- a/src/qt/sendcoinsdialog.cpp
+++ b/src/qt/sendcoinsdialog.cpp
@@ -546,44 +546,45 @@ void SendCoinsDialog::coinControlChangeChecked(int state)
// Coin Control: custom change address changed
void SendCoinsDialog::coinControlChangeEdited(const QString& text)
{
- if (model)
+ if (model && model->getAddressTableModel())
{
- CoinControlDialog::coinControl->destChange = CBitcoinAddress(text.toStdString()).Get();
+ // Default to no change address until verified
+ CoinControlDialog::coinControl->destChange = CNoDestination();
+ ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}");
+
+ CBitcoinAddress addr = CBitcoinAddress(text.toStdString());
- // label for the change address
- ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:black;}");
- if (text.isEmpty())
+ if (text.isEmpty()) // Nothing entered
+ {
ui->labelCoinControlChangeLabel->setText("");
- else if (!CBitcoinAddress(text.toStdString()).IsValid())
+ }
+ else if (!addr.IsValid()) // Invalid address
{
- // invalid change address
- CoinControlDialog::coinControl->destChange = CNoDestination();
-
ui->lineEditCoinControlChange->setValid(false);
- ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}");
ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid Bitcoin address"));
}
- else
+ else // Valid address
{
- QString associatedLabel = model->getAddressTableModel()->labelForAddress(text);
- if (!associatedLabel.isEmpty())
- ui->labelCoinControlChangeLabel->setText(associatedLabel);
- else
+ CPubKey pubkey;
+ CKeyID keyid;
+ addr.GetKeyID(keyid);
+ if (!model->getPubKey(keyid, pubkey)) // Unknown change address
{
- CPubKey pubkey;
- CKeyID keyid;
- CBitcoinAddress(text.toStdString()).GetKeyID(keyid);
- if (model->getPubKey(keyid, pubkey))
- ui->labelCoinControlChangeLabel->setText(tr("(no label)"));
+ ui->lineEditCoinControlChange->setValid(false);
+ ui->labelCoinControlChangeLabel->setText(tr("Warning: Unknown change address"));
+ }
+ else // Known change address
+ {
+ ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:black;}");
+
+ // Query label
+ QString associatedLabel = model->getAddressTableModel()->labelForAddress(text);
+ if (!associatedLabel.isEmpty())
+ ui->labelCoinControlChangeLabel->setText(associatedLabel);
else
- {
- // unknown change address
- CoinControlDialog::coinControl->destChange = CNoDestination();
-
- ui->lineEditCoinControlChange->setValid(false);
- ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}");
- ui->labelCoinControlChangeLabel->setText(tr("Warning: Unknown change address"));
- }
+ ui->labelCoinControlChangeLabel->setText(tr("(no label)"));
+
+ CoinControlDialog::coinControl->destChange = addr.Get();
}
}
}
diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp
index 4d28f68861..3f5d0cda3a 100644
--- a/src/qt/sendcoinsentry.cpp
+++ b/src/qt/sendcoinsentry.cpp
@@ -155,11 +155,12 @@ SendCoinsRecipient SendCoinsEntry::getValue()
QWidget *SendCoinsEntry::setupTabChain(QWidget *prev)
{
QWidget::setTabOrder(prev, ui->payTo);
- QWidget::setTabOrder(ui->payTo, ui->addressBookButton);
+ QWidget::setTabOrder(ui->payTo, ui->addAsLabel);
+ QWidget *w = ui->payAmount->setupTabChain(ui->addAsLabel);
+ QWidget::setTabOrder(w, 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);
+ return ui->deleteButton;
}
void SendCoinsEntry::setValue(const SendCoinsRecipient &value)
diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
index f08342b83e..6f3e3b0aaf 100644
--- a/src/qt/walletmodel.cpp
+++ b/src/qt/walletmodel.cpp
@@ -502,6 +502,7 @@ void WalletModel::listCoins(std::map<QString, std::vector<COutput> >& mapCoins)
std::vector<COutput> vCoins;
wallet->AvailableCoins(vCoins);
+ LOCK(wallet->cs_wallet); // ListLockedCoins, mapWallet
std::vector<COutPoint> vLockedCoins;
wallet->ListLockedCoins(vLockedCoins);
@@ -531,20 +532,24 @@ void WalletModel::listCoins(std::map<QString, std::vector<COutput> >& mapCoins)
bool WalletModel::isLockedCoin(uint256 hash, unsigned int n) const
{
+ LOCK(wallet->cs_wallet);
return wallet->IsLockedCoin(hash, n);
}
void WalletModel::lockCoin(COutPoint& output)
{
+ LOCK(wallet->cs_wallet);
wallet->LockCoin(output);
}
void WalletModel::unlockCoin(COutPoint& output)
{
+ LOCK(wallet->cs_wallet);
wallet->UnlockCoin(output);
}
void WalletModel::listLockedCoins(std::vector<COutPoint>& vOutpts)
{
+ LOCK(wallet->cs_wallet);
wallet->ListLockedCoins(vOutpts);
}