timeline: implemented adding objects in the timeline (e.g. solid, title)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "widget/timelinewidget/timelinewidget.h"
|
||||
|
||||
#include "core.h"
|
||||
#include "node/factory.h"
|
||||
#include "widget/nodeview/nodeviewundo.h"
|
||||
|
||||
TimelineWidget::AddTool::AddTool(TimelineWidget *parent) :
|
||||
@@ -18,16 +19,37 @@ void TimelineWidget::AddTool::MousePress(TimelineViewMouseEvent *event)
|
||||
return;
|
||||
}
|
||||
|
||||
drag_start_point_ = event->GetFrame();
|
||||
Timeline::TrackType add_type = Timeline::kTrackTypeNone;
|
||||
|
||||
ghost_ = new TimelineViewGhostItem();
|
||||
ghost_->SetIn(drag_start_point_);
|
||||
ghost_->SetOut(drag_start_point_);
|
||||
ghost_->SetTrack(track);
|
||||
ghost_->SetYCoords(parent()->GetTrackY(track), parent()->GetTrackHeight(track));
|
||||
parent()->AddGhost(ghost_);
|
||||
switch (Core::instance()->selected_addable_object()) {
|
||||
case ::Tool::kAddableBars:
|
||||
case ::Tool::kAddableSolid:
|
||||
case ::Tool::kAddableTitle:
|
||||
add_type = Timeline::kTrackTypeVideo;
|
||||
break;
|
||||
case ::Tool::kAddableTone:
|
||||
add_type = Timeline::kTrackTypeAudio;
|
||||
break;
|
||||
case ::Tool::kAddableEmpty:
|
||||
// Leave as "none", which means this block can be placed on any track
|
||||
break;
|
||||
case ::Tool::kAddableCount:
|
||||
return;
|
||||
}
|
||||
|
||||
snap_points_.append(drag_start_point_);
|
||||
if (add_type == Timeline::kTrackTypeNone
|
||||
|| add_type == track.type()) {
|
||||
drag_start_point_ = event->GetFrame();
|
||||
|
||||
ghost_ = new TimelineViewGhostItem();
|
||||
ghost_->SetIn(drag_start_point_);
|
||||
ghost_->SetOut(drag_start_point_);
|
||||
ghost_->SetTrack(track);
|
||||
ghost_->SetYCoords(parent()->GetTrackY(track), parent()->GetTrackHeight(track));
|
||||
parent()->AddGhost(ghost_);
|
||||
|
||||
snap_points_.append(drag_start_point_);
|
||||
}
|
||||
}
|
||||
|
||||
void TimelineWidget::AddTool::MouseMove(TimelineViewMouseEvent *event)
|
||||
@@ -51,7 +73,11 @@ void TimelineWidget::AddTool::MouseRelease(TimelineViewMouseEvent *event)
|
||||
|
||||
ClipBlock* clip = new ClipBlock();
|
||||
clip->set_length_and_media_out(ghost_->AdjustedLength());
|
||||
new NodeAddCommand(static_cast<NodeGraph*>(parent()->GetConnectedNode()->parent()),
|
||||
clip->set_block_name(::Tool::GetAddableObjectName(Core::instance()->selected_addable_object()));
|
||||
|
||||
NodeGraph* graph = static_cast<NodeGraph*>(parent()->GetConnectedNode()->parent());
|
||||
|
||||
new NodeAddCommand(graph,
|
||||
clip,
|
||||
command);
|
||||
|
||||
@@ -61,6 +87,32 @@ void TimelineWidget::AddTool::MouseRelease(TimelineViewMouseEvent *event)
|
||||
ghost_->GetAdjustedIn(),
|
||||
command);
|
||||
|
||||
switch (Core::instance()->selected_addable_object()) {
|
||||
case ::Tool::kAddableEmpty:
|
||||
// Empty, nothing to be done
|
||||
break;
|
||||
case ::Tool::kAddableSolid:
|
||||
{
|
||||
Node* solid = NodeFactory::CreateFromID(QStringLiteral("org.olivevideoeditor.Olive.solidgenerator"));
|
||||
|
||||
new NodeAddCommand(graph,
|
||||
solid,
|
||||
command);
|
||||
|
||||
new NodeEdgeAddCommand(solid->output(), clip->texture_input(), command);
|
||||
break;
|
||||
}
|
||||
case ::Tool::kAddableBars:
|
||||
case ::Tool::kAddableTitle:
|
||||
case ::Tool::kAddableTone:
|
||||
// Not implemented yet
|
||||
qWarning() << "Unimplemented add object:" << Core::instance()->selected_addable_object();
|
||||
break;
|
||||
case ::Tool::kAddableCount:
|
||||
// Invalid value, do nothing
|
||||
break;
|
||||
}
|
||||
|
||||
Core::instance()->undo_stack()->push(command);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <QButtonGroup>
|
||||
#include <QEvent>
|
||||
|
||||
#include "widget/menu/menu.h"
|
||||
#include "ui/icons/icons.h"
|
||||
|
||||
Toolbar::Toolbar(QWidget *parent) :
|
||||
@@ -49,7 +50,10 @@ Toolbar::Toolbar(QWidget *parent) :
|
||||
|
||||
// Create snapping button, which is not actually a tool, it's a toggle option
|
||||
btn_snapping_toggle_ = CreateNonToolButton();
|
||||
connect(btn_snapping_toggle_, SIGNAL(clicked(bool)), this, SLOT(SnappingButtonClicked(bool)));
|
||||
connect(btn_snapping_toggle_, &QPushButton::clicked, this, &Toolbar::SnappingButtonClicked);
|
||||
|
||||
// Connect add button to menu signal
|
||||
connect(btn_add_, &QPushButton::clicked, this, &Toolbar::AddButtonClicked);
|
||||
|
||||
Retranslate();
|
||||
UpdateIcons();
|
||||
@@ -160,3 +164,22 @@ void Toolbar::SnappingButtonClicked(bool b)
|
||||
{
|
||||
emit SnappingChanged(b);
|
||||
}
|
||||
|
||||
void Toolbar::AddButtonClicked()
|
||||
{
|
||||
QMenu m(this);
|
||||
|
||||
for (int i=0;i<Tool::kAddableCount;i++) {
|
||||
QAction* action = m.addAction(Tool::GetAddableObjectName(static_cast<Tool::AddableObject>(i)));
|
||||
action->setData(i);
|
||||
}
|
||||
|
||||
connect(&m, &QMenu::triggered, this, &Toolbar::AddMenuItemTriggered);
|
||||
|
||||
m.exec(QCursor::pos());
|
||||
}
|
||||
|
||||
void Toolbar::AddMenuItemTriggered(QAction* a)
|
||||
{
|
||||
emit AddableObjectChanged(static_cast<Tool::AddableObject>(a->data().toInt()));
|
||||
}
|
||||
|
||||
@@ -106,6 +106,11 @@ signals:
|
||||
*/
|
||||
void SnappingChanged(const bool& b);
|
||||
|
||||
/**
|
||||
* @brief Emitted when the addable object is changed from the add tool menu
|
||||
*/
|
||||
void AddableObjectChanged(const Tool::AddableObject& obj);
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief Reset all strings based on the currently selected language
|
||||
@@ -195,6 +200,19 @@ private slots:
|
||||
* The new snapping value received from the sender's clicked signal
|
||||
*/
|
||||
void SnappingButtonClicked(bool b);
|
||||
|
||||
/**
|
||||
* @brief Receiver for the add button
|
||||
*
|
||||
* The add button pops up a list for which object to create.
|
||||
*/
|
||||
void AddButtonClicked();
|
||||
|
||||
/**
|
||||
* @brief Receiver for the menu created by AddButtonClicked()
|
||||
*/
|
||||
void AddMenuItemTriggered(QAction* a);
|
||||
|
||||
};
|
||||
|
||||
#endif // TOOLBAR_H
|
||||
|
||||
Reference in New Issue
Block a user