]> git.sesse.net Git - kdenlive/commitdiff
Disable effect when trying to pick a color from the monitor:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 19 Sep 2012 20:59:52 +0000 (22:59 +0200)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 19 Sep 2012 20:59:52 +0000 (22:59 +0200)
http://kdenlive.org/mantis/view.php?id=2723

src/choosecolorwidget.cpp
src/choosecolorwidget.h
src/colorpickerwidget.cpp
src/colorpickerwidget.h
src/effectstack/collapsibleeffect.cpp
src/effectstack/collapsibleeffect.h
src/effectstack/collapsiblegroup.cpp
src/effectstack/effectstackview2.cpp
src/effectstack/parametercontainer.cpp
src/effectstack/parametercontainer.h
src/renderer.cpp

index 8543d79ec3fb99d581145ea7a754ebd1743a2ef0..d842a0a30d587612e0ccdbea40360db3e90c2eaa 100644 (file)
@@ -117,6 +117,7 @@ ChooseColorWidget::ChooseColorWidget(QString text, QString color, bool alphaEnab
 
     connect(picker, SIGNAL(colorPicked(QColor)), this, SLOT(setColor(QColor)));
     connect(picker, SIGNAL(displayMessage(const QString&, int)), this, SIGNAL(displayMessage(const QString&, int)));
+    connect(picker, SIGNAL(disableCurrentFilter(bool)), this, SIGNAL(disableCurrentFilter(bool)));
     connect(m_button, SIGNAL(changed(QColor)), this, SIGNAL(modified()));
 }
 
index 24ab8cbc70004a62bbd74334529534647b9d8b0f..303c4a4e1aff52fa30f80025e8cc84690e5d37c2 100644 (file)
@@ -56,6 +56,8 @@ signals:
     /** @brief Emitted whenever a different color was choosen. */
     void modified();
     void displayMessage(const QString&, int);
+    /** @brief When user wants to pick a color, it's better to disable filter so we get proper color values. */
+    void disableCurrentFilter(bool);
 };
 
 #endif
index 14daf208c8a024c0004842e82eccda0edd94acc8..18cc9685db92b367a09affb78388aa847eeaeb36 100644 (file)
@@ -188,6 +188,7 @@ void ColorPickerWidget::mouseMoveEvent(QMouseEvent* event)
 
 void ColorPickerWidget::slotSetupEventFilter()
 {
+    emit disableCurrentFilter(true);
     m_filterActive = true;
     setFocus();
     installEventFilter(this);
@@ -201,6 +202,7 @@ void ColorPickerWidget::closeEventFilter()
     releaseMouse();
     releaseKeyboard();
     removeEventFilter(this);
+    emit disableCurrentFilter(false);
 }
 
 bool ColorPickerWidget::eventFilter(QObject *object, QEvent *event)
index 7838fcf4fab09c4e0d168c9482342e79c9b15c5d..3f6afe568af2878ff294fdcbfb350542f1c97c2e 100644 (file)
@@ -98,6 +98,8 @@ private slots:
 signals:
     void colorPicked(QColor);
     void displayMessage(const QString&, int);
+    /** @brief When user wants to pick a color, it's better to disable filter so we get proper color values. */
+    void disableCurrentFilter(bool);
 };
 
 #endif
index 60e5d3d18164f6730350107e780c56e164569b33..8b983c15ad08a5bd6289c65f92206bd09b7eeda7 100644 (file)
@@ -120,7 +120,7 @@ CollapsibleEffect::CollapsibleEffect(QDomElement effect, QDomElement original_ef
     }
 
     connect(collapseButton, SIGNAL(clicked()), this, SLOT(slotSwitch()));
-    connect(enabledButton, SIGNAL(toggled(bool)), this, SLOT(slotEnable(bool)));
+    connect(enabledButton, SIGNAL(toggled(bool)), this, SLOT(slotDisable(bool)));
     connect(buttonUp, SIGNAL(clicked()), this, SLOT(slotEffectUp()));
     connect(buttonDown, SIGNAL(clicked()), this, SLOT(slotEffectDown()));
     connect(buttonDel, SIGNAL(clicked()), this, SLOT(slotDeleteEffect()));
@@ -253,7 +253,7 @@ void CollapsibleEffect::mouseReleaseEvent( QMouseEvent *event )
   QWidget::mouseReleaseEvent(event);
 }
 
