|
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