loom

Форк
0
109 строк · 2.9 Кб
1
#include <QtNodes/ConnectionStyle>
2
#include <QtNodes/DataFlowGraphModel>
3
#include <QtNodes/DataFlowGraphicsScene>
4
#include <QtNodes/GraphicsView>
5
#include <QtNodes/NodeData>
6
#include <QtNodes/NodeDelegateModelRegistry>
7

8
#include <QtGui/QScreen>
9
#include <QtWidgets/QApplication>
10
#include <QtWidgets/QMenuBar>
11
#include <QtWidgets/QVBoxLayout>
12

13
#include <QtGui/QScreen>
14

15
#include "AdditionModel.hpp"
16
#include "DivisionModel.hpp"
17
#include "MultiplicationModel.hpp"
18
#include "NumberDisplayDataModel.hpp"
19
#include "NumberSourceDataModel.hpp"
20
#include "SubtractionModel.hpp"
21

22
using QtNodes::ConnectionStyle;
23
using QtNodes::DataFlowGraphicsScene;
24
using QtNodes::DataFlowGraphModel;
25
using QtNodes::GraphicsView;
26
using QtNodes::NodeDelegateModelRegistry;
27

28
static std::shared_ptr<NodeDelegateModelRegistry> registerDataModels()
29
{
30
    auto ret = std::make_shared<NodeDelegateModelRegistry>();
31
    ret->registerModel<NumberSourceDataModel>("Sources");
32

33
    ret->registerModel<NumberDisplayDataModel>("Displays");
34

35
    ret->registerModel<AdditionModel>("Operators");
36

37
    ret->registerModel<SubtractionModel>("Operators");
38

39
    ret->registerModel<MultiplicationModel>("Operators");
40

41
    ret->registerModel<DivisionModel>("Operators");
42

43
    return ret;
44
}
45

46
static void setStyle()
47
{
48
    ConnectionStyle::setConnectionStyle(
49
        R"(
50
  {
51
    "ConnectionStyle": {
52
      "ConstructionColor": "gray",
53
      "NormalColor": "black",
54
      "SelectedColor": "gray",
55
      "SelectedHaloColor": "deepskyblue",
56
      "HoveredColor": "deepskyblue",
57

58
      "LineWidth": 3.0,
59
      "ConstructionLineWidth": 2.0,
60
      "PointDiameter": 10.0,
61

62
      "UseDataDefinedColors": true
63
    }
64
  }
65
  )");
66
}
67

68
int main(int argc, char *argv[])
69
{
70
    QApplication app(argc, argv);
71

72
    setStyle();
73

74
    std::shared_ptr<NodeDelegateModelRegistry> registry = registerDataModels();
75

76
    QWidget mainWidget;
77

78
    auto menuBar = new QMenuBar();
79
    QMenu *menu = menuBar->addMenu("File");
80
    auto saveAction = menu->addAction("Save Scene");
81
    auto loadAction = menu->addAction("Load Scene");
82

83
    QVBoxLayout *l = new QVBoxLayout(&mainWidget);
84

85
    DataFlowGraphModel dataFlowGraphModel(registry);
86

87
    l->addWidget(menuBar);
88
    auto scene = new DataFlowGraphicsScene(dataFlowGraphModel, &mainWidget);
89

90
    auto view = new GraphicsView(scene);
91
    l->addWidget(view);
92
    l->setContentsMargins(0, 0, 0, 0);
93
    l->setSpacing(0);
94

95
    QObject::connect(saveAction, &QAction::triggered, scene, &DataFlowGraphicsScene::save);
96

97
    QObject::connect(loadAction, &QAction::triggered, scene, &DataFlowGraphicsScene::load);
98

99
    QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded, view, &GraphicsView::centerScene);
100

101
    mainWidget.setWindowTitle("Data Flow: simplest calculator");
102
    mainWidget.resize(800, 600);
103
    // Center window.
104
    mainWidget.move(QApplication::primaryScreen()->availableGeometry().center()
105
                    - mainWidget.rect().center());
106
    mainWidget.showNormal();
107

108
    return app.exec();
109
}
110

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.