]> git.sesse.net Git - kdenlive/blobdiff - src/monitor.cpp
Cleanup monitor overlay info (for marker and zone text)
[kdenlive] / src / monitor.cpp
index ad2b114f77849f9fbc7ecb418fb6f5a7c01c2ee5..819f0b27b2c6e13b0525f40945e86283c3b887be 100644 (file)
@@ -23,8 +23,9 @@
 #include "monitormanager.h"
 #include "smallruler.h"
 #include "docclipbase.h"
-#include "monitorscene.h"
 #include "abstractclipitem.h"
+#include "monitorscene.h"
+#include "monitoreditwidget.h"
 #include "kdenlivesettings.h"
 
 #include <KDebug>
@@ -42,7 +43,6 @@
 #include <QLabel>
 #include <QIntValidator>
 #include <QVBoxLayout>
-#include <QGraphicsView>
 
 
 Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget *parent) :
@@ -58,8 +58,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget
     m_length(0),
     m_dragStarted(false),
     m_monitorRefresh(NULL),
-    m_effectScene(NULL),
-    m_effectView(NULL),
+    m_effectWidget(NULL),
     m_selectedClip(NULL),
     m_loopClipTransition(true)
 
@@ -148,15 +147,6 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget
     m_volumePopup->show();
     m_volumePopup->hide();
 
-    QWidget *spacer = new QWidget(this);
-    spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-    m_toolbar->addWidget(spacer);
-    m_timePos = new TimecodeDisplay(m_monitorManager->timecode(), this);
-    m_toolbar->addWidget(m_timePos);
-    connect(m_timePos, SIGNAL(editingFinished()), this, SLOT(slotSeek()));
-    m_toolbar->setMaximumHeight(s * 1.5);
-    layout->addWidget(m_toolbar);
-
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
     setLayout(layout);
     setMinimumHeight(200);
@@ -182,6 +172,12 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget
         render = new Render(m_name, (int) m_monitorRefresh->winId(), profile, this);
         m_monitorRefresh->setRenderer(render);
     }
+#if defined (USE_OPEN_GL)
+    else if (m_glWidget) {
+        lay->addWidget(m_glWidget);
+        m_videoBox->setLayout(lay);
+    }
+#endif
 
     connect(m_audioSlider, SIGNAL(valueChanged(int)), this, SLOT(slotSetVolume(int)));
     connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int)));
@@ -201,15 +197,20 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget
     if (m_monitorRefresh) m_monitorRefresh->show();
 
     if (name == "project") {
-        m_effectScene = new MonitorScene(render);
-        m_effectView = new QGraphicsView(m_effectScene, m_videoBox);
-        lay->addWidget(m_effectView);
-        m_effectView->setRenderHints(QFlags<QPainter::RenderHint>());
-        m_effectView->scale(((double) render->renderWidth()) / render->frameRenderWidth(), 1.0);
-        m_effectView->setMouseTracking(true);
-        m_effectScene->setUp();
-        m_effectView->hide();
+        m_effectWidget = new MonitorEditWidget(render, m_videoBox);
+        m_toolbar->addAction(m_effectWidget->getVisibilityAction());
+        lay->addWidget(m_effectWidget);
+        m_effectWidget->hide();
     }
+
+    QWidget *spacer = new QWidget(this);
+    spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
+    m_toolbar->addWidget(spacer);
+    m_timePos = new TimecodeDisplay(m_monitorManager->timecode(), this);
+    m_toolbar->addWidget(m_timePos);
+    connect(m_timePos, SIGNAL(editingFinished()), this, SLOT(slotSeek()));
+    m_toolbar->setMaximumHeight(s * 1.5);
+    layout->addWidget(m_toolbar);
 }
 
 Monitor::~Monitor()
@@ -217,10 +218,8 @@ Monitor::~Monitor()
     delete m_ruler;
     delete m_timePos;
     delete m_overlay;
-    if (m_name == "project") {
-        delete m_effectView;
-        delete m_effectScene;
-    }
+    if (m_effectWidget)
+        delete m_effectWidget;
     delete m_monitorRefresh;
     delete render;
 }
