panels: selecting a clip in the timeline automatically selects the corresponding

nodes in the nodeview
This commit is contained in:
itsmattkc
2020-02-26 00:39:30 +11:00
parent 78daf9e28a
commit bf7fc9a0c4
11 changed files with 86 additions and 1 deletions
+10
View File
@@ -59,6 +59,16 @@ void NodePanel::DeleteSelected()
node_view_->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() void NodePanel::Retranslate()
{ {
SetTitle(tr("Node Editor")); SetTitle(tr("Node Editor"));
+5
View File
@@ -40,6 +40,10 @@ public:
virtual void DeleteSelected() override; virtual void DeleteSelected() override;
public slots:
void Select(const QList<Node*>& nodes);
void SelectWithDependencies(const QList<Node*>& nodes);
signals: signals:
/** /**
* @brief Wrapper for NodeView::SelectionChanged() * @brief Wrapper for NodeView::SelectionChanged()
@@ -50,6 +54,7 @@ private:
virtual void Retranslate() override; virtual void Retranslate() override;
NodeView* node_view_; NodeView* node_view_;
}; };
#endif // NODEPANEL_H #endif // NODEPANEL_H
+4 -1
View File
@@ -26,9 +26,12 @@ TimelinePanel::TimelinePanel(QWidget *parent) :
// FIXME: This won't work if there's ever more than one of this panel // FIXME: This won't work if there's ever more than one of this panel
setObjectName("TimelinePanel"); setObjectName("TimelinePanel");
SetTimeBasedWidget(new TimelineWidget()); TimelineWidget* tw = new TimelineWidget();
SetTimeBasedWidget(tw);
Retranslate(); Retranslate();
connect(tw, &TimelineWidget::SelectionChanged, this, &TimelinePanel::SelectionChanged);
} }
void TimelinePanel::Clear() void TimelinePanel::Clear()
+3
View File
@@ -58,6 +58,9 @@ public:
protected: protected:
virtual void Retranslate() override; virtual void Retranslate() override;
signals:
void SelectionChanged(const QList<Node*>& selected_blocks);
}; };
#endif // TIMELINE_PANEL_H #endif // TIMELINE_PANEL_H
+38
View File
@@ -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) void NodeView::AddNode(Node* node)
{ {
NodeViewItem* item = new NodeViewItem(); NodeViewItem* item = new NodeViewItem();
+3
View File
@@ -85,6 +85,9 @@ public:
void SelectAll(); void SelectAll();
void DeselectAll(); void DeselectAll();
void Select(const QList<Node*>& nodes);
void SelectWithDependencies(const QList<Node*>& nodes);
signals: signals:
/** /**
* @brief Signal emitted when the selected nodes have changed * @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::DragMoved, this, &TimelineWidget::ViewDragMoved);
connect(view, &TimelineView::DragLeft, this, &TimelineWidget::ViewDragLeft); connect(view, &TimelineView::DragLeft, this, &TimelineWidget::ViewDragLeft);
connect(view, &TimelineView::DragDropped, this, &TimelineWidget::ViewDragDropped); connect(view, &TimelineView::DragDropped, this, &TimelineWidget::ViewDragDropped);
connect(view, &TimelineView::SelectionChanged, this, &TimelineWidget::ViewSelectionChanged);
connect(tview->splitter(), &QSplitter::splitterMoved, this, &TimelineWidget::UpdateHorizontalSplitters); 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() void TimelineWidget::BlockChanged()
{ {
TimelineViewRect* rect = block_items_[static_cast<Block*>(sender())]; TimelineViewRect* rect = block_items_[static_cast<Block*>(sender())];
@@ -55,6 +55,9 @@ public:
QList<TimelineViewBlockItem*> GetSelectedBlocks(); QList<TimelineViewBlockItem*> GetSelectedBlocks();
signals:
void SelectionChanged(const QList<Node*>& selected_blocks);
protected: protected:
virtual void resizeEvent(QResizeEvent *event) override; virtual void resizeEvent(QResizeEvent *event) override;
@@ -394,6 +397,8 @@ private slots:
void AddTrack(TrackOutput* track, Timeline::TrackType type); void AddTrack(TrackOutput* track, Timeline::TrackType type);
void RemoveTrack(TrackOutput* track); void RemoveTrack(TrackOutput* track);
void ViewSelectionChanged();
/** /**
* @brief Slot for when a Block node changes its parameters and the graphics need to update * @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); setContextMenuPolicy(Qt::CustomContextMenu);
SetLimitYAxis(true); SetLimitYAxis(true);
viewport()->setMouseTracking(true); viewport()->setMouseTracking(true);
connect(scene(), &QGraphicsScene::selectionChanged, this, &TimelineView::SelectionChanged);
} }
void TimelineView::SelectAll() void TimelineView::SelectAll()
@@ -70,6 +70,8 @@ signals:
void DragLeft(QDragLeaveEvent* event); void DragLeft(QDragLeaveEvent* event);
void DragDropped(TimelineViewMouseEvent* event); void DragDropped(TimelineViewMouseEvent* event);
void SelectionChanged();
protected: protected:
virtual void mousePressEvent(QMouseEvent *event) override; virtual void mousePressEvent(QMouseEvent *event) override;
virtual void mouseMoveEvent(QMouseEvent *event) override; virtual void mouseMoveEvent(QMouseEvent *event) override;
+1
View File
@@ -81,6 +81,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(timeline_panel_, &TimelinePanel::TimeChanged, param_panel_, &ParamPanel::SetTime); connect(timeline_panel_, &TimelinePanel::TimeChanged, param_panel_, &ParamPanel::SetTime);
connect(timeline_panel_, &TimelinePanel::TimeChanged, viewer_panel_, &ViewerPanel::SetTime); connect(timeline_panel_, &TimelinePanel::TimeChanged, viewer_panel_, &ViewerPanel::SetTime);
connect(timeline_panel_, &TimelinePanel::TimeChanged, curve_panel_, &CurvePanel::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, param_panel_, &ParamPanel::SetTime);
connect(viewer_panel_, &ViewerPanel::TimeChanged, timeline_panel_, &TimelinePanel::SetTime); connect(viewer_panel_, &ViewerPanel::TimeChanged, timeline_panel_, &TimelinePanel::SetTime);
connect(viewer_panel_, &ViewerPanel::TimeChanged, curve_panel_, &CurvePanel::SetTime); connect(viewer_panel_, &ViewerPanel::TimeChanged, curve_panel_, &CurvePanel::SetTime);