From a3d19d288ce2195f5daee28bc7b9a268c28ee03b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sun, 30 Dec 2007 23:06:46 +0000 Subject: [PATCH] Improve clip monitor svn path=/branches/KDE4/; revision=1781 --- src/mainwindow.cpp | 1 + src/monitor.cpp | 71 ++++++++++++++++++++++++++++++--------- src/monitor.h | 9 ++++- src/monitormanager.cpp | 10 ++++++ src/monitormanager.h | 4 +++ src/projectlist.cpp | 2 ++ src/smallruler.cpp | 9 +++++ src/smallruler.h | 2 +- src/widgets/monitor_ui.ui | 22 ++++++------ 9 files changed, 101 insertions(+), 29 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 41fc446e..2cc1a21e 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -212,6 +212,7 @@ void MainWindow::connectDocument(KdenliveDoc *doc) //changed { if (m_activeDocument) m_activeDocument->setProducers(m_projectList->producersList()); m_projectList->setDocument(doc); + m_monitorManager->setTimecode(doc->timecode()); m_activeDocument = doc; } diff --git a/src/monitor.cpp b/src/monitor.cpp index 7bdb3762..6a399e6a 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -18,10 +18,19 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) layout->addWidget( m_ruler); ui.ruler_frame->setLayout( layout ); //m_ruler->setPixelPerMark(3); + m_playIcon = KIcon("media-playback-start"); + m_pauseIcon = KIcon("media-playback-pause"); + ui.button_play->setIcon(m_playIcon); + ui.button_rew1->setIcon(KIcon("media-skip-backward")); + ui.button_rew->setIcon(KIcon("media-seek-backward")); + ui.button_fwd1->setIcon(KIcon("media-skip-forward")); + ui.button_fwd->setIcon(KIcon("media-seek-forward")); connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int))); - connect(ui.button_play, SIGNAL(clicked()), this, SLOT(slotOpen())); connect(ui.button_rew, SIGNAL(clicked()), this, SLOT(slotRewind())); - connect(ui.button_play_2, SIGNAL(clicked()), this, SLOT(slotPlay())); + connect(ui.button_rew1, SIGNAL(clicked()), this, SLOT(slotRewindOneFrame())); + connect(ui.button_fwd, SIGNAL(clicked()), this, SLOT(slotForward())); + connect(ui.button_fwd1, SIGNAL(clicked()), this, SLOT(slotForwardOneFrame())); + connect(ui.button_play, SIGNAL(clicked()), this, SLOT(slotPlay())); } // virtual @@ -33,10 +42,8 @@ void Monitor::mousePressEvent ( QMouseEvent * event ) // virtual void Monitor::wheelEvent ( QWheelEvent * event ) { - render->play(0); - if (event->delta() > 0) m_position++; - else m_position--; - render->seekToFrame(m_position); + if (event->delta() > 0) slotForwardOneFrame(); + else slotRewindOneFrame(); } void Monitor::slotSeek(int pos) @@ -44,13 +51,49 @@ void Monitor::slotSeek(int pos) if ( render == NULL ) return; int realPos = ((double) pos) / m_scale; render->seekToFrame(realPos); - + m_position = realPos; + ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); +} + +void Monitor::slotRewind() +{ + double speed = render->playSpeed(); + if ( speed >= 0 ) render->play(-2); + else render->play(speed * 2); + ui.button_play->setChecked(true); + ui.button_play->setIcon(m_pauseIcon); +} + +void Monitor::slotForward() +{ + double speed = render->playSpeed(); + if ( speed <= 1 ) render->play(2); + else render->play(speed * 2); + ui.button_play->setChecked(true); + ui.button_play->setIcon(m_pauseIcon); +} + +void Monitor::slotRewindOneFrame() +{ + render->play(0); + m_position--; + render->seekToFrame(m_position); + ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); +} + +void Monitor::slotForwardOneFrame() +{ + render->play(0); + m_position++; + render->seekToFrame(m_position); + ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); } void Monitor::seekCursor(int pos) { int rulerPos = (int) (pos * m_scale); m_position = pos; + ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(pos)); //kDebug()<<"seek: "<slotNewValue(rulerPos); } @@ -59,7 +102,8 @@ void Monitor::rendererStopped(int pos) { int rulerPos = (int) (pos * m_scale); m_ruler->slotNewValue(rulerPos); - ui.button_play_2->setChecked(false); + ui.button_play->setChecked(false); + ui.button_play->setIcon(m_playIcon); } void Monitor::initMonitor() @@ -118,19 +162,13 @@ void Monitor::slotOpen() render->mltInsertClip(2, GenTime(0, 25), QString("")); } -void Monitor::slotRewind() -{ - if ( render == NULL ) return; - m_monitorManager->activateMonitor(m_name); - render->seek(GenTime(0)); -} - void Monitor::slotPlay() { if ( render == NULL ) return; m_monitorManager->activateMonitor(m_name); render->switchPlay(); - ui.button_play_2->setChecked(true); + ui.button_play->setChecked(true); + ui.button_play->setIcon(m_pauseIcon); } void Monitor::slotSetXml(const QDomElement &e) @@ -143,6 +181,7 @@ void Monitor::slotSetXml(const QDomElement &e) westley.appendChild(e); render->setSceneList(doc, 0); m_ruler->slotNewValue(0); + ui.monitor_time->setText("00:00:00:00"); m_position = 0; } diff --git a/src/monitor.h b/src/monitor.h index 461bd872..6472a608 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -1,6 +1,8 @@ #ifndef MONITOR_H #define MONITOR_H +#include + #include "ui_monitor_ui.h" #include "renderer.h" #include "monitormanager.h" @@ -28,15 +30,20 @@ class Monitor : public QWidget int m_length; int m_position; SmallRuler *m_ruler; + KIcon m_playIcon; + KIcon m_pauseIcon; private slots: void slotPlay(); void slotOpen(); - void slotRewind(); void adjustRulerSize(int length); void seekCursor(int pos); void rendererStopped(int pos); void slotSeek(int pos); + void slotRewindOneFrame(); + void slotForwardOneFrame(); + void slotForward(); + void slotRewind(); public slots: void slotOpenFile(const QString &); diff --git a/src/monitormanager.cpp b/src/monitormanager.cpp index 50be9d6f..2925a0d6 100644 --- a/src/monitormanager.cpp +++ b/src/monitormanager.cpp @@ -10,6 +10,16 @@ MonitorManager::MonitorManager(QWidget *parent) } +void MonitorManager::setTimecode(Timecode tc) +{ + m_timecode = tc; +} + +Timecode MonitorManager::timecode() +{ + return m_timecode; +} + void MonitorManager::initMonitors(Monitor *clipMonitor, Monitor *projectMonitor) { m_clipMonitor = clipMonitor; diff --git a/src/monitormanager.h b/src/monitormanager.h index 00979c49..075b6369 100644 --- a/src/monitormanager.h +++ b/src/monitormanager.h @@ -2,6 +2,7 @@ #define MONITORMANAGER_H #include "monitor.h" +#include "timecode.h" class Monitor; @@ -14,11 +15,14 @@ class MonitorManager : public QObject void initMonitors(Monitor *clipMonitor, Monitor *projectMonitor); void activateMonitor(QString name); + Timecode timecode(); + void setTimecode(Timecode tc); private: Monitor *m_clipMonitor; Monitor *m_projectMonitor; QString m_activeMonitor; + Timecode m_timecode; private slots: void initProjectMonitor(); diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 953d9620..dd9b3ea5 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -105,6 +105,8 @@ ProjectList::ProjectList(QWidget *parent) searchView->setTreeWidget(listView); listView->setColumnCount(3); + listView->setDragEnabled(true); + listView->setDragDropMode(QAbstractItemView::DragOnly); QStringList headers; headers<setHeaderLabels(headers); diff --git a/src/smallruler.cpp b/src/smallruler.cpp index 62b3baa7..a7265072 100644 --- a/src/smallruler.cpp +++ b/src/smallruler.cpp @@ -53,6 +53,15 @@ void SmallRuler::mousePressEvent ( QMouseEvent * event ) kDebug()<x(); + //slotNewValue( pos ); + emit seekRenderer(pos); + kDebug()< 0 0 - 365 - 249 + 320 + 238 Form + + 0 + @@ -45,7 +48,7 @@ 0 - + 0 @@ -64,7 +67,7 @@ - + 0 @@ -83,7 +86,7 @@ - + 0 @@ -102,13 +105,10 @@ false - - true - - + 0 @@ -127,7 +127,7 @@ - + 0 @@ -288,7 +288,7 @@ - + 99:99:99:99; -- 2.39.2