File indexing completed on 2024-05-19 05:57:23

0001 // SPDX-FileCopyrightText: 2022 Plata Hill <plata.hill@kdemail.net>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #include "programsproxymodel.h"
0005 
0006 #include "program.h"
0007 
0008 ProgramsProxyModel::ProgramsProxyModel(QObject *parent)
0009     : QSortFilterProxyModel(parent)
0010     , m_start{}
0011     , m_stop{}
0012 {
0013 }
0014 
0015 ProgramsProxyModel::~ProgramsProxyModel()
0016 {
0017 }
0018 
0019 QDateTime ProgramsProxyModel::start() const
0020 {
0021     return m_start;
0022 }
0023 
0024 void ProgramsProxyModel::setStart(const QDateTime &start)
0025 {
0026     if (m_start != start) {
0027         m_start = start;
0028         invalidateFilter();
0029         Q_EMIT startChanged();
0030     }
0031 }
0032 
0033 QDateTime ProgramsProxyModel::stop() const
0034 {
0035     return m_stop;
0036 }
0037 
0038 void ProgramsProxyModel::setStop(const QDateTime &stop)
0039 {
0040     if (m_stop != stop) {
0041         m_stop = stop;
0042         invalidateFilter();
0043         Q_EMIT stopChanged();
0044     }
0045 }
0046 
0047 bool ProgramsProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
0048 {
0049     const auto idx = sourceModel()->index(source_row, 0, source_parent);
0050 
0051     if (!QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent)) {
0052         return false;
0053     }
0054 
0055     // at least one filter
0056     auto program = idx.data(0).value<Program *>();
0057 
0058     const bool startOk = program->stop() > m_start;
0059     const bool stopOk = program->start() <= m_stop;
0060 
0061     return startOk && stopOk;
0062 }