added some basic timeline functionality
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user