added some basic timeline functionality

This commit is contained in:
itsmattkc
2019-08-12 23:24:58 +10:00
parent 3eee9893f8
commit e9702aeb52
14 changed files with 264 additions and 59 deletions
+31 -12
View File
@@ -50,26 +50,45 @@ TimelineView::TimelineView(QWidget *parent) :
SetScale(1.0);
}
void TimelineView::AddClip(ClipBlock *clip)
void TimelineView::AddBlock(Block *block)
{
TimelineViewClipItem* clip_item = new TimelineViewClipItem();
switch (block->type()) {
case Block::kClip:
{
TimelineViewClipItem* clip_item = new TimelineViewClipItem();
ClipBlock* clip = static_cast<ClipBlock*>(block);
// Set up clip with view parameters (clip item will automatically size its rect accordingly)
clip_item->SetClip(clip);
clip_item->SetScale(scale_);
// Set up clip with view parameters (clip item will automatically size its rect accordingly)
clip_item->SetClip(clip);
clip_item->SetScale(scale_);
// Add to list of clip items that can be iterated through
clip_items_.insert(clip, clip_item);
// Add to list of clip items that can be iterated through
clip_items_.insert(clip, clip_item);
// Add item to graphics scene
scene_.addItem(clip_item);
connect(clip, SIGNAL(Refreshed()), this, SLOT(BlockChanged()));
break;
}
case Block::kGap:
{
clip_items_.insert(block, nullptr);
break;
}
case Block::kEnd:
// Do nothing
break;
}
// Add item to graphics scene
scene_.addItem(clip_item);
connect(clip, SIGNAL(Refreshed()), this, SLOT(BlockChanged()));
}
void TimelineView::RemoveClip(ClipBlock *clip)
void TimelineView::RemoveBlock(Block *block)
{
delete clip_items_[clip];
delete clip_items_[block];
clip_items_.remove(block);
}
void TimelineView::SetScale(const double &scale)
+5 -3
View File
@@ -43,9 +43,9 @@ class TimelineView : public QGraphicsView
public:
TimelineView(QWidget* parent);
void AddClip(ClipBlock* clip);
void AddBlock(Block* block);
void RemoveClip(ClipBlock* clip);
void RemoveBlock(Block* block);
void SetScale(const double& scale);
@@ -57,7 +57,9 @@ public slots:
void SetTime(const int64_t time);
signals:
void RequestInsertBlock(Block* block, int index);
void RequestInsertBlockAtIndex(Block* block, int index);
void RequestPlaceBlock(Block* block, rational start);
protected:
virtual void mousePressEvent(QMouseEvent *event) override;
+9 -1
View File
@@ -83,6 +83,14 @@ void TimelineView::ImportTool::DragEnter(QDragEnterEvent *event)
void TimelineView::ImportTool::DragMove(QDragMoveEvent *event)
{
if (parent()->HasGhosts()) {
// Move ghosts to the mouse cursor
foreach (TimelineViewGhostItem* ghost, parent()->ghost_items_) {
rational time = parent()->ScreenToTime(event->pos().x());
ghost->SetOut(ghost->Out() - ghost->In() + time);
ghost->SetIn(time);
}
event->accept();
} else {
event->ignore();
@@ -114,7 +122,7 @@ void TimelineView::ImportTool::DragDrop(QDropEvent *event)
// FIXME: If this doesn't have a TimelineOutput node attached, this is a memory leak. Maybe switching nodes to
// shared ptrs would be a better idea.
emit parent()->RequestInsertBlock(clip, 0);
emit parent()->RequestPlaceBlock(clip, ghost->In());
}
parent()->ClearGhosts();