]> git.sesse.net Git - kdenlive/commitdiff
Improve guide actions from timeline ruler context menu:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 1 May 2009 14:20:29 +0000 (14:20 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 1 May 2009 14:20:29 +0000 (14:20 +0000)
http://www.kdenlive.org/mantis/view.php?id=785

svn path=/trunk/kdenlive/; revision=3337

src/customruler.cpp
src/customruler.h
src/customtrackview.cpp
src/customtrackview.h

index 6be30fb64b08ecf1c1d5c42a7853a65ff9051f65..4c02217a83fb59e355b2eadabfe4e80b9ecfd512 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,26 @@ 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::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 +103,15 @@ 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;
     }
     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;
index c7a992807aa76bb8e1c386918d35cf825d656322..4896e8a2ae914f66cd9025c1e656076d66f1fbba 100644 (file)
@@ -62,11 +62,18 @@ private:
     int m_offset;
     RULER_MOVE m_moveCursor;
     QMenu *m_contextMenu;
+    QAction *m_editGuide;
+    QAction *m_deleteGuide;
+    int m_clickedGuide;
 
 public slots:
     void slotMoveRuler(int newPos);
     void slotCursorMoved(int oldpos, int newpos);
 
+private slots:
+    void slotEditGuide();
+    void slotDeleteGuide();
+
 signals:
     void zoneMoved(int, int);
 };
index 2ca784e9ea74f0d5a1a503aeb27ab13862ea69e1..d8a432acbecbc586c0c5252fc7d73f80d9866d20 100644 (file)
@@ -3494,6 +3494,16 @@ bool sortGuidesList(const Guide *g1 , const Guide *g2)
     return (*g1).position() < (*g2).position();
 }
 
+int CustomTrackView::hasGuide(int pos, int offset)
+{
+    for (int i = 0; i < m_guides.count(); i++) {
+        int guidePos = m_guides.at(i)->position().frames(m_document->fps());
+        if (qAbs(guidePos - pos) < offset) return guidePos;
+        else if (guidePos > pos) return -1;
+    }
+    return -1;
+}
+
 void CustomTrackView::editGuide(const GenTime oldPos, const GenTime pos, const QString &comment)
 {
     if (oldPos > GenTime() && pos > GenTime()) {
@@ -3549,9 +3559,11 @@ void CustomTrackView::slotAddGuide()
     }
 }
 
-void CustomTrackView::slotEditGuide()
+void CustomTrackView::slotEditGuide(int guidePos)
 {
-    GenTime pos = GenTime(m_cursorPos, m_document->fps());
+    GenTime pos;
+    if (guidePos == -1) pos = GenTime(m_cursorPos, m_document->fps());
+    else pos = GenTime(guidePos, m_document->fps());
     bool found = false;
     for (int i = 0; i < m_guides.count(); i++) {
         if (m_guides.at(i)->position() == pos) {
@@ -3584,9 +3596,11 @@ void CustomTrackView::slotEditTimeLineGuide()
     }
 }
 
-void CustomTrackView::slotDeleteGuide()
+void CustomTrackView::slotDeleteGuide(int guidePos)
 {
-    GenTime pos = GenTime(m_cursorPos, m_document->fps());
+    GenTime pos;
+    if (guidePos == -1) pos = GenTime(m_cursorPos, m_document->fps());
+    else pos = GenTime(guidePos, m_document->fps());
     bool found = false;
     for (int i = 0; i < m_guides.count(); i++) {
         if (m_guides.at(i)->position() == pos) {
index 55aed76327f5318889420e1e7e875bf936af0fee..cc75ed8f51d87f6c341c83d11a303751c6b9a984 100644 (file)
@@ -120,6 +120,7 @@ public:
     void setAudioOnly();
     void setAudioAndVideo();
     void doChangeClipType(const GenTime &pos, int track, bool videoOnly, bool audioOnly);
+    int hasGuide(int pos, int offset);
 
 public slots:
     void setCursorPos(int pos, bool seek = true);
@@ -142,8 +143,8 @@ public slots:
     bool addGuide(const GenTime pos, const QString &comment);
     void slotAddGuide();
     void slotEditGuide(CommentedTime guide);
-    void slotEditGuide();
-    void slotDeleteGuide();
+    void slotEditGuide(int guidePos = -1);
+    void slotDeleteGuide(int guidePos = -1);
     void slotDeleteAllGuides();
     void editGuide(const GenTime oldPos, const GenTime pos, const QString &comment);
     void copyClip();
@@ -251,7 +252,7 @@ private slots:
     void slotCheckMouseScrolling();
     void slotEditTimeLineGuide();
     void slotDeleteTimeLineGuide();
-    
+
 signals:
     void cursorMoved(int, int);
     void zoomIn();