diff --git a/src/coinswidget.cpp b/src/coinswidget.cpp index c6f0d08..e7026de 100644 --- a/src/coinswidget.cpp +++ b/src/coinswidget.cpp @@ -59,6 +59,8 @@ CoinsWidget::CoinsWidget(QSharedPointer ctx, QWidget *parent) connect(ui->coins, &QTreeView::customContextMenuRequested, this, &CoinsWidget::showContextMenu); connect(ui->coins, &QTreeView::doubleClicked, this, &CoinsWidget::viewOutput); + + connect(ui->search, &QLineEdit::textChanged, this, &CoinsWidget::setSearchFilter); } void CoinsWidget::setModel(CoinsModel * model, Coins * coins) { @@ -83,6 +85,10 @@ void CoinsWidget::setModel(CoinsModel * model, Coins * coins) { ui->coins->setSortingEnabled(true); } +void CoinsWidget::setSearchbarVisible(bool visible) { + ui->search->setVisible(visible); +} + void CoinsWidget::showContextMenu(const QPoint &point) { QModelIndexList list = ui->coins->selectionModel()->selectedRows(); @@ -130,6 +136,11 @@ void CoinsWidget::setShowSpent(bool show) m_proxyModel->setShowSpent(show); } +void CoinsWidget::setSearchFilter(const QString &filter) { + if (!m_proxyModel) return; + m_proxyModel->setSearchFilter(filter); +} + void CoinsWidget::freezeOutput() { QModelIndex index = ui->coins->currentIndex(); QVector indexes = {m_proxyModel->mapToSource(index).row()}; diff --git a/src/coinswidget.h b/src/coinswidget.h index e87f2f1..a9c418e 100644 --- a/src/coinswidget.h +++ b/src/coinswidget.h @@ -26,6 +26,9 @@ public: void setModel(CoinsModel * model, Coins * coins); ~CoinsWidget() override; +public slots: + void setSearchbarVisible(bool visible); + private slots: void showHeaderMenu(const QPoint& position); void setShowSpent(bool show); @@ -36,6 +39,7 @@ private slots: void viewOutput(); void onSweepOutput(); void onSweepMulti(); + void setSearchFilter(const QString &filter); private: void freezeCoins(const QVector& indexes); diff --git a/src/coinswidget.ui b/src/coinswidget.ui index cddca31..eaf7a76 100644 --- a/src/coinswidget.ui +++ b/src/coinswidget.ui @@ -29,6 +29,13 @@ 0 + + + + Search.. + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 04adfc0..353407f 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,12 +1,12 @@ // SPDX-License-Identifier: BSD-3-Clause // Copyright (c) 2020-2021, The Monero Project. -#include -#include - #include "mainwindow.h" #include "ui_mainwindow.h" +#include +#include + #include "config-feather.h" #include "dialog/TxConfDialog.h" #include "dialog/TxConfAdvDialog.h" @@ -1414,6 +1414,7 @@ void MainWindow::toggleSearchbar(bool visible) { m_historyWidget->setSearchbarVisible(visible); m_receiveWidget->setSearchbarVisible(visible); m_contactsWidget->setSearchbarVisible(visible); + m_coinsWidget->setSearchbarVisible(visible); int currentTab = ui->tabWidget->currentIndex(); if (currentTab == Tabs::HISTORY) diff --git a/src/model/CoinsProxyModel.cpp b/src/model/CoinsProxyModel.cpp index d376813..1920d80 100644 --- a/src/model/CoinsProxyModel.cpp +++ b/src/model/CoinsProxyModel.cpp @@ -6,19 +6,32 @@ #include "libwalletqt/CoinsInfo.h" CoinsProxyModel::CoinsProxyModel(QObject *parent, Coins *coins) - : QSortFilterProxyModel(parent), m_coins(coins) + : QSortFilterProxyModel(parent) + , m_coins(coins) + , m_searchRegExp("") { + m_searchRegExp.setPatternOptions(QRegularExpression::CaseInsensitiveOption); setSortRole(Qt::UserRole); } +void CoinsProxyModel::setShowSpent(const bool showSpent) { + m_showSpent = showSpent; + invalidateFilter(); +} + +void CoinsProxyModel::setSearchFilter(const QString &searchString) { + m_searchRegExp.setPattern(searchString); + invalidateFilter(); +} + bool CoinsProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { - bool isSpent; - int accountIndex; - m_coins->coin(sourceRow, [&isSpent, &accountIndex](const CoinsInfo &c){ - isSpent = c.spent(); - accountIndex = c.subaddrAccount(); - }); + CoinsInfo* coin = m_coins->coin(sourceRow); - return !(!m_showSpent && isSpent) && accountIndex == 0; + if (!m_searchRegExp.pattern().isEmpty()) { + return coin->pubKey().contains(m_searchRegExp) || coin->address().contains(m_searchRegExp) + || coin->hash().contains(m_searchRegExp) || coin->addressLabel().contains(m_searchRegExp); + } + + return !(!m_showSpent && coin->spent()) && coin->subaddrAccount() == 0; } \ No newline at end of file diff --git a/src/model/CoinsProxyModel.h b/src/model/CoinsProxyModel.h index 43bff13..6c522ed 100644 --- a/src/model/CoinsProxyModel.h +++ b/src/model/CoinsProxyModel.h @@ -5,6 +5,7 @@ #define FEATHER_COINSPROXYMODEL_H #include + #include "libwalletqt/Coins.h" class CoinsProxyModel : public QSortFilterProxyModel @@ -12,17 +13,16 @@ class CoinsProxyModel : public QSortFilterProxyModel Q_OBJECT public: explicit CoinsProxyModel(QObject* parent, Coins *coins); - bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; + bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; public slots: - void setShowSpent(const bool showSpent){ - m_showSpent = showSpent; - invalidateFilter(); - } + void setSearchFilter(const QString &searchString); + void setShowSpent(bool showSpent); private: - bool m_showSpent = false; Coins *m_coins; + bool m_showSpent = false; + QRegularExpression m_searchRegExp; }; #endif //FEATHER_COINSPROXYMODEL_H diff --git a/src/model/TransactionHistoryProxyModel.cpp b/src/model/TransactionHistoryProxyModel.cpp index 40b7f34..c549c01 100644 --- a/src/model/TransactionHistoryProxyModel.cpp +++ b/src/model/TransactionHistoryProxyModel.cpp @@ -7,12 +7,11 @@ #include "libwalletqt/TransactionInfo.h" TransactionHistoryProxyModel::TransactionHistoryProxyModel(Wallet *wallet, QObject *parent) - : QSortFilterProxyModel(parent), - m_wallet(wallet), - m_searchRegExp("") + : QSortFilterProxyModel(parent) + , m_wallet(wallet) + , m_searchRegExp("") { - m_searchRegExp.setCaseSensitivity(Qt::CaseInsensitive); - m_searchRegExp.setPatternSyntax(QRegExp::RegExp); + m_searchRegExp.setPatternOptions(QRegularExpression::CaseInsensitiveOption); m_history = m_wallet->history(); } diff --git a/src/model/TransactionHistoryProxyModel.h b/src/model/TransactionHistoryProxyModel.h index a84535d..45feb00 100644 --- a/src/model/TransactionHistoryProxyModel.h +++ b/src/model/TransactionHistoryProxyModel.h @@ -4,11 +4,10 @@ #ifndef FEATHER_TRANSACTIONHISTORYPROXYMODEL_H #define FEATHER_TRANSACTIONHISTORYPROXYMODEL_H +#include + #include "libwalletqt/TransactionHistory.h" #include "libwalletqt/Wallet.h" -#include "libwalletqt/TransactionHistory.h" - -#include class TransactionHistoryProxyModel : public QSortFilterProxyModel { @@ -28,7 +27,7 @@ private: Wallet *m_wallet; TransactionHistory *m_history; - QRegExp m_searchRegExp; + QRegularExpression m_searchRegExp; }; #endif //FEATHER_TRANSACTIONHISTORYPROXYMODEL_H