From kde-commits Thu Aug 16 06:28:55 2018 From: Jean-Baptiste Mardelle Date: Thu, 16 Aug 2018 06:28:55 +0000 To: kde-commits Subject: [kdenlive/refactoring_timeline] src: Reintroduce enable/disable effect stack button, small ui fixes Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=153440094024648 Git commit 2da54ea10fbb415e004309c081f0e9c7d44e350c by Jean-Baptiste Mardel= le. Committed on 16/08/2018 at 06:28. Pushed by mardelle into branch 'refactoring_timeline'. Reintroduce enable/disable effect stack button, small ui fixes M +44 -17 src/assets/assetpanel.cpp M +6 -2 src/assets/assetpanel.hpp M +1 -1 src/effects/effectstack/model/effectstackmodel.cpp M +1 -1 src/effects/effectstack/model/effectstackmodel.hpp M +17 -0 src/effects/effectstack/view/effectstackview.cpp M +4 -0 src/effects/effectstack/view/effectstackview.hpp M +1 -1 src/timeline2/model/trackmodel.cpp https://commits.kde.org/kdenlive/2da54ea10fbb415e004309c081f0e9c7d44e350c diff --git a/src/assets/assetpanel.cpp b/src/assets/assetpanel.cpp index 6106afbae..77d9e798b 100644 --- a/src/assets/assetpanel.cpp +++ b/src/assets/assetpanel.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -51,8 +52,14 @@ AssetPanel::AssetPanel(QWidget *parent) , m_transitionWidget(new TransitionStackView(this)) , m_effectStackWidget(new EffectStackView(this)) { - QHBoxLayout *tLayout =3D new QHBoxLayout; - tLayout->addWidget(m_assetTitle); + QToolBar *buttonToolbar =3D new QToolBar(this); + buttonToolbar->addWidget(m_assetTitle); + + // spacer + QWidget* empty =3D new QWidget(); + empty->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximu= m); + buttonToolbar->addWidget(empty); + m_switchBuiltStack =3D new QToolButton(this); m_switchBuiltStack->setIcon(QIcon::fromTheme(QStringLiteral("adjustlev= els"))); m_switchBuiltStack->setToolTip(i18n("Adjust clip")); @@ -60,26 +67,34 @@ AssetPanel::AssetPanel(QWidget *parent) m_switchBuiltStack->setChecked(KdenliveSettings::showbuiltstack()); m_switchBuiltStack->setVisible(false); // connect(m_switchBuiltStack, &QToolButton::toggled, m_effectStackWid= get, &EffectStackView::switchBuiltStack); - tLayout->addWidget(m_switchBuiltStack); + buttonToolbar->addWidget(m_switchBuiltStack); = - m_splitButton =3D new QToolButton(this); - m_splitButton->setIcon(QIcon::fromTheme(QStringLiteral("view-split-lef= t-right"))); + m_splitButton =3D new KDualAction(i18n("Normal view"), i18n("Compare e= ffect"), this); + m_splitButton->setActiveIcon(QIcon::fromTheme(QStringLiteral("view-rig= ht-close"))); + m_splitButton->setInactiveIcon(QIcon::fromTheme(QStringLiteral("view-s= plit-left-right"))); m_splitButton->setToolTip(i18n("Compare effect")); - m_splitButton->setCheckable(true); m_splitButton->setVisible(false); - connect(m_splitButton, &QToolButton::toggled, this, &AssetPanel::proce= ssSplitEffect); - tLayout->addWidget(m_splitButton); + connect(m_splitButton, &KDualAction::activeChangedByUser, this, &Asset= Panel::processSplitEffect); + buttonToolbar->addAction(m_splitButton); + + m_enableStackButton =3D new KDualAction(i18n("Effects disabled"), i18n= ("Effects enabled"), this); + m_enableStackButton->setInactiveIcon(QIcon::fromTheme(QStringLiteral("= hint"))); + m_enableStackButton->setActiveIcon(QIcon::fromTheme(QStringLiteral("vi= sibility"))); + connect(m_enableStackButton, &KDualAction::activeChangedByUser, this, = &AssetPanel::enableStack); + m_enableStackButton->setVisible(false); + buttonToolbar->addAction(m_enableStackButton); = - m_timelineButton =3D new QToolButton(this); - m_timelineButton->setIcon(QIcon::fromTheme(QStringLiteral("adjustlevel= s"))); + m_timelineButton =3D new KDualAction(i18n("Hide keyframes"), i18n("Dis= play keyframes in timeline"), this); + m_timelineButton->setInactiveIcon(QIcon::fromTheme(QStringLiteral("adj= ustlevels"))); + m_timelineButton->setActiveIcon(QIcon::fromTheme(QStringLiteral("adjus= tlevels"))); m_timelineButton->setToolTip(i18n("Display keyframes in timeline")); - m_timelineButton->setCheckable(true); m_timelineButton->setVisible(false); - connect(m_timelineButton, &QToolButton::toggled, this, &AssetPanel::sh= owKeyframes); - tLayout->addWidget(m_timelineButton); + connect(m_timelineButton, &KDualAction::activeChangedByUser, this, &As= setPanel::showKeyframes); + buttonToolbar->addAction(m_timelineButton); = - m_lay->addLayout(tLayout); + m_lay->addWidget(buttonToolbar); m_lay->setContentsMargins(0, 0, 0, 0); + m_lay->setSpacing(0); QVBoxLayout *lay =3D new QVBoxLayout(m_container); lay->setContentsMargins(0, 0, 0, 0); lay->addWidget(m_transitionWidget); @@ -111,15 +126,17 @@ void AssetPanel::showTransition(int tid, std::shared_= ptr tr m_assetTitle->setText(i18n("%1 properties", transitionName)); m_transitionWidget->setVisible(true); m_timelineButton->setVisible(true); + m_enableStackButton->setVisible(false); m_transitionWidget->setModel(transitionModel, QSize(), true); } = void AssetPanel::showEffectStack(const QString &itemName, std::shared_ptr<= EffectStackModel> effectsModel, QSize frameSize, bool showKeyframes) { - m_splitButton->setChecked(false); + m_splitButton->setActive(false); if (effectsModel =3D=3D nullptr) { // Item is not ready m_splitButton->setVisible(false); + m_enableStackButton->setVisible(false); clear(); return; } @@ -157,17 +174,19 @@ void AssetPanel::showEffectStack(const QString &itemN= ame, std::shared_ptrsetText(title); m_splitButton->setVisible(showSplit); + m_enableStackButton->setVisible(id.first !=3D ObjectType::TimelineComp= osition); + m_enableStackButton->setActive(effectsModel->isStackEnabled()); if (showSplit) { m_splitButton->setEnabled(effectsModel->rowCount() > 0); QObject::connect(effectsModel.get(), &EffectStackModel::dataChange= d, [&](){ if (m_effectStackWidget->isEmpty()) { - m_splitButton->setChecked(false); + m_splitButton->setActive(false); } m_splitButton->setEnabled(!m_effectStackWidget->isEmpty()); }); } m_timelineButton->setVisible(enableKeyframes); - m_timelineButton->setChecked(showKeyframes); + m_timelineButton->setActive(showKeyframes); // Disable built stack until properly implemented // m_switchBuiltStack->setVisible(true); m_effectStackWidget->setVisible(true); @@ -314,3 +333,11 @@ void AssetPanel::addEffect(const QString &effectId) } m_effectStackWidget->addEffect(effectId); } + +void AssetPanel::enableStack(bool enable) +{ + if (!m_effectStackWidget->isVisible()) { + return; + } + m_effectStackWidget->enableStack(enable); +} diff --git a/src/assets/assetpanel.hpp b/src/assets/assetpanel.hpp index 1e4c5b83f..89ab93968 100644 --- a/src/assets/assetpanel.hpp +++ b/src/assets/assetpanel.hpp @@ -29,6 +29,7 @@ #include "definitions.h" = class KSqueezedTextLabel; +class KDualAction; class QToolButton; = /** @brief This class is the widget that provides interaction with the ass= et currently selected. @@ -81,13 +82,16 @@ protected: = private: QToolButton *m_switchBuiltStack; - QToolButton *m_splitButton; - QToolButton *m_timelineButton; + KDualAction *m_splitButton; + KDualAction *m_enableStackButton; + KDualAction *m_timelineButton; = private slots: void processSplitEffect(bool enable); /** Displays the owner clip keyframes in timeline */ void showKeyframes(bool enable); + /** Enable / disable effect stack */ + void enableStack(bool enable); = signals: void doSplitEffect(bool); diff --git a/src/effects/effectstack/model/effectstackmodel.cpp b/src/effec= ts/effectstack/model/effectstackmodel.cpp index 527110e75..5b3dd3dc5 100644 --- a/src/effects/effectstack/model/effectstackmodel.cpp +++ b/src/effects/effectstack/model/effectstackmodel.cpp @@ -782,7 +782,7 @@ const QString EffectStackModel::effectNames() const return effects.join(QLatin1Char('/')); } = -bool EffectStackModel::isEnabled() const +bool EffectStackModel::isStackEnabled() const { return m_effectStackEnabled; } diff --git a/src/effects/effectstack/model/effectstackmodel.hpp b/src/effec= ts/effectstack/model/effectstackmodel.hpp index 94327eebc..00c48b86a 100644 --- a/src/effects/effectstack/model/effectstackmodel.hpp +++ b/src/effects/effectstack/model/effectstackmodel.hpp @@ -121,7 +121,7 @@ public: /* @brief Returns a comma separated list of effect names */ const QString effectNames() const; = - bool isEnabled() const; + bool isStackEnabled() const; = public slots: /* @brief Delete an effect from the stack */ diff --git a/src/effects/effectstack/view/effectstackview.cpp b/src/effects= /effectstack/view/effectstackview.cpp index 384e8f085..fe2b43850 100644 --- a/src/effects/effectstack/view/effectstackview.cpp +++ b/src/effects/effectstack/view/effectstackview.cpp @@ -341,6 +341,23 @@ bool EffectStackView::isEmpty() const return m_model =3D=3D nullptr ? true : m_model->rowCount() =3D=3D 0; } = + +void EffectStackView::enableStack(bool enable) +{ + if (m_model) { + m_model->setEffectStackEnabled(enable); + } +} + +bool EffectStackView::isStackEnabled() const +{ + if (m_model) { + return m_model->isStackEnabled(); + } + return false; +} + + /* void EffectStackView::switchBuiltStack(bool show) { diff --git a/src/effects/effectstack/view/effectstackview.hpp b/src/effects= /effectstack/view/effectstackview.hpp index 0427a1572..519ecad03 100644 --- a/src/effects/effectstack/view/effectstackview.hpp +++ b/src/effects/effectstack/view/effectstackview.hpp @@ -67,6 +67,10 @@ public: /** @brief Returns true if effectstack is empty */ bool isEmpty() const; + /** @brief Enables / disables the stack + */ + void enableStack(bool enable); + bool isStackEnabled() const; = protected: void dragEnterEvent(QDragEnterEvent *event) override; diff --git a/src/timeline2/model/trackmodel.cpp b/src/timeline2/model/track= model.cpp index e668f22e9..ef5b49d14 100644 --- a/src/timeline2/model/trackmodel.cpp +++ b/src/timeline2/model/trackmodel.cpp @@ -1025,7 +1025,7 @@ const QString TrackModel::effectNames() const bool TrackModel::stackEnabled() const { READ_LOCK(); - return m_effectStack->isEnabled(); + return m_effectStack->isStackEnabled(); } = void TrackModel::setEffectStackEnabled(bool enable)