]> git.sesse.net Git - kdenlive/blobdiff - src/monitor.cpp
Fix set thumbnail for clip:
[kdenlive] / src / monitor.cpp
index dbe677190b43f481894b1b220723194d90836a8a..43683198207f0dda03898d711e931362f8607c4c 100644 (file)
@@ -60,7 +60,8 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget
     m_monitorRefresh(NULL),
     m_effectWidget(NULL),
     m_selectedClip(NULL),
-    m_loopClipTransition(true)
+    m_loopClipTransition(true),
+    m_editMarker(NULL)
 
 {
     QVBoxLayout *layout = new QVBoxLayout;
@@ -204,7 +205,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget
     }
 
     QWidget *spacer = new QWidget(this);
-    spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+    spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
     m_toolbar->addWidget(spacer);
     m_timePos = new TimecodeDisplay(m_monitorManager->timecode(), this);
     m_toolbar->addWidget(m_timePos);
@@ -256,8 +257,16 @@ void Monitor::setupMenu(QMenu *goMenu, QAction *playZone, QAction *loopZone, QMe
     m_contextMenu->addMenu(m_playMenu);
     if (goMenu)
         m_contextMenu->addMenu(goMenu);
-    if (markerMenu)
+    if (markerMenu) {
         m_contextMenu->addMenu(markerMenu);
+        QList <QAction *>list = markerMenu->actions();
+        for (int i = 0; i < list.count(); i++) {
+            if (list.at(i)->data().toString() == "edit_marker") {
+                m_editMarker = list.at(i);
+                break;
+            }
+        }
+    }
 
     m_playMenu->addAction(playZone);
     m_playMenu->addAction(loopZone);
@@ -443,11 +452,13 @@ void Monitor::slotSetZoneEnd()
 void Monitor::mousePressEvent(QMouseEvent * event)
 {
     if (event->button() != Qt::RightButton) {
-        if (m_videoBox->underMouse()) {
+        if (m_videoBox->underMouse() && (!m_overlay || !m_overlay->underMouse())) {
             m_dragStarted = true;
             m_DragStartPosition = event->pos();
         }
-    } else m_contextMenu->popup(event->globalPos());
+    } else if (!m_effectWidget || !m_effectWidget->isVisible()) {
+        m_contextMenu->popup(event->globalPos());
+    }
 }
 
 void Monitor::slotSwitchFullScreen()
@@ -550,7 +561,7 @@ void Monitor::slotSetThumbFrame()
         return;
     }
     m_currentClip->setClipThumbFrame((uint) render->seekFramePosition());
-    emit refreshClipThumbnail(m_currentClip->getId());
+    emit refreshClipThumbnail(m_currentClip->getId(), true);
 }
 
 void Monitor::slotExtractCurrentFrame()
@@ -886,19 +897,37 @@ 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();
+            connect(m_overlay, SIGNAL(editMarker()), this, SLOT(slotEditMarker()));
+            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();
+            connect(m_overlay, SIGNAL(editMarker()), this, SLOT(slotEditMarker()));
+            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;
     }
 }
 
+void Monitor::slotEditMarker()
+{
+    if (m_editMarker) m_editMarker->trigger();
+}
+
 void Monitor::updateTimecodeFormat()
 {
     m_timePos->slotUpdateTimeCodeFormat();
@@ -1000,6 +1029,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);
 }
 
@@ -1017,11 +1047,30 @@ void MonitorRefresh::paintEvent(QPaintEvent *event)
 Overlay::Overlay(QWidget* parent) :
     QLabel(parent)
 {
-    setAttribute(Qt::WA_TransparentForMouseEvents);
-    //setAttribute(Qt::WA_OpaquePaintEvent);
-    //setAttribute(Qt::WA_NoSystemBackground);
+    //setAttribute(Qt::WA_TransparentForMouseEvents);
     setAutoFillBackground(true);
     setBackgroundRole(QPalette::Base);
+    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+    setCursor(Qt::PointingHandCursor);
+}
+
+// virtual
+void Overlay::mouseReleaseEvent ( QMouseEvent * event )
+{
+    event->accept();
+}
+
+// virtual
+void Overlay::mousePressEvent( QMouseEvent * event )
+{
+    event->accept();
+}
+
+// virtual
+void Overlay::mouseDoubleClickEvent ( QMouseEvent * event )
+{
+    emit editMarker();
+    event->accept();
 }
 
 void Overlay::setOverlayText(const QString &text, bool isZone)