6#include <qt/forms/ui_addressbookpage.h>
17#include <QSortFilterProxyModel>
18#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
19#include <QRegularExpression>
30 : QSortFilterProxyModel(parent)
33 setDynamicSortFilter(
true);
34 setFilterCaseSensitivity(Qt::CaseInsensitive);
35 setSortCaseSensitivity(Qt::CaseInsensitive);
41 auto model = sourceModel();
50#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
51 const auto pattern = filterRegularExpression();
53 const auto pattern = filterRegExp();
55 return (model->data(address).toString().contains(pattern) ||
56 model->data(label).toString().contains(pattern));
69 ui->newAddress->setIcon(QIcon());
70 ui->copyAddress->setIcon(QIcon());
71 ui->deleteAddress->setIcon(QIcon());
72 ui->exportButton->setIcon(QIcon());
83 case SendingTab: setWindowTitle(tr(
"Choose the address to send coins to"));
break;
84 case ReceivingTab: setWindowTitle(tr(
"Choose the address to receive coins with"));
break;
86 connect(
ui->tableView, &QTableView::doubleClicked,
this, &QDialog::accept);
87 ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
88 ui->tableView->setFocus();
89 ui->closeButton->setText(tr(
"C&hoose"));
90 ui->exportButton->hide();
95 ui->labelExplanation->setText(tr(
"These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins."));
96 ui->deleteAddress->setVisible(
true);
97 ui->newAddress->setVisible(
true);
100 ui->labelExplanation->setText(tr(
"These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses.\nSigning is only possible with addresses of the type 'legacy'."));
101 ui->deleteAddress->setVisible(
false);
102 ui->newAddress->setVisible(
false);
117 connect(
ui->closeButton, &QPushButton::clicked,
this, &QDialog::accept);
129 this->
model = _model;
137 connect(
ui->searchLineEdit, &QLineEdit::textChanged,
proxyModel, &QSortFilterProxyModel::setFilterWildcard);
140 ui->tableView->sortByColumn(0, Qt::AscendingOrder);
146 connect(
ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged,
171 if(!
ui->tableView->selectionModel())
173 QModelIndexList indexes =
ui->tableView->selectionModel()->selectedRows();
174 if(indexes.isEmpty())
181 dlg->setModel(
model);
182 QModelIndex origIndex =
proxyModel->mapToSource(indexes.at(0));
183 dlg->loadRow(origIndex.row());
206 QTableView *table =
ui->tableView;
207 if(!table->selectionModel())
210 QModelIndexList indexes = table->selectionModel()->selectedRows();
211 if(!indexes.isEmpty())
213 table->model()->removeRow(indexes.at(0).row());
220 QTableView *table =
ui->tableView;
221 if(!table->selectionModel())
224 if(table->selectionModel()->hasSelection())
230 ui->deleteAddress->setEnabled(
true);
231 ui->deleteAddress->setVisible(
true);
235 ui->deleteAddress->setEnabled(
false);
236 ui->deleteAddress->setVisible(
false);
239 ui->copyAddress->setEnabled(
true);
243 ui->deleteAddress->setEnabled(
false);
244 ui->copyAddress->setEnabled(
false);
250 QTableView *table =
ui->tableView;
251 if(!table->selectionModel() || !table->model())
257 for (
const QModelIndex& index : indexes) {
258 QVariant address = table->model()->data(index);
268 QDialog::done(retval);
275 tr(
"Export Address List"), QString(),
278 tr(
"Comma separated file") + QLatin1String(
" (*.csv)"),
nullptr);
280 if (filename.isNull())
290 if(!writer.
write()) {
291 QMessageBox::critical(
this, tr(
"Exporting Failed"),
294 tr(
"There was an error trying to save the address list to %1. Please try again.").arg(filename));
300 QModelIndex index =
ui->tableView->indexAt(point);
313 ui->tableView->setFocus();
314 ui->tableView->selectRow(idx.row());
326 case SendingTab: setWindowTitle(tr(
"Sending addresses - %1").arg(walletName));
break;
327 case ReceivingTab: setWindowTitle(tr(
"Receiving addresses - %1").arg(walletName));
break;
Widget that shows a list of sending or receiving addresses.
void onEditAction()
Edit currently selected address entry (no button)
@ ForEditing
Open address book for editing.
@ ForSelection
Open address book to pick address.
void setModel(AddressTableModel *model)
void onCopyLabelAction()
Copy label of currently selected address entry to clipboard (no button)
QString newAddressToSelect
void done(int retval) override
AddressBookPage(const PlatformStyle *platformStyle, Mode mode, Tabs tab, QWidget *parent=nullptr)
void on_copyAddress_clicked()
Copy address of currently selected address entry to clipboard.
void on_exportButton_clicked()
Export button clicked.
void on_deleteAddress_clicked()
Delete currently selected address entry.
void contextualMenu(const QPoint &point)
Spawn contextual menu (right mouse menu) for address book entry.
AddressTableModel * model
void updateWindowsTitleWithWalletName()
void selectionChanged()
Set button states based on selected tab and selection.
void selectNewAddress(const QModelIndex &parent, int begin, int)
New entry/entries were added to address table.
void on_newAddress_clicked()
Create a new address for receiving coins and / or add a new address book entry.
AddressBookSortFilterProxyModel * proxyModel
bool filterAcceptsRow(int row, const QModelIndex &parent) const override
AddressBookSortFilterProxyModel(const QString &type, QObject *parent)
Qt model of the address book in the core.
@ TypeRole
Type of address (Send or Receive)
@ Address
Bitcoin address.
@ Label
User specified label.
QModelIndex index(int row, int column, const QModelIndex &parent) const override
static const QString Send
Specifies send address.
QString GetWalletDisplayName() const
static const QString Receive
Specifies receive address.
Export a Qt table model to a CSV file.
bool write()
Perform export of the model to CSV.
void setModel(const QAbstractItemModel *model)
void addColumn(const QString &title, int column, int role=Qt::EditRole)
Dialog for editing an address and associated information.
void setModel(AddressTableModel *model)
QString getAddress() const
Utility functions used by the Bitcoin Qt UI.
void ShowModalDialogAsynchronously(QDialog *dialog)
Shows a QDialog instance asynchronously, and deletes it on close.
void handleCloseWindowShortcut(QWidget *w)
void copyEntryData(const QAbstractItemView *view, int column, int role)
Copy a field of the currently selected entry of a view to the clipboard.
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedSuffixOut)
Get save filename, mimics QFileDialog::getSaveFileName, except that it appends a default suffix when ...
constexpr auto dialog_flags