From 14f569ce3fd9ef0783e7355de459984c9a977163 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Mon, 7 Jul 2008 21:39:37 +0000 Subject: [PATCH] home / end to go to start / end of clip, Ctrl+home/end to go to project start / end svn path=/branches/KDE4/; revision=2295 --- src/customtrackview.cpp | 26 ++++++++++++++++++++++++++ src/customtrackview.h | 2 ++ src/kdenliveui.rc | 13 ++++++++++++- src/mainwindow.cpp | 34 ++++++++++++++++++++++++++++++++++ src/mainwindow.h | 2 ++ src/monitor.cpp | 18 ++++++++++++++++++ src/monitor.h | 2 ++ src/monitormanager.cpp | 10 ++++++++++ src/monitormanager.h | 2 ++ 9 files changed, 108 insertions(+), 1 deletion(-) diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index e343dfc9..9ab1c167 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -1460,6 +1460,7 @@ void CustomTrackView::slotSeekToPreviousSnap() { } } setCursorPos((int) res.frames(m_document->fps())); + checkScrolling(); } void CustomTrackView::slotSeekToNextSnap() { @@ -1473,6 +1474,31 @@ void CustomTrackView::slotSeekToNextSnap() { } } setCursorPos((int) res.frames(m_document->fps())); + checkScrolling(); +} + +void CustomTrackView::clipStart() { + QList itemList = scene()->selectedItems(); + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == AVWIDGET) { + ClipItem *item = (ClipItem *) itemList.at(i); + setCursorPos((int) item->startPos().frames(m_document->fps())); + checkScrolling(); + break; + } + } +} + +void CustomTrackView::clipEnd() { + QList itemList = scene()->selectedItems(); + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == AVWIDGET) { + ClipItem *item = (ClipItem *) itemList.at(i); + setCursorPos((int) item->endPos().frames(m_document->fps())); + checkScrolling(); + break; + } + } } void CustomTrackView::slotAddClipMarker() { diff --git a/src/customtrackview.h b/src/customtrackview.h index 50da76f6..cc26e6ee 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -89,6 +89,8 @@ public: bool findNextString(const QString &text); void initSearchStrings(); void clearSearchStrings(); + void clipStart(); + void clipEnd(); public slots: void setCursorPos(int pos, bool seek = true); diff --git a/src/kdenliveui.rc b/src/kdenliveui.rc index 0aecf894..1e4af504 100644 --- a/src/kdenliveui.rc +++ b/src/kdenliveui.rc @@ -46,7 +46,18 @@ Monitor - + + + + + + + + + + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 91e8b1f4..5d0aa757 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -548,6 +548,26 @@ void MainWindow::setupActions() { actionCollection()->addAction("monitor_seek_forward", monitorSeekForward); connect(monitorSeekForward, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotForward())); + KAction* clipStart = new KAction(KIcon("media-seek-backward"), i18n("Go to Clip Start"), this); + clipStart->setShortcut(Qt::Key_Home); + actionCollection()->addAction("seek_clip_start", clipStart); + connect(clipStart, SIGNAL(triggered(bool)), this, SLOT(slotClipStart())); + + KAction* clipEnd = new KAction(KIcon("media-seek-forward"), i18n("Go to Clip End"), this); + clipEnd->setShortcut(Qt::Key_End); + actionCollection()->addAction("seek_clip_end", clipEnd); + connect(clipEnd, SIGNAL(triggered(bool)), this, SLOT(slotClipEnd())); + + KAction* projectStart = new KAction(KIcon("media-seek-backward"), i18n("Go to Project Start"), this); + projectStart->setShortcut(Qt::CTRL + Qt::Key_Home); + actionCollection()->addAction("seek_start", projectStart); + connect(projectStart, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotStart())); + + KAction* projectEnd = new KAction(KIcon("media-seek-forward"), i18n("Go to Project End"), this); + projectEnd->setShortcut(Qt::CTRL + Qt::Key_End); + actionCollection()->addAction("seek_end", projectEnd); + connect(projectEnd, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotEnd())); + KAction* monitorSeekForwardOneFrame = new KAction(KIcon("media-skip-forward"), i18n("Forward 1 Frame"), this); monitorSeekForwardOneFrame->setShortcut(Qt::Key_Right); actionCollection()->addAction("monitor_seek_forward-one-frame", monitorSeekForwardOneFrame); @@ -1174,6 +1194,20 @@ void MainWindow::slotSnapForward() { } } +void MainWindow::slotClipStart() { + if (m_monitorManager->projectMonitorFocused()) { + TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget(); + currentTab->projectView()->clipStart(); + } +} + +void MainWindow::slotClipEnd() { + if (m_monitorManager->projectMonitorFocused()) { + TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget(); + currentTab->projectView()->clipEnd(); + } +} + void MainWindow::slotChangeTool(QAction * action) { if (action == m_buttonSelectTool) slotSetTool(SELECTTOOL); else if (action == m_buttonRazorTool) slotSetTool(RAZORTOOL); diff --git a/src/mainwindow.h b/src/mainwindow.h index 7ef6bca9..79d8e779 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -200,6 +200,8 @@ private slots: void slotSetTool(PROJECTTOOL tool); void slotSnapForward(); void slotSnapRewind(); + void slotClipStart(); + void slotClipEnd(); void slotFind(); void findTimeout(); void slotFindNext(); diff --git a/src/monitor.cpp b/src/monitor.cpp index 519e9c00..a0ee5141 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -168,6 +168,24 @@ void Monitor::slotSeek(int pos) { m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); } +void Monitor::slotStart() { + if (!m_isActive) m_monitorManager->activateMonitor(m_name); + render->play(0); + m_position = 0; + render->seekToFrame(m_position); + emit renderPosition(m_position); + m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); +} + +void Monitor::slotEnd() { + if (!m_isActive) m_monitorManager->activateMonitor(m_name); + render->play(0); + m_position = render->getLength(); + render->seekToFrame(m_position); + emit renderPosition(m_position); + m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); +} + void Monitor::slotRewind(double speed) { if (!m_isActive) m_monitorManager->activateMonitor(m_name); if (speed == 0) { diff --git a/src/monitor.h b/src/monitor.h index 5f86a816..8c8a75d5 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -98,6 +98,8 @@ public slots: void slotRewindOneFrame(); void slotForwardOneFrame(); void saveSceneList(QString path, QDomElement info = QDomElement()); + void slotStart(); + void slotEnd(); signals: void renderPosition(int); diff --git a/src/monitormanager.cpp b/src/monitormanager.cpp index f771fabc..35c48917 100644 --- a/src/monitormanager.cpp +++ b/src/monitormanager.cpp @@ -101,6 +101,16 @@ void MonitorManager::slotForwardOneFrame() { else m_projectMonitor->slotForwardOneFrame(); } +void MonitorManager::slotStart() { + if (m_activeMonitor == "clip") m_clipMonitor->slotStart(); + else m_projectMonitor->slotStart(); +} + +void MonitorManager::slotEnd() { + if (m_activeMonitor == "clip") m_clipMonitor->slotEnd(); + else m_projectMonitor->slotEnd(); +} + void MonitorManager::resetProfiles(QString prof) { m_clipMonitor->resetProfile(prof); m_projectMonitor->resetProfile(prof); diff --git a/src/monitormanager.h b/src/monitormanager.h index 173fbc18..972dfdb9 100644 --- a/src/monitormanager.h +++ b/src/monitormanager.h @@ -45,6 +45,8 @@ public slots: void slotForward(double speed = 0); void slotRewindOneFrame(); void slotForwardOneFrame(); + void slotStart(); + void slotEnd(); private: Monitor *m_clipMonitor; -- 2.39.2