From: Jean-Baptiste Mardelle Date: Tue, 2 Dec 2008 23:12:56 +0000 (+0000) Subject: Fix several crashes related to track insert / delete X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=a36d4055db1e06dc9f24d718a03b94e834cfa622;p=kdenlive Fix several crashes related to track insert / delete svn path=/branches/KDE4/; revision=2751 --- diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 9259a573..57b196d9 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -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" diff --git a/src/headertrack.cpp b/src/headertrack.cpp index 014f4b02..bf2186b2 100644 --- a/src/headertrack.cpp +++ b/src/headertrack.cpp @@ -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())); diff --git a/src/kdenliveui.rc b/src/kdenliveui.rc index 2e1044c4..a1440a16 100644 --- a/src/kdenliveui.rc +++ b/src/kdenliveui.rc @@ -43,8 +43,14 @@ - - + Space + + + + Tracks + + + Add Video Effect diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f2fa6c32..3a2fe9e0 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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(); diff --git a/src/mainwindow.h b/src/mainwindow.h index 1190a548..34ab13b0 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -266,6 +266,8 @@ private slots: void slotSetInPoint(); void slotSetOutPoint(); void configureNotifications(); + void slotInsertTrack(int ix = 0); + void slotDeleteTrack(int ix = 0); }; diff --git a/src/trackview.cpp b/src/trackview.cpp index 02da1554..06a57e10 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -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(); diff --git a/src/trackview.h b/src/trackview.h index 25fa7f71..deaf1c26 100644 --- a/src/trackview.h +++ b/src/trackview.h @@ -98,6 +98,8 @@ signals: void cursorMoved(); void transitionItemSelected(Transition*, bool); void zoneMoved(int, int); + void insertTrack(int); + void deleteTrack(int); }; #endif