From 4c12556ef23d6fbee4be65cefdf2d1c6f70b6724 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Thu, 10 May 2018 10:40:23 +0200 Subject: [PATCH] Focus lower video track on project opening, correctly scroll view when active track changes --- src/timeline2/model/timelineitemmodel.cpp | 14 ++++++++++++++ src/timeline2/model/timelineitemmodel.hpp | 3 +++ src/timeline2/view/qml/timeline.qml | 10 ++++++++++ src/timeline2/view/timelinewidget.cpp | 2 +- 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/timeline2/model/timelineitemmodel.cpp b/src/timeline2/model/timelineitemmodel.cpp index 69bc957c3..012ba974a 100644 --- a/src/timeline2/model/timelineitemmodel.cpp +++ b/src/timeline2/model/timelineitemmodel.cpp @@ -394,6 +394,20 @@ QVariant TimelineItemModel::getTrackProperty(int tid, const QString &name) const return getTrackById_const(tid)->getProperty(name); } +int TimelineItemModel::getFirstVideoTrackIndex() const +{ + int trackId; + auto it = m_allTracks.cbegin(); + while (it != m_allTracks.cend()) { + trackId = getTrackMltIndex((*it)->getId()); + if ((*it)->getProperty("kdenlive:audio_track").toInt() != 1) { + break; + } + ++it; + } + return trackId; +} + const QString TimelineItemModel::getTrackFullName(int tid) const { QString tag = getTrackTagById(tid); diff --git a/src/timeline2/model/timelineitemmodel.hpp b/src/timeline2/model/timelineitemmodel.hpp index 1f80c6c86..5d636fc6f 100644 --- a/src/timeline2/model/timelineitemmodel.hpp +++ b/src/timeline2/model/timelineitemmodel.hpp @@ -81,6 +81,9 @@ public: QModelIndex parent(const QModelIndex &index) const override; Q_INVOKABLE void setTrackProperty(int tid, const QString &name, const QString &value); Q_INVOKABLE QVariant getTrackProperty(int tid, const QString &name) const; + /** @brief returns the lower video track index in timeline. + **/ + int getFirstVideoTrackIndex() const; const QString getTrackFullName(int tid) const; void notifyChange(const QModelIndex &topleft, const QModelIndex &bottomright, bool start, bool duration, bool updateThumb) override; void notifyChange(const QModelIndex &topleft, const QModelIndex &bottomright, const QVector &roles) override; diff --git a/src/timeline2/view/qml/timeline.qml b/src/timeline2/view/qml/timeline.qml index 1ae794bb9..8dbd43a45 100644 --- a/src/timeline2/view/qml/timeline.qml +++ b/src/timeline2/view/qml/timeline.qml @@ -131,6 +131,7 @@ Rectangle { property int copiedClip: -1 property var dragList: [] property int zoomOnMouse: -1 + property int viewActiveTrack: timeline.activeTrack //onCurrentTrackChanged: timeline.selection = [] onTimeScaleChanged: { @@ -144,6 +145,15 @@ Rectangle { ruler.adjustStepSize() } + onViewActiveTrackChanged: { + var tk = Logic.getTrackById(timeline.activeTrack) + if (tk.y < scrollView.flickableItem.contentY) { + scrollView.flickableItem.contentY = Math.max(0, tk.y - scrollView.height / 3) + } else if (tk.y + tk.height > scrollView.flickableItem.contentY + scrollView.viewport.height) { + scrollView.flickableItem.contentY = Math.min(scrollView.flickableItem.height, tk.y - scrollView.height / 3) + } + } + onTimelineSelectionChanged: { if (root.timelineSelection.length == 0) { root.dragList = [] diff --git a/src/timeline2/view/timelinewidget.cpp b/src/timeline2/view/timelinewidget.cpp index 3b5d9e6d7..44f61f116 100644 --- a/src/timeline2/view/timelinewidget.cpp +++ b/src/timeline2/view/timelinewidget.cpp @@ -92,7 +92,7 @@ void TimelineWidget::setModel(std::shared_ptr model) m_proxy->setRoot(rootObject()); setVisible(true); loading = false; - m_proxy->setActiveTrack(model->getTrackIndexFromPosition(model->getTracksCount() - 1)); + m_proxy->setActiveTrack(model->getFirstVideoTrackIndex()); m_proxy->checkDuration(); } -- GitLab