[qt] receive tab: bech32 address opt-in checkbox
When launched with -adresstype=legacy the checkbox will be hidden.
This commit is contained in:
parent
0910cbe4ef
commit
63ac8907ce
8 changed files with 124 additions and 40 deletions
|
@ -341,7 +341,7 @@ void AddressTableModel::updateEntry(const QString &address,
|
||||||
priv->updateEntry(address, label, isMine, purpose, status);
|
priv->updateEntry(address, label, isMine, purpose, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AddressTableModel::addRow(const QString &type, const QString &label, const QString &address)
|
QString AddressTableModel::addRow(const QString &type, const QString &label, const QString &address, const OutputType address_type)
|
||||||
{
|
{
|
||||||
std::string strLabel = label.toStdString();
|
std::string strLabel = label.toStdString();
|
||||||
std::string strAddress = address.toStdString();
|
std::string strAddress = address.toStdString();
|
||||||
|
@ -384,8 +384,8 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wallet->LearnRelatedScripts(newKey, g_address_type);
|
wallet->LearnRelatedScripts(newKey, address_type);
|
||||||
strAddress = EncodeDestination(GetDestinationForKey(newKey, g_address_type));
|
strAddress = EncodeDestination(GetDestinationForKey(newKey, address_type));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
|
enum OutputType : int;
|
||||||
|
|
||||||
class AddressTablePriv;
|
class AddressTablePriv;
|
||||||
class WalletModel;
|
class WalletModel;
|
||||||
|
|
||||||
|
@ -61,7 +63,7 @@ public:
|
||||||
/* Add an address to the model.
|
/* Add an address to the model.
|
||||||
Returns the added address on success, and an empty string otherwise.
|
Returns the added address on success, and an empty string otherwise.
|
||||||
*/
|
*/
|
||||||
QString addRow(const QString &type, const QString &label, const QString &address);
|
QString addRow(const QString &type, const QString &label, const QString &address, const OutputType address_type);
|
||||||
|
|
||||||
/* Look up label for address in address book, if not found return empty string.
|
/* Look up label for address in address book, if not found return empty string.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
#include <QDataWidgetMapper>
|
#include <QDataWidgetMapper>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
extern OutputType g_address_type;
|
||||||
|
|
||||||
EditAddressDialog::EditAddressDialog(Mode _mode, QWidget *parent) :
|
EditAddressDialog::EditAddressDialog(Mode _mode, QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::EditAddressDialog),
|
ui(new Ui::EditAddressDialog),
|
||||||
|
@ -77,7 +79,8 @@ bool EditAddressDialog::saveCurrentRow()
|
||||||
address = model->addRow(
|
address = model->addRow(
|
||||||
mode == NewSendingAddress ? AddressTableModel::Send : AddressTableModel::Receive,
|
mode == NewSendingAddress ? AddressTableModel::Send : AddressTableModel::Receive,
|
||||||
ui->labelEdit->text(),
|
ui->labelEdit->text(),
|
||||||
ui->addressEdit->text());
|
ui->addressEdit->text(),
|
||||||
|
g_address_type);
|
||||||
break;
|
break;
|
||||||
case EditReceivingAddress:
|
case EditReceivingAddress:
|
||||||
case EditSendingAddress:
|
case EditSendingAddress:
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>776</width>
|
<width>776</width>
|
||||||
<height>364</height>
|
<height>396</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1">
|
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1">
|
||||||
|
@ -28,6 +28,22 @@
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>An optional amount to request. Leave this empty or zero to not request a specific amount.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Amount:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>reqAmount</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="6" column="0">
|
<item row="6" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
|
@ -51,13 +67,6 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="2">
|
|
||||||
<widget class="QLineEdit" name="reqMessage">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Bitcoin network.</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="2">
|
<item row="2" column="2">
|
||||||
<widget class="QLabel" name="label_5">
|
<widget class="QLabel" name="label_5">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -81,32 +90,10 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item row="6" column="2">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLineEdit" name="reqMessage">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>An optional amount to request. Leave this empty or zero to not request a specific amount.</string>
|
<string>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Bitcoin network.</string>
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>&Amount:</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
<property name="buddy">
|
|
||||||
<cstring>reqAmount</cstring>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="2">
|
|
||||||
<widget class="BitcoinAmountField" name="reqAmount">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>80</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>An optional amount to request. Leave this empty or zero to not request a specific amount.</string>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -174,6 +161,73 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="5" column="2">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||||
|
<item>
|
||||||
|
<widget class="BitcoinAmountField" name="reqAmount">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>80</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>1000</width>
|
||||||
|
<height>100</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>An optional amount to request. Leave this empty or zero to not request a specific amount.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="useBech32">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>1000</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::StrongFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Bech32 addresses (BIP-173) are cheaper to spend from and offer better protection against typos. When unchecked a P2SH wrapped SegWit address will be created, compatible with older wallets.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Generate Bech32 address</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -306,6 +360,7 @@
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>reqLabel</tabstop>
|
<tabstop>reqLabel</tabstop>
|
||||||
<tabstop>reqAmount</tabstop>
|
<tabstop>reqAmount</tabstop>
|
||||||
|
<tabstop>useBech32</tabstop>
|
||||||
<tabstop>reqMessage</tabstop>
|
<tabstop>reqMessage</tabstop>
|
||||||
<tabstop>receiveButton</tabstop>
|
<tabstop>receiveButton</tabstop>
|
||||||
<tabstop>clearButton</tabstop>
|
<tabstop>clearButton</tabstop>
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#include <wallet/wallet.h>
|
||||||
|
|
||||||
#include <qt/receivecoinsdialog.h>
|
#include <qt/receivecoinsdialog.h>
|
||||||
#include <qt/forms/ui_receivecoinsdialog.h>
|
#include <qt/forms/ui_receivecoinsdialog.h>
|
||||||
|
|
||||||
|
@ -41,6 +43,15 @@ ReceiveCoinsDialog::ReceiveCoinsDialog(const PlatformStyle *_platformStyle, QWid
|
||||||
ui->removeRequestButton->setIcon(_platformStyle->SingleColorIcon(":/icons/remove"));
|
ui->removeRequestButton->setIcon(_platformStyle->SingleColorIcon(":/icons/remove"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// configure bech32 checkbox, disable if launched with legacy as default:
|
||||||
|
if (model->getDefaultAddressType() == OUTPUT_TYPE_BECH32) {
|
||||||
|
ui->useBech32->setCheckState(Qt::Checked);
|
||||||
|
} else {
|
||||||
|
ui->useBech32->setCheckState(Qt::Unchecked);
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->useBech32->setVisible(model->getDefaultAddressType() != OUTPUT_TYPE_LEGACY);
|
||||||
|
|
||||||
// context menu actions
|
// context menu actions
|
||||||
QAction *copyURIAction = new QAction(tr("Copy URI"), this);
|
QAction *copyURIAction = new QAction(tr("Copy URI"), this);
|
||||||
QAction *copyLabelAction = new QAction(tr("Copy label"), this);
|
QAction *copyLabelAction = new QAction(tr("Copy label"), this);
|
||||||
|
@ -133,7 +144,11 @@ void ReceiveCoinsDialog::on_receiveButton_clicked()
|
||||||
QString address;
|
QString address;
|
||||||
QString label = ui->reqLabel->text();
|
QString label = ui->reqLabel->text();
|
||||||
/* Generate new receiving address */
|
/* Generate new receiving address */
|
||||||
address = model->getAddressTableModel()->addRow(AddressTableModel::Receive, label, "");
|
OutputType address_type = model->getDefaultAddressType();
|
||||||
|
if (address_type != OUTPUT_TYPE_LEGACY) {
|
||||||
|
address_type = ui->useBech32->isChecked() ? OUTPUT_TYPE_BECH32 : OUTPUT_TYPE_P2SH_SEGWIT;
|
||||||
|
}
|
||||||
|
address = model->getAddressTableModel()->addRow(AddressTableModel::Receive, label, "", address_type);
|
||||||
SendCoinsRecipient info(address, label,
|
SendCoinsRecipient info(address, label,
|
||||||
ui->reqAmount->value(), ui->reqMessage->text());
|
ui->reqAmount->value(), ui->reqMessage->text());
|
||||||
ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this);
|
ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this);
|
||||||
|
|
|
@ -733,6 +733,11 @@ bool WalletModel::hdEnabled() const
|
||||||
return wallet->IsHDEnabled();
|
return wallet->IsHDEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OutputType WalletModel::getDefaultAddressType() const
|
||||||
|
{
|
||||||
|
return g_address_type;
|
||||||
|
}
|
||||||
|
|
||||||
int WalletModel::getDefaultConfirmTarget() const
|
int WalletModel::getDefaultConfirmTarget() const
|
||||||
{
|
{
|
||||||
return nTxConfirmTarget;
|
return nTxConfirmTarget;
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
|
enum OutputType : int;
|
||||||
|
|
||||||
class AddressTableModel;
|
class AddressTableModel;
|
||||||
class OptionsModel;
|
class OptionsModel;
|
||||||
class PlatformStyle;
|
class PlatformStyle;
|
||||||
|
@ -214,6 +216,8 @@ public:
|
||||||
|
|
||||||
bool hdEnabled() const;
|
bool hdEnabled() const;
|
||||||
|
|
||||||
|
OutputType getDefaultAddressType() const;
|
||||||
|
|
||||||
int getDefaultConfirmTarget() const;
|
int getDefaultConfirmTarget() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -99,7 +99,7 @@ enum WalletFeature
|
||||||
FEATURE_LATEST = FEATURE_COMPRPUBKEY // HD is optional, use FEATURE_COMPRPUBKEY as latest version
|
FEATURE_LATEST = FEATURE_COMPRPUBKEY // HD is optional, use FEATURE_COMPRPUBKEY as latest version
|
||||||
};
|
};
|
||||||
|
|
||||||
enum OutputType
|
enum OutputType : int
|
||||||
{
|
{
|
||||||
OUTPUT_TYPE_NONE,
|
OUTPUT_TYPE_NONE,
|
||||||
OUTPUT_TYPE_LEGACY,
|
OUTPUT_TYPE_LEGACY,
|
||||||
|
|
Loading…
Reference in a new issue