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.
wowlet/src/model/ForumModel.cpp

104 lines
2.4 KiB

// SPDX-License-Identifier: BSD-3-Clause
// Copyright (c) 2020-2021, The Monero Project.
#include "ForumModel.h"
ForumModel::ForumModel(QObject *parent)
: QAbstractTableModel(parent)
{
}
void ForumModel::clear() {
beginResetModel();
m_posts.clear();
endResetModel();
}
void ForumModel::updatePosts(const QList<QSharedPointer<ForumPost>>& posts) {
beginResetModel();
m_posts.clear();
for (const auto& post : posts) {
m_posts.push_back(post);
}
endResetModel();
}
int ForumModel::rowCount(const QModelIndex &parent) const{
if (parent.isValid()) {
return 0;
}
return m_posts.count();
}
int ForumModel::columnCount(const QModelIndex &parent) const
{
if (parent.isValid()) {
return 0;
}
return ModelColumn::COUNT;
}
QVariant ForumModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.row() < 0 || index.row() >= m_posts.count())
return QVariant();
QSharedPointer<ForumPost> post = m_posts.at(index.row());
if(role == Qt::DisplayRole) {
switch(index.column()) {
case Title:
return post->title;
case Author:
return post->author;
case Comments:
return QString::number(post->comments);
default:
return QVariant();
}
}
else if (role == Qt::TextAlignmentRole) {
switch(index.column()) {
case Comments:
return Qt::AlignRight;
default:
return QVariant();
}
}
return QVariant();
}
QVariant ForumModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role != Qt::DisplayRole) {
return QVariant();
}
if (orientation == Qt::Horizontal)
{
switch(section) {
case Title:
return QString("Forum Post");
case Author:
return QString("Author");
case Comments:
return QString("Comments");
default:
return QVariant();
}
}
return QVariant();
}
QSharedPointer<ForumPost> ForumModel::post(int row) {
if (row < 0 || row >= m_posts.size()) {
qCritical("%s: no forum post for index %d", __FUNCTION__, row);
return QSharedPointer<ForumPost>();
}
return m_posts.at(row);
}