]> git.sesse.net Git - kdenlive/commitdiff
Fix transition widget when tracks changed (count, name,...)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 5 Oct 2009 08:46:12 +0000 (08:46 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 5 Oct 2009 08:46:12 +0000 (08:46 +0000)
svn path=/trunk/kdenlive/; revision=3998

src/customtrackview.cpp
src/customtrackview.h
src/mainwindow.cpp
src/mainwindow.h
src/trackview.cpp
src/trackview.h
src/transitionsettings.cpp
src/transitionsettings.h

index 0e5b6984db50c058c02dc457aac4a861085e086d..decf2029a0c5cee06a23c3c9fce9b8d0a9827743 100644 (file)
@@ -2104,7 +2104,7 @@ void CustomTrackView::addTrack(TrackInfo type, int ix)
     m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), maxHeight);
     setSceneRect(0, 0, sceneRect().width(), maxHeight);
     viewport()->update();
-    emit trackHeightChanged();
+    emit tracksChanged();
     //QTimer::singleShot(500, this, SIGNAL(trackHeightChanged()));
     //setFixedHeight(50 * m_tracksCount);
 }
@@ -2177,7 +2177,7 @@ void CustomTrackView::removeTrack(int ix)
     m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), maxHeight);
     setSceneRect(0, 0, sceneRect().width(), maxHeight);
     viewport()->update();
-    emit trackHeightChanged();
+    emit tracksChanged();
     //QTimer::singleShot(500, this, SIGNAL(trackHeightChanged()));
 }
 
@@ -2687,14 +2687,17 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
             }
             if (m_dragItem->type() == TRANSITIONWIDGET && (m_dragItemInfo.startPos != info.startPos || m_dragItemInfo.track != info.track)) {
                 Transition *transition = static_cast <Transition *>(m_dragItem);
-                if (!m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItem->track()), transition->transitionEndTrack(), m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos)) {
+                int transitionTrack;
+                if (!transition->forcedTrack()) transitionTrack = getPreviousVideoTrack(m_dragItem->track());
+                else transitionTrack = transition->transitionEndTrack();
+                if (!m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItem->track()), transitionTrack, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos)) {
                     // Moving transition failed, revert to previous position
                     emit displayMessage(i18n("Cannot move transition"), ErrorMessage);
                     transition->setPos((int) m_dragItemInfo.startPos.frames(m_document->fps()), (m_dragItemInfo.track) * m_tracksHeight + 1);
                 } else {
                     MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
                     m_commandStack->push(command);
-                    transition->updateTransitionEndTrack(getPreviousVideoTrack(m_dragItem->track()));
+                    transition->updateTransitionEndTrack(transitionTrack);
                 }
             }
         } else {
@@ -3616,10 +3619,11 @@ void CustomTrackView::moveGroup(QList <ItemInfo> startClip, QList <ItemInfo> sta
                 kDebug() << "// inserting new clp: " << info.startPos.frames(25);
             } else if (item->type() == TRANSITIONWIDGET) {
                 Transition *tr = static_cast <Transition*>(item);
-                int newTrack = tr->transitionEndTrack();
+                int newTrack;
                 kDebug() << "/// TRANSITION CURR TRK: " << newTrack;
-                if (!tr->forcedTrack()) {
-                    newTrack += trackOffset;
+                if (!tr->forcedTrack()) newTrack = getPreviousVideoTrack(info.track);
+                else {
+                    newTrack = tr->transitionEndTrack() + trackOffset;
                     if (newTrack < 0 || newTrack > m_document->tracksCount()) newTrack = getPreviousVideoTrack(info.track);
                 }
                 tr->updateTransitionEndTrack(newTrack);
@@ -4379,7 +4383,7 @@ void CustomTrackView::pasteClip()
             info.endPos = tr->endPos() + offset;
             info.track = tr->track() + trackOffset;
             int transitionEndTrack;
-            if (tr->isAutomatic()) transitionEndTrack = getPreviousVideoTrack(info.track);
+            if (!tr->forcedTrack()) transitionEndTrack = getPreviousVideoTrack(info.track);
             else transitionEndTrack = tr->transitionEndTrack();
             if (canBePastedTo(info, TRANSITIONWIDGET)) {
                 if (info.startPos >= info.endPos) {
index 2e1633f059402900664e3b4b2df276d5b2b749f0..298b5a6c762fcacb4f8028eaa7f26f85ee2eecc8 100644 (file)
@@ -272,6 +272,7 @@ signals:
     void transitionItemSelected(Transition*, int track = 0, QPoint p = QPoint(), bool update = false);
     void activateDocumentMonitor();
     void trackHeightChanged();
+    void tracksChanged();
     void displayMessage(const QString, MessageType);
     void showClipFrame(DocClipBase *, const int);
     void doTrackLock(int, bool);
index 7990b3b6cd7da381bd0c7ad40687009866de81c9..1a93f5ce4c1f19fec9ba830250912b87498a8395 100644 (file)
@@ -1653,7 +1653,7 @@ void MainWindow::slotEditProjectSettings()
             m_activeDocument->clipManager()->clearUnusedProducers();
             m_monitorManager->resetProfiles(m_activeDocument->timecode());
 
-            m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeTimeline->tracksNumber());
+            m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeDocument->tracksList());
             m_effectStack->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode());
             if (m_renderWidget) m_renderWidget->setProfile(m_activeDocument->mltProfile());
             m_timelineArea->setTabText(m_timelineArea->currentIndex(), m_activeDocument->description());
@@ -1801,7 +1801,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     KdenliveSettings::setProject_fps(doc->fps());
     m_monitorManager->resetProfiles(doc->timecode());
     m_projectList->setDocument(doc);
-    m_transitionConfig->updateProjectFormat(doc->mltProfile(), doc->timecode(), trackView->tracksNumber());
+    m_transitionConfig->updateProjectFormat(doc->mltProfile(), doc->timecode(), doc->tracksList());
     m_effectStack->updateProjectFormat(doc->mltProfile(), doc->timecode());
     connect(m_projectList, SIGNAL(clipSelected(DocClipBase *)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *)));
     connect(m_projectList, SIGNAL(refreshClip()), m_clipMonitor, SLOT(refreshMonitor()));
@@ -1813,6 +1813,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     connect(trackView, SIGNAL(insertTrack(int)), this, SLOT(slotInsertTrack(int)));
     connect(trackView, SIGNAL(deleteTrack(int)), this, SLOT(slotDeleteTrack(int)));
     connect(trackView, SIGNAL(changeTrack(int)), this, SLOT(slotChangeTrack(int)));
+    connect(trackView, SIGNAL(updateTracksInfo()), this, SLOT(slotUpdateTrackInfo()));
     connect(trackView, SIGNAL(mousePosition(int)), this, SLOT(slotUpdateMousePosition(int)));
     connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int)));
     connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint)));
