diff --git a/src/timeline2/model/timelineitemmodel.cpp b/src/timeline2/model/timelineitemmodel.cpp index 69bc957c3a55d2c1d05147a2e2c54140eb60ae60..012ba974ac3a20415af2a1d9d21491051049277c 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 1f80c6c869f6a18efd314c0b35362c73e0b6921d..5d636fc6f12eee27b961e2182b9e5f22e8bd9bfd 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 1ae794bb944edfd35ac1ca744107ff02903c51bb..8dbd43a45cccab50400816b4779a7c467809b3c2 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 3b5d9e6d79b3af8fde98cf2fac824b1acc40a4d9..44f61f116bbd3a855be592b20d264f3e8c922430 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(); }