]> git.sesse.net Git - kdenlive/commitdiff
Fix several crashes related to track insert / delete
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 2 Dec 2008 23:12:56 +0000 (23:12 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 2 Dec 2008 23:12:56 +0000 (23:12 +0000)
svn path=/branches/KDE4/; revision=2751

src/customtrackview.cpp
src/headertrack.cpp
src/kdenliveui.rc
src/mainwindow.cpp
src/mainwindow.h
src/trackview.cpp
src/trackview.h

index 9259a57309387f3b45fca2b2f9dedc50f927e0da..57b196d9cfde1e89f56fc528d88eee1879bd117b 100644 (file)
@@ -1364,13 +1364,14 @@ void CustomTrackView::addTrack(TrackInfo type, int ix) {
     m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), m_tracksHeight * m_scene->m_tracksList.count());
     setSceneRect(0, 0, sceneRect().width(), m_tracksHeight * m_scene->m_tracksList.count());
     verticalScrollBar()->setMaximum(m_tracksHeight * m_scene->m_tracksList.count());
+    QTimer::singleShot(300, this, SIGNAL(trackHeightChanged()));
     //setFixedHeight(50 * m_tracksCount);
 }
 
 void CustomTrackView::removeTrack(int ix) {
     // Delete track in MLT playlist
     m_document->renderer()->mltDeleteTrack(m_scene->m_tracksList.count() - ix);
-    m_scene->m_tracksList.removeAt(m_scene->m_tracksList.count() - ix);
+    m_scene->m_tracksList.removeAt(m_scene->m_tracksList.count() - ix - 1);
 
     double startY = ix * m_tracksHeight + 1 + m_tracksHeight / 2;
     QRectF r(0, startY, sceneRect().width(), sceneRect().height() - startY);
@@ -1421,6 +1422,7 @@ void CustomTrackView::removeTrack(int ix) {
     m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), m_tracksHeight * m_scene->m_tracksList.count());
     setSceneRect(0, 0, sceneRect().width(), m_tracksHeight * m_scene->m_tracksList.count());
     verticalScrollBar()->setMaximum(m_tracksHeight * m_scene->m_tracksList.count());
+    QTimer::singleShot(300, this, SIGNAL(trackHeightChanged()));
 }
 
 
