diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fc62cad..cef30efe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,6 +193,7 @@ add_subdirectory (src/external/qt-color-widgets) add_subdirectory (src/external/framelesshelper) add_subdirectory (src/external/qtimgui) add_subdirectory (src/external/QtAdvancedDockingSystem) +add_subdirectory (src/external/NodeEditor) # Add the found include directories to our include list. include_directories (SYSTEM "${CMAKE_SOURCE_DIR}/include/") @@ -331,6 +332,7 @@ TARGET_LINK_LIBRARIES (noggit FramelessHelper qt_imgui_widgets qtadvanceddocking + nodes ) set (_noggit_revision_output_dir "${CMAKE_BINARY_DIR}/revision_output") diff --git a/resources/resources.qrc b/resources/resources.qrc index 8e11040b..80cdb726 100644 --- a/resources/resources.qrc +++ b/resources/resources.qrc @@ -1,5 +1,9 @@ + + DefaultStyle.json + convert.png + font_awesome.otf noggit_font.ttf diff --git a/src/noggit/Red/PresetEditor/Ui/PresetEditor.cpp b/src/noggit/Red/PresetEditor/Ui/PresetEditor.cpp index 1226ccd9..a02b31cb 100644 --- a/src/noggit/Red/PresetEditor/Ui/PresetEditor.cpp +++ b/src/noggit/Red/PresetEditor/Ui/PresetEditor.cpp @@ -3,10 +3,108 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + using namespace noggit::Red::PresetEditor::Ui; using namespace noggit::ui; +using QtNodes::DataModelRegistry; +using QtNodes::FlowScene; +using QtNodes::FlowView; +using QtNodes::ConnectionStyle; +using QtNodes::TypeConverter; +using QtNodes::TypeConverterId; + +using noggit::Red::PresetEditor::Nodes::MathNode; +using noggit::Red::PresetEditor::Nodes::BaseNode; + +static std::shared_ptr +registerDataModels() +{ + auto ret = std::make_shared(); + // ret->registerModel("I/O//Sources"); + + //ret->registerModel("I/O//Displays"); + + ret->registerModel("Operators"); + + /* + ret->registerTypeConverter(std::make_pair(DecimalData().type(), + IntegerData().type()), + TypeConverter{DecimalToIntegerConverter()}); + + + + ret->registerTypeConverter(std::make_pair(IntegerData().type(), + DecimalData().type()), + TypeConverter{IntegerToDecimalConverter()}); + + */ + + return ret; +} + + +static +void +setStyle() +{ + ConnectionStyle::setConnectionStyle( + R"( + { + "FlowViewStyle": { + "BackgroundColor": [53, 53, 53], + "FineGridColor": [60, 60, 60], + "CoarseGridColor": [25, 25, 25] + }, + "NodeStyle": { + "NormalBoundaryColor": [255, 255, 255], + "SelectedBoundaryColor": [255, 165, 0], + "GradientColor0": "gray", + "GradientColor1": [80, 80, 80], + "GradientColor2": [64, 64, 64], + "GradientColor3": [58, 58, 58], + "ShadowColor": [20, 20, 20], + "FontColor" : "white", + "FontColorFaded" : "gray", + "ConnectionPointColor": [169, 169, 169], + "FilledConnectionPointColor": "cyan", + "ErrorColor": "red", + "WarningColor": [128, 128, 0], + + "PenWidth": 1.0, + "HoveredPenWidth": 1.5, + + "ConnectionPointDiameter": 8.0, + + "Opacity": 0.8 + }, + "ConnectionStyle": { + "ConstructionColor": "gray", + "NormalColor": "darkcyan", + "SelectedColor": [100, 100, 100], + "SelectedHaloColor": "orange", + "HoveredColor": "lightcyan", + + "LineWidth": 3.0, + "ConstructionLineWidth": 2.0, + "PointDiameter": 10.0, + + "UseDataDefinedColors": false + } + } + )"); +} + PresetEditorWidget::PresetEditorWidget(QWidget *parent) : QMainWindow(parent, Qt::Window) { @@ -101,6 +199,26 @@ PresetEditorWidget::PresetEditorWidget(QWidget *parent) ui->minimapWidget->draw_boundaries(true); ui->minimapWidget->camera(ui->viewport->getWorldCamera()); + // Handles nodes + ::setStyle(); + auto nodes_tab = ui->editorTabs->widget(1); + auto scene = new FlowScene(::registerDataModels(), nodes_tab); + nodes_tab->setLayout(new QVBoxLayout(nodes_tab)); + nodes_tab->layout()->addWidget(new FlowView(scene)); + nodes_tab->layout()->setContentsMargins(0, 0, 0, 0); + nodes_tab->layout()->setSpacing(0); + nodes_tab->resize(800, 600); + + connect(ui->executeButton, &QPushButton::clicked + , [this, scene]() + { + scene->iterateOverNodeDataDependentOrder( + [](NodeDataModel* model) + { + reinterpret_cast(model)->compute(); + } + ); + }); } void PresetEditorWidget::setupConnectsCommon() diff --git a/src/noggit/Red/PresetEditor/Ui/PresetEditor.ui b/src/noggit/Red/PresetEditor/Ui/PresetEditor.ui index 3285a992..b24b99bd 100644 --- a/src/noggit/Red/PresetEditor/Ui/PresetEditor.ui +++ b/src/noggit/Red/PresetEditor/Ui/PresetEditor.ui @@ -208,7 +208,7 @@ - 1 + 0 @@ -263,10 +263,10 @@ - + - 0 + 1 @@ -274,7 +274,7 @@ 0 0 376 - 684 + 76 @@ -372,13 +372,22 @@ 0 0 - 98 - 28 + 376 + 76 Page 2 + + + + + Execute + + + + diff --git a/src/noggit/application.cpp b/src/noggit/application.cpp index b2723983..90e1a7f8 100644 --- a/src/noggit/application.cpp +++ b/src/noggit/application.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include "revision.h" @@ -343,6 +344,7 @@ int main(int argc, char *argv[]) noggit::RegisterErrorHandlers(); std::set_terminate (noggit_terminate_handler); + QApplication::setStyle(QStyleFactory::create("Fusion")); QApplication qapp (argc, argv); qapp.setApplicationName ("Noggit"); qapp.setOrganizationName ("Noggit");