|
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) :
|
@@ -144,12 +163,12 @@ void AddressBookPage::setModel(AddressTableModel *_model)
|
144 | 163 | return;
|
145 | 164 |
|
146 | 165 | auto type = tab == ReceivingTab ? AddressTableModel::Receive : AddressTableModel::Send;
|
147 |
| - proxyModel = new AddressBookSortFilterProxyModel(type, this); |
| 166 | + proxyModel.reset(new AddressBookSortFilterProxyModel(type, this, false)); |
148 | 167 | proxyModel->setSourceModel(_model);
|
149 | 168 |
|
150 |
| - connect(ui->searchLineEdit, &QLineEdit::textChanged, proxyModel, &QSortFilterProxyModel::setFilterWildcard); |
| 169 | + connect(ui->searchLineEdit, &QLineEdit::textChanged, proxyModel.get(), &QSortFilterProxyModel::setFilterWildcard); |
151 | 170 |
|
152 |
| - ui->tableView->setModel(proxyModel); |
| 171 | + ui->tableView->setModel(proxyModel->nestedProxyModel()); |
153 | 172 | ui->tableView->sortByColumn(0, Qt::AscendingOrder);
|
154 | 173 |
|
155 | 174 | // Set column widths
|
@@ -299,7 +318,7 @@ void AddressBookPage::on_exportButton_clicked()
|
299 | 318 | CSVModelWriter writer(filename);
|
300 | 319 |
|
301 | 320 | // name, column, role
|
302 |
| - writer.setModel(proxyModel); |
| 321 | + writer.setModel(proxyModel.get()); |
303 | 322 | writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole);
|
304 | 323 | writer.addColumn("Address Type", AddressTableModel::Type, Qt::EditRole);
|
305 | 324 | writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole);
|
|
0 commit comments