From: Jean-Baptiste Mardelle Date: Fri, 1 May 2009 14:20:29 +0000 (+0000) Subject: Improve guide actions from timeline ruler context menu: X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=1fbb8258f8389fa02aed16a1f7877d32240f52ab;p=kdenlive Improve guide actions from timeline ruler context menu: http://www.kdenlive.org/mantis/view.php?id=785 svn path=/trunk/kdenlive/; revision=3337 --- diff --git a/src/customruler.cpp b/src/customruler.cpp index 6be30fb6..4c02217a 100644 --- a/src/customruler.cpp +++ b/src/customruler.cpp @@ -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; diff --git a/src/customruler.h b/src/customruler.h index c7a99280..4896e8a2 100644 --- a/src/customruler.h +++ b/src/customruler.h @@ -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); }; diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 2ca784e9..d8a432ac 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -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) { diff --git a/src/customtrackview.h b/src/customtrackview.h index 55aed763..cc75ed8f 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -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();