/* * Copyright 2008 Ben Boeckel * * 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 3 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, see . */ // Header include #include "PokemodTreeModel.h" PokemodTreeModel::PokemodTreeModel(const QStringList& pokemods, QObject* parent) : QAbstractItemModel(parent) { // TODO: construct } PokemodTreeModel::~PokemodTreeModel() { delete m_root; } QVariant PokemodTreeModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) return QVariant(); BaseModel* object = static_cast(index.internalPointer()); return object->data(role); } QModelIndex PokemodTreeModel::index(int row, int /*column*/, const QModelIndex& parent) const { if (!parent.isValid()) return QModelIndex(); BaseModel* object = getItem(parent)->childItem(row); if (object) return createIndex(row, 0, object); else return QModelIndex(); } QModelIndex PokemodTreeModel::parent(const QModelIndex& index) const { if (!index.isValid()) return QModelIndex(); BaseModel* object = static_cast(index.internalPointer()); BaseModel* parent = object->parent(); if (parent == m_root) return QModelIndex(); return createIndex(parent->indexNumber(), 0, parent); } int PokemodTreeModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) return 0; BaseModel* object = static_cast(parent.internalPointer()); return object->rowCount(); } int PokemodTreeModel::columnCount(const QModelIndex& /*parent*/) const { return 1; } Qt::ItemFlags PokemodTreeModel::flags(const QModelIndex& index) const { if (!index.isValid()) return 0; BaseModel* object = static_cast(index.internalPointer()); return object->flags(); } bool PokemodTreeModel::setData(const QModelIndex& index, const QVariant& value, int role) { if (!index.isValid()) return false; BaseModel* object = static_cast(index.internalPointer()); return object->setData(value, role); } bool PokemodTreeModel::insertColumns(int /*position*/, int /*columns*/, const QModelIndex& /*parent*/) { return false; } bool PokemodTreeModel::removeColumns(int /*position*/, int /*columns*/, const QModelIndex& /*parent*/) { return false; } bool PokemodTreeModel::insertRows(int /*position*/, int rows, const QModelIndex& parent) { BaseModel* object = getItem(parent); if (!object->canInsertRows()) return false; emit(beginInsertRows(parent, object->rowCount(), object->rowCount() + rows - 1)); bool success = object->insertRows(rows); emit(endInsertRows()); return success; } bool PokemodTreeModel::removeRows(int position, int rows, const QModelIndex& parent) { BaseModel* object = getItem(parent); if (!object->canRemoveRows()) return false; emit(beginRemoveRows(parent, position, position + rows - 1)); bool success = object->removeRows(position, rows); emit(endRemoveRows()); return success; } BaseModel* PokemodTreeModel::getItem(const QModelIndex& index) const { if (index.isValid()) { BaseModel* object = static_cast(index.internalPointer()); if (object) return object; } return m_root; }