|
28 | 28 | class AddressBookSortFilterProxyModel final : public QSortFilterProxyModel |
29 | 29 | { |
30 | 30 | const QString m_type; |
| 31 | + const bool m_nestedFilterEnabled; |
31 | 32 |
|
32 | 33 | public: |
33 | | - AddressBookSortFilterProxyModel(const QString& type, QObject* parent) |
| 34 | + AddressBookSortFilterProxyModel(const QString& type, QObject* parent, bool enableNestedFilter) |
34 | 35 | : QSortFilterProxyModel(parent) |
35 | 36 | , m_type(type) |
| 37 | + , m_nestedFilterEnabled(enableNestedFilter) |
36 | 38 | { |
37 | 39 | setDynamicSortFilter(true); |
38 | 40 | setFilterCaseSensitivity(Qt::CaseInsensitive); |
39 | 41 | setSortCaseSensitivity(Qt::CaseInsensitive); |
| 42 | + |
| 43 | + if (m_nestedFilterEnabled) { |
| 44 | + nextedFilterProxyModel.reset(new AddressBookSortFilterProxyModel(type, this, false)); |
| 45 | + nextedFilterProxyModel->setSourceModel(this); |
| 46 | + } |
| 47 | + } |
| 48 | + |
| 49 | + AddressBookSortFilterProxyModel* nestedProxyModel() const noexcept{ |
| 50 | + if (!m_nestedFilterEnabled) return const_cast<AddressBookSortFilterProxyModel*>(this); |
| 51 | + return nextedFilterProxyModel.get(); |
| 52 | + } |
| 53 | + |
| 54 | + bool isNestedFilterEnabled() const { |
| 55 | + return m_nestedFilterEnabled; |
40 | 56 | } |
41 | 57 |
|
42 | 58 | protected: |
@@ -66,6 +82,9 @@ class AddressBookSortFilterProxyModel final : public QSortFilterProxyModel |
66 | 82 |
|
67 | 83 | return filterBy; |
68 | 84 | } |
| 85 | + |
| 86 | +private: |
| 87 | + std::unique_ptr<AddressBookSortFilterProxyModel> nextedFilterProxyModel{nullptr}; |
69 | 88 | }; |
70 | 89 |
|
71 | 90 | AddressBookPage::AddressBookPage(const PlatformStyle *platformStyle, Mode _mode, Tabs _tab, QWidget *parent) : |
@@ -154,12 +173,12 @@ void AddressBookPage::setModel(AddressTableModel *_model) |
154 | 173 | return; |
155 | 174 |
|
156 | 175 | auto type = tab == ReceivingTab ? AddressTableModel::Receive : AddressTableModel::Send; |
157 | | - proxyModel = new AddressBookSortFilterProxyModel(type, this); |
| 176 | + proxyModel.reset(new AddressBookSortFilterProxyModel(type, this, false)); |
158 | 177 | proxyModel->setSourceModel(_model); |
159 | 178 |
|
160 | | - connect(ui->searchLineEdit, &QLineEdit::textChanged, proxyModel, &QSortFilterProxyModel::setFilterWildcard); |
| 179 | + connect(ui->searchLineEdit, &QLineEdit::textChanged, proxyModel.get(), &QSortFilterProxyModel::setFilterWildcard); |
161 | 180 |
|
162 | | - ui->tableView->setModel(proxyModel); |
| 181 | + ui->tableView->setModel(proxyModel->nestedProxyModel()); |
163 | 182 | ui->tableView->sortByColumn(0, Qt::AscendingOrder); |
164 | 183 |
|
165 | 184 | // Set column widths |
@@ -308,7 +327,7 @@ void AddressBookPage::on_exportButton_clicked() |
308 | 327 | CSVModelWriter writer(filename); |
309 | 328 |
|
310 | 329 | // name, column, role |
311 | | - writer.setModel(proxyModel); |
| 330 | + writer.setModel(proxyModel.get()); |
312 | 331 | writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole); |
313 | 332 | writer.addColumn("Address Type", AddressTableModel::Type, Qt::EditRole); |
314 | 333 | writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole); |
|
0 commit comments