/* * Copyright 2009 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 "PluginTreeModel.h" // Sigtools includes #include "BaseModel.h" #include "PluginTree.h" #include "RootPluginModel.h" // Qt includes #include using namespace Sigtools; PluginTreeModel::PluginTreeModel(PluginTree* browser) : QAbstractItemModel(browser), m_root(new RootPluginModel) { } PluginTreeModel::~PluginTreeModel() { delete m_root; } QModelIndex PluginTreeModel::index(const int row, const int column, const QModelIndex& parent) const { if ((row < -1) || (column < -1)) return QModelIndex(); if (row == -1) return createIndex(row, 0, m_root); BaseModel* model = getItem(parent); if ((model->rowCount() <= row) || (1 <= column)) return QModelIndex(); return createIndex(row, 0, model->childItem(row)); } QVariant PluginTreeModel::data(const QModelIndex& index, const int role) const { Q_UNUSED(index) Q_UNUSED(role) return QVariant(); } QModelIndex PluginTreeModel::parent(const QModelIndex& index) const { if (!index.isValid()) return QModelIndex(); BaseModel* parent = static_cast(index.internalPointer())->parent(); if (!parent || (parent == m_root)) return QModelIndex(); return createIndex(parent->indexNumber(), 0, parent); } int PluginTreeModel::rowCount(const QModelIndex& parent) const { return getItem(parent)->rowCount(); } int PluginTreeModel::columnCount(const QModelIndex& parent) const { Q_UNUSED(parent) return 1; } Qt::ItemFlags PluginTreeModel::flags(const QModelIndex& index) const { Qt::ItemFlags flags = QAbstractItemModel::flags(index); if (index.isValid()) flags |= static_cast(index.internalPointer())->flags(); return flags; } BaseModel* PluginTreeModel::getItem(const QModelIndex& index) const { if (index.isValid()) return static_cast(index.internalPointer()); return m_root; } void PluginTreeModel::addPlugin(const QString& type, KService::Ptr service) { m_root->addPlugin(type, service); }