@@ -920,6 +920,10 @@ void TimelineWidget::AddBlock(Block *block)
|
||||
connect(block, &Block::PreviewChanged, this, &TimelineWidget::BlockUpdated);
|
||||
|
||||
added_blocks_.append(block);
|
||||
|
||||
if (selections_[block->track()->ToReference()].contains(block->range()) && !selected_blocks_.contains(block)) {
|
||||
selected_blocks_.append(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1195,9 +1199,20 @@ void TimelineWidget::UpdateViewTimebases()
|
||||
}
|
||||
}
|
||||
|
||||
void TimelineWidget::NudgeInternal(const rational &amount)
|
||||
void TimelineWidget::NudgeInternal(rational amount)
|
||||
{
|
||||
if (!selected_blocks_.isEmpty()) {
|
||||
// Validate
|
||||
foreach (Block* b, selected_blocks_) {
|
||||
if (b->in() + amount < 0) {
|
||||
amount = -b->in();
|
||||
}
|
||||
}
|
||||
|
||||
if (amount.isNull()) {
|
||||
return;
|
||||
}
|
||||
|
||||
MultiUndoCommand *command = new MultiUndoCommand();
|
||||
|
||||
foreach (Block* b, selected_blocks_) {
|
||||
@@ -1552,31 +1567,6 @@ QVector<Block *> TimelineWidget::GetBlocksInGlobalRect(const QPoint &p1, const Q
|
||||
return blocks_in_rect;
|
||||
}
|
||||
|
||||
QVector<Block *> TimelineWidget::GetBlocksInSelection(const TimelineWidgetSelections &sel)
|
||||
{
|
||||
QVector<Block *> blocks;
|
||||
|
||||
for (auto it=sel.cbegin(); it!=sel.cend(); it++) {
|
||||
const Track::Reference &ref = it.key();
|
||||
const TimeRangeList &list = it.value();
|
||||
|
||||
for (const TimeRange &r : list) {
|
||||
Track *track = GetTrackFromReference(ref);
|
||||
if (track) {
|
||||
for (Block *b : track->Blocks()) {
|
||||
if (r.Contains(b->range())) {
|
||||
blocks.append(b);
|
||||
} else if (b->in() >= r.out()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return blocks;
|
||||
}
|
||||
|
||||
void TimelineWidget::HideSnaps()
|
||||
{
|
||||
foreach (TimelineAndTrackView* tview, views_) {
|
||||
@@ -1701,8 +1691,30 @@ void TimelineWidget::SetSelections(const TimelineWidgetSelections &s, bool proce
|
||||
}
|
||||
|
||||
if (process_block_changes) {
|
||||
SignalDeselectedBlocks(GetBlocksInSelection(selections_.Subtracted(s)));
|
||||
SignalSelectedBlocks(GetBlocksInSelection(s.Subtracted(selections_)));
|
||||
QVector<Block*> deselected;
|
||||
QVector<Block*> selected;
|
||||
|
||||
foreach (Block *b, selected_blocks_) {
|
||||
if (!s[b->track()->ToReference()].contains(b->range())) {
|
||||
deselected.append(b);
|
||||
}
|
||||
}
|
||||
|
||||
for (auto it=s.cbegin(); it!=s.cend(); it++) {
|
||||
Track *track = GetTrackFromReference(it.key());
|
||||
if (track) {
|
||||
const TimeRangeList &ranges = it.value();
|
||||
|
||||
foreach (Block *b, track->Blocks()) {
|
||||
if (!selected_blocks_.contains(b) && ranges.contains(b->range())) {
|
||||
selected.append(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SignalDeselectedBlocks(deselected);
|
||||
SignalSelectedBlocks(selected);
|
||||
}
|
||||
|
||||
selections_ = s;
|
||||
|
||||
@@ -359,7 +359,7 @@ private:
|
||||
|
||||
void UpdateViewTimebases();
|
||||
|
||||
void NudgeInternal(const rational &amount);
|
||||
void NudgeInternal(rational amount);
|
||||
|
||||
void MoveToPlayheadInternal(bool out);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user