|
24 | 24 | class AddressBookSortFilterProxyModel final : public QSortFilterProxyModel
|
25 | 25 | {
|
26 | 26 | const QString m_type;
|
| 27 | + const bool m_nestedFilterEnabled; |
27 | 28 |
|
28 | 29 | public:
|
29 |
| - AddressBookSortFilterProxyModel(const QString& type, QObject* parent) |
| 30 | + AddressBookSortFilterProxyModel(const QString& type, QObject* parent, bool enableNestedFilter) |
30 | 31 | : QSortFilterProxyModel(parent)
|
31 | 32 | , m_type(type)
|
| 33 | + , m_nestedFilterEnabled(enableNestedFilter) |
32 | 34 | {
|
33 | 35 | setDynamicSortFilter(true);
|
34 | 36 | setFilterCaseSensitivity(Qt::CaseInsensitive);
|
35 | 37 | setSortCaseSensitivity(Qt::CaseInsensitive);
|
| 38 | + |
| 39 | + if (m_nestedFilterEnabled) { |
| 40 | + nextedFilterProxyModel.reset(new AddressBookSortFilterProxyModel(type, this, false)); |
| 41 | + nextedFilterProxyModel->setSourceModel(this); |
| 42 | + } |
| 43 | + } |
| 44 | + |
| 45 | + AddressBookSortFilterProxyModel* nestedProxyModel() const noexcept{ |
| 46 | + if (!m_nestedFilterEnabled) return const_cast<AddressBookSortFilterProxyModel*>(this); |
| 47 | + return nextedFilterProxyModel.get(); |
| 48 | + } |
| 49 | + |
| 50 | + bool isNestedFilterEnabled() const { |
| 51 | + return m_nestedFilterEnabled; |
36 | 52 | }
|
37 | 53 |
|
38 | 54 | protected:
|
@@ -62,6 +78,9 @@ class AddressBookSortFilterProxyModel final : public QSortFilterProxyModel
|
62 | 78 |
|
63 | 79 | return filterBy;
|
64 | 80 | }
|
| 81 | + |
| 82 | +private: |
| 83 | + std::unique_ptr<AddressBookSortFilterProxyModel> nextedFilterProxyModel{nullptr}; |
65 | 84 | };
|
66 | 85 |
|
67 | 86 | AddressBookPage::AddressBookPage(const PlatformStyle *platformStyle, Mode _mode, Tabs _tab, QWidget *parent) :
|
@@ -140,12 +159,12 @@ void AddressBookPage::setModel(AddressTableModel *_model)
|
140 | 159 | return;
|
141 | 160 |
|
142 | 161 | auto type = tab == ReceivingTab ? AddressTableModel::Receive : AddressTableModel::Send;
|
143 |
| - proxyModel = new AddressBookSortFilterProxyModel(type, this); |
| 162 | + proxyModel.reset(new AddressBookSortFilterProxyModel(type, this, false)); |
144 | 163 | proxyModel->setSourceModel(_model);
|
145 | 164 |
|
146 |
| - connect(ui->searchLineEdit, &QLineEdit::textChanged, proxyModel, &QSortFilterProxyModel::setFilterWildcard); |
| 165 | + connect(ui->searchLineEdit, &QLineEdit::textChanged, proxyModel.get(), &QSortFilterProxyModel::setFilterWildcard); |
147 | 166 |
|
148 |
| - ui->tableView->setModel(proxyModel); |
| 167 | + ui->tableView->setModel(proxyModel->nestedProxyModel()); |
149 | 168 | ui->tableView->sortByColumn(0, Qt::AscendingOrder);
|
150 | 169 |
|
151 | 170 | // Set column widths
|
@@ -295,7 +314,7 @@ void AddressBookPage::on_exportButton_clicked()
|
295 | 314 | CSVModelWriter writer(filename);
|
296 | 315 |
|
297 | 316 | // name, column, role
|
298 |
| - writer.setModel(proxyModel); |
| 317 | + writer.setModel(proxyModel.get()); |
299 | 318 | writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole);
|
300 | 319 | writer.addColumn("Address Type", AddressTableModel::Type, Qt::EditRole);
|
301 | 320 | writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole);
|
|
0 commit comments