@@ -2896,4 +2897,10 @@ void MainWindow::slotShutdown()
     }
 }
 
+void MainWindow::slotUpdateTrackInfo()
+{
+    if (m_activeDocument)
+        m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeDocument->tracksList());
+}
+
 #include "mainwindow.moc"
index 4be462681417e46fbd4a4a8922787b2323787906..12d22c23dd7cb0083011cca7eed9165bc8f13ccf 100644 (file)
@@ -319,6 +319,7 @@ private slots:
     void slotUpdateClipMarkers(DocClipBase *clip);
     void slotRevert();
     void slotShutdown();
+    void slotUpdateTrackInfo();
 
 signals:
     Q_SCRIPTABLE void abortRenderJob(const QString &url);
index 5d852ec5cb043a6cb92ebf0075726eab00f79811..950496772d2b1ad88d7525e83c96f6316de71804 100644 (file)
@@ -102,6 +102,7 @@ TrackView::TrackView(KdenliveDoc *doc, bool *ok, QWidget *parent) :
     tracksLayout->addWidget(m_trackview);
     connect(m_trackview->verticalScrollBar(), SIGNAL(valueChanged(int)), headers_area->verticalScrollBar(), SLOT(setValue(int)));
     connect(m_trackview, SIGNAL(trackHeightChanged()), this, SLOT(slotRebuildTrackHeaders()));
+    connect(m_trackview, SIGNAL(tracksChanged()), this, SLOT(slotReloadTracks()));
 
     parseDocument(m_doc->toXml());
     int error = m_doc->setSceneList();
@@ -452,6 +453,12 @@ void TrackView::refresh()
     m_trackview->viewport()->update();
 }
 
+void TrackView::slotReloadTracks()
+{
+    slotRebuildTrackHeaders();
+    emit updateTracksInfo();
+}
+
 void TrackView::slotRebuildTrackHeaders()
 {
     const QList <TrackInfo> list = m_doc->tracksList();
@@ -872,7 +879,7 @@ void TrackView::slotRenameTrack(int ix)
     if (ok) {
         info.trackName = newName;
         m_doc->setTrackType(tracknumber - 1, info);
-        QTimer::singleShot(300, this, SLOT(slotRebuildTrackHeaders()));
+        QTimer::singleShot(300, this, SLOT(slotReloadTracks()));
         m_doc->setModified(true);
     }
 }
index 48d5c9ba33c951e9769a95ec83cc52dc60fe5822..3d9b0e65b6bb99f7ed50f5047bf83945404ddc65 100644 (file)
@@ -85,7 +85,10 @@ private:
 private slots:
     void setCursorPos(int pos);
     void moveCursorPos(int pos);
