X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmonitor.cpp;h=f7ae4644c2bcb401c3c496b06cce147372267f2b;hb=23f110ad06d4524f47de721a8f35e46228d8682b;hp=5bfd1fe35c793f851492c313691cc9af4ed430a5;hpb=f7fdd5aac893a1fe85d9099353d5c86ad961170e;p=kdenlive diff --git a/src/monitor.cpp b/src/monitor.cpp index 5bfd1fe3..f7ae4644 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -24,6 +24,7 @@ #include "smallruler.h" #include "docclipbase.h" #include "monitorscene.h" +#include "abstractclipitem.h" #include "kdenlivesettings.h" #include @@ -45,19 +46,21 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget *parent) : - QWidget(parent), - render(NULL), - m_name(name), - m_monitorManager(manager), - m_currentClip(NULL), - m_ruler(new SmallRuler(m_monitorManager)), - m_overlay(NULL), - m_isActive(false), - m_scale(1), - m_length(0), - m_dragStarted(false), - m_effectScene(NULL), - m_effectView(NULL) + QWidget(parent), + render(NULL), + m_name(name), + m_monitorManager(manager), + m_currentClip(NULL), + m_ruler(new SmallRuler(m_monitorManager)), + m_overlay(NULL), + m_isActive(false), + m_scale(1), + m_length(0), + m_dragStarted(false), + m_effectScene(NULL), + m_effectView(NULL), + m_selectedClip(NULL), + m_loopClipTransition(true) { m_ui.setupUi(this); QVBoxLayout *layout = new QVBoxLayout; @@ -170,6 +173,8 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget if (name == "project") { m_effectScene = new MonitorScene(render); m_effectView = new QGraphicsView(m_effectScene, m_ui.video_frame); + m_effectView->setRenderHints(QFlags()); + m_effectView->scale(((double) render->renderWidth()) / render->frameRenderWidth(), 1.0); rendererBox->addWidget(m_effectView); m_effectView->setMouseTracking(true); m_effectScene->setUp(); @@ -197,15 +202,21 @@ QString Monitor::name() const return m_name; } -void Monitor::setupMenu(QMenu *goMenu, QAction *playZone, QAction *loopZone, QMenu *markerMenu) +void Monitor::setupMenu(QMenu *goMenu, QAction *playZone, QAction *loopZone, QMenu *markerMenu, QAction *loopClip) { m_contextMenu = new QMenu(this); m_contextMenu->addMenu(m_playMenu); - if (goMenu) m_contextMenu->addMenu(goMenu); - if (markerMenu) m_contextMenu->addMenu(markerMenu); + if (goMenu) + m_contextMenu->addMenu(goMenu); + if (markerMenu) + m_contextMenu->addMenu(markerMenu); m_playMenu->addAction(playZone); m_playMenu->addAction(loopZone); + if (loopClip) { + m_loopClipAction = loopClip; + m_playMenu->addAction(loopClip); + } //TODO: add save zone to timeline monitor when fixed if (m_name == "clip") { @@ -728,6 +739,16 @@ void Monitor::slotLoopZone() m_playAction->setIcon(m_pauseIcon); } +void Monitor::slotLoopClip() +{ + if (render == NULL || m_selectedClip == NULL) + return; + activateMonitor(); + render->loopZone(m_selectedClip->startPos(), m_selectedClip->endPos()); + m_playAction->setChecked(true); + m_playAction->setIcon(m_pauseIcon); +} + void Monitor::slotSetXml(DocClipBase *clip, QPoint zone, const int position) { if (render == NULL) return; @@ -737,7 +758,7 @@ void Monitor::slotSetXml(DocClipBase *clip, QPoint zone, const int position) render->setProducer(NULL, -1); return; } - if (m_currentClip != NULL) activateMonitor(); + if (m_currentClip != NULL || clip != NULL) activateMonitor(); if (clip != m_currentClip) { m_currentClip = clip; updateMarkers(clip); @@ -780,6 +801,7 @@ void Monitor::resetProfile(const QString profile) if (render == NULL) return; render->resetProfile(profile); if (m_effectScene) { + m_effectView->scale(((double) render->renderWidth()) / render->frameRenderWidth(), 1.0); m_effectScene->resetProfile(); } } @@ -840,6 +862,33 @@ QStringList Monitor::getZoneInfo() const return result; } +void Monitor::slotSetSelectedClip(AbstractClipItem* item) +{ + if (item) { + m_loopClipAction->setEnabled(true); + m_selectedClip = item; + } else { + m_loopClipAction->setEnabled(false); + } +} + +void Monitor::slotSetSelectedClip(ClipItem* item) +{ + if (item || (!item && !m_loopClipTransition)) { + m_loopClipTransition = false; + slotSetSelectedClip((AbstractClipItem*)item); + } +} + +void Monitor::slotSetSelectedClip(Transition* item) +{ + if (item || (!item && m_loopClipTransition)) { + m_loopClipTransition = true; + slotSetSelectedClip((AbstractClipItem*)item); + } +} + + void Monitor::slotEffectScene(bool show) { if (m_name == "project") { @@ -868,8 +917,8 @@ bool Monitor::effectSceneDisplayed() } MonitorRefresh::MonitorRefresh(QWidget* parent) : - QWidget(parent), - m_renderer(NULL) + QWidget(parent), + m_renderer(NULL) { setAttribute(Qt::WA_PaintOnScreen); setAttribute(Qt::WA_OpaquePaintEvent); @@ -888,7 +937,7 @@ void MonitorRefresh::paintEvent(QPaintEvent *event) } Overlay::Overlay(QWidget* parent) : - QLabel(parent) + QLabel(parent) { setAttribute(Qt::WA_TransparentForMouseEvents); //setAttribute(Qt::WA_OpaquePaintEvent);