diff --git a/src/assets/view/widgets/buttonparamwidget.cpp b/src/assets/view/widgets/buttonparamwidget.cpp index 110204964..4f18c96a3 100644 --- a/src/assets/view/widgets/buttonparamwidget.cpp +++ b/src/assets/view/widgets/buttonparamwidget.cpp @@ -1,156 +1,157 @@ /*************************************************************************** * Copyright (C) 2019 by Jean-Baptiste Mardelle * * This file is part of Kdenlive. See www.kdenlive.org. * * * * 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 2 of the License, or * * (at your option) version 3 or any later version accepted by the * * membership of KDE e.V. (or its successor approved by the membership * * of KDE e.V.), which shall act as a proxy defined in Section 14 of * * version 3 of the license. * * * * 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 . * ***************************************************************************/ #include "buttonparamwidget.hpp" #include "assets/model/assetparametermodel.hpp" #include "jobs/filterclipjob.h" #include "jobs/jobmanager.h" #include "assets/model/assetcommand.hpp" #include "core.h" #include #include #include #include ButtonParamWidget::ButtonParamWidget(std::shared_ptr model, QModelIndex index, QWidget *parent) : AbstractParamWidget(std::move(model), index, parent) , m_label(nullptr) { // setup the comment m_buttonName = m_model->data(m_index, Qt::DisplayRole).toString(); m_alternatebuttonName = m_model->data(m_index, AssetParameterModel::AlternateNameRole).toString(); //QString name = m_model->data(m_index, AssetParameterModel::NameRole).toString(); QString comment = m_model->data(m_index, AssetParameterModel::CommentRole).toString(); setToolTip(comment); + setEnabled(m_model->getOwnerId().first != ObjectType::TimelineTrack); auto *layout = new QVBoxLayout(this); QVariantList filterData = m_model->data(m_index, AssetParameterModel::FilterJobParamsRole).toList(); QStringList filterAddedParams = m_model->data(m_index, AssetParameterModel::FilterParamsRole).toString().split(QLatin1Char(' '), QString::SkipEmptyParts); QString conditionalInfo; for (const QVariant jobElement : filterData) { QStringList d = jobElement.toStringList(); if (d.size() == 2) { if (d.at(0) == QLatin1String("conditionalinfo")) { conditionalInfo = d.at(1); } else if (d.at(0) == QLatin1String("key")) { m_keyParam = d.at(1); } } } QVector> filterParams = m_model->getAllParameters(); m_displayConditional = true; for (const auto ¶m : filterParams) { if (param.first == m_keyParam) { if (!param.second.toString().isEmpty()) { m_displayConditional = false; } break; } } if (!conditionalInfo.isEmpty()) { m_label = new KMessageWidget(conditionalInfo, this); m_label->setWordWrap(true); layout->addWidget(m_label); m_label->setVisible(m_displayConditional); } //layout->setContentsMargins(0, 0, 0, 2); //layout->setSpacing(0); m_button = new QPushButton(m_displayConditional ? m_buttonName : m_alternatebuttonName, this); layout->addWidget(m_button); // emit the signal of the base class when appropriate connect(this->m_button, &QPushButton::clicked, [&, filterData, filterAddedParams]() { // Trigger job if (!m_displayConditional) { QVector> values; values << QPair(m_keyParam,QVariant()); auto *command = new AssetUpdateCommand(m_model, values); pCore->pushUndo(command); return; } QVector> filterLastParams = m_model->getAllParameters(); ObjectId owner = m_model->getOwnerId(); const QString assetId = m_model->getAssetId(); QString binId; int cid = -1; int in = -1; int out = -1; if (owner.first == ObjectType::BinClip) { binId = QString::number(owner.second); } else if (owner.first == ObjectType::TimelineClip) { cid = owner.second; binId = pCore->getTimelineClipBinId(cid); in = pCore->getItemIn(owner); out = in + pCore->getItemDuration(owner); } std::unordered_map fParams; std::unordered_map fData; for (const QVariant jobElement : filterData) { QStringList d = jobElement.toStringList(); if (d.size() == 2) fData.insert({d.at(0), d.at(1)}); } for (const auto ¶m : filterLastParams) { fParams.insert({param.first, param.second}); } for (const QString &fparam : filterAddedParams) { if (fparam.contains(QLatin1Char('='))) { fParams.insert({fparam.section(QLatin1Char('='), 0, 0), fparam.section(QLatin1Char('='), 1)}); } } pCore->jobManager()->startJob({binId}, -1, QString(), cid, m_model, assetId, in, out, assetId, fParams, fData); if (m_label) { m_label->setVisible(false); } m_button->setEnabled(false); }); } void ButtonParamWidget::slotShowComment(bool show) { Q_UNUSED(show); //if (!m_labelComment->text().isEmpty()) { // m_widgetComment->setVisible(show); //} } void ButtonParamWidget::slotRefresh() { QVector> filterParams = m_model->getAllParameters(); m_displayConditional = true; for (const auto ¶m : filterParams) { if (param.first == m_keyParam && !param.second.isNull()) { m_displayConditional = false; break; } } if (m_label) { m_label->setVisible(m_displayConditional); } m_button->setText(m_displayConditional ? m_buttonName : m_alternatebuttonName); m_button->setEnabled(true); updateGeometry(); } bool ButtonParamWidget::getValue() { return true; }