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 }