1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
/*
* Cantata
*
* Copyright (c) 2011-2022 Craig Drummond <craig.p.drummond@gmail.com>
*
* ----
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef PROXYMODEL_H
#define PROXYMODEL_H
#include "config.h"
#include "mpd-interface/song.h"
#include <QSortFilterProxyModel>
#include <QStringList>
class QMimeData;
class ProxyModel : public QSortFilterProxyModel {
public:
ProxyModel(QObject* parent) : QSortFilterProxyModel(parent), isSorted(false), filterEnabled(false), filter(nullptr) {}
~ProxyModel() override {}
bool update(const QString& text);
const void* filterItem() const { return filter; }
void setFilterItem(void* f) { filter = f; }
void setRootIndex(const QModelIndex& idx) { rootIndex = idx.isValid() ? mapToSource(idx) : idx; }
bool isChildOfRoot(const QModelIndex& idx) const;
bool isEmpty() const { return filterStrings.isEmpty() && nullptr == filter; }
bool enabled() const { return filterEnabled; }
const QString& filterText() const { return origFilterText; }
void resort();
void sort()
{
isSorted = false;
sort(0);
}
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
QList<int> mapToSourceRows(const QModelIndexList& list) const;
QModelIndex mapToSource(const QModelIndex& idx) const override { return QSortFilterProxyModel::mapToSource(idx); }
QModelIndexList mapToSource(const QModelIndexList& list, bool leavesOnly = true) const;
QMimeData* mimeData(const QModelIndexList& indexes) const override;
QModelIndexList leaves(const QModelIndexList& list) const;
protected:
bool matchesFilter(const Song& s) const;
bool matchesFilter(const QStringList& strings) const;
private:
QModelIndexList leaves(const QModelIndex& idx) const;
protected:
bool isSorted;
bool filterEnabled;
QModelIndex rootIndex;
QString origFilterText;
QStringList filterStrings;
uint unmatchedStrings;
const void* filter;
quint16 yearFrom;
quint16 yearTo;
};
#endif
|