]> git.sesse.net Git - kdenlive/commitdiff
rotoscoping: Update add/delete keyframe button when timeline cursor is at keyframe
authorTill Theato <root@ttill.de>
Sat, 5 Mar 2011 19:01:18 +0000 (19:01 +0000)
committerTill Theato <root@ttill.de>
Sat, 5 Mar 2011 19:01:18 +0000 (19:01 +0000)
svn path=/trunk/kdenlive/; revision=5474

src/simplekeyframes/simplekeyframewidget.cpp
src/simplekeyframes/simplekeyframewidget.h
src/simplekeyframes/simpletimelinewidget.cpp
src/simplekeyframes/simpletimelinewidget.h

index d600e3b0257f5628c2aa238f7f2c006dffe8b1df..1ae3bdf68fe022174a357bdbeb8c02e4073d3377 100644 (file)
@@ -62,6 +62,7 @@ SimpleKeyframeWidget::SimpleKeyframeWidget(Timecode t, int duration, QWidget *pa
 
     connect(m_time, SIGNAL(editingFinished()), this, SLOT(slotSetPosition()));
     connect(m_timeline, SIGNAL(positionChanged(int)), this, SLOT(slotSetPosition(int)));
+    connect(m_timeline, SIGNAL(atKeyframe(bool)), this, SLOT(slotAtKeyframe(bool)));
     connect(m_timeline, SIGNAL(keyframeAdded(int)), this, SIGNAL(keyframeAdded(int)));
     connect(m_timeline, SIGNAL(keyframeRemoved(int)), this, SIGNAL(keyframeRemoved(int)));
     connect(m_timeline, SIGNAL(keyframeMoved(int,int)), this, SIGNAL(keyframeMoved(int,int)));
@@ -117,4 +118,15 @@ void SimpleKeyframeWidget::updateTimecodeFormat()
     m_time->slotUpdateTimeCodeFormat();
 }
 
+void SimpleKeyframeWidget::slotAtKeyframe(bool atKeyframe)
+{
+    if (atKeyframe) {
+        m_buttonAddDelete->setIcon(KIcon("edit-delete"));
+        m_buttonAddDelete->setToolTip(i18n("Delete keyframe"));
+    } else {
+        m_buttonAddDelete->setIcon(KIcon("document-new"));
+        m_buttonAddDelete->setToolTip(i18n("Add keyframe"));
+    }
+}
+
 #include "simplekeyframewidget.moc"
index be98c53cab86e7b45fb74661a660e4ddde4e37d6..d031717fced398993c1b901e8cfc0266d0d5a56c 100644 (file)
@@ -46,6 +46,9 @@ public:
 public slots:
     void slotSetPosition(int pos = -1, bool update = true);
 
+private slots:
+    void slotAtKeyframe(bool atKeyframe);
+
 signals:
     void positionChanged(int pos);
     void keyframeAdded(int pos);
index 5b6bb9c3d3232383cbcfd9861f573163181661bd..bf8e4500f5131b1827add030d214709b110a84a7 100644 (file)
@@ -52,13 +52,17 @@ void SimpleTimelineWidget::setKeyframes(QList <int> keyframes)
     m_keyframes = keyframes;
     qSort(m_keyframes);
     m_currentKeyframe = m_currentKeyframeOriginal = -1;
+    emit atKeyframe(m_keyframes.contains(m_position));
     update();
 }
 
 void SimpleTimelineWidget::slotSetPosition(int pos)
 {
-    m_position = pos;
-    update();
+    if (pos != m_position) {
+        m_position = pos;
+        emit atKeyframe(m_keyframes.contains(m_position));
+        update();
+    }
 }
 
 void SimpleTimelineWidget::slotAddKeyframe(int pos, int select)
@@ -73,6 +77,8 @@ void SimpleTimelineWidget::slotAddKeyframe(int pos, int select)
     update();
 
     emit keyframeAdded(pos);
+    if (pos == m_position)
+        emit atKeyframe(true);
 }
 
 void SimpleTimelineWidget::slotAddRemove()
