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();
|
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"));
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user