+    /** \brief Rebuild the track headers */
     void slotRebuildTrackHeaders();
+    /** \brief The tracks count or a track name changed, rebuild and notify */
+    void slotReloadTracks();
     void slotChangeTrackLock(int ix, bool lock);
     void slotVerticalZoomDown();
     void slotVerticalZoomUp();
@@ -98,7 +101,7 @@ signals:
     void insertTrack(int);
     void deleteTrack(int);
     void changeTrack(int);
-    void renameTrack(int);
+    void updateTracksInfo();
     void setZoom(int);
 };
 
index cdab1d25fb2c69b25d57030a38c6875440ba4df8..f1c0beebaefccfeca35d498e229ccf826bb5fad0 100644 (file)
@@ -32,13 +32,13 @@ TransitionSettings::TransitionSettings(QWidget* parent) :
         m_tracksCount(0),
         m_autoTrackTransition(0)
 {
-    m_ui.setupUi(this);
-    QVBoxLayout *vbox1 = new QVBoxLayout(m_ui.frame);
-    m_effectEdit = new EffectStackEdit(m_ui.frame);
+    setupUi(this);
+    QVBoxLayout *vbox1 = new QVBoxLayout(frame);
+    m_effectEdit = new EffectStackEdit(frame);
     vbox1->setContentsMargins(0, 0, 0, 0);
     vbox1->setSpacing(0);
     vbox1->addWidget(m_effectEdit);
-    m_ui.frame->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum));
+    frame->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum));
     connect(m_effectEdit, SIGNAL(seekTimeline(int)), this, SIGNAL(seekTimeline(int)));
     setEnabled(false);
 
@@ -54,32 +54,33 @@ TransitionSettings::TransitionSettings(QWidget* parent) :
     }
     ix = 0;
     foreach(const QStringList &value, transitionsList) {
-        m_ui.transitionList->addItem(value.at(0));
-        m_ui.transitionList->setItemData(ix, MainWindow::transitions.getInfoFromIndex(value.last().toInt()), Qt::ToolTipRole);
+        transitionList->addItem(value.at(0));
+        transitionList->setItemData(ix, MainWindow::transitions.getInfoFromIndex(value.last().toInt()), Qt::ToolTipRole);
         ix++;
     }
 
-    connect(m_ui.transitionList, SIGNAL(activated(int)), this, SLOT(slotTransitionChanged()));
-    connect(m_ui.transitionTrack, SIGNAL(activated(int)), this, SLOT(slotTransitionTrackChanged()));
+    connect(transitionList, SIGNAL(activated(int)), this, SLOT(slotTransitionChanged()));
+    connect(transitionTrack, SIGNAL(activated(int)), this, SLOT(slotTransitionTrackChanged()));
 
     connect(this, SIGNAL(transferParamDesc(const QDomElement&, int , int)), m_effectEdit , SLOT(transferParamDesc(const QDomElement&, int , int)));
     connect(m_effectEdit, SIGNAL(parameterChanged(const QDomElement&, const QDomElement&)), this , SLOT(slotUpdateEffectParams(const QDomElement&, const QDomElement&)));
 }
 
