Skip to content

Commit

Permalink
[qt] Add use available balance in send coins dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
CryptAxe authored and promag committed Sep 13, 2017
1 parent 96ac26e commit d052e38
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/qt/forms/sendcoinsentry.ui
Expand Up @@ -163,7 +163,7 @@
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayoutAmount" stretch="0,1">
<layout class="QHBoxLayout" name="horizontalLayoutAmount" stretch="0,1,0">
<item>
<widget class="BitcoinAmountField" name="payAmount"/>
</item>
Expand All @@ -177,6 +177,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="useAvailableBalanceButton">
<property name="text">
<string>Use available balance</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0">
Expand Down
26 changes: 26 additions & 0 deletions src/qt/sendcoinsdialog.cpp
Expand Up @@ -410,6 +410,7 @@ SendCoinsEntry *SendCoinsDialog::addEntry()
entry->setModel(model);
ui->entries->addWidget(entry);
connect(entry, SIGNAL(removeEntry(SendCoinsEntry*)), this, SLOT(removeEntry(SendCoinsEntry*)));
connect(entry, SIGNAL(useAvailableBalance(SendCoinsEntry*)), this, SLOT(useAvailableBalance(SendCoinsEntry*)));
connect(entry, SIGNAL(payAmountChanged()), this, SLOT(coinControlUpdateLabels()));
connect(entry, SIGNAL(subtractFeeFromAmountChanged()), this, SLOT(coinControlUpdateLabels()));

Expand Down Expand Up @@ -607,6 +608,31 @@ void SendCoinsDialog::on_buttonMinimizeFee_clicked()
minimizeFeeSection(true);
}

void SendCoinsDialog::useAvailableBalance(SendCoinsEntry* entry)
{
// Get CCoinControl instance if CoinControl is enabled or create a new one.
CCoinControl coin_control;
if (model->getOptionsModel()->getCoinControlFeatures()) {
coin_control = *CoinControlDialog::coinControl;
}

// Calculate available amount to send.
CAmount amount = model->getBalance(&coin_control);
for (int i = 0; i < ui->entries->count(); ++i) {
SendCoinsEntry* e = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
if (e && !e->isHidden() && e != entry) {
amount -= e->getValue().amount;
}
}

if (amount > 0) {
entry->checkSubtractFeeFromAmount();
entry->setAmount(amount);
} else {
entry->setAmount(0);
}
}

void SendCoinsDialog::setMinimumFee()
{
ui->radioCustomPerKilobyte->setChecked(true);
Expand Down
1 change: 1 addition & 0 deletions src/qt/sendcoinsdialog.h
Expand Up @@ -76,6 +76,7 @@ private Q_SLOTS:
void on_buttonChooseFee_clicked();
void on_buttonMinimizeFee_clicked();
void removeEntry(SendCoinsEntry* entry);
void useAvailableBalance(SendCoinsEntry* entry);
void updateDisplayUnit();
void coinControlFeatureChanged(bool);
void coinControlButtonClicked();
Expand Down
16 changes: 16 additions & 0 deletions src/qt/sendcoinsentry.cpp
Expand Up @@ -48,6 +48,7 @@ SendCoinsEntry::SendCoinsEntry(const PlatformStyle *_platformStyle, QWidget *par
connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteClicked()));
connect(ui->deleteButton_is, SIGNAL(clicked()), this, SLOT(deleteClicked()));
connect(ui->deleteButton_s, SIGNAL(clicked()), this, SLOT(deleteClicked()));
connect(ui->useAvailableBalanceButton, SIGNAL(clicked()), this, SLOT(useAvailableBalanceClicked()));
}

SendCoinsEntry::~SendCoinsEntry()
Expand Down Expand Up @@ -112,11 +113,21 @@ void SendCoinsEntry::clear()
updateDisplayUnit();
}

void SendCoinsEntry::checkSubtractFeeFromAmount()
{
ui->checkboxSubtractFeeFromAmount->setChecked(true);
}

void SendCoinsEntry::deleteClicked()
{
Q_EMIT removeEntry(this);
}

void SendCoinsEntry::useAvailableBalanceClicked()
{
Q_EMIT useAvailableBalance(this);
}

bool SendCoinsEntry::validate()
{
if (!model)
Expand Down Expand Up @@ -228,6 +239,11 @@ void SendCoinsEntry::setAddress(const QString &address)
ui->payAmount->setFocus();
}

void SendCoinsEntry::setAmount(const CAmount &amount)
{
ui->payAmount->setValue(amount);
}

bool SendCoinsEntry::isClear()
{
return ui->payTo->text().isEmpty() && ui->payTo_is->text().isEmpty() && ui->payTo_s->text().isEmpty();
Expand Down
4 changes: 4 additions & 0 deletions src/qt/sendcoinsentry.h
Expand Up @@ -38,6 +38,7 @@ class SendCoinsEntry : public QStackedWidget

void setValue(const SendCoinsRecipient &value);
void setAddress(const QString &address);
void setAmount(const CAmount &amount);

/** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases
* (issue https://bugreports.qt-project.org/browse/QTBUG-10907).
Expand All @@ -48,14 +49,17 @@ class SendCoinsEntry : public QStackedWidget

public Q_SLOTS:
void clear();
void checkSubtractFeeFromAmount();

Q_SIGNALS:
void removeEntry(SendCoinsEntry *entry);
void useAvailableBalance(SendCoinsEntry* entry);
void payAmountChanged();
void subtractFeeFromAmountChanged();

private Q_SLOTS:
void deleteClicked();
void useAvailableBalanceClicked();
void on_payTo_textChanged(const QString &address);
void on_addressBookButton_clicked();
void on_pasteButton_clicked();
Expand Down

0 comments on commit d052e38

Please sign in to comment.