@@ -460,7 +459,7 @@ void Monitor::slotSwitchFullScreen()
 void Monitor::mouseReleaseEvent(QMouseEvent * event)
 {
     if (m_dragStarted) {
-        if (m_videoBox->underMouse() && (!m_effectView || !m_effectView->isVisible())) {
+        if (m_videoBox->underMouse() && (!m_effectWidget || !m_effectWidget->isVisible())) {
             if (isActive()) slotPlay();
             else activateMonitor();
         } else QWidget::mouseReleaseEvent(event);
@@ -818,10 +817,10 @@ void Monitor::slotSetXml(DocClipBase *clip, QPoint zone, const int position)
             // MLT CONSUMER is broken
             kDebug(QtWarningMsg) << "ERROR, Cannot start monitor";
         }
-    } else if (position != -1) render->seek(GenTime(position, m_monitorManager->timecode().fps()));
+    } else if (position != -1) render->seek(position);
     if (!zone.isNull()) {
         m_ruler->setZone(zone.x(), zone.y());
-        render->seek(GenTime(zone.x(), m_monitorManager->timecode().fps()));
+        render->seek(zone.x());
     }
 }
 
@@ -852,10 +851,8 @@ void Monitor::resetProfile(const QString profile)
     m_timePos->updateTimeCode(m_monitorManager->timecode());
     if (render == NULL) return;
     render->resetProfile(profile);
-    if (m_effectScene) {
-        m_effectView->scale(((double) render->renderWidth()) / render->frameRenderWidth(), 1.0);
-        m_effectScene->resetProfile();
-    }
+    if (m_effectWidget)
+        m_effectWidget->resetProfile(render);
 }
 
 void Monitor::saveSceneList(QString path, QDomElement info)
@@ -889,13 +886,24 @@ void Monitor::slotSwitchMonitorInfo(bool show)
         if (m_monitorRefresh == NULL) {
             // Using OpenGL display
 #if defined(Q_WS_MAC) || defined(USE_OPEN_GL)
-            m_overlay = new Overlay(m_glWidget);
+            if (m_glWidget->layout()) delete m_glWidget->layout();
+            m_overlay = new Overlay();
+            QVBoxLayout *layout = new QVBoxLayout;
+            layout->addStretch(10);
+            layout->addWidget(m_overlay);
+            m_glWidget->setLayout(layout);
 #endif
         } else {
-            m_overlay = new Overlay(m_monitorRefresh);
+            if (m_monitorRefresh->layout()) delete m_monitorRefresh->layout();
+            m_overlay = new Overlay();
+            QVBoxLayout *layout = new QVBoxLayout;
+            layout->addStretch(10);
+            layout->addWidget(m_overlay);
+            m_monitorRefresh->setLayout(layout);
             m_overlay->raise();
             m_overlay->setHidden(true);
         }
+        checkOverlay();
     } else {
         delete m_overlay;
         m_overlay = NULL;
@@ -954,23 +962,24 @@ void Monitor::slotEffectScene(bool show)
             m_glWidget->setVisible(!show);
 #endif
         }
-        m_effectView->setVisible(show);
+        m_effectWidget->setVisible(show);
+        m_effectWidget->getVisibilityAction()->setChecked(show);
         emit requestFrameForAnalysis(show);
         if (show) {
+            m_effectWidget->getScene()->slotZoomFit();
             render->doRefresh();
-            m_effectScene->slotZoomFit();
         }
     }
 }
 
-MonitorScene * Monitor::getEffectScene()
+MonitorEditWidget* Monitor::getEffectEdit()
 {
-    return m_effectScene;
+    return m_effectWidget;
 }
 
 bool Monitor::effectSceneDisplayed()
 {
-    return m_effectView->isVisible();
+    return m_effectWidget->isVisible();
 }
 
 void Monitor::slotSetVolume(int volume)
@@ -1002,6 +1011,7 @@ MonitorRefresh::MonitorRefresh(QWidget* parent) :
     // MonitorRefresh is used as container for the SDL display (it's window id is passed to SDL)
     setAttribute(Qt::WA_PaintOnScreen);
     setAttribute(Qt::WA_OpaquePaintEvent);
+    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
     //setAttribute(Qt::WA_NoSystemBackground);
 }
 
@@ -1020,12 +1030,12 @@ Overlay::Overlay(QWidget* parent) :
     QLabel(parent)
 {
     setAttribute(Qt::WA_TransparentForMouseEvents);
-    //setAttribute(Qt::WA_OpaquePaintEvent);
-    //setAttribute(Qt::WA_NoSystemBackground);
     setAutoFillBackground(true);
     setBackgroundRole(QPalette::Base);
+    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
 }
 
+
 void Overlay::setOverlayText(const QString &text, bool isZone)
 {
     setHidden(true);
@@ -1095,6 +1105,8 @@ void VideoContainer::wheelEvent(QWheelEvent * event)
 
 void VideoContainer::mouseDoubleClickEvent(QMouseEvent * event)
 {
+    Q_UNUSED(event);
+
     if (!KdenliveSettings::openglmonitors())
         switchFullScreen();
 }