-void TransitionSettings::updateProjectFormat(MltVideoProfile profile, Timecode t, const uint tracksCount)
+void TransitionSettings::updateProjectFormat(MltVideoProfile profile, Timecode t, const QList <TrackInfo> info)
 {
-    m_tracksCount = tracksCount;
+    m_tracksCount = info.count();
     m_effectEdit->updateProjectFormat(profile, t);
     QStringList tracksList;
-    tracksList << i18n("Auto");
-    for (uint i = 0; i < tracksCount; i++) {
-        tracksList << QString::number(i);
+    transitionTrack->blockSignals(true);
+    transitionTrack->clear();
+    transitionTrack->addItem(i18n("Auto"), -1);
+    for (uint i = 0; i < m_tracksCount; i++) {
+        if (!info.at(i).trackName.isEmpty())
+            transitionTrack->addItem(info.at(i).trackName + '(' + QString::number(i) + ')', i);
+        else transitionTrack->addItem(QString::number(i));
     }
-    tracksList << i18n("Black");
-    m_ui.transitionTrack->blockSignals(true);
-    m_ui.transitionTrack->clear();
-    m_ui.transitionTrack->addItems(tracksList);
-    m_ui.transitionTrack->blockSignals(false);
+    transitionTrack->addItem(i18n("Black"), m_tracksCount);
+    transitionTrack->blockSignals(false);
 }
 
 
@@ -88,7 +89,7 @@ void TransitionSettings::slotTransitionChanged(bool reinit, bool updateCurrent)
     QDomElement e = m_usedTransition->toXML().cloneNode().toElement();
     if (reinit) {
         // Reset the transition parameters to the default one
-        QDomElement newTransition = MainWindow::transitions.getEffectByName(m_ui.transitionList->currentText()).cloneNode().toElement();
+        QDomElement newTransition = MainWindow::transitions.getEffectByName(transitionList->currentText()).cloneNode().toElement();
         slotUpdateEffectParams(e, newTransition);
         emit transferParamDesc(newTransition, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps()));
     } else if (!updateCurrent) {
@@ -107,8 +108,8 @@ void TransitionSettings::slotTransitionTrackChanged()
     if (m_usedTransition == NULL) return;
     int ix = 0;
     QDomElement oldxml = m_usedTransition->toXML().cloneNode().toElement();
-    if (m_ui.transitionTrack->currentIndex() > 0) {
-        ix = m_ui.transitionTrack->count() - m_ui.transitionTrack->currentIndex() - 1;
+    if (transitionTrack->currentIndex() > 0) {
+        ix = transitionTrack->count() - transitionTrack->currentIndex() - 1;
         m_usedTransition->setForcedTrack(true, ix);
         m_effectEdit->updateParameter("force_track", "1");
         emit transitionUpdated(m_usedTransition, oldxml);
@@ -129,10 +130,10 @@ void TransitionSettings::slotTransitionItemSelected(Transition* t, int nextTrack
     if (t == m_usedTransition) {
         if (t == NULL) return;
         if (update) {
-            m_ui.transitionTrack->blockSignals(true);
-            if (t->forcedTrack()) m_ui.transitionTrack->setCurrentIndex(m_tracksCount + 1 - t->transitionEndTrack());
-            else m_ui.transitionTrack->setCurrentIndex(0);
-            m_ui.transitionTrack->blockSignals(false);
+            transitionTrack->blockSignals(true);
+            if (t->forcedTrack()) transitionTrack->setCurrentIndex(m_tracksCount + 1 - t->transitionEndTrack());
+            else transitionTrack->setCurrentIndex(0);
+            transitionTrack->blockSignals(false);
         }
         if (update || t->cropDuration() != m_transitionDuration || t->startPos() != m_transitionStart) {
             m_transitionDuration = t->cropDuration();
@@ -144,17 +145,17 @@ void TransitionSettings::slotTransitionItemSelected(Transition* t, int nextTrack
     if (t) {
         m_transitionDuration = t->cropDuration();
         m_transitionStart = t->startPos();
-        m_ui.transitionTrack->blockSignals(true);
-        if (!t->forcedTrack()) m_ui.transitionTrack->setCurrentIndex(0);
-        else m_ui.transitionTrack->setCurrentIndex(m_tracksCount + 1 - t->transitionEndTrack());
-        m_ui.transitionTrack->blockSignals(false);
-        int ix = m_ui.transitionList->findText(t->transitionName(), Qt::MatchExactly);
+        transitionTrack->blockSignals(true);
+        if (!t->forcedTrack()) transitionTrack->setCurrentIndex(0);
+        else transitionTrack->setCurrentIndex(m_tracksCount + 1 - t->transitionEndTrack());
+        transitionTrack->blockSignals(false);
+        int ix = transitionList->findText(t->transitionName(), Qt::MatchExactly);
         m_usedTransition = t;
         if (ix != -1) {
-            m_ui.transitionList->blockSignals(true);
-            m_ui.transitionList->setCurrentIndex(ix);
+            transitionList->blockSignals(true);
+            transitionList->setCurrentIndex(ix);
             slotTransitionChanged(false, false);
-            m_ui.transitionList->blockSignals(false);
+            transitionList->blockSignals(false);
         }
     } else {
         // null transition selected
index a78ed10584e7ce995a2708c8e422df3f0f2a8ff1..4d08933644f488f86b555c6a11b517daea07c60c 100644 (file)
@@ -27,17 +27,16 @@ class Transition;
 class EffectsList;
 class EffectStackEdit;
 
-class TransitionSettings : public QWidget
+class TransitionSettings : public QWidget, public Ui::TransitionSettings_UI
 {
     Q_OBJECT
 
 public:
     TransitionSettings(QWidget* parent = 0);
     void raiseWindow(QWidget*);
-    void updateProjectFormat(MltVideoProfile profile, Timecode t, const uint tracksCount);
+    void updateProjectFormat(MltVideoProfile profile, Timecode t, const QList <TrackInfo> info);
 
 private:
-    Ui::TransitionSettings_UI m_ui;
     EffectStackEdit *m_effectEdit;
     Transition* m_usedTransition;
     GenTime m_transitionDuration;