-void CollapsibleEffect::slotEnable(bool disable, bool emitInfo)
+void CollapsibleEffect::slotDisable(bool disable, bool emitInfo)
 {
     title->setEnabled(!disable);
     enabledButton->blockSignals(true);
@@ -440,6 +440,7 @@ void CollapsibleEffect::setupWidget(ItemInfo info, EffectMetaInfo *metaInfo)
     }
     else {
         m_paramWidget = new ParameterContainer(m_effect, info, metaInfo, widgetFrame);
+       connect(m_paramWidget, SIGNAL(disableCurrentFilter(bool)), this, SLOT(slotDisableEffect(bool)));
         if (m_effect.firstChildElement("parameter").isNull()) {
             // Effect has no parameter, don't allow expand
             collapseButton->setEnabled(false);
@@ -463,6 +464,17 @@ void CollapsibleEffect::setupWidget(ItemInfo info, EffectMetaInfo *metaInfo)
     
 }
 
+void CollapsibleEffect::slotDisableEffect(bool disable)
+{
+    title->setEnabled(!disable);
+    enabledButton->blockSignals(true);
+    enabledButton->setChecked(disable);
+    enabledButton->blockSignals(false);
+    enabledButton->setIcon(disable ? KIcon("novisible") : KIcon("visible"));
+    m_effect.setAttribute("disable", disable ? 1 : 0);
+    emit effectStateChanged(disable, effectIndex(), isActive() && needsMonitorEffectScene());
+}
+
 bool CollapsibleEffect::isGroup() const
 {
     return false;
index 138e8c331f4c5c80bc2daf4997794d0368e12431..9a6f9d85bce97c8efb19d66d37ec73c19a363c75 100644 (file)
@@ -76,7 +76,7 @@ public:
 
 public slots:
     void slotSyncEffectsPos(int pos);
-    void slotEnable(bool enable, bool emitInfo = true);
+    void slotDisable(bool disable, bool emitInfo = true);
     void slotResetEffect();
 
 private slots:
@@ -91,6 +91,8 @@ private slots:
     void slotUnGroup();
     /** @brief A sub effect parameter was changed */
     void slotUpdateRegionEffectParams(const QDomElement /*old*/, const QDomElement /*e*/, int /*ix*/);
+    /** @brief Dis/enable effect before processing an operation (color picker) */
+    void slotDisableEffect(bool disable);
 
 private:
     ParameterContainer *m_paramWidget;
index bae783c5263279e7d3a14ac8a5bf13ec0fc03623..8572b6eca47dabc979c96709260b0fbf6d11b13f 100644 (file)
@@ -136,7 +136,7 @@ void CollapsibleGroup::slotEnable(bool disable, bool emitInfo)
     enabledButton->setIcon(disable ? KIcon("novisible") : KIcon("visible"));
     enabledButton->blockSignals(false);
     for (int i = 0; i < m_subWidgets.count(); i++)
-       m_subWidgets.at(i)->slotEnable(disable, emitInfo);
+       m_subWidgets.at(i)->slotDisable(disable, emitInfo);
 }
 
 void CollapsibleGroup::slotDeleteGroup()
index 740518c1fa232c157c59e2e2f461c61ddedc1c03..fa541eee4cdcef7f9d3214e941d6eb857e578618 100644 (file)
@@ -501,7 +501,7 @@ void EffectStackView2::slotCheckAll(int state)
     // Disable all effects
     QList <int> indexes;
     for (int i = 0; i < m_effects.count(); i++) {
-        m_effects.at(i)->slotEnable(disabled, false);
+        m_effects.at(i)->slotDisable(disabled, false);
         indexes << m_effects.at(i)->effectIndex();
     }
     // Take care of groups
index 82b228a4022d8d364146ff9b13e57253f436271e..89a62da02919bcca0c7f520d3b79b327b133c0ee 100644 (file)
@@ -274,6 +274,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect
             m_valueItems[paramName] = choosecolor;
             connect(choosecolor, SIGNAL(displayMessage(const QString&, int)), this, SIGNAL(displayMessage(const QString&, int)));
             connect(choosecolor, SIGNAL(modified()) , this, SLOT(slotCollectAllParameters()));
+           connect(choosecolor, SIGNAL(disableCurrentFilter(bool)) , this, SIGNAL(disableCurrentFilter(bool)));
         } else if (type == "position") {
             int pos = value.toInt();
             if (effect.attribute("id") == "fadein" || effect.attribute("id") == "fade_from_black") {
index c41c9da860c136a2882420f41da9456a20f9522c..5e98a3f2d5323a0a55a676ae516135e9fa37e599 100644 (file)
@@ -97,7 +97,7 @@ private:
 signals:
     void parameterChanged(const QDomElement, const QDomElement, int);
     void syncEffectsPos(int);
-    void effectStateChanged(bool);
+    void disableCurrentFilter(bool);
     void checkMonitorPosition(int);
     void seekTimeline(int);
     void showComments(bool);    
index 9f0b2b19657d759f1d081942caac4e55cd46f6e3..e947bc79e756fc24f41cfa190db3ebaf19b5ca31 100644 (file)
@@ -4109,6 +4109,7 @@ const QList <Mlt::Producer *> Render::producersList()
         Mlt::Producer trackProducer(tt);
         delete tt;
         Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
+       if (!trackPlaylist.is_valid()) continue;
         int clipNb = trackPlaylist.count();
         for (int i = 0; i < clipNb; i++) {
             Mlt::Producer *c = trackPlaylist.get_clip(i);
@@ -4141,6 +4142,7 @@ void Render::fillSlowMotionProducers()
         Mlt::Producer trackProducer(tt);
         delete tt;
         Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
+       if (!trackPlaylist.is_valid()) continue;
         int clipNb = trackPlaylist.count();
         for (int i = 0; i < clipNb; i++) {
             Mlt::Producer *c = trackPlaylist.get_clip(i);