[Qt] coin control change address handling update
- re-work change address handling so that default is CNoDestination(), until a verified and known change address was entered (easier code flow) - add a missing NULL pointer check for adresstablemodel - add a missing text when opening coin control address selection for priority and ensure the label is black - add a missing . at the end of a sentence
This commit is contained in:
parent
f498d43ee2
commit
3380713af5
2 changed files with 36 additions and 35 deletions
|
@ -449,7 +449,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString sPriorityLabel = "";
|
QString sPriorityLabel = tr("none");
|
||||||
int64_t nAmount = 0;
|
int64_t nAmount = 0;
|
||||||
int64_t nPayFee = 0;
|
int64_t nPayFee = 0;
|
||||||
int64_t nAfterFee = 0;
|
int64_t nAfterFee = 0;
|
||||||
|
@ -594,7 +594,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
|
||||||
|
|
||||||
// turn labels "red"
|
// turn labels "red"
|
||||||
l5->setStyleSheet((nBytes >= 1000) ? "color:red;" : ""); // Bytes >= 1000
|
l5->setStyleSheet((nBytes >= 1000) ? "color:red;" : ""); // Bytes >= 1000
|
||||||
l6->setStyleSheet((!AllowFree(dPriority)) ? "color:red;" : ""); // Priority < "medium"
|
l6->setStyleSheet((dPriority > 0 && !AllowFree(dPriority)) ? "color:red;" : ""); // Priority < "medium"
|
||||||
l7->setStyleSheet((fLowOutput) ? "color:red;" : ""); // Low Output = "yes"
|
l7->setStyleSheet((fLowOutput) ? "color:red;" : ""); // Low Output = "yes"
|
||||||
l8->setStyleSheet((nChange > 0 && nChange < CENT) ? "color:red;" : ""); // Change < 0.01BTC
|
l8->setStyleSheet((nChange > 0 && nChange < CENT) ? "color:red;" : ""); // Change < 0.01BTC
|
||||||
|
|
||||||
|
@ -604,7 +604,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
|
||||||
toolTip1 += tr("Can vary +/- 1 byte per input.");
|
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 />";
|
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));
|
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 />";
|
QString toolTip3 = tr("This label turns red, if any recipient receives an amount smaller than %1.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CENT)) + "<br /><br />";
|
||||||
|
|
|
@ -546,44 +546,45 @@ void SendCoinsDialog::coinControlChangeChecked(int state)
|
||||||
// Coin Control: custom change address changed
|
// Coin Control: custom change address changed
|
||||||
void SendCoinsDialog::coinControlChangeEdited(const QString& text)
|
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
|
||||||
|
|
||||||
// label for the change address
|
|
||||||
ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:black;}");
|
|
||||||
if (text.isEmpty())
|
|
||||||
ui->labelCoinControlChangeLabel->setText("");
|
|
||||||
else if (!CBitcoinAddress(text.toStdString()).IsValid())
|
|
||||||
{
|
|
||||||
// invalid change address
|
|
||||||
CoinControlDialog::coinControl->destChange = CNoDestination();
|
CoinControlDialog::coinControl->destChange = CNoDestination();
|
||||||
|
|
||||||
ui->lineEditCoinControlChange->setValid(false);
|
|
||||||
ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}");
|
ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}");
|
||||||
|
|
||||||
|
CBitcoinAddress addr = CBitcoinAddress(text.toStdString());
|
||||||
|
|
||||||
|
if (text.isEmpty()) // Nothing entered
|
||||||
|
{
|
||||||
|
ui->labelCoinControlChangeLabel->setText("");
|
||||||
|
}
|
||||||
|
else if (!addr.IsValid()) // Invalid address
|
||||||
|
{
|
||||||
|
ui->lineEditCoinControlChange->setValid(false);
|
||||||
ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid Bitcoin address"));
|
ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid Bitcoin address"));
|
||||||
}
|
}
|
||||||
else
|
else // Valid address
|
||||||
{
|
{
|
||||||
|
CPubKey pubkey;
|
||||||
|
CKeyID keyid;
|
||||||
|
addr.GetKeyID(keyid);
|
||||||
|
if (!model->getPubKey(keyid, pubkey)) // Unknown change address
|
||||||
|
{
|
||||||
|
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);
|
QString associatedLabel = model->getAddressTableModel()->labelForAddress(text);
|
||||||
if (!associatedLabel.isEmpty())
|
if (!associatedLabel.isEmpty())
|
||||||
ui->labelCoinControlChangeLabel->setText(associatedLabel);
|
ui->labelCoinControlChangeLabel->setText(associatedLabel);
|
||||||
else
|
else
|
||||||
{
|
|
||||||
CPubKey pubkey;
|
|
||||||
CKeyID keyid;
|
|
||||||
CBitcoinAddress(text.toStdString()).GetKeyID(keyid);
|
|
||||||
if (model->getPubKey(keyid, pubkey))
|
|
||||||
ui->labelCoinControlChangeLabel->setText(tr("(no label)"));
|
ui->labelCoinControlChangeLabel->setText(tr("(no label)"));
|
||||||
else
|
|
||||||
{
|
|
||||||
// unknown change address
|
|
||||||
CoinControlDialog::coinControl->destChange = CNoDestination();
|
|
||||||
|
|
||||||
ui->lineEditCoinControlChange->setValid(false);
|
CoinControlDialog::coinControl->destChange = addr.Get();
|
||||||
ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}");
|
|
||||||
ui->labelCoinControlChangeLabel->setText(tr("Warning: Unknown change address"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue