File indexing completed on 2024-05-19 04:53:42

0001 /*
0002     SPDX-FileCopyrightText: 2017 Nicolas Carion
0003     SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 */
0005 
0006 #include "assettreemodel.hpp"
0007 #include "abstractmodel/treeitem.hpp"
0008 #include "effects/effectsrepository.hpp"
0009 #include "transitions/transitionsrepository.hpp"
0010 #include <QIcon>
0011 
0012 AssetTreeModel::AssetTreeModel(QObject *parent)
0013     : AbstractTreeModel(parent)
0014 {
0015 }
0016 
0017 QHash<int, QByteArray> AssetTreeModel::roleNames() const
0018 {
0019     QHash<int, QByteArray> roles;
0020     roles[IdRole] = "identifier";
0021     roles[NameRole] = "name";
0022     roles[FavoriteRole] = "favorite";
0023     roles[TypeRole] = "type";
0024     return roles;
0025 }
0026 
0027 QString AssetTreeModel::getName(const QModelIndex &index) const
0028 {
0029     if (!index.isValid()) {
0030         return QString();
0031     }
0032     std::shared_ptr<TreeItem> item = getItemById(int(index.internalId()));
0033     if (item->depth() == 1) {
0034         return item->dataColumn(0).toString();
0035     }
0036     return item->dataColumn(AssetTreeModel::NameCol).toString();
0037 }
0038 
0039 Qt::ItemFlags AssetTreeModel::flags(const QModelIndex &index) const
0040 {
0041     if (!index.isValid()) return Qt::ItemFlags();
0042     std::shared_ptr<TreeItem> item = getItemById(int(index.internalId()));
0043     if (item->dataColumn(AssetTreeModel::IdCol) == QStringLiteral("root")) {
0044         return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
0045     }
0046     return Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
0047 }
0048 
0049 bool AssetTreeModel::isFavorite(const QModelIndex &index) const
0050 {
0051     if (!index.isValid()) {
0052         return false;
0053     }
0054     std::shared_ptr<TreeItem> item = getItemById(int(index.internalId()));
0055     if (item->depth() == 1) {
0056         return false;
0057     }
0058     return item->dataColumn(AssetTreeModel::FavCol).toBool();
0059 }
0060 
0061 QString AssetTreeModel::getDescription(bool isEffect, const QModelIndex &index) const
0062 {
0063     if (!index.isValid()) {
0064         return QString();
0065     }
0066     std::shared_ptr<TreeItem> item = getItemById(int(index.internalId()));
0067     if (isEffect && item->depth() == 1) {
0068         return QString();
0069     }
0070     auto id = item->dataColumn(AssetTreeModel::IdCol).toString();
0071     if (isEffect && EffectsRepository::get()->exists(id)) {
0072         return EffectsRepository::get()->getDescription(id);
0073     }
0074     if (!isEffect && TransitionsRepository::get()->exists(id)) {
0075         return TransitionsRepository::get()->getDescription(id);
0076     }
0077     return QString();
0078 }
0079 
0080 QVariant AssetTreeModel::data(const QModelIndex &index, int role) const
0081 {
0082     if (!index.isValid()) {
0083         return QVariant();
0084     }
0085 
0086     std::shared_ptr<TreeItem> item = getItemById(int(index.internalId()));
0087     switch (role) {
0088     case IdRole:
0089         return item->dataColumn(AssetTreeModel::IdCol);
0090     case FavoriteRole:
0091         return item->dataColumn(AssetTreeModel::FavCol);
0092     case TypeRole:
0093         return item->dataColumn(AssetTreeModel::TypeCol);
0094     case NameRole:
0095     case Qt::DisplayRole:
0096         return item->dataColumn(index.column());
0097     case Qt::DecorationRole: {
0098         if (item->dataColumn(AssetTreeModel::IdCol).toString() == QLatin1String("root") || item->dataColumn(0).toString().isEmpty()) {
0099             return QIcon();
0100         }
0101         if (auto pt = item->parentItem().lock()) {
0102             return QIcon(m_assetIconProvider->makePixmap(pt->dataColumn(0).toString() + QLatin1String("/") +
0103                                                          QString::number(item->dataColumn(AssetTreeModel::TypeCol).toInt()) + QLatin1String("/") +
0104                                                          item->dataColumn(0).toString().at(0).toUpper()));
0105         }
0106         return QIcon();
0107     }
0108     default:
0109         return QVariant();
0110     }
0111 }