File indexing completed on 2024-05-12 04:54:25
0001 /* 0002 SPDX-FileCopyrightText: 2017 Nicolas Carion 0003 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 */ 0005 0006 #include "transitiontreemodel.hpp" 0007 #include "abstractmodel/treeitem.hpp" 0008 #include "kdenlivesettings.h" 0009 #include "transitions/transitionsrepository.hpp" 0010 #include <KLocalizedString> 0011 0012 #include <KActionCategory> 0013 #include <QDebug> 0014 #include <QMenu> 0015 #include <QMimeData> 0016 0017 TransitionTreeModel::TransitionTreeModel(QObject *parent) 0018 : AssetTreeModel(parent) 0019 { 0020 m_assetIconProvider = new AssetIconProvider(false, this); 0021 } 0022 0023 std::shared_ptr<TransitionTreeModel> TransitionTreeModel::construct(bool flat, QObject *parent) 0024 { 0025 std::shared_ptr<TransitionTreeModel> self(new TransitionTreeModel(parent)); 0026 QList<QVariant> rootData{"Name", "ID", "Type", "isFav"}; 0027 self->rootItem = TreeItem::construct(rootData, self, true); 0028 0029 // We create categories, if requested 0030 std::shared_ptr<TreeItem> compoCategory, transCategory; 0031 if (!flat) { 0032 compoCategory = self->rootItem->appendChild(QList<QVariant>{i18n("Compositions"), QStringLiteral("root")}); 0033 transCategory = self->rootItem->appendChild(QList<QVariant>{i18n("Transitions"), QStringLiteral("root")}); 0034 } 0035 0036 // We parse transitions 0037 auto allTransitions = TransitionsRepository::get()->getNames(); 0038 for (const auto &transition : qAsConst(allTransitions)) { 0039 std::shared_ptr<TreeItem> targetCategory = compoCategory; 0040 AssetListType::AssetType type = TransitionsRepository::get()->getType(transition.first); 0041 if (flat) { 0042 targetCategory = self->rootItem; 0043 } else if (type == AssetListType::AssetType::AudioTransition || type == AssetListType::AssetType::VideoTransition) { 0044 targetCategory = transCategory; 0045 } 0046 0047 // we create the data list corresponding to this transition 0048 bool isFav = KdenliveSettings::favorite_transitions().contains(transition.first); 0049 // qDebug() << transition.second << transition.first << "in " << targetCategory->dataColumn(0).toString(); 0050 QList<QVariant> data{transition.second, transition.first, QVariant::fromValue(type), isFav}; 0051 0052 targetCategory->appendChild(data); 0053 } 0054 return self; 0055 } 0056 0057 void TransitionTreeModel::reloadAssetMenu(QMenu *effectsMenu, KActionCategory *effectActions) 0058 { 0059 for (int i = 0; i < rowCount(); i++) { 0060 std::shared_ptr<TreeItem> item = rootItem->child(i); 0061 if (item->childCount() > 0) { 0062 QMenu *catMenu = new QMenu(item->dataColumn(NameCol).toString(), effectsMenu); 0063 effectsMenu->addMenu(catMenu); 0064 for (int j = 0; j < item->childCount(); j++) { 0065 std::shared_ptr<TreeItem> child = item->child(j); 0066 QAction *a = new QAction(child->dataColumn(NameCol).toString(), catMenu); 0067 const QString id = child->dataColumn(IdCol).toString(); 0068 a->setData(id); 0069 catMenu->addAction(a); 0070 effectActions->addAction("transition_" + id, a); 0071 } 0072 } 0073 } 0074 } 0075 0076 void TransitionTreeModel::setFavorite(const QModelIndex &index, bool favorite, bool isEffect) 0077 { 0078 if (!index.isValid()) { 0079 return; 0080 } 0081 std::shared_ptr<TreeItem> item = getItemById(int(index.internalId())); 0082 if (isEffect && item->depth() == 1) { 0083 return; 0084 } 0085 item->setData(AssetTreeModel::FavCol, favorite); 0086 auto id = item->dataColumn(AssetTreeModel::IdCol).toString(); 0087 QStringList favs = KdenliveSettings::favorite_transitions(); 0088 if (favorite) { 0089 favs << id; 0090 } else { 0091 favs.removeAll(id); 0092 } 0093 KdenliveSettings::setFavorite_transitions(favs); 0094 } 0095 0096 void TransitionTreeModel::deleteEffect(const QModelIndex &) {} 0097 0098 void TransitionTreeModel::editCustomAsset(const QString &, const QString &, const QModelIndex &) {} 0099 0100 QMimeData *TransitionTreeModel::mimeData(const QModelIndexList &indexes) const 0101 { 0102 QMimeData *mimeData = new QMimeData; 0103 std::shared_ptr<TreeItem> item = getItemById(int(indexes.first().internalId())); 0104 if (item) { 0105 mimeData->setData(QStringLiteral("kdenlive/composition"), item->dataColumn(AssetTreeModel::IdCol).toString().toUtf8()); 0106 } 0107 return mimeData; 0108 }