Filer
CustomProxyModel.h
Go to the documentation of this file.
1 /*-
2  * Copyright (c) 2022-23 Simon Peter <probono@puredarwin.org>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  */
26 
27 #ifndef CUSTOMPROXYMODEL_H
28 #define CUSTOMPROXYMODEL_H
29 
30 #include <QSortFilterProxyModel>
31 #include <QModelIndex>
32 #include <QSet>
33 #include <QFileSystemWatcher>
34 
44 class CustomProxyModel : public QSortFilterProxyModel
45 {
46 Q_OBJECT
47 
48 public:
53  CustomProxyModel(QObject *parent = nullptr);
54 
65  bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
66 
71  void setFilteringEnabled(bool enable);
72 
79  void setSourceModel(QAbstractItemModel *sourceModel) override;
80 
81  // This gets called when a file is dropped onto the view
82  bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
83 
84  // These functions are used to set the supported drag and drop actions for the model.
85  Qt::DropActions supportedDropActions() const override;
86  Qt::DropActions supportedDragActions() const override;
87  Qt::ItemFlags flags(const QModelIndex &index) const override;
88  bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const override;
89  bool isFilteringEnabled() const;
90 
91 protected:
100  bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
101 
102 private slots:
103  void handleHiddenFileChanged(const QString &path);
104 
105 private:
106  void loadHiddenFileNames(const QString &hiddenFilePath);
107  void updateFiltering();
108 
109  bool filteringEnabled;
110 
114  QSet<QString> hiddenFileNames;
115 
119  QFileSystemWatcher fileWatcher;
120 
121 };
122 
123 #endif // CUSTOMPROXYMODEL_H
A custom proxy model for sorting items in views.
Definition: CustomProxyModel.h:45
void setSourceModel(QAbstractItemModel *sourceModel) override
Sets the source model for the proxy model to sourceModel. We override this because we read the hidden...
Definition: CustomProxyModel.cpp:47
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
Returns whether the item in the row indicated by the given source row and source parent should be inc...
Definition: CustomProxyModel.cpp:194
CustomProxyModel(QObject *parent=nullptr)
Constructs a CustomProxyModel object.
Definition: CustomProxyModel.cpp:41
bool lessThan(const QModelIndex &left, const QModelIndex &right) const override
Returns whether the item referred to by the given index is less than the item referred to by the give...
Definition: CustomProxyModel.cpp:73
void setFilteringEnabled(bool enable)
Toggles the filtering behavior on/off.
Definition: CustomProxyModel.cpp:250