File indexing completed on 2024-05-19 04:53:48

0001 /*
0002     SPDX-FileCopyrightText: 2016 Nicolas Carion
0003 
0004 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #include "abstractparamwidget.hpp"
0008 #include "assets/model/assetparametermodel.hpp"
0009 #include "boolparamwidget.hpp"
0010 #include "buttonparamwidget.hpp"
0011 #include "clickablelabelwidget.hpp"
0012 #include "coloreditwidget.hpp"
0013 #include "curves/bezier/beziersplineeditor.h"
0014 #include "curves/cubic/kis_cubic_curve.h"
0015 #include "curves/cubic/kis_curve_widget.h"
0016 #include "curves/curveparamwidget.h"
0017 #include "doubleparamwidget.hpp"
0018 #include "fontparamwidget.hpp"
0019 #include "geometryeditwidget.hpp"
0020 #include "hideparamwidget.hpp"
0021 #include "keyframewidget.hpp"
0022 #include "keywordparamwidget.hpp"
0023 #include "listdependencyparamwidget.h"
0024 #include "listparamwidget.h"
0025 #include "lumaliftgainparam.hpp"
0026 #include "multiswitchparamwidget.hpp"
0027 #include "positioneditwidget.hpp"
0028 #include "slidewidget.hpp"
0029 #include "switchparamwidget.hpp"
0030 #include "urllistparamwidget.h"
0031 #include "urlparamwidget.hpp"
0032 
0033 #include <QLabel>
0034 #include <QVBoxLayout>
0035 #include <utility>
0036 
0037 // temporary place holder for parameters that don't currently have a display class
0038 class Unsupported : public AbstractParamWidget
0039 {
0040 public:
0041     Unsupported(std::shared_ptr<AssetParameterModel> model, QModelIndex index, QWidget *parent)
0042         : AbstractParamWidget(std::move(model), index, parent)
0043     {
0044         auto *lay = new QVBoxLayout(this);
0045         lay->setContentsMargins(4, 0, 4, 0);
0046         m_label = new QLabel(this);
0047         lay->addWidget(m_label);
0048     }
0049     void setText(const QString &str) { m_label->setText(str); }
0050     void slotRefresh() override {}
0051 
0052 private:
0053     QLabel *m_label;
0054 };
0055 
0056 AbstractParamWidget::AbstractParamWidget(std::shared_ptr<AssetParameterModel> model, const QModelIndex &index, QWidget *parent)
0057     : QWidget(parent)
0058     , m_model(std::move(model))
0059     , m_index(index)
0060 {
0061 }
0062 
0063 AbstractParamWidget *AbstractParamWidget::construct(const std::shared_ptr<AssetParameterModel> &model, const QModelIndex &index, QSize frameSize,
0064                                                     QWidget *parent)
0065 {
0066     // We retrieve the parameter type
0067     auto type = model->data(index, AssetParameterModel::TypeRole).value<ParamType>();
0068 
0069     if (AssetParameterModel::isAnimated(type)) {
0070         return new KeyframeWidget(model, index, frameSize, parent);
0071     }
0072 
0073     AbstractParamWidget *widget = nullptr;
0074     QString name = model->data(index, AssetParameterModel::NameRole).toString();
0075 
0076     switch (type) {
0077     case ParamType::Double:
0078         widget = new DoubleParamWidget(model, index, parent);
0079         break;
0080     case ParamType::ListWithDependency:
0081         widget = new ListDependencyParamWidget(model, index, parent);
0082         break;
0083     case ParamType::List:
0084         widget = new ListParamWidget(model, index, parent);
0085         break;
0086     case ParamType::UrlList:
0087         widget = new UrlListParamWidget(model, index, parent);
0088         break;
0089     case ParamType::Bool:
0090         widget = new BoolParamWidget(model, index, parent);
0091         break;
0092     case ParamType::Geometry:
0093         widget = new GeometryEditWidget(model, index, frameSize, parent);
0094         break;
0095     case ParamType::Position:
0096         widget = new PositionEditWidget(model, index, parent);
0097         break;
0098     case ParamType::FixedColor:
0099         widget = new ColorEditWidget(model, index, parent);
0100         break;
0101     case ParamType::Wipe:
0102         widget = new SlideWidget(model, index, parent);
0103         break;
0104     case ParamType::Switch:
0105         widget = new SwitchParamWidget(model, index, parent);
0106         break;
0107     case ParamType::MultiSwitch:
0108         widget = new MultiSwitchParamWidget(model, index, parent);
0109         break;
0110     case ParamType::Url:
0111         widget = new UrlParamWidget(model, index, parent);
0112         break;
0113     case ParamType::Bezier_spline: {
0114         using Widget_t = CurveParamWidget<BezierSplineEditor>;
0115         widget = new Widget_t(model, index, parent);
0116         break;
0117     }
0118     case ParamType::Curve: {
0119         using Widget_t = CurveParamWidget<KisCurveWidget>;
0120         widget = new Widget_t(model, index, parent);
0121         break;
0122     }
0123     case ParamType::Hidden: {
0124         widget = new HideParamWidget(model, index, parent);
0125         break;
0126     }
0127     case ParamType::Filterjob: {
0128         widget = new ButtonParamWidget(model, index, parent);
0129         break;
0130     }
0131     case ParamType::Readonly: {
0132         widget = new ClickableLabelParamWidget(model, index, parent);
0133         break;
0134     }
0135     case ParamType::Fontfamily: {
0136         widget = new FontParamWidget(model, index, parent);
0137         break;
0138     }
0139     case ParamType::Keywords: {
0140         widget = new KeywordParamWidget(model, index, parent);
0141         break;
0142     }
0143     default:
0144         // not reimplemented
0145         widget = new Unsupported(model, index, parent);
0146         static_cast<Unsupported *>(widget)->setText(name);
0147     }
0148 
0149     return widget;
0150 }