panels: selecting a clip in the timeline automatically selects the corresponding
nodes in the nodeview
This commit is contained in:
@@ -59,6 +59,16 @@ void NodePanel::DeleteSelected()
|
||||
node_view_->DeleteSelected();
|
||||
}
|
||||
|
||||
void NodePanel::Select(const QList<Node *> &nodes)
|
||||
{
|
||||
node_view_->Select(nodes);
|
||||
}
|
||||
|
||||
void NodePanel::SelectWithDependencies(const QList<Node *> &nodes)
|
||||
{
|
||||
node_view_->SelectWithDependencies(nodes);
|
||||
}
|
||||
|
||||
void NodePanel::Retranslate()
|
||||
{
|
||||
SetTitle(tr("Node Editor"));
|
||||
|
||||
@@ -40,6 +40,10 @@ public:
|
||||
|
||||
virtual void DeleteSelected() override;
|
||||
|
||||
public slots:
|
||||
void Select(const QList<Node*>& nodes);
|
||||
void SelectWithDependencies(const QList<Node*>& nodes);
|
||||
|
||||
signals:
|
||||
/**
|
||||
* @brief Wrapper for NodeView::SelectionChanged()
|
||||
@@ -50,6 +54,7 @@ private:
|
||||
virtual void Retranslate() override;
|
||||
|
||||
NodeView* node_view_;
|
||||
|
||||
};
|
||||
|
||||
#endif // NODEPANEL_H
|
||||
|
||||
@@ -26,9 +26,12 @@ TimelinePanel::TimelinePanel(QWidget *parent) :
|
||||
// FIXME: This won't work if there's ever more than one of this panel
|
||||
setObjectName("TimelinePanel");
|
||||
|
||||
SetTimeBasedWidget(new TimelineWidget());
|
||||
TimelineWidget* tw = new TimelineWidget();
|
||||
SetTimeBasedWidget(tw);
|
||||
|
||||
Retranslate();
|
||||
|
||||
connect(tw, &TimelineWidget::SelectionChanged, this, &TimelinePanel::SelectionChanged);
|
||||
}
|
||||
|
||||
void TimelinePanel::Clear()
|
||||
|
||||
@@ -58,6 +58,9 @@ public:
|
||||
protected:
|
||||
virtual void Retranslate() override;
|
||||
|
||||
signals:
|
||||
void SelectionChanged(const QList<Node*>& selected_blocks);
|
||||
|
||||
};
|
||||
|
||||
#endif // TIMELINE_PANEL_H
|
||||
|
||||
@@ -171,6 +171,44 @@ void NodeView::DeselectAll()
|
||||
}
|
||||
}
|
||||
|
||||
void NodeView::Select(const QList<Node *> &nodes)
|
||||
{
|
||||
DeselectAll();
|
||||
|
||||
foreach (Node* n, nodes) {
|
||||
NodeViewItem* item = NodeToUIObject(n);
|
||||
|
||||
if (item) {
|
||||
item->setSelected(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void NodeView::SelectWithDependencies(const QList<Node *> &nodes)
|
||||
{
|
||||
DeselectAll();
|
||||
|
||||
QList<Node*> nodes_with_deps;
|
||||
|
||||
foreach (Node* n, nodes) {
|
||||
NodeViewItem* item = NodeToUIObject(n);
|
||||
|
||||
if (item) {
|
||||
item->setSelected(true);
|
||||
}
|
||||
|
||||
QList<Node*> deps = n->GetDependencies();
|
||||
|
||||
foreach (Node* d, deps) {
|
||||
item = NodeToUIObject(d);
|
||||
|
||||
if (item) {
|
||||
item->setSelected(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void NodeView::AddNode(Node* node)
|
||||
{
|
||||
NodeViewItem* item = new NodeViewItem();
|
||||
|
||||
@@ -85,6 +85,9 @@ public:
|
||||
void SelectAll();
|
||||
void DeselectAll();
|
||||
|
||||
void Select(const QList<Node*>& nodes);
|
||||
void SelectWithDependencies(const QList<Node*>& nodes);
|
||||
|
||||
signals:
|
||||
/**
|
||||
* @brief Signal emitted when the selected nodes have changed
|
||||
|
||||
@@ -98,6 +98,7 @@ TimelineWidget::TimelineWidget(QWidget *parent) :
|
||||
connect(view, &TimelineView::DragMoved, this, &TimelineWidget::ViewDragMoved);
|
||||
connect(view, &TimelineView::DragLeft, this, &TimelineWidget::ViewDragLeft);
|
||||
connect(view, &TimelineView::DragDropped, this, &TimelineWidget::ViewDragDropped);
|
||||
connect(view, &TimelineView::SelectionChanged, this, &TimelineWidget::ViewSelectionChanged);
|
||||
|
||||
connect(tview->splitter(), &QSplitter::splitterMoved, this, &TimelineWidget::UpdateHorizontalSplitters);
|
||||
|
||||
@@ -684,6 +685,18 @@ void TimelineWidget::RemoveTrack(TrackOutput *track)
|
||||
}
|
||||
}
|
||||
|
||||
void TimelineWidget::ViewSelectionChanged()
|
||||
{
|
||||
QList<TimelineViewBlockItem*> selected_items = GetSelectedBlocks();
|
||||
QList<Node*> selected_blocks;
|
||||
|
||||
foreach (TimelineViewBlockItem* item, selected_items) {
|
||||
selected_blocks.append(item->block());
|
||||
}
|
||||
|
||||
emit SelectionChanged(selected_blocks);
|
||||
}
|
||||
|
||||
void TimelineWidget::BlockChanged()
|
||||
{
|
||||
TimelineViewRect* rect = block_items_[static_cast<Block*>(sender())];
|
||||
|
||||
@@ -55,6 +55,9 @@ public:
|
||||
|
||||
QList<TimelineViewBlockItem*> GetSelectedBlocks();
|
||||
|
||||
signals:
|
||||
void SelectionChanged(const QList<Node*>& selected_blocks);
|
||||
|
||||
protected:
|
||||
virtual void resizeEvent(QResizeEvent *event) override;
|
||||
|
||||
@@ -394,6 +397,8 @@ private slots:
|
||||
void AddTrack(TrackOutput* track, Timeline::TrackType type);
|
||||
void RemoveTrack(TrackOutput* track);
|
||||
|
||||
void ViewSelectionChanged();
|
||||
|
||||
/**
|
||||
* @brief Slot for when a Block node changes its parameters and the graphics need to update
|
||||
*
|
||||
|
||||
@@ -45,6 +45,8 @@ TimelineView::TimelineView(Qt::Alignment vertical_alignment, QWidget *parent) :
|
||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
SetLimitYAxis(true);
|
||||
viewport()->setMouseTracking(true);
|
||||
|
||||
connect(scene(), &QGraphicsScene::selectionChanged, this, &TimelineView::SelectionChanged);
|
||||
}
|
||||
|
||||
void TimelineView::SelectAll()
|
||||
|
||||
@@ -70,6 +70,8 @@ signals:
|
||||
void DragLeft(QDragLeaveEvent* event);
|
||||
void DragDropped(TimelineViewMouseEvent* event);
|
||||
|
||||
void SelectionChanged();
|
||||
|
||||
protected:
|
||||
virtual void mousePressEvent(QMouseEvent *event) override;
|
||||
virtual void mouseMoveEvent(QMouseEvent *event) override;
|
||||
|
||||
@@ -81,6 +81,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
connect(timeline_panel_, &TimelinePanel::TimeChanged, param_panel_, &ParamPanel::SetTime);
|
||||
connect(timeline_panel_, &TimelinePanel::TimeChanged, viewer_panel_, &ViewerPanel::SetTime);
|
||||
connect(timeline_panel_, &TimelinePanel::TimeChanged, curve_panel_, &CurvePanel::SetTime);
|
||||
connect(timeline_panel_, &TimelinePanel::SelectionChanged, node_panel_, &NodePanel::SelectWithDependencies);
|
||||
connect(viewer_panel_, &ViewerPanel::TimeChanged, param_panel_, &ParamPanel::SetTime);
|
||||
connect(viewer_panel_, &ViewerPanel::TimeChanged, timeline_panel_, &TimelinePanel::SetTime);
|
||||
connect(viewer_panel_, &ViewerPanel::TimeChanged, curve_panel_, &CurvePanel::SetTime);
|
||||
|
||||
Reference in New Issue
Block a user