From: Jean-Baptiste M. <nu...@kd...> - 2017-05-25 08:24:20
|
Git commit bc2b259c602806eb2c0b970fa574c986a743a926 by Jean-Baptiste Mardelle. Committed on 24/05/2017 at 17:21. Pushed by mardelle into branch 'refactoring_timeline'. Port ListParameter to new model, fix xml for params not correctly saved in model M +6 -0 data/blacklisted_transitions.txt M +0 -3 src/assets/abstractassetsrepository.ipp M +7 -0 src/assets/model/assetparametermodel.cpp M +1 -1 src/assets/model/assetparametermodel.hpp M +4 -0 src/assets/view/widgets/abstractparamwidget.cpp M +1 -0 src/effectstack/CMakeLists.txt M +28 -4 src/effectstack/widgets/listparamwidget.cpp M +11 -4 src/effectstack/widgets/listparamwidget.h M +1 -1 src/project/projectmanager.cpp M +0 -1 src/timeline2/view/timelinecontroller.cpp M +6 -3 src/transitions/transitionsrepository.cpp https://commits.kde.org/kdenlive/bc2b259c602806eb2c0b970fa574c986a743a926 diff --git a/data/blacklisted_transitions.txt b/data/blacklisted_transitions.txt index 10f298fde..10a79c780 100644 --- a/data/blacklisted_transitions.txt +++ b/data/blacklisted_transitions.txt @@ -6,3 +6,9 @@ frei0r.alphainjection frei0r.blend frei0r.xfade0r webvfx + +# not usable directly or have xml definitions +affine +mix +region +luma diff --git a/src/assets/abstractassetsrepository.ipp b/src/assets/abstractassetsrepository.ipp index 8c098a62f..bbea1f81a 100644 --- a/src/assets/abstractassetsrepository.ipp +++ b/src/assets/abstractassetsrepository.ipp @@ -120,16 +120,13 @@ template <typename AssetType> bool AbstractAssetsRepository<AssetType>::parseInf QScopedPointer<Mlt::Properties> metadata(getMetadata(assetId)); if (metadata && metadata->is_valid()) { if (metadata->get("title") && metadata->get("identifier") && strlen(metadata->get("title")) > 0) { - res.name = metadata->get("title"); res.name[0] = res.name[0].toUpper(); - res.description = metadata->get("description"); res.author = metadata->get("creator"); res.version_str = metadata->get("version"); res.version = metadata->get_double("version"); res.id = res.mltId = assetId; - parseType(metadata, res); return true; } diff --git a/src/assets/model/assetparametermodel.cpp b/src/assets/model/assetparametermodel.cpp index 52b0342d6..57dfd4df1 100644 --- a/src/assets/model/assetparametermodel.cpp +++ b/src/assets/model/assetparametermodel.cpp @@ -25,6 +25,7 @@ #include <QDebug> #include <QLocale> #include <QString> +#include "klocalizedstring.h" AssetParameterModel::AssetParameterModel(Mlt::Properties *asset, const QDomElement &assetXml, const QString &assetId, QObject *parent) : QAbstractListModel(parent) @@ -153,6 +154,12 @@ QVariant AssetParameterModel::data(const QModelIndex &index, int role) const return element.attribute(QStringLiteral("suffix")); case ValueRole: return element.attribute(QStringLiteral("value")).isNull() ? element.attribute(QStringLiteral("default")) : element.attribute(QStringLiteral("value")); + case ListValuesRole: + return element.attribute(QStringLiteral("paramlist")).split(QLatin1Char(';')); + case ListNamesRole: { + QDomElement namesElem = element.firstChildElement(QStringLiteral("paramlistdisplay")); + return i18n(namesElem.text().toUtf8().data()).split(QLatin1Char(',')); + } } return QVariant(); } diff --git a/src/assets/model/assetparametermodel.hpp b/src/assets/model/assetparametermodel.hpp index 4dbaf65d6..e2a28b112 100644 --- a/src/assets/model/assetparametermodel.hpp +++ b/src/assets/model/assetparametermodel.hpp @@ -67,7 +67,7 @@ class AssetParameterModel : public QAbstractListModel public: explicit AssetParameterModel(Mlt::Properties *asset, const QDomElement &assetXml, const QString &assetId, QObject *parent = nullptr); virtual ~AssetParameterModel(); - enum { NameRole = Qt::UserRole + 1, TypeRole, CommentRole, MinRole, MaxRole, DefaultRole, SuffixRole, DecimalsRole, ValueRole }; + enum { NameRole = Qt::UserRole + 1, TypeRole, CommentRole, MinRole, MaxRole, DefaultRole, SuffixRole, DecimalsRole, ValueRole, ListValuesRole, ListNamesRole }; /* @brief Returns the id of the asset represented by this object */ QString getAssetId() const; diff --git a/src/assets/view/widgets/abstractparamwidget.cpp b/src/assets/view/widgets/abstractparamwidget.cpp index e83c6c68d..0b0b86cfc 100644 --- a/src/assets/view/widgets/abstractparamwidget.cpp +++ b/src/assets/view/widgets/abstractparamwidget.cpp @@ -21,6 +21,8 @@ #include "assets/model/assetparametermodel.hpp" #include "doubleparamwidget.hpp" #include "boolparamwidget.hpp" +#include "effectstack/widgets/listparamwidget.h" + #include <QLabel> #include <QVBoxLayout> #include <utility> @@ -66,6 +68,8 @@ AbstractParamWidget *AbstractParamWidget::construct(const std::shared_ptr<AssetP widget = new DoubleParamWidget(model, index, parent); break; case ParamType::List: + widget = new ListParamWidget(model, index, parent); + break; case ParamType::Bool: widget = new BoolParamWidget(model, index, parent); break; diff --git a/src/effectstack/CMakeLists.txt b/src/effectstack/CMakeLists.txt index 3c1a47b36..813ce6c23 100644 --- a/src/effectstack/CMakeLists.txt +++ b/src/effectstack/CMakeLists.txt @@ -10,5 +10,6 @@ set(kdenlive_SRCS effectstack/keyframehelper.cpp effectstack/animkeyframeruler.cpp effectstack/widgets/animationwidget.cpp + effectstack/widgets/listparamwidget.cpp PARENT_SCOPE) diff --git a/src/effectstack/widgets/listparamwidget.cpp b/src/effectstack/widgets/listparamwidget.cpp index 5b2c9cc92..a2bfa2763 100644 --- a/src/effectstack/widgets/listparamwidget.cpp +++ b/src/effectstack/widgets/listparamwidget.cpp @@ -20,24 +20,29 @@ ***************************************************************************/ #include "listparamwidget.h" +#include "assets/model/assetparametermodel.hpp" -ListParamWidget::ListParamWidget(const QString &name, const QString &comment, QWidget *parent) - : AbstractParamWidget(parent) +ListParamWidget::ListParamWidget(std::shared_ptr<AssetParameterModel> model, QModelIndex index, QWidget *parent) + : AbstractParamWidget(std::move(model), index, parent) { setupUi(this); + // Get data from model + QString name = m_model->data(m_index, AssetParameterModel::NameRole).toString(); + QString comment = m_model->data(m_index, AssetParameterModel::CommentRole).toString(); + // setup the comment setToolTip(comment); m_labelComment->setText(comment); m_widgetComment->setHidden(true); - // setup the name m_labelName->setText(name); + slotRefresh(); // emit the signal of the base class when appropriate // The connection is ugly because the signal "currentIndexChanged" is overloaded in QComboBox connect(this->m_list, static_cast<void (KComboBox::*)(int)>(&KComboBox::currentIndexChanged), - [this](int) { emit qobject_cast<AbstractParamWidget *>(this)->valueChanged(); }); + [this](int) { emit valueChanged(m_index, m_list->itemData(m_list->currentIndex()).toString()); }); } void ListParamWidget::setCurrentIndex(int index) @@ -76,3 +81,22 @@ QString ListParamWidget::getValue() { return m_list->itemData(m_list->currentIndex()).toString(); } + +void ListParamWidget::slotRefresh() +{ + m_list->clear(); + QStringList names = m_model->data(m_index, AssetParameterModel::ListNamesRole).toStringList(); + QStringList values = m_model->data(m_index, AssetParameterModel::ListNamesRole).toStringList(); + if (names.count() != values.count()) { + names = values; + } + for (int i = 0; i < names.count(); i++) { + m_list->addItem(names.at(i), values.at(i)); + } + QString value = m_model->data(m_index, AssetParameterModel::ValueRole).toString(); + if (!value.isEmpty() && values.contains(value)) { + //TODO:: search item data directly + m_list->setCurrentIndex(values.indexOf(value)); + } +} + diff --git a/src/effectstack/widgets/listparamwidget.h b/src/effectstack/widgets/listparamwidget.h index 3cab3c481..d435317d4 100644 --- a/src/effectstack/widgets/listparamwidget.h +++ b/src/effectstack/widgets/listparamwidget.h @@ -22,11 +22,13 @@ #ifndef LISTPARAMETERWIDGET_H #define LISTPARAMETERWIDGET_H -#include "abstractparamwidget.h" +#include "assets/view/widgets/abstractparamwidget.hpp" #include "ui_listparamwidget_ui.h" #include <QVariant> #include <QWidget> +class AssetParameterModel; + /** @brief This class represents a parameter that requires the user to choose a value from a list */ @@ -39,7 +41,7 @@ public: @param comment Optional string containing the comment associated to the parameter @param parent Parent widget */ - ListParamWidget(const QString &name, const QString &comment = QString(), QWidget *parent = nullptr); + ListParamWidget(std::shared_ptr<AssetParameterModel> model, QModelIndex index, QWidget *parent); /** @brief Set the index of the current displayed element @param index Integer holding the index of the target element (0-indexed) @@ -73,8 +75,13 @@ public: QString getValue(); public slots: - /** @brief Toggle the comments on or off */ - void slotShowComment(bool); + /** @brief Toggle the comments on or off + */ + void slotShowComment(bool show) override; + + /** @brief refresh the properties to reflect changes in the model + */ + void slotRefresh() override; }; #endif diff --git a/src/project/projectmanager.cpp b/src/project/projectmanager.cpp index 328b4de59..fc9706449 100644 --- a/src/project/projectmanager.cpp +++ b/src/project/projectmanager.cpp @@ -858,7 +858,7 @@ void ProjectManager::slotMoveFinished(KJob *job) void ProjectManager::updateTimeline() { pCore->producerQueue()->abortOperations(); - qDebug() << "Loading xml"<<m_project->getProjectXml().constData(); + //qDebug() << "Loading xml"<<m_project->getProjectXml().constData(); QScopedPointer<Mlt::Producer> xmlProd(new Mlt::Producer(pCore->getCurrentProfile()->profile(), "xml-string", m_project->getProjectXml().constData())); Mlt::Service s(*xmlProd); Mlt::Tractor tractor(s); diff --git a/src/timeline2/view/timelinecontroller.cpp b/src/timeline2/view/timelinecontroller.cpp index db9a782f7..ef051cc2d 100644 --- a/src/timeline2/view/timelinecontroller.cpp +++ b/src/timeline2/view/timelinecontroller.cpp @@ -387,7 +387,6 @@ void TimelineController::showAsset(int id) { qDebug() << "show asset" << id; if (m_model->isComposition(id)) { - qDebug() << "show asset compo" << id; emit showTransitionModel(m_model->getCompositionParameterModel(id)); } } diff --git a/src/transitions/transitionsrepository.cpp b/src/transitions/transitionsrepository.cpp index ca321d42e..b1db3e07b 100644 --- a/src/transitions/transitionsrepository.cpp +++ b/src/transitions/transitionsrepository.cpp @@ -55,6 +55,7 @@ void TransitionsRepository::parseCustomAssetFile(const QString &file_name, std:: QDomDocument doc; doc.setContent(&file, false); file.close(); + QDomElement base = doc.documentElement(); QDomNodeList transitions = doc.elementsByTagName(QStringLiteral("transition")); @@ -78,8 +79,11 @@ void TransitionsRepository::parseCustomAssetFile(const QString &file_name, std:: if (customAssets.count(result.id) > 0) { qDebug() << "Warning: duplicate custom definition of transition" << result.id << "found. Only last one will be considered"; } - - result.xml = currentNode.toElement(); + QDomDocument doc; + QDomElement e = doc.createElement("root"); + doc.appendChild(e); + e.appendChild(doc.importNode(currentNode, true)); + result.xml = doc.documentElement(); customAssets[result.id] = result; } } @@ -97,7 +101,6 @@ QStringList TransitionsRepository::assetDirs() const void TransitionsRepository::parseType(QScopedPointer<Mlt::Properties> &metadata, Info &res) { - Mlt::Properties tags((mlt_properties)metadata->get_data("tags")); bool audio = QString(tags.get(0)) == QLatin1String("Audio"); |