Model for storing Danbooru tags

This commit is contained in:
Luca Beltrame 2015-02-17 00:28:31 +01:00
parent 64464c15fe
commit 7c61efc3c2
2 changed files with 145 additions and 0 deletions

View file

@ -0,0 +1,91 @@
/*
* Copyright 2015 Luca Beltrame <lbeltrame@kde.org>
*
* This file is part of Danbooru Client.
*
* Danbooru Client 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 3 of the License, or
* (at your option) any later version.
*
* Danbooru Client 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 Danbooru Client. If not, see <http://www.gnu.org/licenses/>.
*/
#include "danboorutagmodel.h"
#include "libdanbooru/danboorutag.h"
namespace Danbooru {
DanbooruTagModel::DanbooruTagModel(QObject *parent): QAbstractListModel(parent)
{
}
DanbooruTagModel::~DanbooruTagModel()
{
if (!m_items.isEmpty()) {
qDeleteAll(m_items);
m_items.clear();
}
}
int DanbooruTagModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return m_items.size();
}
QVariant DanbooruTagModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid()) {
return QVariant();
}
DanbooruTag* tag = m_items.at(index.row());
if (role == Qt::DisplayRole) {
return tag->name();
}
// TODO: More roles depending on the type of information
return QVariant();
}
DanbooruTag* DanbooruTagModel::itemAt(int index) const
{
return m_items.at(index);
}
void DanbooruTagModel::addTag(DanbooruTag* tag)
{
if (!tag) {
return;
}
beginInsertRows(QModelIndex(), m_items.size(), m_items.size());
m_items.append(tag);
endInsertRows();
}
void DanbooruTagModel::clear() {
if (m_items.isEmpty()) {
return;
}
beginRemoveRows(QModelIndex(), 0, m_items.size());
qDeleteAll(m_items);
m_items.clear();
endRemoveRows();
reset();
}
} // namespace Danbooru

View file

@ -0,0 +1,54 @@
/*
* Copyright 2015 Luca Beltrame <lbeltrame@kde.org>
*
* This file is part of Danbooru Client.
*
* Danbooru Client 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 3 of the License, or
* (at your option) any later version.
*
* Danbooru Client 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 Danbooru Client. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef DANBOORU_TAGMODEL_H
#define DANBOORU_TAGMODEL_H
#include <QAbstractListModel>
#include <QVector>
namespace Danbooru {
class DanbooruTag;
class DanbooruTagModel: public QAbstractListModel
{
Q_OBJECT
public:
explicit DanbooruTagModel(QObject* parent=0);
~DanbooruTagModel() = default;
int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
void clear();
DanbooruTag* itemAt(int index) const;
private:
QVector<DanbooruTag*> m_items;
public Q_SLOTS:
void addTag(Danbooru::DanbooruTag* tag);
};
} // namespace Danbooru
#endif