]> git.sesse.net Git - kdenlive/blobdiff - src/customruler.cpp
Various fixes to improve general stability in Qt 4.5.2
[kdenlive] / src / customruler.cpp
index 6be30fb64b08ecf1c1d5c42a7853a65ff9051f65..eec25d314995f3615a527f8cffb8383344b9b226 100644 (file)
@@ -57,7 +57,8 @@ CustomRuler::CustomRuler(Timecode tc, CustomTrackView *parent) :
         m_timecode(tc),
         m_view(parent),
         m_duration(0),
-        m_offset(0)
+        m_offset(0),
+        m_clickedGuide(-1)
 {
     setFont(KGlobalSettings::toolBarFont());
     m_scale = 3;
@@ -70,16 +71,34 @@ CustomRuler::CustomRuler(Timecode tc, CustomTrackView *parent) :
     m_contextMenu = new QMenu(this);
     QAction *addGuide = m_contextMenu->addAction(KIcon("document-new"), i18n("Add Guide"));
     connect(addGuide, SIGNAL(triggered()), m_view, SLOT(slotAddGuide()));
-    QAction *editGuide = m_contextMenu->addAction(KIcon("document-properties"), i18n("Edit Guide"));
-    connect(editGuide, SIGNAL(triggered()), m_view, SLOT(slotEditGuide()));
-    QAction *delGuide = m_contextMenu->addAction(KIcon("edit-delete"), i18n("Delete Guide"));
-    connect(delGuide, SIGNAL(triggered()), m_view, SLOT(slotDeleteGuide()));
+    m_editGuide = m_contextMenu->addAction(KIcon("document-properties"), i18n("Edit Guide"));
+    connect(m_editGuide, SIGNAL(triggered()), this, SLOT(slotEditGuide()));
+    m_deleteGuide = m_contextMenu->addAction(KIcon("edit-delete"), i18n("Delete Guide"));
+    connect(m_deleteGuide , SIGNAL(triggered()), this, SLOT(slotDeleteGuide()));
     QAction *delAllGuides = m_contextMenu->addAction(KIcon("edit-delete"), i18n("Delete All Guides"));
     connect(delAllGuides, SIGNAL(triggered()), m_view, SLOT(slotDeleteAllGuides()));
     setMouseTracking(true);
     setMinimumHeight(20);
 }
 
+void CustomRuler::updateProjectFps(Timecode t)
+{
+    m_timecode = t;
+    mediumMarkDistance = FRAME_SIZE * m_timecode.fps();
+    bigMarkDistance = FRAME_SIZE * m_timecode.fps() * 60;
+    update();
+}
+
+void CustomRuler::slotEditGuide()
+{
+    m_view->slotEditGuide(m_clickedGuide);
+}
+
+void CustomRuler::slotDeleteGuide()
+{
+    m_view->slotDeleteGuide(m_clickedGuide);
+}
+
 void CustomRuler::setZone(QPoint p)
 {
     int min = qMin(m_zoneStart, p.x());
@@ -92,12 +111,16 @@ void CustomRuler::setZone(QPoint p)
 // virtual
 void CustomRuler::mousePressEvent(QMouseEvent * event)
 {
+    int pos = (int)((event->x() + offset()));
     if (event->button() == Qt::RightButton) {
+        m_clickedGuide = m_view->hasGuide((int)(pos / m_factor), (int)(5 / m_factor + 1));
+        m_editGuide->setEnabled(m_clickedGuide > 0);
+        m_deleteGuide->setEnabled(m_clickedGuide > 0);
         m_contextMenu->exec(event->globalPos());
         return;
     }
+    setFocus(Qt::MouseFocusReason);
     m_view->activateMonitor();
-    int pos = (int)((event->x() + offset()));
     m_moveCursor = RULER_CURSOR;
     if (event->y() > 10) {
         if (qAbs(pos - m_zoneStart * m_factor) < 4) m_moveCursor = RULER_START;
@@ -138,10 +161,19 @@ void CustomRuler::mouseMoveEvent(QMouseEvent * event)
     } else {
         int pos = (int)((event->x() + offset()));
         if (event->y() <= 10) setCursor(Qt::ArrowCursor);
-        else if (qAbs(pos - m_zoneStart * m_factor) < 4) setCursor(KCursor("left_side", Qt::SizeHorCursor));
-        else if (qAbs(pos - m_zoneEnd * m_factor) < 4) setCursor(KCursor("right_side", Qt::SizeHorCursor));
-        else if (qAbs(pos - (m_zoneStart + (m_zoneEnd - m_zoneStart) / 2) * m_factor) < 4) setCursor(Qt::SizeHorCursor);
-        else setCursor(Qt::ArrowCursor);
+        else if (qAbs(pos - m_zoneStart * m_factor) < 4) {
+            setCursor(KCursor("left_side", Qt::SizeHorCursor));
+            setToolTip(i18n("Zone start: %1", m_timecode.getTimecodeFromFrames(m_zoneStart)));
+        } else if (qAbs(pos - m_zoneEnd * m_factor) < 4) {
+            setCursor(KCursor("right_side", Qt::SizeHorCursor));
+            setToolTip(i18n("Zone end: %1", m_timecode.getTimecodeFromFrames(m_zoneEnd)));
+        } else if (qAbs(pos - (m_zoneStart + (m_zoneEnd - m_zoneStart) / 2) * m_factor) < 4) {
+            setCursor(Qt::SizeHorCursor);
+            setToolTip(i18n("Zone duration: %1", m_timecode.getTimecodeFromFrames(m_zoneEnd - m_zoneStart)));
+        } else {
+            setCursor(Qt::ArrowCursor);
+            setToolTip(QString());
+        }
     }
 }
 
@@ -278,7 +310,6 @@ void CustomRuler::paintEvent(QPaintEvent *e)
     offsetmin = offsetmin * m_textSpacing;
     for (f = offsetmin; f < offsetmax; f += m_textSpacing) {
         QString lab = m_timecode.getTimecodeFromFrames((int)(f / m_factor + 0.5));
-
         p.drawText(f - m_offset + 2, LABEL_SIZE, lab);
     }
 
@@ -312,8 +343,10 @@ void CustomRuler::paintEvent(QPaintEvent *e)
     }
 
     if (zoneEnd > 0) {
+        QColor center(Qt::white);
+        center.setAlpha(150);
         QRect rec(zoneStart - off + (zoneEnd - zoneStart) / 2 - 4, 9, 8, 9);
-        p.fillRect(rec, QColor(255, 255, 255, 150));
+        p.fillRect(rec, center);
         p.drawRect(rec);
 
         QPolygon pa(4);