This commit is contained in:
BalkronPainter
2021-01-22 21:08:54 +05:00
8 changed files with 218 additions and 13 deletions

View File

@@ -130,6 +130,8 @@ public:
void setChanged(bool state) { _changed = state; };
bool getChanged() { return _changed; };
void setLastSelected(Node* selected) { _last_selected = selected; Q_EMIT nodeSelected(*selected); };
Q_SIGNALS:
/**
@@ -166,6 +168,8 @@ Q_SIGNALS:
void changed();
void nodeSelected(Node &n);
protected:
using SharedConnection = std::shared_ptr<Connection>;
@@ -179,6 +183,8 @@ protected:
QString _relative_path;
bool _changed;
Node* _last_selected;
private Q_SLOTS:
void setupConnectionSignals(Connection const& c);

View File

@@ -353,6 +353,11 @@ keyPressEvent(QKeyEvent *event)
}
break;
case Qt::Key_Delete:
deleteSelectedNodes();
return;
break;
default:
break;
}

View File

@@ -204,6 +204,8 @@ void
NodeGraphicsObject::
mousePressEvent(QGraphicsSceneMouseEvent * event)
{
static_cast<FlowScene*>(scene())->setLastSelected(&node());
if (_locked)
return;

View File

@@ -301,8 +301,6 @@ void MapView::createGUI()
}
);
// create tool widgets
_terrain_tool_dock = new QDockWidget("Raise / Lower", this);
terrainTool = new noggit::ui::terrain_tool(_terrain_tool_dock);

View File

@@ -28,7 +28,7 @@ void RewiringPointNode::compute()
NodeValidationState RewiringPointNode::validate()
{
if (!_in_ports[0].in_value.lock().get())
if (!_in_ports[0].in_value.lock())
{
setValidationState(NodeValidationState::Error);
setValidationMessage("Error: failed to evaluate input.");

View File

@@ -6,6 +6,10 @@
#include <noggit/Red/NodeEditor/Nodes/Scene/Context.hpp>
#include <noggit/Log.h>
#include <noggit/MapView.h>
#include <external/NodeEditor/include/nodes/internal/NodeGraphicsObject.hpp>
#include <external/NodeEditor/include/nodes/Node>
#include <external/NodeEditor/include/nodes/NodeDataModel>
#include <external/NodeEditor/include/nodes/FlowScene>
#include <QFileDialog>
#include <QTabWidget>
@@ -18,6 +22,10 @@ using namespace noggit::Red::NodeEditor::Ui;
using namespace noggit::Red::NodeEditor::Nodes;
using QtNodes::FlowView;
using QtNodes::FlowScene;
using QtNodes::NodeGraphicsObject;
using QtNodes::Node;
using QtNodes::NodeDataModel;
NodeEditorWidget::NodeEditorWidget(QWidget *parent)
: QMainWindow(parent, Qt::Window)
@@ -110,8 +118,6 @@ NodeEditorWidget::NodeEditorWidget(QWidget *parent)
case QMessageBox::AcceptRole:
scene->save();
break;
case QMessageBox::RejectRole:
break;
default:
break;
}
@@ -126,6 +132,72 @@ NodeEditorWidget::NodeEditorWidget(QWidget *parent)
}
);
connect(ui->nodeArea, &QTabWidget::currentChanged
, [this](int index)
{
if (_cur_tab_editor_connection)
disconnect(_cur_tab_editor_connection);
{
const QSignalBlocker _1(ui->activeNodeCaption);
const QSignalBlocker _2(ui->portNamesList);
ui->nodeNameLabel->setText("");
ui->activeNodeCaption->setText("");
ui->portNamesList->clear();
}
if (index < 0)
return;
QWidget* tab_item = ui->nodeArea->widget(index);
auto scene = static_cast<FlowView*>(tab_item->layout()->itemAt(0)->widget())->getScene();
_cur_tab_editor_connection = connect(scene, &FlowScene::nodeSelected
, [this](Node& node)
{
const QSignalBlocker _1(ui->activeNodeCaption);
const QSignalBlocker _2(ui->portNamesList);
auto model = node.nodeDataModel();
auto model_name = model->name();
ui->activeNodeCaption->setText(model->caption());
ui->nodeNameLabel->setText(model_name);
ui->portNamesList->clear();
if (model_name == "LogicBeginNode")
{
for (int i = 1; i < model->nPorts(PortType::Out); ++i)
{
QListWidgetItem* item = new QListWidgetItem(ui->portNamesList);
auto line_edit = new QLineEdit(ui->portNamesList);
line_edit->setText(model->portCaption(PortType::Out, i));
ui->portNamesList->setItemWidget(item, line_edit);
}
}
else if (model_name == "LogicReturnNode")
{
for (int i = 1; i < model->nPorts(PortType::In); ++i)
{
QListWidgetItem* item = new QListWidgetItem(ui->portNamesList);
auto line_edit = new QLineEdit(ui->portNamesList);
line_edit->setText(model->portCaption(PortType::In, i));
ui->portNamesList->setItemWidget(item, line_edit);
}
}
else
{
}
});
}
);
connect(ui->searchButton, &QPushButton::clicked
, [this]()
{
@@ -148,10 +220,6 @@ NodeEditorWidget::NodeEditorWidget(QWidget *parent)
auto tab = new QWidget();
ui->nodeArea->setCurrentIndex(
ui->nodeArea->addTab(tab, noggit::ui::font_awesome_icon(ui::font_awesome::icons::networkwired)
, "New scene *"));
auto node_view = new FlowView(scene, tab);
auto layout = new QVBoxLayout(tab);
layout->addWidget(node_view);
@@ -172,8 +240,13 @@ NodeEditorWidget::NodeEditorWidget(QWidget *parent)
});
int tab_index = ui->nodeArea->addTab(tab, noggit::ui::font_awesome_icon(ui::font_awesome::icons::networkwired)
, "New scene *");
ui->nodeArea->setCurrentIndex(tab_index);
});
ui->clearButton->setIcon(noggit::ui::font_awesome_icon(ui::font_awesome::icons::eraser));
connect(ui->clearButton, &QPushButton::clicked
, [this]()
@@ -263,6 +336,7 @@ NodeEditorWidget::NodeEditorWidget(QWidget *parent)
LogDebug << "Time elapsed: " << QTime::fromMSecsSinceStartOfDay(time.elapsed()).toString(Qt::ISODateWithMs).toStdString() << std::endl;
});
}
NodeEditorWidget::~NodeEditorWidget()
@@ -291,9 +365,6 @@ void NodeEditorWidget::loadScene(const QString& filepath)
auto tab = new QWidget();
scene->load(filepath);
ui->nodeArea->setCurrentIndex(
ui->nodeArea->addTab(tab,
noggit::ui::font_awesome_icon(ui::font_awesome::icons::networkwired), scene->getSceneName()));
auto node_view = new FlowView(scene, tab);
auto layout = new QVBoxLayout(tab);
@@ -301,6 +372,12 @@ void NodeEditorWidget::loadScene(const QString& filepath)
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
int tab_index = ui->nodeArea->addTab(tab,
noggit::ui::font_awesome_icon(ui::font_awesome::icons::networkwired),
scene->getSceneName());
ui->nodeArea->setCurrentIndex(tab_index);
connect(node_view, &FlowView::changed,
[=]
{
@@ -310,6 +387,7 @@ void NodeEditorWidget::loadScene(const QString& filepath)
if (!text.endsWith(" *"))
{
ui->nodeArea->setTabText(tab_idx, text + " *");
}
});

View File

@@ -32,6 +32,7 @@ namespace noggit
QFileSystemModel* _model;
QSortFilterProxyModel* _sort_model;
PreviewRenderer* _preview_renderer;
QMetaObject::Connection _cur_tab_editor_connection;
};
}
}

View File

@@ -170,6 +170,12 @@
</property>
<item>
<widget class="QSplitter" name="splitter">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -302,7 +308,116 @@
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4"/>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="tabPosition">
<enum>QTabWidget::East</enum>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Node</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_6">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="widget_6" native="true">
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Active Node:</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Type:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="nodeNameLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="activeNodeCaption"/>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>Port Names:</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="portNamesList"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Debug</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Profiler</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
</item>