Merge branch 'master' of https://gitlab.com/sshumakov3/noggit-red
This commit is contained in:
@@ -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);
|
||||
|
||||
5
src/external/NodeEditor/src/FlowView.cpp
vendored
5
src/external/NodeEditor/src/FlowView.cpp
vendored
@@ -353,6 +353,11 @@ keyPressEvent(QKeyEvent *event)
|
||||
}
|
||||
break;
|
||||
|
||||
case Qt::Key_Delete:
|
||||
deleteSelectedNodes();
|
||||
return;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -204,6 +204,8 @@ void
|
||||
NodeGraphicsObject::
|
||||
mousePressEvent(QGraphicsSceneMouseEvent * event)
|
||||
{
|
||||
static_cast<FlowScene*>(scene())->setLastSelected(&node());
|
||||
|
||||
if (_locked)
|
||||
return;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.");
|
||||
|
||||
@@ -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 + " *");
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace noggit
|
||||
QFileSystemModel* _model;
|
||||
QSortFilterProxyModel* _sort_model;
|
||||
PreviewRenderer* _preview_renderer;
|
||||
QMetaObject::Connection _cur_tab_editor_connection;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user