@@ -90,6 +96,8 @@ void SimpleTimelineWidget::slotRemoveKeyframe(int pos)
         m_currentKeyframe = m_currentKeyframeOriginal = -1;
     update();
     emit keyframeRemoved(pos);
+    if (pos == m_position)
+        emit atKeyframe(false);
 }
 
 void SimpleTimelineWidget::setDuration(int dur)
@@ -103,6 +111,7 @@ void SimpleTimelineWidget::slotGoToNext()
         if (keyframe > m_position) {
             slotSetPosition(keyframe);
             emit positionChanged(keyframe);
+            emit atKeyframe(true);
             return;
         }
     }
@@ -110,6 +119,7 @@ void SimpleTimelineWidget::slotGoToNext()
     // no keyframe after current position
     slotSetPosition(m_duration);
     emit positionChanged(m_duration);
+    emit atKeyframe(false);
 }
 
 void SimpleTimelineWidget::slotGoToPrev()
@@ -118,6 +128,7 @@ void SimpleTimelineWidget::slotGoToPrev()
         if (m_keyframes.at(i) < m_position) {
             slotSetPosition(m_keyframes.at(i));
             emit positionChanged(m_keyframes.at(i));
+            emit atKeyframe(true);
             return;
         }
     }
@@ -125,6 +136,7 @@ void SimpleTimelineWidget::slotGoToPrev()
     // no keyframe before current position
     slotSetPosition(0);
     emit positionChanged(0);
+    emit atKeyframe(false);
 }
 
 void SimpleTimelineWidget::mousePressEvent(QMouseEvent* event)
@@ -146,6 +158,7 @@ void SimpleTimelineWidget::mousePressEvent(QMouseEvent* event)
     m_currentKeyframe = m_currentKeyframeOriginal = -1;
     m_position = pos;
     emit positionChanged(pos);
+    emit atKeyframe(m_keyframes.contains(pos));
     update();
 }
 
@@ -162,10 +175,12 @@ void SimpleTimelineWidget::mouseMoveEvent(QMouseEvent* event)
                 m_keyframes[m_keyframes.indexOf(m_currentKeyframe)] = pos;
                 m_currentKeyframe = pos;
                 emit keyframeMoving(m_currentKeyframeOriginal, m_currentKeyframe);
+                emit atKeyframe(m_keyframes.contains(m_position));
             }
         } else {
             m_position = pos;
             emit positionChanged(pos);
+            emit atKeyframe(m_keyframes.contains(pos));
         }
         update();
         return;
@@ -209,6 +224,8 @@ void SimpleTimelineWidget::mouseDoubleClickEvent(QMouseEvent* event)
                 if (keyframe == m_currentKeyframe)
                     m_currentKeyframe = m_currentKeyframeOriginal = -1;
                 emit keyframeRemoved(keyframe);
+                if (keyframe == m_position)
+                    emit atKeyframe(false);
                 return;
             }
         }
@@ -217,6 +234,8 @@ void SimpleTimelineWidget::mouseDoubleClickEvent(QMouseEvent* event)
         m_keyframes.append(pos);
         qSort(m_keyframes);
         emit keyframeAdded(pos);
+        if (pos == m_position)
+            emit atKeyframe(true);
     } else {
         QWidget::mouseDoubleClickEvent(event);
     }
@@ -232,6 +251,7 @@ void SimpleTimelineWidget::wheelEvent(QWheelEvent* event)
         m_position = qBound(0, m_position + change, m_duration);
         emit positionChanged(m_position);
     }
+    emit atKeyframe(m_keyframes.contains(m_position));
     update();
 }
 
index 255aa665ca8f28da248571a7c60cebae635a79ed..a71210a862a773b599010c8e389328844196d6a3 100644 (file)
@@ -63,6 +63,7 @@ private:
 
 signals:
     void positionChanged(int pos);
+    void atKeyframe(bool);
 
     void keyframeSelected();
     void keyframeMoving(int oldPos, int currentPos);