]> git.sesse.net Git - kdenlive/commitdiff
Fix incredibly broken timecode stuff(sometimes giving random values)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 4 Dec 2011 16:13:09 +0000 (17:13 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 4 Dec 2011 16:13:09 +0000 (17:13 +0100)
src/timecode.cpp
src/timecodedisplay.cpp
src/timecodedisplay.h

index 0e1fee55cd40c1a3e1e7fb093006505bf65616f3..ca51d7cf54422505429ad2620da7a09eb3f90c6a 100644 (file)
@@ -145,7 +145,6 @@ int Timecode::getFrameCount(const QString &duration) const
     if (duration.isEmpty()) {
         return 0;
     }
-
     int hours, minutes, seconds, frames;
     int offset = 0;
     if (duration.at(0) == '-') {
@@ -166,7 +165,7 @@ int Timecode::getFrameCount(const QString &duration) const
         int frameNumber = ((m_displayedFramesPerSecond * 3600 * hours) + (m_displayedFramesPerSecond * 60 * minutes) + (m_displayedFramesPerSecond * seconds) + frames) - (m_dropFrames * (totalMinutes - floor(totalMinutes / 10)));
         return frameNumber;
     }
-    return (int)(hours * 3600.0 + minutes * 60.0 + seconds * m_realFps + frames);
+    return (int)((hours * 3600.0 + minutes * 60.0 + seconds) * m_realFps + frames);
 }
 
 QString Timecode::getDisplayTimecode(const GenTime & time, bool frameDisplay) const
index 27fccf7488e8f8cfe352d790cf6221994dc8879f..93cf6d84ea2cdbe779957dcf5d8dc3c611872217 100644 (file)
@@ -62,16 +62,15 @@ TimecodeDisplay::TimecodeDisplay(Timecode t, QWidget *parent)
 QAbstractSpinBox::StepEnabled TimecodeDisplay::stepEnabled () const
 {
     QAbstractSpinBox::StepEnabled result = QAbstractSpinBox::StepNone;
-    if (getValue() > m_minimum) result |= QAbstractSpinBox::StepDownEnabled;
-    if (m_maximum == -1 || getValue() < m_maximum) result |= QAbstractSpinBox::StepUpEnabled;
+    if (m_value > m_minimum) result |= QAbstractSpinBox::StepDownEnabled;
+    if (m_maximum == -1 || m_value < m_maximum) result |= QAbstractSpinBox::StepUpEnabled;
     return result;
 }
 
 // virtual
 void TimecodeDisplay::stepBy(int steps)
 {
-    int val = getValue();
-    val += steps;
+    int val = m_value + steps;
     setValue(val);
     emit editingFinished();
 }
@@ -79,8 +78,8 @@ void TimecodeDisplay::stepBy(int steps)
 void TimecodeDisplay::setTimeCodeFormat(bool frametimecode, bool init)
 {
     if (!init && m_frametimecode == frametimecode) return;
-    int val = getValue();
     m_frametimecode = frametimecode;
+    lineEdit()->clear();
     if (m_frametimecode) {
         QIntValidator *valid = new QIntValidator(lineEdit());
         valid->setBottom(0);
@@ -90,7 +89,7 @@ void TimecodeDisplay::setTimeCodeFormat(bool frametimecode, bool init)
         lineEdit()->setValidator(0);
         lineEdit()->setInputMask(m_timecode.mask());
     }
-    setValue(val);
+    setValue(m_value);
 }
 
 void TimecodeDisplay::slotUpdateTimeCodeFormat()
@@ -106,8 +105,10 @@ void TimecodeDisplay::updateTimeCode(Timecode t)
 
 void TimecodeDisplay::keyPressEvent(QKeyEvent *e)
 {
-    if (e->key() == Qt::Key_Return)
-        slotEditingFinished();
+    if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) {
+        e->setAccepted(true);
+        clearFocus();
+    }
     else
         QAbstractSpinBox::keyPressEvent(e);
 }
@@ -142,13 +143,12 @@ int TimecodeDisplay::minimum() const
 
 int TimecodeDisplay::getValue() const
 {
-    if (m_frametimecode) return lineEdit()->text().toInt();
-    else return m_timecode.getFrameCount(lineEdit()->text());
+    return m_value;
 }
 
 GenTime TimecodeDisplay::gentime() const
 {
-    return GenTime(getValue(), m_timecode.fps());
+    return GenTime(m_value, m_timecode.fps());
 }
 
 Timecode TimecodeDisplay::timecode() const
@@ -173,10 +173,8 @@ void TimecodeDisplay::setValue(int value)
         value = m_minimum;
     if (m_maximum > m_minimum && value > m_maximum)
         value = m_maximum;
-
-    if (value == getValue() && !lineEdit()->text().isEmpty()) return;
-    //downarrow->setEnabled(value > m_minimum);
-    //uparrow->setEnabled(m_maximum < m_minimum || value < m_maximum);
+    if (value == m_value && !lineEdit()->text().isEmpty()) return;
+    m_value = value;
 
     if (m_frametimecode)
         lineEdit()->setText(QString::number(value));
@@ -188,14 +186,15 @@ void TimecodeDisplay::setValue(int value)
 
 void TimecodeDisplay::setValue(GenTime value)
 {
-    setValue(m_timecode.getTimecode(value));
+    setValue((int) value.frames(m_timecode.fps()));
 }
 
 
 void TimecodeDisplay::slotEditingFinished()
 {
-    clearFocus();
     lineEdit()->deselect();
+    if (m_frametimecode) setValue(lineEdit()->text().toInt());
+    else setValue(lineEdit()->text());
     emit editingFinished();
 }
 
index 05fab240ade385b66e9c88026feaea81700efd7c..484841da3c4d957310f1b06cb5fc3143086686b7 100644 (file)
@@ -83,6 +83,7 @@ private:
     bool m_frametimecode;
     int m_minimum;
     int m_maximum;
+    int m_value;
 
 public slots:
     /** @brief Sets the value.