diff --git a/src/model/danboorutagmodel.cpp b/src/model/danboorutagmodel.cpp new file mode 100644 index 0000000..32705f8 --- /dev/null +++ b/src/model/danboorutagmodel.cpp @@ -0,0 +1,91 @@ +/* + * Copyright 2015 Luca Beltrame + * + * 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 . + */ + +#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 \ No newline at end of file diff --git a/src/model/danboorutagmodel.h b/src/model/danboorutagmodel.h new file mode 100644 index 0000000..52da9ca --- /dev/null +++ b/src/model/danboorutagmodel.h @@ -0,0 +1,54 @@ +/* + * Copyright 2015 Luca Beltrame + * + * 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 . + */ + +#ifndef DANBOORU_TAGMODEL_H +#define DANBOORU_TAGMODEL_H + +#include +#include + +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 m_items; + +public Q_SLOTS: + void addTag(Danbooru::DanbooruTag* tag); + +}; + + +} // namespace Danbooru + +#endif \ No newline at end of file