From f357ad1475ea0374bd781a89910af798c18d468f Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Mon, 22 Sep 2008 21:23:02 +0000 Subject: [PATCH] Make monitor zone functional svn path=/branches/KDE4/; revision=2404 --- icons/hisc-action-kdenlive-zone-end.svgz | Bin 0 -> 1474 bytes icons/hisc-action-kdenlive-zone-start.svgz | Bin 0 -> 1500 bytes src/customruler.cpp | 6 +++ src/customruler.h | 1 + src/mainwindow.cpp | 2 + src/monitor.cpp | 47 +++++++++++---------- src/monitor.h | 3 ++ src/smallruler.cpp | 16 ++++++- src/smallruler.h | 1 + src/trackview.cpp | 4 ++ src/trackview.h | 1 + 11 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 icons/hisc-action-kdenlive-zone-end.svgz create mode 100644 icons/hisc-action-kdenlive-zone-start.svgz diff --git a/icons/hisc-action-kdenlive-zone-end.svgz b/icons/hisc-action-kdenlive-zone-end.svgz new file mode 100644 index 0000000000000000000000000000000000000000..e1df97cdea64e614a9c962e9e3804bb7d8d3e99a GIT binary patch literal 1474 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 CUjH=! literal 0 HcmV?d00001 diff --git a/src/customruler.cpp b/src/customruler.cpp index dde85f1d..44563d23 100644 --- a/src/customruler.cpp +++ b/src/customruler.cpp @@ -74,6 +74,12 @@ CustomRuler::CustomRuler(Timecode tc, CustomTrackView *parent) setMouseTracking(true); } +void CustomRuler::setZone(QPoint p) { + m_zoneStart = p.x(); + m_zoneEnd = p.y(); + update(); +} + // virtual void CustomRuler::mousePressEvent(QMouseEvent * event) { if (event->button() == Qt::RightButton) { diff --git a/src/customruler.h b/src/customruler.h index edcf7b60..5f75f3d1 100644 --- a/src/customruler.h +++ b/src/customruler.h @@ -18,6 +18,7 @@ public: int outPoint() const; int inPoint() const; void setDuration(int d); + void setZone(QPoint p); protected: virtual void paintEvent(QPaintEvent * /*e*/); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 0fc4cbc7..d042e2e2 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1093,6 +1093,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha m_activeDocument->backupMltPlaylist(); if (m_activeTimeline) { disconnect(m_projectMonitor, SIGNAL(renderPosition(int)), m_activeTimeline, SLOT(moveCursorPos(int))); + disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, 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(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *))); @@ -1136,6 +1137,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha connect(trackView, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor())); 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))); connect(m_projectMonitor, SIGNAL(durationChanged(int)), trackView, SLOT(setDuration(int))); connect(doc, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *))); connect(doc, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool))); diff --git a/src/monitor.cpp b/src/monitor.cpp index 29116122..78c0f5ad 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -54,10 +54,11 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) m_playIcon = KIcon("media-playback-start"); m_pauseIcon = KIcon("media-playback-pause"); - QAction *m_rewAction = toolbar->addAction(KIcon("media-seek-backward"), i18n("Rewind")); - connect(m_rewAction, SIGNAL(triggered()), this, SLOT(slotRewind())); - QAction *m_rew1Action = toolbar->addAction(KIcon("media-skip-backward"), i18n("Rewind 1 frame")); - connect(m_rew1Action, SIGNAL(triggered()), this, SLOT(slotRewindOneFrame())); + toolbar->addAction(KIcon("kdenlive-zone-start"), i18n("Set zone start"), this, SLOT(slotSetZoneStart())); + toolbar->addAction(KIcon("kdenlive-zone-end"), i18n("Set zone end"), this, SLOT(slotSetZoneEnd())); + + toolbar->addAction(KIcon("media-seek-backward"), i18n("Rewind"), this, SLOT(slotRewind())); + toolbar->addAction(KIcon("media-skip-backward"), i18n("Rewind 1 frame"), this, SLOT(slotRewindOneFrame())); QToolButton *playButton = new QToolButton(toolbar); QMenu *playMenu = new QMenu(i18n("Play..."), this); @@ -68,19 +69,14 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) m_playAction = playMenu->addAction(m_playIcon, i18n("Play")); m_playAction->setCheckable(true); connect(m_playAction, SIGNAL(triggered()), this, SLOT(slotPlay())); - QAction *m_playSectionAction = playMenu->addAction(m_playIcon, i18n("Play Section")); - connect(m_playSectionAction, SIGNAL(triggered()), this, SLOT(slotPlay())); - QAction *m_loopSectionAction = playMenu->addAction(m_playIcon, i18n("Loop Section")); - connect(m_loopSectionAction, SIGNAL(triggered()), this, SLOT(slotPlay())); + playMenu->addAction(m_playIcon, i18n("Play Section"), this, SLOT(slotPlay())); + playMenu->addAction(m_playIcon, i18n("Loop Section"), this, SLOT(slotPlay())); - QAction *m_fwd1Action = toolbar->addAction(KIcon("media-skip-forward"), i18n("Forward 1 frame")); - connect(m_fwd1Action, SIGNAL(triggered()), this, SLOT(slotForwardOneFrame())); - QAction *m_fwdAction = toolbar->addAction(KIcon("media-seek-forward"), i18n("Forward")); - connect(m_fwdAction, SIGNAL(triggered()), this, SLOT(slotForward())); + toolbar->addAction(KIcon("media-skip-forward"), i18n("Forward 1 frame"), this, SLOT(slotForwardOneFrame())); + toolbar->addAction(KIcon("media-seek-forward"), i18n("Forward"), this, SLOT(slotForward())); playButton->setDefaultAction(m_playAction); - QToolButton *configButton = new QToolButton(toolbar); QMenu *configMenu = new QMenu(i18n("Misc..."), this); configButton->setIcon(KIcon("system-run")); @@ -113,8 +109,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) m_contextMenu = new QMenu(this); m_contextMenu->addMenu(playMenu); - QAction *extractFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Extract frame")); - connect(extractFrame, SIGNAL(triggered()), this, SLOT(slotExtractCurrentFrame())); + QAction *extractFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Extract frame"), this, SLOT(slotExtractCurrentFrame())); connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int))); connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int))); connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int))); @@ -124,20 +119,16 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) if (name != "clip") { connect(render, SIGNAL(rendererPosition(int)), this, SIGNAL(renderPosition(int))); connect(render, SIGNAL(durationChanged(int)), this, SIGNAL(durationChanged(int))); - QAction *splitView = m_contextMenu->addAction(KIcon("document-new"), i18n("Split view")); + QAction *splitView = m_contextMenu->addAction(KIcon("document-new"), i18n("Split view"), render, SLOT(slotSplitView(bool))); splitView->setCheckable(true); - connect(splitView, SIGNAL(toggled(bool)), render, SLOT(slotSplitView(bool))); configMenu->addAction(splitView); } else { - QAction *setThumbFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Set current image as thumbnail")); - connect(setThumbFrame, SIGNAL(triggered()), this, SLOT(slotSetThumbFrame())); + QAction *setThumbFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Set current image as thumbnail"), this, SLOT(slotSetThumbFrame())); configMenu->addAction(setThumbFrame); } configMenu->addSeparator(); - QAction *resize1Action = configMenu->addAction(KIcon("transform-scale"), i18n("Resize (100%)")); - connect(resize1Action, SIGNAL(triggered()), this, SLOT(slotSetSizeOneToOne())); - QAction *resize2Action = configMenu->addAction(KIcon("transform-scale"), i18n("Resize (50%)")); - connect(resize2Action, SIGNAL(triggered()), this, SLOT(slotSetSizeOneToTwo())); + configMenu->addAction(KIcon("transform-scale"), i18n("Resize (100%)"), this, SLOT(slotSetSizeOneToOne())); + configMenu->addAction(KIcon("transform-scale"), i18n("Resize (50%)"), this, SLOT(slotSetSizeOneToTwo())); //render->createVideoXWindow(ui.video_frame->winId(), -1); m_length = 0; m_monitorRefresh->show(); @@ -194,6 +185,16 @@ void Monitor::slotZoneMoved(int start, int end) { m_ruler->setZone(start, end); } +void Monitor::slotSetZoneStart() { + m_ruler->setZone(m_position, -1); + emit zoneUpdated(m_ruler->zone()); +} + +void Monitor::slotSetZoneEnd() { + m_ruler->setZone(-1, m_position); + emit zoneUpdated(m_ruler->zone()); +} + // virtual void Monitor::mousePressEvent(QMouseEvent * event) { if (event->button() != Qt::RightButton) { diff --git a/src/monitor.h b/src/monitor.h index b91d929a..09d34cce 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -84,6 +84,8 @@ private slots: void slotSetThumbFrame(); void slotSetSizeOneToOne(); void slotSetSizeOneToTwo(); + void slotSetZoneStart(); + void slotSetZoneEnd(); public slots: void slotOpenFile(const QString &); @@ -109,6 +111,7 @@ signals: void durationChanged(int); void refreshClipThumbnail(const QString &); void adjustMonitorSize(); + void zoneUpdated(QPoint); }; #endif diff --git a/src/smallruler.cpp b/src/smallruler.cpp index 2a41544c..7575927a 100644 --- a/src/smallruler.cpp +++ b/src/smallruler.cpp @@ -52,11 +52,23 @@ void SmallRuler::adjustScale(int maximum) { } void SmallRuler::setZone(int start, int end) { - m_zoneStart = start; - m_zoneEnd = end; + if (start != -1) { + if (end != -1 && start >= end) return; + else if (end == -1 && start >= m_zoneEnd) return; + m_zoneStart = start; + } + if (end != -1) { + if (start != -1 && end <= start) end = m_zoneEnd; + else if (start == -1 && end <= m_zoneStart) end = m_zoneEnd; + m_zoneEnd = end; + } update(); } +QPoint SmallRuler::zone() { + return QPoint(m_zoneStart, m_zoneEnd); +} + // virtual void SmallRuler::mousePressEvent(QMouseEvent * event) { const int pos = event->x() / m_scale; diff --git a/src/smallruler.h b/src/smallruler.h index 7e0a9072..44cc4290 100644 --- a/src/smallruler.h +++ b/src/smallruler.h @@ -32,6 +32,7 @@ public: virtual void mouseMoveEvent(QMouseEvent * event); void adjustScale(int maximum); void setZone(int start, int end); + QPoint zone(); protected: virtual void paintEvent(QPaintEvent *e); diff --git a/src/trackview.cpp b/src/trackview.cpp index 6611a188..741d712b 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -104,6 +104,10 @@ int TrackView::outPoint() const { return m_ruler->outPoint(); } +void TrackView::slotSetZone(QPoint p) { + m_ruler->setZone(p); +} + void TrackView::slotClipItemSelected(ClipItem*c) { emit clipItemSelected(c); } diff --git a/src/trackview.h b/src/trackview.h index 977461e8..1981e73e 100644 --- a/src/trackview.h +++ b/src/trackview.h @@ -65,6 +65,7 @@ public slots: void slotDeleteClip(const QString &clipId); void slotChangeZoom(int factor); void setDuration(int dur); + void slotSetZone(QPoint p); private: Ui::TimeLine_UI *view; -- 2.39.2