Wed, 22 Jun 2022 20:27:53 +0300
Move some widgets into a static library
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
1 | #include <QApplication> |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
2 | #include <QFileDialog> |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
3 | #include <QMessageBox> |
202
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
4 | #include <QMdiSubWindow> |
237
10a6298f636f
Add an option to log opengl messages
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
236
diff
changeset
|
5 | #include <QScrollBar> |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
6 | #include <QStackedWidget> |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
7 | #include <QCloseEvent> |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
8 | #include "mainwindow.h" |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
9 | #include "ui_mainwindow.h" |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
10 | #include "version.h" |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
11 | #include "gl/axesprogram.h" |
216
c7241f504117
Reworked grid program into a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
215
diff
changeset
|
12 | #include "gl/gridprogram.h" |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
13 | #include "gl/partrenderer.h" |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
14 | #include "document.h" |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
15 | #include "settingseditor/settingseditor.h" |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
16 | #include "widgets/colorselectdialog.h" |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
17 | #include "settings.h" |
233 | 18 | #include "ui/circletooloptionswidget.h" |
236
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
19 | #include "messagelog.h" |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
243
diff
changeset
|
20 | #include "ui/objecteditor.h" |
24 | 21 | |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
22 | static const QDir LOCALE_DIR {":/locale"}; |
0 | 23 | |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
24 | class ModelSubWindow : public QMdiSubWindow |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
25 | { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
26 | Q_OBJECT |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
27 | public: |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
28 | const ModelId modelId; |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
29 | ModelSubWindow(ModelId modelId, QWidget* widget) : |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
30 | QMdiSubWindow{widget}, |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
31 | modelId{modelId} |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
32 | { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
33 | } |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
34 | protected: |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
35 | void closeEvent(QCloseEvent* event) override |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
36 | { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
37 | event->ignore(); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
38 | } |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
39 | }; |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
40 | |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
41 | class ModelData : public QObject |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
42 | { |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
43 | Q_OBJECT |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
44 | public: |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
45 | ModelData(QObject* parent) : QObject {parent} {} |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
46 | std::unique_ptr<PartRenderer> canvas; |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
47 | std::unique_ptr<QItemSelectionModel> itemSelectionModel; |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
48 | std::unique_ptr<EditTools> tools; |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
49 | std::unique_ptr<AxesLayer> axesLayer; |
216
c7241f504117
Reworked grid program into a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
215
diff
changeset
|
50 | std::unique_ptr<GridLayer> gridLayer; |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
51 | Model* model; |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
52 | }; |
243
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
53 | |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
54 | class Signal final : public QObject |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
55 | { |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
56 | Q_OBJECT |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
57 | public: |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
58 | Signal() : QObject{}{} |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
59 | virtual ~Signal(){} |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
60 | void emit() |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
61 | { |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
62 | Q_EMIT this->triggered(); |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
63 | } |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
64 | Q_SIGNALS: |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
65 | void triggered(); |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
66 | }; |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
67 | #include "main.moc" |
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
68 | |
200 | 69 | static void doQtRegistrations() |
0 | 70 | { |
7
68443f5be176
added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
71 | QCoreApplication::setApplicationName(::appName); |
68443f5be176
added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
72 | QCoreApplication::setOrganizationName("hecknology.net"); |
68443f5be176
added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
73 | QCoreApplication::setOrganizationDomain("hecknology.net"); |
237
10a6298f636f
Add an option to log opengl messages
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
236
diff
changeset
|
74 | qRegisterMetaType<Message>(); |
200 | 75 | qRegisterMetaTypeStreamOperators<Library>("Library"); |
76 | qRegisterMetaTypeStreamOperators<Libraries>("Libraries"); | |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
77 | qRegisterMetaTypeStreamOperators<gl::RenderStyle>(); |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
78 | qRegisterMetaTypeStreamOperators<QMdiArea::ViewMode>(); |
200 | 79 | } |
80 | ||
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
81 | template<typename BaseType, typename MemberType, typename DataType> |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
82 | struct MemberData |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
83 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
84 | std::size_t member; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
85 | DataType payload; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
86 | constexpr MemberType memberInstance(BaseType* instance) const |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
87 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
88 | return *reinterpret_cast<MemberType*>(reinterpret_cast<char*>(instance) + this->member); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
89 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
90 | }; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
91 | |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
92 | static constexpr MemberData<Ui_MainWindow, QAction*, gl::RenderStyle> renderStyleButtons[] = { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
93 | { offsetof(Ui_MainWindow, actionRenderStyleNormal), gl::RenderStyle::Normal }, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
94 | { offsetof(Ui_MainWindow, actionRenderStyleBfc), gl::RenderStyle::BfcRedGreen }, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
95 | { offsetof(Ui_MainWindow, actionRenderStyleRandom), gl::RenderStyle::RandomColors }, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
96 | { offsetof(Ui_MainWindow, actionRenderStylePickScene), gl::RenderStyle::PickScene }, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
97 | }; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
98 | |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
99 | static std::optional<ModelId> openModelFromPath( |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
100 | const QString& path, |
230
a1f3f7d9078b
rename LibraryManager -> LibrariesModel
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
229
diff
changeset
|
101 | const LibrariesModel* libraries, |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
102 | DocumentManager* documents, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
103 | QWidget* parent) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
104 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
105 | QString errorString; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
106 | QTextStream errorStream{&errorString}; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
107 | const std::optional<ModelId> modelIdOpt = documents->openModel( |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
108 | path, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
109 | errorStream, |
212
27259810da6d
Rewrite dependency loading
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
206
diff
changeset
|
110 | OpenType::ManuallyOpened); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
111 | if (modelIdOpt.has_value()) { |
212
27259810da6d
Rewrite dependency loading
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
206
diff
changeset
|
112 | const DocumentManager::MissingDependencies missing = documents->loadDependenciesForAllModels(*libraries); |
27259810da6d
Rewrite dependency loading
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
206
diff
changeset
|
113 | if (not missing.empty()) { |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
114 | QMessageBox::warning( |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
115 | parent, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
116 | QObject::tr("Problem loading references"), |
212
27259810da6d
Rewrite dependency loading
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
206
diff
changeset
|
117 | errorStringFromMissingDependencies(missing)); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
118 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
119 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
120 | else { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
121 | QMessageBox::critical( |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
122 | parent, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
123 | QObject::tr("Problem opening file"), |
206
654661eab7f3
More refactor, merged main.h, basics.h and utility.h into one header file basics.h and removed plenty of unused code
Teemu Piippo <teemu@hecknology.net>
parents:
205
diff
changeset
|
124 | QObject::tr("Could not open %1: %2").arg(quoted(path), errorString) |
654661eab7f3
More refactor, merged main.h, basics.h and utility.h into one header file basics.h and removed plenty of unused code
Teemu Piippo <teemu@hecknology.net>
parents:
205
diff
changeset
|
125 | ); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
126 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
127 | return modelIdOpt; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
128 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
129 | |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
130 | static QString getOpenModelPath(QWidget* parent) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
131 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
132 | return QFileDialog::getOpenFileName( |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
133 | parent, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
134 | QObject::tr("Open model"), |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
135 | "", |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
136 | QObject::tr("LDraw models (*.ldr *.dat)")); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
137 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
138 | |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
139 | static const QString localeCode(const QString& locale) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
140 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
141 | if (locale == "system") { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
142 | return QLocale::system().name(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
143 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
144 | else { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
145 | return locale; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
146 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
147 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
148 | |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
149 | /** |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
150 | * @brief Changes the application language to the specified language |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
151 | */ |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
152 | static void changeLanguage(const QString& locale, QTranslator* translator) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
153 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
154 | if (not locale.isEmpty()) { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
155 | const QString localeCode = ::localeCode(locale); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
156 | QLocale::setDefault({localeCode}); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
157 | qApp->removeTranslator(translator); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
158 | const QString path = LOCALE_DIR.filePath(localeCode + ".qm"); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
159 | const bool loadSuccessful = translator->load(path); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
160 | if (loadSuccessful) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
161 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
162 | qApp->installTranslator(translator); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
163 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
164 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
165 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
166 | |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
167 | ModelData* findModelData(DocumentManager* documents, ModelId modelId) |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
168 | { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
169 | return documents->findPayload<ModelData>(modelId); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
170 | } |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
171 | |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
172 | static ModelSubWindow* currentModelSubWindow(Ui_MainWindow* ui) |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
173 | { |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
174 | auto* w = ui->mdiArea->activeSubWindow(); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
175 | return qobject_cast<ModelSubWindow*>(w); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
176 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
177 | |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
178 | static ModelData* currentModelData(Ui_MainWindow* ui, DocumentManager* documents) |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
179 | { |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
180 | if (auto* const activeSubWindow = currentModelSubWindow(ui)) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
181 | return findModelData(documents, activeSubWindow->modelId); |
202
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
182 | } |
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
183 | else { |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
184 | return nullptr; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
185 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
186 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
187 | |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
188 | static Model* currentModelBody(Ui_MainWindow* ui, DocumentManager* documents) |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
189 | { |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
190 | if (auto* const activeSubWindow = currentModelSubWindow(ui)) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
191 | return documents->getModelById(activeSubWindow->modelId); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
192 | } |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
193 | else { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
194 | return nullptr; |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
195 | } |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
196 | } |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
197 | |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
198 | static std::optional<ModelId> findCurrentModelId(Ui_MainWindow* ui) |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
199 | { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
200 | ModelSubWindow* activeSubWindow = qobject_cast<ModelSubWindow*>(ui->mdiArea->activeSubWindow()); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
201 | if (activeSubWindow != nullptr) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
202 | return activeSubWindow->modelId; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
203 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
204 | else { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
205 | return {}; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
206 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
207 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
208 | |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
209 | /** |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
210 | * @brief Updates the title of the main window so to contain the app's name |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
211 | * and version as well as the open document name. |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
212 | */ |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
213 | static QString title() |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
214 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
215 | QString title = ::appName; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
216 | title += " "; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
217 | title += fullVersionString(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
218 | return title; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
219 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
220 | |
230
a1f3f7d9078b
rename LibraryManager -> LibrariesModel
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
229
diff
changeset
|
221 | static ColorTable loadColors(const LibrariesModel* libraries) |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
222 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
223 | QTextStream errors; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
224 | return libraries->loadColorTable(errors); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
225 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
226 | |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
227 | static QString tabName(const QFileInfo& fileInfo) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
228 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
229 | QString result = fileInfo.baseName(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
230 | if (result.isEmpty()) { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
231 | result = QObject::tr("<unnamed>"); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
232 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
233 | return result; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
234 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
235 | |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
236 | void rebuildRecentFilesMenu(QMenu* menu, const QStringList& strings, QWidget* parent) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
237 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
238 | menu->clear(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
239 | for (const QString& path : strings) { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
240 | QAction* action = new QAction{path, parent}; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
241 | action->setData(path); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
242 | menu->addAction(action); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
243 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
244 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
245 | |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
246 | template<typename Fn> |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
247 | static void forModel(const DocumentManager* documents, Fn&& fn) |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
248 | { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
249 | forValueInMap(*documents, [&fn](const DocumentManager::ModelInfo& info) |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
250 | { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
251 | ModelData* modelSpecificData = qobject_cast<ModelData*>(info.payload); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
252 | if (modelSpecificData != nullptr) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
253 | fn(&info, modelSpecificData); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
254 | } |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
255 | }); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
256 | } |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
257 | |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
258 | static void updateRenderPreferences( |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
259 | Ui_MainWindow* ui, |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
260 | const gl::RenderPreferences* renderPreferences, |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
261 | const DocumentManager* documents) |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
262 | { |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
263 | forModel(documents, [&renderPreferences](const void*, const ModelData* data){ |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
264 | if (data->canvas != nullptr) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
265 | data->canvas->setRenderPreferences(*renderPreferences); |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
266 | data->canvas->setLayerEnabled(data->axesLayer.get(), renderPreferences->drawAxes); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
267 | } |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
268 | }); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
269 | for (auto data : ::renderStyleButtons) { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
270 | QAction* action = data.memberInstance(ui); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
271 | action->setChecked(renderPreferences->style == data.payload); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
272 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
273 | ui->actionDrawAxes->setChecked(renderPreferences->drawAxes); |
231
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
274 | ui->actionWireframe->setChecked(renderPreferences->wireframe); |
250
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
249
diff
changeset
|
275 | } |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
276 | |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
277 | static gl::RenderPreferences loadRenderPreferences() |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
278 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
279 | return gl::RenderPreferences{ |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
280 | .style = setting<Setting::RenderStyle>(), |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
281 | .mainColor = setting<Setting::MainColor>(), |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
282 | .backgroundColor = setting<Setting::BackgroundColor>(), |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
283 | .selectedColor = setting<Setting::SelectedColor>(), |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
284 | .lineThickness = setting<Setting::LineThickness>(), |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
285 | .lineAntiAliasing = setting<Setting::LineAntiAliasing>(), |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
286 | .drawAxes = setting<Setting::DrawAxes>(), |
231
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
287 | .wireframe = setting<Setting::Wireframe>(), |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
288 | }; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
289 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
290 | |
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
291 | struct ToolWidgets |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
292 | { |
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
293 | CircleToolOptionsWidget* circleToolOptions; |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
294 | ObjectEditor* objectEditor; |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
295 | }; |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
296 | |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
297 | void initializeTools(Ui_MainWindow* ui, ToolWidgets* toolWidgets, QWidget* parent) |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
298 | { |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
299 | const struct |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
300 | { |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
301 | QString name, tooltip; |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
302 | QPixmap icon; |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
303 | QWidget* widget; |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
304 | } editingModesInfo[] = { |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
305 | { |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
306 | .name = QObject::tr("Select"), |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
307 | .tooltip = QObject::tr("Select elements from the model."), |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
308 | .icon = {":/icons/navigate-outline.png"}, |
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
309 | .widget = toolWidgets->objectEditor, |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
310 | }, |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
311 | { |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
312 | .name = QObject::tr("Draw"), |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
313 | .tooltip = QObject::tr("Draw new elements into the model."), |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
314 | .icon = {":/icons/pencil-outline.png"}, |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
315 | .widget = nullptr, |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
316 | }, |
232
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
317 | { |
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
318 | .name = QObject::tr("Circle"), |
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
319 | .tooltip = QObject::tr("Draw circular primitives."), |
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
320 | .icon = {":/icons/linetype-circularprimitive.png"}, |
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
321 | .widget = toolWidgets->circleToolOptions, |
232
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
322 | }, |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
323 | }; |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
324 | for (int i = 0; i < countof(editingModesInfo); ++i) { |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
325 | const auto& editingModeInfo = editingModesInfo[i]; |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
326 | QAction* action = new QAction{editingModeInfo.name, parent}; |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
327 | action->setCheckable(true); |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
328 | action->setChecked(i == 0); |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
329 | action->setData(static_cast<EditingMode>(i)); |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
330 | action->setToolTip(editingModeInfo.tooltip); |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
331 | action->setIcon(QPixmap{editingModeInfo.icon}); |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
332 | ui->editingModesToolBar->addAction(action); |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
333 | QWidget* widget = editingModeInfo.widget; |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
334 | if (widget == nullptr) { |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
335 | widget = new QWidget{parent}; |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
336 | } |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
337 | ui->toolWidgetStack->addWidget(widget); |
232
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
338 | QObject::connect(action, &QAction::triggered, [ui, i]{ |
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
339 | ui->toolWidgetStack->setCurrentIndex(i); |
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
340 | }); |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
341 | } |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
342 | } |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
343 | |
204
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
344 | constexpr bool sortModelIndexesByRow(const QModelIndex& a, const QModelIndex& b) |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
345 | { |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
346 | return a.row() < b.row(); |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
347 | } |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
348 | |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
349 | std::vector<int> rows(const QModelIndexList& indexList) |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
350 | { |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
351 | std::vector<int> result; |
250
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
249
diff
changeset
|
352 | result.reserve(unsigned_cast(indexList.size())); |
204
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
353 | for (const QModelIndex& index : indexList) |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
354 | { |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
355 | result.push_back(index.row()); |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
356 | } |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
357 | return result; |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
358 | } |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
359 | |
200 | 360 | int main(int argc, char *argv[]) |
361 | { | |
362 | doQtRegistrations(); | |
3 | 363 | QApplication app{argc, argv}; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
364 | QMainWindow mainWindow; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
365 | Ui_MainWindow ui; |
212
27259810da6d
Rewrite dependency loading
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
206
diff
changeset
|
366 | DocumentManager documents; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
367 | QString currentLanguage = "en"; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
368 | QTranslator translator{&mainWindow}; |
230
a1f3f7d9078b
rename LibraryManager -> LibrariesModel
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
229
diff
changeset
|
369 | LibrariesModel libraries{&mainWindow}; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
370 | QStringList recentlyOpenedFiles; |
205 | 371 | ColorTable colorTable; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
372 | gl::RenderPreferences renderPreferences; |
236
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
373 | MessageLog messageLog; |
243
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
374 | Signal settingsChanged; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
375 | ui.setupUi(&mainWindow); |
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
376 | ToolWidgets toolWidgets{ |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
377 | .circleToolOptions = new CircleToolOptionsWidget{&mainWindow}, |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
378 | .objectEditor = new ObjectEditor{&mainWindow}, |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
379 | }; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
380 | const uiutilities::KeySequenceMap defaultKeyboardShortcuts = |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
381 | uiutilities::makeKeySequenceMap(uiutilities::collectActions(&mainWindow)); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
382 | const auto saveSettings = [&]{ |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
383 | setSetting<Setting::MainWindowGeometry>(mainWindow.saveGeometry()); |
240
414d392b9ae6
some improvements to dock widget handling
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
237
diff
changeset
|
384 | setSetting<Setting::MainWindowState>(mainWindow.saveState()); |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
385 | setSetting<Setting::RecentFiles>(recentlyOpenedFiles); |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
386 | setSetting<Setting::RenderStyle>(renderPreferences.style); |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
387 | setSetting<Setting::DrawAxes>(renderPreferences.drawAxes); |
231
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
388 | setSetting<Setting::Wireframe>(renderPreferences.wireframe); |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
389 | libraries.storeToSettings(); |
243
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
390 | settingsChanged.emit(); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
391 | }; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
392 | const auto updateRecentlyOpenedDocumentsMenu = [&]{ |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
393 | rebuildRecentFilesMenu(ui.menuRecentFiles, recentlyOpenedFiles, &mainWindow); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
394 | for (QAction* action : ui.menuRecentFiles->findChildren<QAction*>()) { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
395 | QString path = action->data().toString(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
396 | QObject::connect( |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
397 | action, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
398 | &QAction::triggered, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
399 | [path, &libraries, &documents, &mainWindow]() { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
400 | openModelFromPath(path, &libraries, &documents, &mainWindow); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
401 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
402 | ); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
403 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
404 | }; |
204
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
405 | static constexpr auto executeAction = [&]( |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
406 | Model* model, const ModelAction& action |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
407 | ) { |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
408 | std::visit(overloaded{ |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
409 | [model](const AppendToModel& action){ |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
410 | model->append(action.newElement); |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
411 | }, |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
412 | [model](const DeleteFromModel& action){ |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
413 | model->remove(action.position); |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
414 | }, |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
415 | }, action); |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
416 | }; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
417 | const auto restoreSettings = [&]{ |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
418 | recentlyOpenedFiles = setting<Setting::RecentFiles>(); |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
419 | renderPreferences = loadRenderPreferences(); |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
420 | changeLanguage(setting<Setting::Locale>(), &translator); |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
421 | libraries.restoreFromSettings(); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
422 | updateRecentlyOpenedDocumentsMenu(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
423 | colorTable = loadColors(&libraries); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
424 | updateRenderPreferences(&ui, &renderPreferences, &documents); |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
425 | ui.mdiArea->setViewMode(setting<Setting::ViewMode>()); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
426 | ui.retranslateUi(&mainWindow); |
243
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
427 | settingsChanged.emit(); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
428 | }; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
429 | const auto addRecentlyOpenedFile = [&](const QString& path){ |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
430 | constexpr int maxRecentlyOpenedFiles = 10; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
431 | recentlyOpenedFiles.removeAll(path); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
432 | recentlyOpenedFiles.insert(0, path); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
433 | while (recentlyOpenedFiles.size() > maxRecentlyOpenedFiles) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
434 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
435 | recentlyOpenedFiles.removeLast(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
436 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
437 | saveSettings(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
438 | updateRecentlyOpenedDocumentsMenu(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
439 | }; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
440 | const auto openModelForEditing = [&](const ModelId modelId){ |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
441 | Model* model = documents.getModelById(modelId); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
442 | if (model != nullptr) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
443 | ModelData* data = new ModelData(&documents); |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
444 | data->tools = std::make_unique<EditTools>(); |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
445 | data->canvas = std::make_unique<PartRenderer>(model, &documents, colorTable); |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
446 | data->itemSelectionModel = std::make_unique<QItemSelectionModel>(); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
447 | data->itemSelectionModel->setModel(model); |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
448 | data->axesLayer = std::make_unique<AxesLayer>(); |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
449 | constexpr glm::mat4 XZ = {{1, 0, 0, 0}, {0, 0, 1, 0}, {0, 1, 0, 0}, {0, 0, 0, 1}}; |
216
c7241f504117
Reworked grid program into a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
215
diff
changeset
|
450 | data->gridLayer = std::make_unique<GridLayer>(); |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
451 | data->gridLayer->setGridMatrix(XZ); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
452 | data->tools->setGridMatrix(XZ); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
453 | data->model = model; |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
454 | data->canvas->addRenderLayer(data->axesLayer.get()); |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
455 | data->canvas->setLayerEnabled(data->axesLayer.get(), setting<Setting::DrawAxes>()); |
216
c7241f504117
Reworked grid program into a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
215
diff
changeset
|
456 | data->canvas->addRenderLayer(data->gridLayer.get()); |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
457 | data->canvas->addRenderLayer(data->tools.get()); |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
458 | documents.setModelPayload(modelId, data); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
459 | QObject::connect( |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
460 | data->tools.get(), |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
461 | &EditTools::modelAction, |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
462 | std::bind(executeAction, model, std::placeholders::_1)); |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
463 | QObject::connect( |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
464 | data->itemSelectionModel.get(), |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
465 | &QItemSelectionModel::selectionChanged, |
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
466 | [modelId, &documents, &toolWidgets]{ |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
467 | ModelData* data = findModelData(&documents, modelId); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
468 | if (data != nullptr) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
469 | auto resolveIndex = [&data](const QModelIndex& index){ |
250
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
249
diff
changeset
|
470 | return data->model->idAt(unsigned_cast(index.row())); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
471 | }; |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
472 | const auto selection = data->itemSelectionModel->selection(); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
473 | const auto indices = fn::map<QSet<ModelId>>(selection.indexes(), resolveIndex); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
474 | data->canvas->setSelection(indices); |
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
475 | /* |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
476 | if (indices.size() == 1) { |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
477 | opt<std::size_t> index = data->model->find(*indices.begin()); |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
478 | if (index.has_value()) { |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
479 | toolWidgets.objectEditor->setObject((*data->model)[*index]); |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
480 | } |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
481 | } |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
482 | else { |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
483 | toolWidgets.objectEditor->reset(); |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
484 | } |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
485 | */ |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
486 | } |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
487 | }); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
488 | data->canvas->setRenderPreferences(renderPreferences); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
489 | QObject::connect( |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
490 | data->tools.get(), |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
491 | &EditTools::newStatusText, |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
492 | [&](const QString& newStatusText) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
493 | mainWindow.statusBar()->showMessage(newStatusText); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
494 | }); |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
495 | QObject::connect( |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
496 | data->tools.get(), |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
497 | &EditTools::select, |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
498 | [modelId, &documents](const QSet<ModelId>& indices, bool retain) { |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
499 | ModelData* data = findModelData(&documents, modelId); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
500 | if (data != nullptr) { |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
501 | if (not retain) { |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
502 | data->itemSelectionModel->clear(); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
503 | } |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
504 | for (const ModelId id : indices) { |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
505 | opt<int> index = data->model->find(id); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
506 | if (index.has_value()) { |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
507 | const QModelIndex qindex = data->model->index(*index); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
508 | data->itemSelectionModel->select(qindex, QItemSelectionModel::Select); |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
509 | } |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
510 | } |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
511 | } |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
512 | }); |
243
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
513 | QObject::connect(&settingsChanged, &Signal::triggered, [modelId, &documents]{ |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
514 | ModelData* data = findModelData(&documents, modelId); |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
515 | if (data != nullptr) { |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
516 | data->gridLayer->settingsChanged(); |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
517 | } |
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
518 | }); |
237
10a6298f636f
Add an option to log opengl messages
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
236
diff
changeset
|
519 | QObject::connect(data->canvas.get(), &PartRenderer::message, &messageLog, &MessageLog::addMessage); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
520 | const QFileInfo fileInfo{*documents.modelPath(modelId)}; |
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
521 | ModelSubWindow* subWindow = new ModelSubWindow{modelId, ui.mdiArea}; |
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
522 | subWindow->setWidget(data->canvas.get()); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
523 | subWindow->setWindowTitle(tabName(fileInfo)); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
524 | subWindow->show(); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
525 | } |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
526 | }; |
202
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
527 | QObject::connect(ui.actionNew, &QAction::triggered, [&]{ |
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
528 | openModelForEditing(documents.newModel()); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
529 | }); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
530 | QObject::connect(ui.actionOpen, &QAction::triggered, [&]{ |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
531 | const QString path = getOpenModelPath(&mainWindow); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
532 | if (not path.isEmpty()) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
533 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
534 | const std::optional<ModelId> id = openModelFromPath(path, &libraries, &documents, &mainWindow); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
535 | if (id.has_value()) { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
536 | openModelForEditing(id.value()); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
537 | addRecentlyOpenedFile(path); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
538 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
539 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
540 | }); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
541 | QObject::connect(ui.actionSettingsEditor, &QAction::triggered, [&]{ |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
542 | SettingsEditor settingsEditor{defaultKeyboardShortcuts, &mainWindow}; |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
543 | const int result = settingsEditor.exec(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
544 | if (result == QDialog::Accepted) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
545 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
546 | restoreSettings(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
547 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
548 | }); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
549 | QObject::connect(ui.actionQuit, &QAction::triggered, &mainWindow, &QMainWindow::close); |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
550 | #if 0 |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
551 | QObject::connect(ui.actionAdjustGridToView, &QAction::triggered, [&]{ |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
552 | if (ModelData* data = currentModelData(&ui, &documents)) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
553 | adjustGridToView(data->canvas.get()); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
554 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
555 | }); |
215
34c6e7bc4ee1
Reimplement the axes program as a layer that can be added to PartRenderer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
214
diff
changeset
|
556 | #endif |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
557 | QObject::connect(ui.actionClose, &QAction::triggered, [&ui, &documents]{ |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
558 | if (ModelData* data = currentModelData(&ui, &documents)) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
559 | // TODO |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
560 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
561 | }); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
562 | const auto save = [&](ModelId modelId){ |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
563 | QString error; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
564 | QTextStream errorStream{&error}; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
565 | const bool succeeded = documents.saveModel(modelId, errorStream); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
566 | if (not succeeded) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
567 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
568 | QMessageBox::critical(&mainWindow, QObject::tr("Save error"), error); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
569 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
570 | else |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
571 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
572 | const QString* pathPtr = documents.modelPath(modelId); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
573 | if (pathPtr != nullptr) { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
574 | addRecentlyOpenedFile(*pathPtr); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
575 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
576 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
577 | }; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
578 | const auto actionSaveAs = [&]{ |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
579 | const std::optional<ModelId> modelId = findCurrentModelId(&ui); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
580 | if (modelId.has_value()) |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
581 | { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
582 | const QString* pathPtr = documents.modelPath(*modelId); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
583 | QString defaultPath = (pathPtr != nullptr) ? *pathPtr : ""; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
584 | const QString newPath = QFileDialog::getSaveFileName( |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
585 | &mainWindow, |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
586 | QObject::tr("Save as…"), |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
587 | QFileInfo{defaultPath}.absoluteDir().path(), |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
588 | QObject::tr("LDraw files (*.ldr *dat);;All files (*)") |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
589 | ); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
590 | if (not newPath.isEmpty()) { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
591 | QString error; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
592 | QTextStream errorStream{&error}; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
593 | documents.setModelPath(*modelId, newPath, libraries, errorStream); |
202
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
594 | QMdiSubWindow* const subWindow = ui.mdiArea->currentSubWindow(); |
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
595 | if (subWindow != nullptr) { |
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
596 | subWindow->setWindowTitle(tabName(QFileInfo{newPath})); |
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
597 | } |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
598 | save(*modelId); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
599 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
600 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
601 | }; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
602 | QObject::connect(ui.actionSaveAs, &QAction::triggered, actionSaveAs); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
603 | QObject::connect(ui.actionSave, &QAction::triggered, [&]{ |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
604 | const std::optional<ModelId> modelId = findCurrentModelId(&ui); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
605 | if (modelId.has_value()) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
606 | const QString* path = documents.modelPath(*modelId); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
607 | if (path == nullptr or path->isEmpty()) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
608 | actionSaveAs(); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
609 | } |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
610 | else { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
611 | save(*modelId); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
612 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
613 | } |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
614 | }); |
204
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
615 | QObject::connect(ui.actionDelete, &QAction::triggered, [&]{ |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
616 | if (Model* model = currentModelBody(&ui, &documents)) { |
204
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
617 | std::vector<int> selectedRows = rows(ui.modelListView->selectionModel()->selectedRows()); |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
618 | std::sort(selectedRows.begin(), selectedRows.end(), std::greater<int>{}); |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
619 | for (int row : selectedRows) { |
250
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
249
diff
changeset
|
620 | executeAction(model, DeleteFromModel{.position = unsigned_cast(row)}); |
204
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
621 | } |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
622 | } |
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
623 | }); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
624 | QObject::connect(ui.actionDrawAxes, &QAction::triggered, [&](bool drawAxes){ |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
625 | renderPreferences.drawAxes = drawAxes; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
626 | saveSettings(); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
627 | updateRenderPreferences(&ui, &renderPreferences, &documents); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
628 | }); |
231
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
629 | QObject::connect(ui.actionWireframe, &QAction::triggered, [&](bool enabled){ |
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
630 | renderPreferences.wireframe = enabled; |
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
631 | saveSettings(); |
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
632 | updateRenderPreferences(&ui, &renderPreferences, &documents); |
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
633 | }); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
634 | for (auto data : ::renderStyleButtons) { |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
635 | QAction* action = data.memberInstance(&ui); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
636 | QObject::connect(action, &QAction::triggered, [&, data]{ |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
637 | renderPreferences.style = data.payload; |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
638 | saveSettings(); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
639 | updateRenderPreferences(&ui, &renderPreferences, &documents); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
640 | }); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
641 | } |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
642 | const auto checkEditingModeAction = [&ui](EditingMode mode) { |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
643 | for (QAction* action : ui.editingModesToolBar->actions()) { |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
644 | action->setChecked(action->data().value<EditingMode>() == mode); |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
645 | } |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
646 | }; |
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
647 | initializeTools(&ui, &toolWidgets, &mainWindow); |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
648 | for (QAction* action : ui.editingModesToolBar->actions()) { |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
649 | QObject::connect(action, &QAction::triggered, [&, action]{ |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
650 | if (ModelData* data = currentModelData(&ui, &documents)) { |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
651 | const EditingMode mode = action->data().value<EditingMode>(); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
652 | data->tools->setEditMode(mode); |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
653 | checkEditingModeAction(mode); |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
654 | } |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
655 | }); |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
656 | } |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
657 | QObject::connect(ui.mdiArea, &QMdiArea::subWindowActivated, |
204
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
658 | [&](QMdiSubWindow* subWindow) { |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
659 | ModelSubWindow* modelSubWindow = qobject_cast<ModelSubWindow*>(subWindow); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
660 | if (modelSubWindow != nullptr) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
661 | if (ModelData* data = documents.findPayload<ModelData>(modelSubWindow->modelId)) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
662 | checkEditingModeAction(data->tools->currentEditingMode()); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
663 | if (data->itemSelectionModel != nullptr) { |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
664 | ui.modelListView->setModel(data->model); |
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
665 | ui.modelListView->setSelectionModel(data->itemSelectionModel.get()); |
204
52e10e8d88cc
Concentrate model editing into one coroutine inside main()
Teemu Piippo <teemu@hecknology.net>
parents:
203
diff
changeset
|
666 | } |
203
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
667 | } |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
668 | } |
1909a0123c72
Move editing modes tool bar, tool options widget stack and model list view into the main window
Teemu Piippo <teemu@hecknology.net>
parents:
202
diff
changeset
|
669 | }); |
236
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
670 | ui.messageLog->setModel(&messageLog); |
229
38d86002d548
Add About Qt menu entry
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
221
diff
changeset
|
671 | QObject::connect(ui.actionAboutQt, &QAction::triggered, &app, &QApplication::aboutQt); |
236
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
672 | QObject::connect(&documents, &DocumentManager::message, &messageLog, &MessageLog::addMessage); |
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
673 | QObject::connect(&messageLog, &MessageLog::rowsAboutToBeInserted, [&]{ |
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
674 | const auto bar = ui.messageLog->verticalScrollBar(); |
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
675 | ui.messageLog->setProperty("shouldAutoScroll", bar->value() == bar->maximum()); |
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
676 | }); |
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
677 | QObject::connect(&messageLog, &MessageLog::rowsInserted, [&]{ |
237
10a6298f636f
Add an option to log opengl messages
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
236
diff
changeset
|
678 | ui.messageLog->resizeRowsToContents(); |
236
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
679 | if (ui.messageLog->property("shouldAutoScroll").toBool()) { |
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
680 | ui.messageLog->scrollToBottom(); |
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
681 | } |
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
682 | }); |
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
683 | QObject::connect( |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
684 | toolWidgets.circleToolOptions, |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
685 | &CircleToolOptionsWidget::optionsChanged, |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
686 | [&ui, &documents](const CircleToolOptions& options) { |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
687 | if (ModelData* data = currentModelData(&ui, &documents)) { |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
688 | data->tools->setCircleToolOptions(options); |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
689 | } |
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
690 | }); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
691 | mainWindow.setWindowTitle(title()); |
240
414d392b9ae6
some improvements to dock widget handling
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
237
diff
changeset
|
692 | mainWindow.tabifyDockWidget(ui.messageLogDock, ui.toolOptionsDock); |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
693 | mainWindow.restoreGeometry(setting<Setting::MainWindowGeometry>()); |
240
414d392b9ae6
some improvements to dock widget handling
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
237
diff
changeset
|
694 | mainWindow.restoreState(setting<Setting::MainWindowState>()); |
414d392b9ae6
some improvements to dock widget handling
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
237
diff
changeset
|
695 | // If a dock is made floating and the app is closed, the dock becomes invisible |
241 | 696 | // after the restoreState call. So we make them visible again here. |
240
414d392b9ae6
some improvements to dock widget handling
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
237
diff
changeset
|
697 | for (QDockWidget* dock : mainWindow.findChildren<QDockWidget*>()) { |
414d392b9ae6
some improvements to dock widget handling
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
237
diff
changeset
|
698 | dock->setVisible(true); |
414d392b9ae6
some improvements to dock widget handling
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
237
diff
changeset
|
699 | } |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
700 | restoreSettings(); |
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
701 | updateRenderPreferences(&ui, &renderPreferences, &documents); |
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
702 | mainWindow.show(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
703 | const int result = app.exec(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
704 | saveSettings(); |
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
705 | return result; |
0 | 706 | } |