#include "nodeeditor.h" #include #include #include #include #include #include "global/global.h" NodeEditor::NodeEditor(QWidget *parent) : EffectsPanel(parent), view_(&scene_) { setWindowTitle(tr("Node Editor")); resize(720, 480); QWidget* central_widget = new QWidget(); setWidget(central_widget); QVBoxLayout* layout = new QVBoxLayout(central_widget); layout->setSpacing(0); layout->setMargin(0); layout->addWidget(&view_); view_.setInteractive(true); view_.setDragMode(QGraphicsView::RubberBandDrag); connect(&scene_, SIGNAL(changed(const QList&)), this, SLOT(ItemsChanged())); connect(&view_, SIGNAL(RequestContextMenu()), this, SLOT(ContextMenu())); } NodeEditor::~NodeEditor() { Clear(true); } void NodeEditor::Retranslate() { } void NodeEditor::LoadEvent() { if (!open_effects_.isEmpty()) { QVector added_edges; Clip* first_clip = open_effects_.first()->GetEffect()->parent_clip; for (int i=0;iGetEffect()->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->AddToScene(&scene_); node_ui->setPos(effect_ui->GetEffect()->pos()); nodes_.append(node_ui); } } } LoadEdges(); } void NodeEditor::AboutToClearEvent() { foreach (NodeUI* node, nodes_) { delete node; } nodes_.clear(); ClearEdges(); } void NodeEditor::ClearEdges() { foreach (NodeEdgeUI* edge, edges_) { scene_.removeItem(edge); delete edge; } edges_.clear(); DisconnectAllRows(); } void NodeEditor::LoadEdges() { if (!open_effects_.isEmpty()) { QVector added_edges; Clip* first_clip = open_effects_.first()->GetEffect()->parent_clip; for (int i=0;iGetEffect(); if (n->parent_clip == first_clip) { // Connect all rows to this for (int j=0;jrow_count();j++) { ConnectRow(n->row(j)); } // Get node edges QVector edges = n->GetAllEdges(); for (int j=0;jadjust(); } foreach (NodeUI* node, nodes_) { node->Widget()->GetEffect()->SetPos(node->pos()); } } void NodeEditor::ReloadEdges() { ClearEdges(); LoadEdges(); } void NodeEditor::ContextMenu() { if (!open_effects_.isEmpty()) { Clip* c = open_effects_.first()->GetEffect()->parent_clip; olive::Global->ShowEffectMenu(EFFECT_TYPE_EFFECT, c->type(), {c}); } }