/* * 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 "PluginTree.h" #include "PluginLoader.h" // Sigencore plugin includes #include #include // KDE includes #include // Qt includes #include using namespace Sigencore::Plugins; using namespace Sigtools; PluginTreeModel::PluginTreeModel(PluginTree* tree) : QAbstractListModel(tree) { } void PluginTreeModel::setTypes(const QStringList& types) { foreach (const QString& type, types) { const QStringList names = PluginLoader::availablePlugins(type); foreach (const QString& name, names) { PluginBase* plugin = PluginLoader::plugin(type, name); ClassData data; data.m_type = type; data.m_name = name; data.m_description = plugin->description(name); data.m_icon = plugin->icon(name); beginInsertRows(QModelIndex(), m_entries.size(), m_entries.size()); m_entries.append(data); endInsertRows(); } } } QModelIndex PluginTreeModel::index(const int row, const int column, const QModelIndex& parent) const { Q_UNUSED(parent) Q_UNUSED(column) if ((row <= -1) || (m_entries.size() <= row)) return QModelIndex(); return createIndex(row, 0, (void*)&m_entries[row]); } QVariant PluginTreeModel::data(const QModelIndex& index, const int role) const { if (!index.isValid() || !index.internalPointer()) return QVariant(); ClassData* data = static_cast(index.internalPointer()); switch (role) { case Qt::DisplayRole: return data->m_name; case Qt::UserRole: return data->m_description; case Qt::DecorationRole: return data->m_icon; case KCategorizedSortFilterProxyModel::CategoryDisplayRole: case KCategorizedSortFilterProxyModel::CategorySortRole: return data->m_type; default: return QVariant(); } } int PluginTreeModel::rowCount(const QModelIndex& parent) const { if (parent.isValid()) return 0; return m_entries.size(); }