Fix sorting in file browser

This commit is contained in:
Martchus 2016-10-09 17:11:18 +02:00
parent f6f1217f10
commit 8d6d60d939
2 changed files with 13 additions and 3 deletions

View File

@ -8,6 +8,7 @@ FileFilterProxyModel::FileFilterProxyModel(QObject *parent) :
QSortFilterProxyModel(parent),
m_filterEnabled(true)
{
setDynamicSortFilter(false);
}
bool FileFilterProxyModel::isFilterEnabled() const
@ -41,13 +42,19 @@ bool FileFilterProxyModel::isFileAccepted(const QString &path) const
bool FileFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
if(!m_filterEnabled)
if(!m_filterEnabled) {
return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
}
const QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
QFileSystemModel *fileModel = qobject_cast<QFileSystemModel *>(sourceModel());
return fileModel
? (!m_extensionsToBeFiltered.contains(fileModel->fileInfo(index0).suffix()))
: QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
}
void FileFilterProxyModel::sort(int column, Qt::SortOrder order)
{
sourceModel()->sort(column, order);
}
}

View File

@ -9,6 +9,8 @@ namespace QtGui {
class FileFilterProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
Q_PROPERTY(bool filterEnabled READ isFilterEnabled WRITE setFilterEnabled)
Q_PROPERTY(QStringList extensionsToBeFiltered READ extensionsToBeFiltered WRITE setExtensionsToBeFiltered)
public:
FileFilterProxyModel(QObject *parent = nullptr);
@ -20,7 +22,8 @@ public:
bool isFileAccepted(const QString &path) const;
protected:
virtual bool filterAcceptsRow(int source_row, const QModelIndex& sourceParent) const;
virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
private:
bool m_filterEnabled;