From: Jean-Baptiste Mardelle Date: Sun, 27 Jan 2008 20:27:59 +0000 (+0000) Subject: Display mouse timecode position in statusbar X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=0bb4859b0c976c497e26bbb42e2f45b2570c2d51;p=kdenlive Display mouse timecode position in statusbar svn path=/branches/KDE4/; revision=1824 --- diff --git a/src/clipitem.cpp b/src/clipitem.cpp index d8e0c59f..8db033fb 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -205,7 +205,7 @@ int ClipItem::endPos() if (isSelected()) { fades = QBrush(QColor(200, 50, 50, 150)); } - else fades = QBrush(QColor(200, 200, 200, 150)); + else fades = QBrush(QColor(200, 200, 200, 200)); if (m_startFade != 0) { QPainterPath fadeInPath; diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index ae047716..1ca8a722 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -81,6 +81,7 @@ void CustomTrackView::wheelEvent ( QWheelEvent * e ) void CustomTrackView::mouseMoveEvent ( QMouseEvent * event ) { int pos = event->x(); + emit mousePosition(mapToScene(event->pos()).x() / m_scale); /*if (event->modifiers() == Qt::ControlModifier) setDragMode(QGraphicsView::ScrollHandDrag); else if (event->modifiers() == Qt::ShiftModifier) @@ -89,9 +90,9 @@ void CustomTrackView::mouseMoveEvent ( QMouseEvent * event ) if (m_dragItem) { //event->button() == Qt::LeftButton) { // a button was pressed, delete visual tips - if (m_operationMode == MOVE) { - int moveX = mapToScene(event->pos()).x(); + int snappedPos = getSnapPointForPos(mapToScene(event->pos()).x() - m_clickPoint); + int moveX = snappedPos; //mapToScene(event->pos()).x(); //kDebug()<<"/////// MOVE CLIP, EVENT Y: "<scenePos().y()<<", SCENE HEIGHT: "<sceneRect().height(); int moveTrack = (int) mapToScene(event->pos()).y() / 50; int currentTrack = m_dragItem->track(); @@ -101,7 +102,7 @@ void CustomTrackView::mouseMoveEvent ( QMouseEvent * event ) int offset = moveTrack - currentTrack; if (offset != 0) offset = 50 * offset; - m_dragItem->moveTo((moveX - m_clickPoint) / m_scale, m_scale, offset, moveTrack); + m_dragItem->moveTo(moveX / m_scale, m_scale, offset, moveTrack); } else if (m_operationMode == RESIZESTART) { int pos = mapToScene(event->pos()).x(); @@ -261,6 +262,7 @@ void CustomTrackView::mouseMoveEvent ( QMouseEvent * event ) void CustomTrackView::mousePressEvent ( QMouseEvent * event ) { int pos = event->x(); + updateSnapPoints(); if (event->modifiers() == Qt::ControlModifier) setDragMode(QGraphicsView::ScrollHandDrag); else if (event->modifiers() == Qt::ShiftModifier) @@ -469,6 +471,31 @@ void CustomTrackView::resizeClip ( const QPointF &startPos, const QPointF &endPo } } +double CustomTrackView::getSnapPointForPos(double pos) +{ + for (int i = 0; i < m_snapPoints.size(); ++i) { + if (abs(pos - m_snapPoints.at(i) * m_scale) < 6) return m_snapPoints.at(i) * m_scale; + if (m_snapPoints.at(i) > pos) break; + } + return pos; +} + +void CustomTrackView::updateSnapPoints() +{ + m_snapPoints.clear(); + QList itemList = items(); + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == 70000) { + ClipItem *item = (ClipItem *)itemList.at(i); + m_snapPoints.append(item->startPos()); + if (item->fadeIn() != 0) m_snapPoints.append(item->startPos() + item->fadeIn()); + m_snapPoints.append(item->endPos()); + if (item->fadeOut() != 0) m_snapPoints.append(item->endPos() - item->fadeOut()); + } + } + qSort(m_snapPoints); +} + void CustomTrackView::setScale(double scaleFactor) { diff --git a/src/customtrackview.h b/src/customtrackview.h index 4ee97e31..b1ab619c 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -82,11 +82,15 @@ class CustomTrackView : public QGraphicsView QColor m_tipColor; double m_scale; int m_clickPoint; + QList m_snapPoints; + void updateSnapPoints(); + double getSnapPointForPos(double pos); signals: void cursorMoved(int); void zoomIn(); void zoomOut(); + void mousePosition(int); }; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c0aff813..e9b45096 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -36,12 +36,19 @@ #include #include #include +#include #include #include "mainwindow.h" #include "kdenlivesettings.h" #include "ui_configmisc_ui.h" + +#define ID_STATUS_MSG 1 +#define ID_EDITMODE_MSG 2 +#define ID_TIMELINE_MSG 3 +#define ID_TIMELINE_POS 4 +#define ID_TIMELINE_FORMAT 5 MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent), @@ -114,6 +121,13 @@ MainWindow::MainWindow(QWidget *parent) tabifyDockWidget (clipMonitorDock, projectMonitorDock); setCentralWidget(m_timelineArea); + + m_timecodeFormat = new KComboBox(this); + m_timecodeFormat->addItem(i18n("hh:mm:ss::ff")); + m_timecodeFormat->addItem(i18n("Frames")); + statusBar()->insertPermanentFixedItem("00:00:00:00", ID_TIMELINE_POS); + statusBar()->insertPermanentWidget(ID_TIMELINE_FORMAT, m_timecodeFormat); + setupGUI(Default, "kdenliveui.rc"); connect(projectMonitorDock, SIGNAL(visibilityChanged (bool)), m_projectMonitor, SLOT(refreshMonitor(bool))); @@ -287,6 +301,18 @@ void MainWindow::openFile(const KUrl &url) //new //connectDocument(trackView, doc); } +void MainWindow::slotUpdateMousePosition(int pos) +{ + if (m_activeDocument) + switch(m_timecodeFormat->currentIndex()) { + case 0: + statusBar()->changeItem(m_activeDocument->timecode().getTimecodeFromFrames(pos), ID_TIMELINE_POS); + break; + default: + statusBar()->changeItem(QString::number(pos), ID_TIMELINE_POS); + } +} + void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //changed { //m_projectMonitor->stop(); @@ -295,6 +321,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //chang m_activeDocument->setProducers(m_projectList->producersList()); m_activeDocument->setRenderer(NULL); } + connect(trackView, SIGNAL(mousePosition(int)), this, SLOT(slotUpdateMousePosition(int))); m_projectList->setDocument(doc); m_monitorManager->setTimecode(doc->timecode()); doc->setRenderer(m_projectMonitor->render); diff --git a/src/mainwindow.h b/src/mainwindow.h index 388ea194..c7fd6d2f 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -31,6 +31,7 @@ #include #include #include +#include #include "projectlist.h" #include "monitor.h" @@ -80,6 +81,8 @@ class MainWindow : public KXmlGuiWindow QAction *m_undo; QAction *m_redo; + KComboBox *m_timecodeFormat; + QDockWidget *overviewDock; CustomTrackView *m_overView; @@ -103,6 +106,7 @@ class MainWindow : public KXmlGuiWindow void slotConnectMonitors(); void slotRaiseMonitor(bool clipMonitor); void slotSetClipDuration(int id, int duration); + void slotUpdateMousePosition(int pos); }; #endif diff --git a/src/trackview.cpp b/src/trackview.cpp index 54c78caf..a6104ddb 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -70,6 +70,7 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent) connect(m_trackview, SIGNAL(zoomIn ()), this, SLOT(slotZoomIn())); connect(m_trackview, SIGNAL(zoomOut ()), this, SLOT(slotZoomOut())); connect(m_trackview->horizontalScrollBar(), SIGNAL(sliderMoved( int )), m_ruler, SLOT(slotMoveRuler( int ))); + connect(m_trackview, SIGNAL(mousePosition(int)), this, SIGNAL(mousePosition(int))); view->horizontalSlider->setValue(4); m_currentZoom = view->horizontalSlider->value(); diff --git a/src/trackview.h b/src/trackview.h index 39ca417f..6c35a58e 100644 --- a/src/trackview.h +++ b/src/trackview.h @@ -95,6 +95,9 @@ class TrackView : public QWidget void slotCursorMoved(int pos, bool slotCursorMoved = false); void slotZoomIn(); void slotZoomOut(); + + signals: + void mousePosition(int); }; #endif