File indexing completed on 2024-12-01 04:28:05
0001 /* 0002 SPDX-FileCopyrightText: 2017 Nicolas Carion 0003 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 */ 0005 0006 #pragma once 0007 0008 #include "definitions.h" 0009 #include <QModelIndex> 0010 #include <QMutex> 0011 #include <QVector> 0012 #include <QWidget> 0013 #include <memory> 0014 0015 class QVBoxLayout; 0016 class QMenu; 0017 class QActionGroup; 0018 class AbstractParamWidget; 0019 class AssetParameterModel; 0020 class KeyframeWidget; 0021 0022 /** @class AssetParameterView 0023 @brief This class is the view for a list of parameters. 0024 */ 0025 class AssetParameterView : public QWidget 0026 { 0027 Q_OBJECT 0028 0029 public: 0030 AssetParameterView(QWidget *parent = nullptr); 0031 0032 /** Sets the model to be displayed by current view */ 0033 virtual void setModel(const std::shared_ptr<AssetParameterModel> &model, QSize frameSize, bool addSpacer = false); 0034 0035 /** Set the widget to display no model (this yield ownership on the smart-ptr)*/ 0036 void unsetModel(); 0037 0038 /** Returns the preferred widget height */ 0039 int contentHeight() const; 0040 0041 /** Returns the type of monitor overlay required by this effect */ 0042 MonitorSceneType needsMonitorEffectScene() const; 0043 0044 /** Returns true is the effect can use keyframes */ 0045 bool keyframesAllowed() const; 0046 /** Returns true is the keyframes should be hidden on first opening*/ 0047 bool modelHideKeyframes() const; 0048 /** Returns the preset menu to be embedded in toolbars */ 0049 QMenu *presetMenu(); 0050 0051 public Q_SLOTS: 0052 void slotRefresh(); 0053 void toggleKeyframes(bool enable); 0054 /** Reset all parameter values to default */ 0055 void resetValues(); 0056 /** Save all parameters to a preset */ 0057 void slotSavePreset(QString presetName = QString()); 0058 /** Save all parameters to a preset */ 0059 void slotLoadPreset(); 0060 void slotUpdatePreset(); 0061 void slotDeleteCurrentPreset(); 0062 void slotDeletePreset(const QString &presetName); 0063 0064 protected: 0065 /** @brief This is a handler for the dataChanged slot of the model. 0066 It basically instructs the widgets in the given range to be refreshed */ 0067 void refresh(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles); 0068 0069 QVBoxLayout *m_lay; 0070 /** @brief Protect from concurrent operations 0071 **/ 0072 QMutex m_lock; 0073 std::shared_ptr<AssetParameterModel> m_model; 0074 std::vector<AbstractParamWidget *> m_widgets; 0075 KeyframeWidget *m_mainKeyframeWidget{nullptr}; 0076 QMenu *m_presetMenu; 0077 std::shared_ptr<QActionGroup> m_presetGroup; 0078 0079 private: 0080 QVector<QPair<QString, QVariant>> getDefaultValues() const; 0081 0082 private Q_SLOTS: 0083 /** @brief Apply a change of parameter sent by the view 0084 @param index is the index corresponding to the modified param 0085 @param value is the new value of the parameter 0086 @param storeUndo: if true, an undo object is created 0087 */ 0088 void commitChanges(const QModelIndex &index, const QString &value, bool storeUndo); 0089 void commitMultipleChanges(const QList<QModelIndex> &indexes, const QStringList &values, bool storeUndo); 0090 void disableCurrentFilter(bool disable); 0091 0092 Q_SIGNALS: 0093 void seekToPos(int); 0094 void initKeyframeView(bool active); 0095 /** @brief clear and refill the effect presets */ 0096 void updatePresets(const QString &presetName = QString()); 0097 void updateHeight(); 0098 void activateEffect(); 0099 void nextKeyframe(); 0100 void previousKeyframe(); 0101 void addRemoveKeyframe(); 0102 /** @brief Used to pass a standard action like copy or paste to the effect stack widget */ 0103 void sendStandardCommand(int command); 0104 };