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();
}
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"));
+5
View File
@@ -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
+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
setObjectName("TimelinePanel");
SetTimeBasedWidget(new TimelineWidget());
TimelineWidget* tw = new TimelineWidget();
SetTimeBasedWidget(tw);
Retranslate();
connect(tw, &TimelineWidget::SelectionChanged, this, &TimelinePanel::SelectionChanged);
}
void TimelinePanel::Clear()
+3
View File
@@ -58,6 +58,9 @@ public:
protected:
virtual void Retranslate() override;
signals:
void SelectionChanged(const QList<Node*>& selected_blocks);
};
#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)
{
NodeViewItem* item = new NodeViewItem();
+3
View File
@@ -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;
+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, 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);