From 79c295366235cb8a6ff1845b6af297cde724285b Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Wed, 11 Dec 2019 16:34:38 +1100 Subject: [PATCH] implemented track locking in the timeline widget --- app/node/output/track/track.cpp | 13 ++++++++++++- app/node/output/track/track.h | 6 ++++++ app/widget/timelinewidget/timelinewidget.cpp | 9 +++++++-- app/widget/timelinewidget/tool/pointer.cpp | 4 +++- app/widget/timelinewidget/tool/razor.cpp | 2 +- .../timelinewidget/trackview/trackviewitem.cpp | 5 +++-- 6 files changed, 32 insertions(+), 7 deletions(-) diff --git a/app/node/output/track/track.cpp b/app/node/output/track/track.cpp index fcbbe886b..47a39bb43 100644 --- a/app/node/output/track/track.cpp +++ b/app/node/output/track/track.cpp @@ -30,7 +30,8 @@ TrackOutput::TrackOutput() : track_type_(kTrackTypeNone), block_invalidate_cache_stack_(0), - index_(-1) + index_(-1), + locked_(false) { block_input_ = new NodeInputArray("block_in"); AddInput(block_input_); @@ -369,6 +370,11 @@ bool TrackOutput::IsMuted() const return muted_input_->get_value_at_time(0).toBool(); } +bool TrackOutput::IsLocked() const +{ + return locked_; +} + void TrackOutput::SetTrackName(const QString &name) { track_name_ = name; @@ -380,6 +386,11 @@ void TrackOutput::SetMuted(bool e) InvalidateCache(0, track_length()); } +void TrackOutput::SetLocked(bool e) +{ + locked_ = e; +} + void TrackOutput::UpdateInOutFrom(int index) { Q_ASSERT(index >= 0); diff --git a/app/node/output/track/track.h b/app/node/output/track/track.h index c2ac2d371..667a01fe7 100644 --- a/app/node/output/track/track.h +++ b/app/node/output/track/track.h @@ -138,11 +138,15 @@ public: bool IsMuted() const; + bool IsLocked() const; + public slots: void SetTrackName(const QString& name); void SetMuted(bool e); + void SetLocked(bool e); + signals: /** * @brief Signal emitted when a Block is added to this Track @@ -189,6 +193,8 @@ private: int index_; + bool locked_; + private slots: void BlockConnected(NodeEdgePtr edge); diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index ea38e7f9f..9578e239f 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -756,11 +756,16 @@ void TimelineWidget::MoveRubberBandSelect(bool select_links) } foreach (QGraphicsItem* item, new_selected_list) { - item->setSelected(true); + TimelineViewBlockItem* block_item = static_cast(item); + if (GetTrackFromReference(block_item->Track())->IsLocked()) { + continue; + } + + block_item->setSelected(true); if (select_links) { // Select the block's links - Block* b = static_cast(item)->block(); + Block* b = block_item->block(); SetBlockLinksSelected(b, true); // Add its links to the list diff --git a/app/widget/timelinewidget/tool/pointer.cpp b/app/widget/timelinewidget/tool/pointer.cpp index 147c96b30..98952deee 100644 --- a/app/widget/timelinewidget/tool/pointer.cpp +++ b/app/widget/timelinewidget/tool/pointer.cpp @@ -46,7 +46,9 @@ void TimelineWidget::PointerTool::MousePress(TimelineViewMouseEvent *event) TimelineViewBlockItem* item = GetItemAtScenePos(event->GetCoordinates()); - bool selectable_item = (item != nullptr && item->flags() & QGraphicsItem::ItemIsSelectable); + bool selectable_item = (item != nullptr + && item->flags() & QGraphicsItem::ItemIsSelectable + && !parent()->GetTrackFromReference(item->Track())->IsLocked()); if (selectable_item) { // Cache the clip's type for use later diff --git a/app/widget/timelinewidget/tool/razor.cpp b/app/widget/timelinewidget/tool/razor.cpp index 447d82a5f..764e2ef5f 100644 --- a/app/widget/timelinewidget/tool/razor.cpp +++ b/app/widget/timelinewidget/tool/razor.cpp @@ -59,7 +59,7 @@ void TimelineWidget::RazorTool::MouseRelease(TimelineViewMouseEvent *event) foreach (const TrackReference& track_ref, split_tracks_) { TrackOutput* track = parent()->GetTrackFromReference(track_ref); - if (track == nullptr) { + if (track == nullptr || track->IsLocked()) { continue; } diff --git a/app/widget/timelinewidget/trackview/trackviewitem.cpp b/app/widget/timelinewidget/trackview/trackviewitem.cpp index 2ef343d9b..96c2d08c6 100644 --- a/app/widget/timelinewidget/trackview/trackviewitem.cpp +++ b/app/widget/timelinewidget/trackview/trackviewitem.cpp @@ -30,10 +30,11 @@ TrackViewItem::TrackViewItem(TrackOutput* track, QWidget *parent) : connect(mute_button_, SIGNAL(toggled(bool)), track_, SLOT(SetMuted(bool))); layout->addWidget(mute_button_); - solo_button_ = CreateMSLButton(tr("S"), Qt::yellow); - layout->addWidget(solo_button_); + /*solo_button_ = CreateMSLButton(tr("S"), Qt::yellow); + layout->addWidget(solo_button_);*/ lock_button_ = CreateMSLButton(tr("L"), Qt::gray); + connect(lock_button_, SIGNAL(toggled(bool)), track_, SLOT(SetLocked(bool))); layout->addWidget(lock_button_); setMinimumHeight(mute_button_->height());