show node properties as a sidebar
This commit is contained in:
+51
-9
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user