diff --git a/src/assets/CMakeLists.txt b/src/assets/CMakeLists.txt index 04989d891..694e03998 100644 --- a/src/assets/CMakeLists.txt +++ b/src/assets/CMakeLists.txt @@ -1,28 +1,29 @@ set(kdenlive_SRCS ${kdenlive_SRCS} assets/assetlist/view/qmltypes/asseticonprovider.cpp assets/assetlist/view/assetlistwidget.cpp assets/assetlist/model/assetfilter.cpp assets/assetlist/model/assettreemodel.cpp assets/assetpanel.cpp assets/keyframes/model/keyframemodel.cpp assets/keyframes/model/keyframemodellist.cpp assets/keyframes/view/keyframeview.cpp assets/model/assetparametermodel.cpp assets/model/assetcommand.cpp assets/view/assetparameterview.cpp assets/view/widgets/abstractparamwidget.cpp #assets/view/widgets/animationwidget.cpp assets/view/widgets/boolparamwidget.cpp + assets/view/widgets/switchparamwidget.cpp assets/view/widgets/doubleparamwidget.cpp assets/view/widgets/colorwheel.cpp assets/view/widgets/slidewidget.cpp assets/view/widgets/lumaliftgainparam.cpp # assets/view/widgets/keyframeedit.cpp assets/view/widgets/keyframewidget.cpp assets/view/widgets/listparamwidget.cpp assets/view/widgets/geometryeditwidget.cpp assets/view/widgets/positioneditwidget.cpp assets/view/widgets/coloreditwidget.cpp PARENT_SCOPE) diff --git a/src/assets/view/widgets/abstractparamwidget.cpp b/src/assets/view/widgets/abstractparamwidget.cpp index 0c0c40994..a215d78cd 100644 --- a/src/assets/view/widgets/abstractparamwidget.cpp +++ b/src/assets/view/widgets/abstractparamwidget.cpp @@ -1,127 +1,130 @@ /*************************************************************************** * Copyright (C) 2016 by Nicolas Carion * * * * 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) any later version. * * * * 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, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #include "abstractparamwidget.hpp" #include "animationwidget.h" #include "assets/model/assetparametermodel.hpp" #include "boolparamwidget.hpp" +#include "switchparamwidget.hpp" #include "lumaliftgainparam.hpp" #include "doubleparamwidget.hpp" #include "geometryeditwidget.hpp" #include "keyframeedit.h" #include "keyframewidget.hpp" #include "listparamwidget.h" #include "positioneditwidget.hpp" #include "coloreditwidget.hpp" #include "slidewidget.hpp" #include #include #include // temporary place holder for parameters that don't currently have a display class class Unsupported : public AbstractParamWidget { public: Unsupported(std::shared_ptr model, QModelIndex index, QWidget *parent) : AbstractParamWidget(std::move(model), index, parent) { auto *lay = new QVBoxLayout(this); lay->setContentsMargins(4, 0, 4, 0); m_label = new QLabel(this); lay->addWidget(m_label); } void setText(const QString &str) { m_label->setText(str); } void slotRefresh() override {} void slotSetRange(QPair) override {} protected: QLabel *m_label; }; AbstractParamWidget::AbstractParamWidget(std::shared_ptr model, QModelIndex index, QWidget *parent) : QWidget(parent) , m_model(std::move(model)) , m_index(index) { } AbstractParamWidget *AbstractParamWidget::construct(const std::shared_ptr &model, QModelIndex index, QPair range, QSize frameSize, QWidget *parent) { // We retrieve the parameter type auto type = model->data(index, AssetParameterModel::TypeRole).value(); QString name = model->data(index, AssetParameterModel::NameRole).toString(); AbstractParamWidget *widget; switch (type) { case ParamType::Double: 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; case ParamType::KeyframeParam: case ParamType::AnimatedRect: widget = new KeyframeWidget(model, index, parent); break; case ParamType::Geometry: widget = new GeometryEditWidget(model, index, range, frameSize, parent); break; case ParamType::Position: widget = new PositionEditWidget(model, index, parent); break; case ParamType::Color: widget = new ColorEditWidget(model, index, parent); break; case ParamType::ColorWheel: widget = new LumaLiftGainParam(model, index, parent); break; case ParamType::Wipe: widget = new SlideWidget(model, index, parent); break; + case ParamType::Switch: + widget = new SwitchParamWidget(model, index, parent); + break; case ParamType::Animated: case ParamType::RestrictedAnim: // widget = new AnimationWidget(model, index, range, parent); // break; // case ParamType::KeyframeParam: // widget = new KeyframeEdit(model, index, parent); // break; - case ParamType::Switch: case ParamType::Addedgeometry: case ParamType::Curve: case ParamType::Bezier_spline: case ParamType::Roto_spline: case ParamType::Url: case ParamType::Keywords: case ParamType::Fontfamily: case ParamType::Filterjob: case ParamType::Readonly: // not reimplemented widget = new Unsupported(model, index, parent); static_cast(widget)->setText(name); } return widget; } diff --git a/src/assets/view/widgets/switchparamwidget.cpp b/src/assets/view/widgets/switchparamwidget.cpp new file mode 100644 index 000000000..6241bf91f --- /dev/null +++ b/src/assets/view/widgets/switchparamwidget.cpp @@ -0,0 +1,62 @@ +/*************************************************************************** + * Copyright (C) 2018 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 "switchparamwidget.hpp" +#include "assets/model/assetparametermodel.hpp" + +SwitchParamWidget::SwitchParamWidget(std::shared_ptr model, QModelIndex index, QWidget *parent) + : AbstractParamWidget(std::move(model), index, parent) +{ + setupUi(this); + + // setup the comment + QString name = m_model->data(m_index, AssetParameterModel::NameRole).toString(); + QString comment = m_model->data(m_index, AssetParameterModel::CommentRole).toString(); + setToolTip(comment); + m_labelComment->setText(comment); + m_widgetComment->setHidden(true); + + // setup the name + m_labelName->setText(m_model->data(m_index, Qt::DisplayRole).toString()); + + // set check state + slotRefresh(); + + // emit the signal of the base class when appropriate + connect(this->m_checkBox, &QCheckBox::stateChanged, [this](int) { + emit valueChanged(m_index, m_checkBox->isChecked() ? m_model->data(m_index, AssetParameterModel::MaxRole).toString() : m_model->data(m_index, AssetParameterModel::MinRole).toString(), true); }); +} + +void SwitchParamWidget::slotShowComment(bool show) +{ + if (!m_labelComment->text().isEmpty()) { + m_widgetComment->setVisible(show); + } +} + +void SwitchParamWidget::slotRefresh() +{ + m_checkBox->setChecked(m_model->data(m_index, AssetParameterModel::ValueRole) == m_model->data(m_index, AssetParameterModel::MaxRole)); +} + +void SwitchParamWidget::slotSetRange(QPair) +{ +} diff --git a/src/assets/view/widgets/switchparamwidget.hpp b/src/assets/view/widgets/switchparamwidget.hpp new file mode 100644 index 000000000..679bf068a --- /dev/null +++ b/src/assets/view/widgets/switchparamwidget.hpp @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright (C) 2018 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 . * + ***************************************************************************/ + +#ifndef SWITCHPARAMWIDGET_H +#define SWITCHPARAMWIDGET_H + +#include "abstractparamwidget.hpp" +#include "ui_boolparamwidget_ui.h" +#include + +/** @brief This class represents a parameter that requires + the user to choose tick a checkbox + */ +class SwitchParamWidget : public AbstractParamWidget, public Ui::BoolParamWidget_UI +{ + Q_OBJECT +public: + /** @brief Constructor for the widgetComment + @param name String containing the name of the parameter + @param comment Optional string containing the comment associated to the parameter + @param checked Boolean indicating wether the checkbox should initially be checked + @param parent Parent widget + */ + SwitchParamWidget(std::shared_ptr model, QModelIndex index, QWidget *parent); + +public slots: + /** @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; + + /** @brief update the clip's in/out point + */ + void slotSetRange(QPair) override; +}; + +#endif