timeline: added more signalling when tracklists change

Fixes #1591
This commit is contained in:
itsmattkc
2021-04-27 10:08:04 +10:00
parent a0200f2286
commit 52076b19fc
8 changed files with 47 additions and 8 deletions
+3 -1
View File
@@ -309,9 +309,11 @@ void Track::Retranslate()
void Track::SetIndex(const int &index)
{
int old = index_;
index_ = index;
emit IndexChanged(index);
emit IndexChanged(old, index_);
}
Block *Track::BlockContainingTime(const rational &time) const
+1 -1
View File
@@ -388,7 +388,7 @@ signals:
/**
* @brief Signal emitted when the index has changed
*/
void IndexChanged(int i);
void IndexChanged(int old, int now);
/**
* @brief Signal emitted when preview (waveform) has changed and UI should be updated
+6 -6
View File
@@ -98,6 +98,12 @@ protected:
y_axis_enabled_ = e;
}
protected slots:
/**
* @brief Slot called whenever the view resizes or the scene contents change to enforce minimum scene sizes
*/
void UpdateSceneRect();
private:
qreal GetPlayheadX();
@@ -121,12 +127,6 @@ private:
double y_scale_;
private slots:
/**
* @brief Slot called whenever the view resizes or the scene contents change to enforce minimum scene sizes
*/
void UpdateSceneRect();
};
}
@@ -882,6 +882,7 @@ void TimelineWidget::AddTrack(Track *track)
}
connect(track, &Track::IndexChanged, this, &TimelineWidget::TrackUpdated);
connect(track, &Track::IndexChanged, this, &TimelineWidget::TrackIndexChanged);
connect(track, &Track::PreviewChanged, this, &TimelineWidget::TrackUpdated);
connect(track, &Track::BlocksRefreshed, this, &TimelineWidget::TrackUpdated);
connect(track, &Track::TrackHeightChangedInPixels, this, &TimelineWidget::TrackUpdated);
@@ -892,12 +893,15 @@ void TimelineWidget::AddTrack(Track *track)
void TimelineWidget::RemoveTrack(Track *track)
{
disconnect(track, &Track::IndexChanged, this, &TimelineWidget::TrackUpdated);
disconnect(track, &Track::IndexChanged, this, &TimelineWidget::TrackIndexChanged);
disconnect(track, &Track::PreviewChanged, this, &TimelineWidget::TrackUpdated);
disconnect(track, &Track::BlocksRefreshed, this, &TimelineWidget::TrackUpdated);
disconnect(track, &Track::TrackHeightChangedInPixels, this, &TimelineWidget::TrackUpdated);
disconnect(track, &Track::BlockAdded, this, &TimelineWidget::AddBlock);
disconnect(track, &Track::BlockRemoved, this, &TimelineWidget::RemoveBlock);
RemoveSelection(TimeRange(0, RATIONAL_MAX), track->ToReference());
foreach (Block* b, track->Blocks()) {
RemoveBlock(b);
}
@@ -1060,6 +1064,19 @@ void TimelineWidget::SampleRateChanged()
UpdateViewTimebases();
}
void TimelineWidget::TrackIndexChanged(int old, int now)
{
Track* track = static_cast<Track*>(sender());
Track::Reference old_ref(track->type(), old);
Track::Reference new_ref(track->type(), now);
auto track_selections = selections_.take(old_ref);
if (!track_selections.isEmpty()) {
selections_.insert(new_ref, track_selections);
}
}
void TimelineWidget::AddGhost(TimelineViewGhostItem *ghost)
{
ghost_items_.append(ghost);
@@ -351,6 +351,8 @@ private slots:
void SampleRateChanged();
void TrackIndexChanged(int old, int now);
};
}
@@ -42,6 +42,7 @@ TrackViewItem::TrackViewItem(Track* track, QWidget *parent) :
label_ = new ClickableLabel();
connect(label_, &ClickableLabel::MouseDoubleClicked, this, &TrackViewItem::LabelClicked);
connect(track_, &Track::LabelChanged, this, &TrackViewItem::UpdateLabel);
connect(track_, &Track::IndexChanged, this, &TrackViewItem::UpdateLabel);
UpdateLabel();
stack_->addWidget(label_);
@@ -533,7 +533,15 @@ void TimelineView::SetScrollCoordinates(const QPoint &pt)
void TimelineView::ConnectTrackList(TrackList *list)
{
if (connected_track_list_) {
disconnect(connected_track_list_, &TrackList::TrackListChanged, this, &TimelineView::TrackListChanged);
}
connected_track_list_ = list;
if (connected_track_list_) {
connect(connected_track_list_, &TrackList::TrackListChanged, this, &TimelineView::TrackListChanged);
}
}
void TimelineView::SetBeamCursor(const TimelineCoordinate &coord)
@@ -589,4 +597,10 @@ void TimelineView::UserSetTime(const int64_t &time)
emit TimeChanged(time);
}
void TimelineView::TrackListChanged()
{
UpdateSceneRect();
viewport()->update();
}
}
@@ -141,6 +141,9 @@ private:
bool show_waveforms_;
private slots:
void TrackListChanged();
};
}