]> git.sesse.net Git - kdenlive/blobdiff - src/geometryval.cpp
Use lineEdit instead of a label in the header of the selected track to rename it...
[kdenlive] / src / geometryval.cpp
index 73705688c3669254c9b7c2c30738fc7a2487dd04..981b537a34b1431e0195441f67eac3519279ccd0 100644 (file)
@@ -28,7 +28,7 @@
 #include <QInputDialog>
 
 
-Geometryval::Geometryval(const MltVideoProfile profile, QPoint frame_size, int startPoint, QWidget* parent) :
+Geometryval::Geometryval(const MltVideoProfile profile, Timecode t, QPoint frame_size, int startPoint, QWidget* parent) :
         QWidget(parent),
         m_profile(profile),
         m_paramRect(NULL),
@@ -36,9 +36,13 @@ Geometryval::Geometryval(const MltVideoProfile profile, QPoint frame_size, int s
         m_path(NULL),
         m_fixedMode(false),
         m_frameSize(frame_size),
-        m_startPoint(startPoint)
+        m_startPoint(startPoint),
+        m_timePos(t)
 {
     setupUi(this);
+    toolbarlayout->addWidget(&m_timePos);
+    toolbarlayout->insertStretch(-1);
+
     QVBoxLayout* vbox = new QVBoxLayout(widget);
     m_sceneview = new QGraphicsView(this);
     m_sceneview->setBackgroundBrush(QBrush(Qt::black));
@@ -221,7 +225,7 @@ void Geometryval::slotResizeCustom()
 
 void Geometryval::slotTransparencyChanged(int transp)
 {
-    int pos = spinPos->value();
+    int pos = m_timePos.value();
     Mlt::GeometryItem item;
     int error = m_geom->fetch(&item, pos);
     if (error || item.key() == false) {
@@ -239,10 +243,19 @@ void Geometryval::slotSyncCursor()
     KdenliveSettings::setTransitionfollowcursor(m_syncAction->isChecked());
 }
 
+void Geometryval::updateTimecodeFormat()
+{
+    m_timePos.slotUpdateTimeCodeFormat();
+}
+
 void Geometryval::slotPositionChanged(int pos, bool seek)
 {
+    if (pos == -1) {
+        pos = m_timePos.value();
+    }
     if (seek && KdenliveSettings::transitionfollowcursor()) emit seekToPos(pos + m_startPoint);
-    spinPos->setValue(pos);
+    m_timePos.setValue(pos);
+    //spinPos->setValue(pos);
     m_helper->setValue(pos);
     Mlt::GeometryItem item;
     int error = m_geom->fetch(&item, pos);
@@ -274,14 +287,16 @@ void Geometryval::slotDeleteFrame(int pos)
 {
     // check there is more than one keyframe
     Mlt::GeometryItem item;
-    if (pos == -1) pos = spinPos->value();
+    int frame = m_timePos.value();
+
+    if (pos == -1) pos = frame;
     int error = m_geom->next_key(&item, pos + 1);
     if (error) {
         error = m_geom->prev_key(&item, pos - 1);
         if (error || item.frame() == pos) return;
     }
 
-    m_geom->remove(spinPos->value());
+    m_geom->remove(frame);
     buttonAdd->setEnabled(true);
     buttonDelete->setEnabled(false);
     widget->setEnabled(false);
@@ -296,7 +311,8 @@ void Geometryval::slotDeleteFrame(int pos)
 
 void Geometryval::slotAddFrame(int pos)
 {
-    if (pos == -1) pos = spinPos->value();
+    int frame = m_timePos.value();
+    if (pos == -1) pos = frame;
     Mlt::GeometryItem item;
     item.frame(pos);
     QRectF r = m_paramRect->rect().normalized();
@@ -321,14 +337,14 @@ void Geometryval::slotNextFrame()
 {
     Mlt::GeometryItem item;
     int error = m_geom->next_key(&item, m_helper->value() + 1);
+    int pos;
     kDebug() << "// SEEK TO NEXT KFR: " << error;
     if (error) {
         // Go to end
-        spinPos->setValue(spinPos->maximum());
-        return;
-    }
-    int pos = item.frame();
-    spinPos->setValue(pos);
+        pos = m_helper->frameLength;
+    } else pos = item.frame();
+    m_timePos.setValue(pos);
+    slotPositionChanged();
 }
 
 void Geometryval::slotPreviousFrame()
@@ -338,7 +354,8 @@ void Geometryval::slotPreviousFrame()
     kDebug() << "// SEEK TO NEXT KFR: " << error;
     if (error) return;
     int pos = item.frame();
-    spinPos->setValue(pos);
+    m_timePos.setValue(pos);
+    slotPositionChanged();
 }
 
 
@@ -359,13 +376,11 @@ void Geometryval::setupParam(const QDomElement par, int minFrame, int maxFrame)
         spinTransp->setMaximum(500);
         label_pos->setHidden(true);
         m_helper->setHidden(true);
-        spinPos->setHidden(true);
+        m_timePos.setHidden(true);
     }
     if (par.attribute("opacity") == "false") {
         label_opacity->setHidden(true);
         spinTransp->setHidden(true);
-    } else if (par.attribute("opacity") == "nonzero") {
-        spinTransp->setMinimum(1);
     }
     char *tmp = (char *) qstrdup(val.toUtf8().data());
     if (m_geom) m_geom->parse(tmp, maxFrame - minFrame, m_profile.width, m_profile.height);
@@ -380,7 +395,6 @@ void Geometryval::setupParam(const QDomElement par, int minFrame, int maxFrame)
         /*QDomDocument doc;
         doc.appendChild(doc.importNode(par, true));
         kDebug() << "IMPORTED TRANS: " << doc.toString();*/
-        spinPos->setMaximum(maxFrame - minFrame - 1);
         if (m_path == NULL) {
             m_path = new QGraphicsPathItem();
             m_path->setPen(QPen(Qt::red));
@@ -402,7 +416,8 @@ void Geometryval::setupParam(const QDomElement par, int minFrame, int maxFrame)
     slotPositionChanged(0, false);
     slotUpdateGeometry();
     if (!m_fixedMode) {
-        connect(spinPos, SIGNAL(valueChanged(int)), this , SLOT(slotPositionChanged(int)));
+        m_timePos.setRange(0, maxFrame - minFrame - 1);
+        connect(&m_timePos, SIGNAL(editingFinished()), this , SLOT(slotPositionChanged()));
     }
     connect(spinTransp, SIGNAL(valueChanged(int)), this , SLOT(slotTransparencyChanged(int)));
 }
@@ -430,7 +445,7 @@ void Geometryval::updateTransitionPath()
 
 void Geometryval::slotUpdateTransitionProperties()
 {
-    int pos = spinPos->value();
+    int pos = m_timePos.value();
     Mlt::GeometryItem item;
     int error = m_geom->next_key(&item, pos);
     if (error || item.frame() != pos) {
@@ -483,7 +498,7 @@ void Geometryval::slotSwitchOptions()
         frameOptions->setHidden(true);
         m_editOptions->setChecked(false);
     }
-    adjustSize();
+    //adjustSize();
 }
 
 void Geometryval::slotGeometryX(int value)
@@ -544,7 +559,8 @@ void Geometryval::slotUpdateGeometry()
 bool Geometryval::keyframeSelected()
 {
     Mlt::GeometryItem item;
-    if (m_geom->fetch(&item, spinPos->value()) || item.key() == false) return false;
+    int pos = m_timePos.value();
+    if (m_geom->fetch(&item, pos) || item.key() == false) return false;
     return true;
 }