@@ -2727,7 +2729,7 @@ void CustomTrackView::slotDeleteTrack(int ix) {
     bool ok;
     ix = QInputDialog::getInteger(this, i18n("Remove Track"), i18n("Track"), ix, 0, m_scene->m_tracksList.count() - 1, 1, &ok);
     if (ok) {
-        TrackInfo info = m_scene->m_tracksList.at(m_scene->m_tracksList.count() - ix);
+        TrackInfo info = m_scene->m_tracksList.at(m_scene->m_tracksList.count() - ix - 1);
         deleteTimelineTrack(ix, info);
         m_document->setModified(true);
         /*AddTrackCommand* command = new AddTrackCommand(this, ix, info, false, true);
@@ -2747,7 +2749,6 @@ void CustomTrackView::addTimelineTrack(int ix, TrackInfo trackinfo) {
     m_commandStack->push(addTrack);
     kDebug() << "// ADD TRCKL DONE...";
     update();
-    QTimer::singleShot(300, this, SIGNAL(trackHeightChanged()));
 }
 
 void CustomTrackView::deleteTimelineTrack(int ix, TrackInfo trackinfo) {
@@ -2775,13 +2776,10 @@ void CustomTrackView::deleteTimelineTrack(int ix, TrackInfo trackinfo) {
     }
 
     new AddTrackCommand(this, ix, trackinfo, false, true, deleteTrack);
-
     m_commandStack->push(deleteTrack);
     //removeTrack(ix, trackinfo);
     kDebug() << "// REM TRK DONE...";
     update();
-    QTimer::singleShot(300, this, SIGNAL(trackHeightChanged()));
-
 }
 
 #include "customtrackview.moc"
index 014f4b026f06fc482d3b5513ee0edbf309a31836..bf2186b2a86eb44ec9a7ce50f9db6bd6764d7648 100644 (file)
@@ -53,7 +53,6 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, QWidget *parent)
 
     m_contextMenu = new QMenu(this);
 
-    //TODO: implement add/remove track
     QAction *insertAction = new QAction(i18n("Insert track"), this);
     m_contextMenu->addAction(insertAction);
     connect(insertAction, SIGNAL(triggered()), this, SLOT(slotAddTrack()));
index 2e1044c4e550a6c9d01dec6a7eea37d9da4a30c3..a1440a16c0204f1d3568b61cc5ce4d76d7bde0c0 100644 (file)
                <Action name="delete_guide" />
                <Action name="delete_all_guides" />
       </Menu>
-      <Action name="insert_space" />
-      <Action name="delete_space" />
+      <Menu name="space_menu" ><text>Space</text>
+       <Action name="insert_space" />
+       <Action name="delete_space" />
+      </Menu>
+      <Menu name="track_menu" ><text>Tracks</text>
+       <Action name="insert_track" />
+       <Action name="delete_track" />
+      </Menu>
       <Separator />
       <Menu name="video_effects_menu" ><text>Add Video Effect</text>
       </Menu>
index f2fa6c322f2d26823d83c031a9ac94e3a4e44627..3a2fe9e0c0c53ab543b940fc17162ea33fd145e5 100644 (file)
@@ -805,6 +805,14 @@ void MainWindow::setupActions() {
     collection->addAction("delete_space", removeSpace);
     connect(removeSpace, SIGNAL(triggered()), this, SLOT(slotRemoveSpace()));
 
+    KAction *insertTrack = new KAction(KIcon(), i18n("Insert Track"), this);
+    collection->addAction("insert_track", insertTrack);
+    connect(insertTrack, SIGNAL(triggered()), this, SLOT(slotInsertTrack()));
+
+    KAction *deleteTrack = new KAction(KIcon(), i18n("Delete Track"), this);
+    collection->addAction("delete_track", deleteTrack);
+    connect(deleteTrack, SIGNAL(triggered()), this, SLOT(slotDeleteTrack()));
+
     KAction *addGuide = new KAction(KIcon("document-new"), i18n("Add Guide"), this);
     collection->addAction("add_guide", addGuide);
     connect(addGuide, SIGNAL(triggered()), this, SLOT(slotAddGuide()));
@@ -1288,6 +1296,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
             disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), m_activeTimeline, SLOT(slotSetZone(QPoint)));
             disconnect(m_projectMonitor, SIGNAL(durationChanged(int)), m_activeTimeline, SLOT(setDuration(int)));
             disconnect(m_projectList, SIGNAL(projectModified()), m_activeDocument, SLOT(setModified()));
+
+
             disconnect(m_activeDocument, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated()));
             disconnect(m_activeDocument, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *)));
             disconnect(m_activeDocument, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool)));
@@ -1302,7 +1312,9 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
             disconnect(m_zoomSlider, SIGNAL(valueChanged(int)), m_activeTimeline, SLOT(slotChangeZoom(int)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(showClipFrame(DocClipBase *, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, const int)));
-
+            disconnect(m_activeTimeline, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor()));
+            disconnect(m_activeTimeline, SIGNAL(insertTrack(int)), this, SLOT(slotInsertTrack(int)));
+            disconnect(m_activeTimeline, SIGNAL(deleteTrack(int)), this, SLOT(slotDeleteTrack(int)));
             disconnect(m_activeDocument, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
             disconnect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement, int)), m_activeTimeline->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement, int)));
             disconnect(effectStack, SIGNAL(removeEffect(ClipItem*, QDomElement)), m_activeTimeline->projectView(), SLOT(slotDeleteEffect(ClipItem*, QDomElement)));
@@ -1331,6 +1343,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
     connect(m_projectList, SIGNAL(clipSelected(DocClipBase *)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *)));
     connect(m_projectList, SIGNAL(projectModified()), doc, SLOT(setModified()));
     connect(trackView, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor()));
+    connect(trackView, SIGNAL(insertTrack(int)), this, SLOT(slotInsertTrack(int)));
+    connect(trackView, SIGNAL(deleteTrack(int)), this, SLOT(slotDeleteTrack(int)));
     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)));
@@ -1609,6 +1623,18 @@ void MainWindow::slotRemoveSpace() {
         m_activeTimeline->projectView()->slotRemoveSpace();
 }
 
+void MainWindow::slotInsertTrack(int ix) {
+    m_projectMonitor->activateMonitor();
+    if (m_activeTimeline)
+        m_activeTimeline->projectView()->slotInsertTrack(ix);
+}
+
+void MainWindow::slotDeleteTrack(int ix) {
+    m_projectMonitor->activateMonitor();
+    if (m_activeTimeline)
+        m_activeTimeline->projectView()->slotDeleteTrack(ix);
+}
+
 void MainWindow::slotEditGuide() {
     if (m_activeTimeline)
         m_activeTimeline->projectView()->slotEditGuide();
index 1190a5487b1f29e433c2c22014f37578ae84ba33..34ab13b08436cea6e7f21ea1c0c2e1520a6e2c42 100644 (file)
@@ -266,6 +266,8 @@ private slots:
     void slotSetInPoint();
     void slotSetOutPoint();
     void configureNotifications();
+    void slotInsertTrack(int ix = 0);
+    void slotDeleteTrack(int ix = 0);
 };
 
 
index 02da1554de75a11c0e50c8999fd24dda09dfa441..06a57e102d86601932d7b48d7b533d1ba5481df8 100644 (file)
@@ -340,8 +340,8 @@ void TrackView::slotRebuildTrackHeaders() {
         connect(header, SIGNAL(switchTrackAudio(int)), m_trackview, SLOT(slotSwitchTrackAudio(int)));
 
         //TODO: re-enable when add / remove track is implemented
-        connect(header, SIGNAL(deleteTrack(int)), m_trackview, SLOT(slotDeleteTrack(int)));
-        connect(header, SIGNAL(insertTrack(int)), m_trackview, SLOT(slotInsertTrack(int)));
+        connect(header, SIGNAL(deleteTrack(int)), this, SIGNAL(deleteTrack(int)));
+        connect(header, SIGNAL(insertTrack(int)), this, SIGNAL(insertTrack(int)));
         m_headersLayout->addWidget(header);
     }
     view->headers_container->adjustSize();
index 25fa7f71c1fe46ade3710525d83cc0b9234c7e64..deaf1c26d476887f4722e07c73fd09b1eb197774 100644 (file)
@@ -98,6 +98,8 @@ signals:
     void cursorMoved();
     void transitionItemSelected(Transition*, bool);
     void zoneMoved(int, int);
+    void insertTrack(int);
+    void deleteTrack(int);
 };
 
 #endif