You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
5.1 KiB
228 lines
5.1 KiB
/*****************************************************************************
|
|
* Copyright (C) 2023 VLC authors and VideoLAN
|
|
*
|
|
* 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; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
|
*****************************************************************************/
|
|
|
|
#include "base_model.hpp"
|
|
#include "base_model_p.hpp"
|
|
|
|
BaseModel::BaseModel(BaseModelPrivate* priv, QObject* parent)
|
|
: QAbstractListModel(parent)
|
|
, d_ptr(priv)
|
|
{
|
|
connect(this, &BaseModel::offsetChanged, this, &BaseModel::resetCache);
|
|
connect(this, &BaseModel::limitChanged, this, &BaseModel::resetCache);
|
|
connect(this, &BaseModel::sortCriteriaChanged, this, &BaseModel::resetCache);
|
|
connect(this, &BaseModel::sortOrderChanged, this, &BaseModel::resetCache);
|
|
connect(this, &BaseModel::searchPatternChanged, this, &BaseModel::resetCache);
|
|
}
|
|
|
|
BaseModel::~BaseModel()
|
|
{}
|
|
|
|
void BaseModel::classBegin()
|
|
{
|
|
Q_D(BaseModel);
|
|
d->m_qmlInitializing = true;
|
|
}
|
|
|
|
void BaseModel::componentComplete()
|
|
{
|
|
Q_D(BaseModel);
|
|
d->m_qmlInitializing = false;
|
|
if (d->initializeModel())
|
|
d->validateCache();
|
|
}
|
|
|
|
int BaseModel::rowCount(const QModelIndex &parent) const
|
|
{
|
|
Q_D(const BaseModel);
|
|
if (parent.isValid())
|
|
return 0;
|
|
return d->getCount();
|
|
}
|
|
|
|
|
|
void BaseModel::onCacheDataChanged(int first, int last)
|
|
{
|
|
emit dataChanged(index(first), index(last));
|
|
}
|
|
|
|
void BaseModel::onCacheBeginInsertRows(int first, int last)
|
|
{
|
|
emit beginInsertRows({}, first, last);
|
|
}
|
|
|
|
void BaseModel::onCacheBeginRemoveRows(int first, int last)
|
|
{
|
|
emit beginRemoveRows({}, first, last);
|
|
}
|
|
|
|
void BaseModel::onCacheBeginMoveRows(int first, int last, int destination)
|
|
{
|
|
emit beginMoveRows({}, first, last, {}, destination);
|
|
}
|
|
|
|
unsigned int BaseModel::getLimit() const
|
|
{
|
|
Q_D(const BaseModel);
|
|
return d->m_limit;
|
|
}
|
|
|
|
void BaseModel::setLimit(unsigned int limit)
|
|
{
|
|
Q_D(BaseModel);
|
|
if (d->m_limit == limit)
|
|
return;
|
|
d->m_limit = limit;
|
|
emit limitChanged();
|
|
}
|
|
|
|
unsigned int BaseModel::getOffset() const
|
|
{
|
|
Q_D(const BaseModel);
|
|
return d->m_offset;
|
|
}
|
|
|
|
void BaseModel::setOffset(unsigned int offset)
|
|
{
|
|
Q_D(BaseModel);
|
|
if (d->m_offset == offset)
|
|
return;
|
|
d->m_offset = offset;
|
|
emit offsetChanged();
|
|
}
|
|
|
|
const QString& BaseModel::searchPattern() const
|
|
{
|
|
Q_D(const BaseModel);
|
|
return d->m_searchPattern;
|
|
}
|
|
|
|
void BaseModel::setSearchPattern( const QString& pattern )
|
|
{
|
|
Q_D(BaseModel);
|
|
QString patternToApply = pattern.length() == 0 ? QString{} : pattern;
|
|
if (patternToApply == d->m_searchPattern)
|
|
/* No changes */
|
|
return;
|
|
|
|
d->m_searchPattern = patternToApply;
|
|
emit searchPatternChanged();
|
|
}
|
|
|
|
Qt::SortOrder BaseModel::getSortOrder() const
|
|
{
|
|
Q_D(const BaseModel);
|
|
return d->m_sortOrder;
|
|
}
|
|
|
|
void BaseModel::setSortOrder(Qt::SortOrder order)
|
|
{
|
|
Q_D(BaseModel);
|
|
if (d->m_sortOrder == order)
|
|
return;
|
|
d->m_sortOrder = order;
|
|
emit sortOrderChanged();
|
|
}
|
|
|
|
const QString BaseModel::getSortCriteria() const
|
|
{
|
|
Q_D(const BaseModel);
|
|
return d->m_sortCriteria;
|
|
}
|
|
|
|
void BaseModel::setSortCriteria(const QString& criteria)
|
|
{
|
|
Q_D(BaseModel);
|
|
if (d->m_sortCriteria == criteria)
|
|
return;
|
|
d->m_sortCriteria = criteria;
|
|
emit sortCriteriaChanged();
|
|
}
|
|
|
|
void BaseModel::unsetSortCriteria()
|
|
{
|
|
setSortCriteria({});
|
|
}
|
|
|
|
void BaseModel::onResetRequested()
|
|
{
|
|
Q_D(BaseModel);
|
|
d->invalidateCache();
|
|
}
|
|
|
|
void BaseModel::onLocalSizeChanged(size_t queryCount, size_t maximumCount)
|
|
{
|
|
emit countChanged(queryCount);
|
|
emit maximumCountChanged(maximumCount);
|
|
emit loadingChanged();
|
|
}
|
|
|
|
void BaseModel::validateCache() const
|
|
{
|
|
Q_D(const BaseModel);
|
|
d->validateCache();
|
|
}
|
|
|
|
void BaseModel::resetCache()
|
|
{
|
|
Q_D(BaseModel);
|
|
d->resetCache();
|
|
}
|
|
|
|
void BaseModel::invalidateCache()
|
|
{
|
|
Q_D(BaseModel);
|
|
d->invalidateCache();
|
|
}
|
|
|
|
unsigned int BaseModel::getCount() const
|
|
{
|
|
Q_D(const BaseModel);
|
|
return d->getCount();
|
|
}
|
|
|
|
unsigned int BaseModel::getMaximumCount() const
|
|
{
|
|
Q_D(const BaseModel);
|
|
return d->getMaximumCount();
|
|
}
|
|
|
|
bool BaseModel::loading() const
|
|
{
|
|
Q_D(const BaseModel);
|
|
return d->loading();
|
|
}
|
|
|
|
QMap<QString, QVariant> BaseModel::getDataAt(const QModelIndex & index) const
|
|
{
|
|
QMap<QString, QVariant> dataDict;
|
|
QHash<int, QByteArray> roles = roleNames();
|
|
|
|
for (int role: roles.keys())
|
|
{
|
|
dataDict[roles[role]] = data(index, role);
|
|
}
|
|
return dataDict;
|
|
}
|
|
|
|
QMap<QString, QVariant> BaseModel::getDataAt(int idx) const
|
|
{
|
|
return getDataAt(index(idx));
|
|
}
|
|
|
|
|
|
|