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 }