From 29aaea2d80a9eb1715b6cddfac2d2aacf76358bd Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Thu, 11 Feb 2016 23:55:16 +0100 Subject: launchpad ~mzanetti/rockwork/trunk r87 --- rockwork/applicationsfiltermodel.cpp | 102 +++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 rockwork/applicationsfiltermodel.cpp (limited to 'rockwork/applicationsfiltermodel.cpp') diff --git a/rockwork/applicationsfiltermodel.cpp b/rockwork/applicationsfiltermodel.cpp new file mode 100644 index 0000000..d3eb10d --- /dev/null +++ b/rockwork/applicationsfiltermodel.cpp @@ -0,0 +1,102 @@ +#include "applicationsfiltermodel.h" +#include "applicationsmodel.h" + +ApplicationsFilterModel::ApplicationsFilterModel(QObject *parent): + QSortFilterProxyModel(parent) +{ + sort(0); +} + +ApplicationsModel *ApplicationsFilterModel::appsModel() const +{ + return m_appsModel; +} + +void ApplicationsFilterModel::setAppsModel(ApplicationsModel *model) +{ + if (m_appsModel != model) { + m_appsModel = model; + setSourceModel(m_appsModel); + emit appsModelChanged(); + } +} + +bool ApplicationsFilterModel::showWatchApps() const +{ + return m_showWatchApps; +} + +void ApplicationsFilterModel::setShowWatchApps(bool showWatchApps) +{ + if (m_showWatchApps != showWatchApps) { + m_showWatchApps = showWatchApps; + emit showWatchAppsChanged(); + invalidateFilter(); + } +} + +bool ApplicationsFilterModel::showWatchFaces() const +{ + return m_showWatchFaces; +} + +void ApplicationsFilterModel::setShowWatchFaces(bool showWatchFaces) +{ + if (m_showWatchFaces != showWatchFaces) { + m_showWatchFaces = showWatchFaces; + emit showWatchFacesChanged(); + invalidateFilter(); + } +} + +bool ApplicationsFilterModel::sortByGroupId() const +{ + return m_sortByGroupId; +} + +void ApplicationsFilterModel::setSortByGroupId(bool sortByGroupId) +{ + if (m_sortByGroupId != sortByGroupId) { + m_sortByGroupId = sortByGroupId; + emit sortByGroupIdChanged(); + sort(0); + } +} + +bool ApplicationsFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const +{ + Q_UNUSED(source_parent) + AppItem *item = m_appsModel->get(source_row); + if (m_showWatchApps && !item->isWatchFace()) { + return true; + } + if (m_showWatchFaces && item->isWatchFace()) { + return true; + } + return false; +} + +bool ApplicationsFilterModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const +{ + AppItem *leftItem = m_appsModel->get(source_left.row()); + AppItem *rightItem = m_appsModel->get(source_right.row()); + + if (m_sortByGroupId && leftItem->groupId() != rightItem->groupId()) { + return leftItem->groupId() < rightItem->groupId(); + } + + return QSortFilterProxyModel::lessThan(source_left, source_right); +} + +AppItem* ApplicationsFilterModel::get(int index) const +{ + return m_appsModel->get(mapToSource(this->index(index, 0)).row()); +} + +void ApplicationsFilterModel::move(int from, int to) +{ + QModelIndex sourceFrom = mapToSource(index(from, 0)); + QModelIndex sourceTo = mapToSource(index(to, 0)); + m_appsModel->move(sourceFrom.row(), sourceTo.row()); +} + -- cgit v1.2.3