show node properties as a sidebar

This commit is contained in:
itsmattkc
2019-04-24 10:26:42 +10:00
parent 616e2b4740
commit 9b2f91f483
8 changed files with 124 additions and 97 deletions
+51 -9
View File
@@ -4,6 +4,7 @@
#include <QLabel>
#include <QPushButton>
#include <QGraphicsProxyWidget>
#include <QSplitter>
#include <QDebug>
#include "global/global.h"
@@ -11,23 +12,39 @@
NodeEditor::NodeEditor(QWidget *parent) :
EffectsPanel(parent),
view_(&scene_)
{
{
setWindowTitle(tr("Node Editor"));
resize(720, 480);
QWidget* central_widget = new QWidget();
setWidget(central_widget);
QSplitter* splitter = new QSplitter();
splitter->setOrientation(Qt::Horizontal);
splitter->setChildrenCollapsible(false);
splitter->addWidget(&view_);
QSizePolicy view_policy;
view_policy.setHorizontalStretch(1);
view_.setSizePolicy(view_policy);
view_.setInteractive(true);
view_.setDragMode(QGraphicsView::RubberBandDrag);
prop_layout_ = new QVBoxLayout(&props_);
prop_layout_->setMargin(0);
prop_layout_->setSpacing(0);
prop_layout_->addStretch();
splitter->addWidget(&props_);
QVBoxLayout* layout = new QVBoxLayout(central_widget);
layout->setSpacing(0);
layout->setMargin(0);
layout->addWidget(&view_);
view_.setInteractive(true);
view_.setDragMode(QGraphicsView::RubberBandDrag);
layout->addWidget(splitter);
connect(&scene_, SIGNAL(changed(const QList<QRectF>&)), this, SLOT(ItemsChanged()));
connect(&scene_, SIGNAL(selectionChanged()), this, SLOT(UpdateNodeProperties()));
connect(&view_, SIGNAL(RequestContextMenu()), this, SLOT(ContextMenu()));
}
@@ -49,18 +66,21 @@ void NodeEditor::LoadEvent()
for (int i=0;i<open_effects_.size();i++) {
EffectUI* effect_ui = open_effects_.at(i);
Node* node = effect_ui->GetEffect();
if (effect_ui->GetEffect()->parent_clip == first_clip) {
if (node->parent_clip == first_clip) {
NodeUI* node_ui = new NodeUI();
effect_ui->SetNodeParent(node_ui);
effect_ui->SetSelectable(false);
node_ui->SetWidget(effect_ui);
node_ui->SetNode(node);
node_ui->AddToScene(&scene_);
node_ui->setPos(effect_ui->GetEffect()->pos());
nodes_.append(node_ui);
effect_ui->setVisible(false);
prop_layout_->insertWidget(prop_layout_->count()-1, effect_ui);
}
}
}
@@ -153,7 +173,7 @@ void NodeEditor::ItemsChanged()
}
foreach (NodeUI* node, nodes_) {
node->Widget()->GetEffect()->SetPos(node->pos());
node->GetNode()->SetPos(node->pos());
}
}
@@ -170,3 +190,25 @@ void NodeEditor::ContextMenu()
olive::Global->ShowEffectMenu(EFFECT_TYPE_EFFECT, c->type(), {c});
}
}
void NodeEditor::UpdateNodeProperties()
{
// Find matching widget
for (int j=0;j<open_effects_.size();j++) {
open_effects_.at(j)->setVisible(false);
}
QList<QGraphicsItem*> sel = scene_.selectedItems();
for (int i=0;i<sel.size();i++) {
NodeUI* node_ui = dynamic_cast<NodeUI*>(sel.at(i));
if (node_ui != nullptr) {
for (int j=0;j<open_effects_.size();j++) {
if (open_effects_.at(j)->GetEffect() == node_ui->GetNode()) {
open_effects_.at(j)->setVisible(true);
break;
}
}
}
}
}