/* SPDX-FileCopyrightText: 2011 Till Theato SPDX-FileCopyrightText: 2017 Nicolas Carion SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL */ #ifndef KEYFRAMEWIDGET_H #define KEYFRAMEWIDGET_H #include "abstractparamwidget.hpp" #include "definitions.h" #include #include #include class AssetParameterModel; class DoubleWidget; class KeyframeView; class KeyframeModelList; class QVBoxLayout; class QToolButton; class QToolBar; class TimecodeDisplay; class KSelectAction; class KeyframeMonitorHelper; class KeyframeWidget : public AbstractParamWidget { Q_OBJECT public: explicit KeyframeWidget(std::shared_ptr model, QModelIndex index, QSize frameSize, QWidget *parent = nullptr); ~KeyframeWidget() override; /** @brief Add a new parameter to be managed using the same keyframe viewer */ void addParameter(const QPersistentModelIndex &index); int getPosition() const; /** @brief Returns the monitor scene required for this asset */ MonitorSceneType requiredScene() const; void updateTimecodeFormat(); /** @brief Show / hide keyframe related widgets */ void showKeyframes(bool enable); /** @brief Returns true if keyframes options are visible */ bool keyframesVisible() const; void resetKeyframes(); public slots: void slotRefresh() override; /** @brief initialize qml overlay */ void slotInitMonitor(bool active) override; public slots: void slotSetPosition(int pos = -1, bool update = true); private slots: /** @brief Update the value of the widgets to reflect keyframe change */ void slotRefreshParams(); void slotAtKeyframe(bool atKeyframe, bool singleKeyframe); void slotEditKeyframeType(QAction *action); void slotUpdateKeyframesFromMonitor(const QPersistentModelIndex &index, const QVariant &res); void slotCopyKeyframes(); void slotCopyValueAtCursorPos(); void slotImportKeyframes(); void slotRemoveNextKeyframes(); void slotSeekToKeyframe(int ix); void monitorSeek(int pos); void disconnectEffectStack(); private: QVBoxLayout *m_lay; QToolBar *m_toolbar; std::shared_ptr m_keyframes; KeyframeView *m_keyframeview; KeyframeMonitorHelper *m_monitorHelper; QToolButton *m_buttonAddDelete; QToolButton *m_buttonCenter; QToolButton *m_buttonCopy; QToolButton *m_buttonApply; KSelectAction *m_selectType; TimecodeDisplay *m_time; MonitorSceneType m_neededScene; QSize m_sourceFrameSize; void connectMonitor(bool active); std::unordered_map m_parameters; int m_baseHeight; int m_addedHeight; signals: void addIndex(QPersistentModelIndex ix); void setKeyframes(const QString &); void updateEffectKeyframe(bool); void goToNext(); void goToPrevious(); void addRemove(); }; #endif