Wed, 12 Apr 2023 01:53:42 +0300
Circular primitive type is now an enum class
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
1 | #include <QApplication> |
| 327 | 2 | #include <QClipboard> |
|
264
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
3 | #include <QCloseEvent> |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
4 | #include <QFileDialog> |
|
264
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
5 | #include <QMdiSubWindow> |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
6 | #include <QMessageBox> |
|
237
10a6298f636f
Add an option to log opengl messages
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
236
diff
changeset
|
7 | #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
|
8 | #include <QStackedWidget> |
|
264
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
9 | #include <QTranslator> |
|
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
10 | #include "src/gl/partrenderer.h" |
|
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
11 | #include "src/layers/axeslayer.h" |
|
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
12 | #include "src/layers/edittools.h" |
|
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
13 | #include "src/layers/gridlayer.h" |
|
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
14 | #include "src/ldrawalgorithm.h" |
|
354
91053052bb28
Readd the MainWindow class and renderstyle button handling to it
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
353
diff
changeset
|
15 | #include "src/mainwindow.h" |
|
264
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
16 | #include "src/messagelog.h" |
|
355
e81f4ad53efd
Move the about dialog to MainWindow. The hack to retrieve GL extensions is made a bit cleaner
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
354
diff
changeset
|
17 | #include "src/modelsubwindow.h" |
|
264
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
18 | #include "src/settings.h" |
|
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
19 | #include "src/settingseditor/settingseditor.h" |
|
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
20 | #include "src/ui/circletooloptionswidget.h" |
|
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
21 | #include "src/version.h" |
|
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
22 | #include "src/widgets/colorselectdialog.h" |
|
328
3ea38fd469ca
Replace item view with a text editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
327
diff
changeset
|
23 | #include "src/parser.h" |
|
331
638a7458ef5e
Add basic syntax highlighting
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
330
diff
changeset
|
24 | #include "src/ldrawsyntaxhighlighter.h" |
|
293
9f85a54ead29
Add OpenGL information to about page
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
292
diff
changeset
|
25 | #include <GL/glew.h> |
| 24 | 26 | |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
27 | static const QDir LOCALE_DIR {":/locale"}; |
| 0 | 28 | |
|
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
|
29 | 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
|
30 | { |
|
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
|
31 | 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
|
32 | 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
|
33 | 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
|
34 | 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
|
35 | 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
|
36 | 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
|
37 | std::unique_ptr<GridLayer> gridLayer; |
|
328
3ea38fd469ca
Replace item view with a text editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
327
diff
changeset
|
38 | std::unique_ptr<QTextCursor> textcursor; |
| 338 | 39 | QTextDocument* 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
|
40 | }; |
|
243
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
41 | |
|
264
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
263
diff
changeset
|
42 | #include <main.moc> |
|
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
|
43 | |
| 200 | 44 | static void doQtRegistrations() |
| 0 | 45 | { |
|
281
afed72b544f0
- Add CMake build type to about page and window title
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
279
diff
changeset
|
46 | QCoreApplication::setApplicationName(QStringLiteral(CMAKE_PROJECT_NAME)); |
|
7
68443f5be176
added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
47 | QCoreApplication::setOrganizationName("hecknology.net"); |
|
68443f5be176
added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
48 | QCoreApplication::setOrganizationDomain("hecknology.net"); |
|
237
10a6298f636f
Add an option to log opengl messages
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
236
diff
changeset
|
49 | qRegisterMetaType<Message>(); |
|
259
c27612f0eac0
- Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
251
diff
changeset
|
50 | qRegisterMetaType<Library>(); |
|
c27612f0eac0
- Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
251
diff
changeset
|
51 | qRegisterMetaType<QList<Library>>(); |
|
c27612f0eac0
- Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
251
diff
changeset
|
52 | qRegisterMetaType<QMdiArea::ViewMode>(); |
|
c27612f0eac0
- Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
251
diff
changeset
|
53 | qRegisterMetaType<gl::RenderStyle>(); |
|
c27612f0eac0
- Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
251
diff
changeset
|
54 | #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) |
| 200 | 55 | qRegisterMetaTypeStreamOperators<Library>("Library"); |
| 56 | qRegisterMetaTypeStreamOperators<Libraries>("Libraries"); | |
|
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
57 | qRegisterMetaTypeStreamOperators<gl::RenderStyle>(); |
|
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
58 | qRegisterMetaTypeStreamOperators<QMdiArea::ViewMode>(); |
| 335 | 59 | qRegisterMetaTypeStreamOperators<Qt::ToolButtonStyle>(); |
|
259
c27612f0eac0
- Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
251
diff
changeset
|
60 | #endif |
| 200 | 61 | } |
| 62 | ||
|
368
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
63 | struct ToolWidgets |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
64 | { |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
65 | CircleToolOptionsWidget* circleToolOptions; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
66 | }; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
67 | |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
68 | struct MainState |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
69 | { |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
70 | MainWindow mainWindow; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
71 | DocumentManager documents; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
72 | QString currentLanguage = "en"; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
73 | QTranslator translator{&mainWindow}; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
74 | LibrariesModel libraries{&mainWindow}; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
75 | QStringList recentlyOpenedFiles; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
76 | ColorTable colorTable; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
77 | gl::RenderPreferences renderPreferences; |
|
376
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
78 | gl::build_preferences user_gl_build_preferences; |
|
368
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
79 | MessageLog messageLog; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
80 | ToolWidgets toolWidgets{ |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
81 | .circleToolOptions = new CircleToolOptionsWidget{&mainWindow}, |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
82 | }; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
83 | }; |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
84 | |
|
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
85 | static std::optional<ModelId> openModelFromPath(MainState* state, const QString& path) |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
86 | { |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
87 | QString errorString; |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
88 | QTextStream errorStream{&errorString}; |
|
368
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
89 | const std::optional<ModelId> modelIdOpt = state->documents.openModel( |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
90 | path, |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
91 | errorStream, |
|
212
27259810da6d
Rewrite dependency loading
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
206
diff
changeset
|
92 | OpenType::ManuallyOpened); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
93 | if (modelIdOpt.has_value()) { |
|
368
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
94 | const DocumentManager::MissingDependencies missing = state->documents.loadDependenciesForAllModels(state->libraries); |
|
212
27259810da6d
Rewrite dependency loading
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
206
diff
changeset
|
95 | if (not missing.empty()) { |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
96 | QMessageBox::warning( |
|
368
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
97 | &state->mainWindow, |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
98 | QObject::tr("Problem loading references"), |
|
212
27259810da6d
Rewrite dependency loading
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
206
diff
changeset
|
99 | errorStringFromMissingDependencies(missing)); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
100 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
101 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
102 | else { |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
103 | QMessageBox::critical( |
|
368
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
104 | &state->mainWindow, |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
105 | 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
|
106 | 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
|
107 | ); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
108 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
109 | return modelIdOpt; |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
110 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
111 | |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
112 | static QString getOpenModelPath(QWidget* parent) |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
113 | { |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
114 | return QFileDialog::getOpenFileName( |
|
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("Open model"), |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
117 | "", |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
118 | QObject::tr("LDraw models (*.ldr *.dat)")); |
|
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 | |
|
278
304386ff96a4
Make editing tools disabled until a document is selected
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
274
diff
changeset
|
121 | static ModelData* findModelData(const DocumentManager* documents, ModelId modelId) |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
122 | { |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
123 | return documents->findPayload<ModelData>(modelId); |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
124 | } |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
125 | |
|
354
91053052bb28
Readd the MainWindow class and renderstyle button handling to it
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
353
diff
changeset
|
126 | static ModelSubWindow* currentModelSubWindow(MainWindow* ui) |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
127 | { |
|
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
128 | auto* w = ui->mdiArea->activeSubWindow(); |
|
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
129 | return qobject_cast<ModelSubWindow*>(w); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
130 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
131 | |
|
354
91053052bb28
Readd the MainWindow class and renderstyle button handling to it
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
353
diff
changeset
|
132 | static ModelData* currentModelData(MainWindow* ui, const DocumentManager* documents) |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
133 | { |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
134 | if (auto* const activeSubWindow = currentModelSubWindow(ui)) { |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
135 | return findModelData(documents, activeSubWindow->modelId); |
|
202
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
136 | } |
|
b05af0bab735
Replaced the tab widget with an MDI area
Teemu Piippo <teemu@hecknology.net>
parents:
201
diff
changeset
|
137 | else { |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
138 | return nullptr; |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
139 | } |
|
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 | |
|
354
91053052bb28
Readd the MainWindow class and renderstyle button handling to it
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
353
diff
changeset
|
142 | static std::optional<ModelId> findCurrentModelId(MainWindow* ui) |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
143 | { |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
144 | 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
|
145 | if (activeSubWindow != nullptr) { |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
146 | return activeSubWindow->modelId; |
|
201
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 | else { |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
149 | return {}; |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
150 | } |
|
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 | |
|
230
a1f3f7d9078b
rename LibraryManager -> LibrariesModel
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
229
diff
changeset
|
153 | static ColorTable loadColors(const LibrariesModel* libraries) |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
154 | { |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
155 | QTextStream errors; |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
156 | return libraries->loadColorTable(errors); |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
157 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
158 | |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
159 | static QString tabName(const QFileInfo& fileInfo) |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
160 | { |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
161 | QString result = fileInfo.baseName(); |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
162 | if (result.isEmpty()) { |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
163 | result = QObject::tr("<unnamed>"); |
|
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 | return result; |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
166 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
167 | |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
168 | template<typename Fn> |
|
352
59a31dd8a33a
Rename forModel -> forEachModel
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
351
diff
changeset
|
169 | static void forEachModel(const DocumentManager* documents, Fn&& fn) |
|
214
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 | forValueInMap(*documents, [&fn](const DocumentManager::ModelInfo& info) |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
172 | { |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
173 | ModelData* modelSpecificData = qobject_cast<ModelData*>(info.payload); |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
174 | if (modelSpecificData != nullptr) { |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
175 | fn(&info, modelSpecificData); |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
176 | } |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
177 | }); |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
178 | } |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
179 | |
|
376
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
180 | static void rebuild_polygons_for_all_models(MainState* state) |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
181 | { |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
182 | forEachModel(&state->documents, [](const void*, const ModelData* data){ |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
183 | if (data->canvas != nullptr) { |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
184 | data->canvas->build(); |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
185 | data->canvas->update(); |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
186 | } |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
187 | }); |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
188 | } |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
189 | |
|
375
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
190 | static void updateRenderPreferences(MainState* state) |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
191 | { |
|
375
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
192 | forEachModel(&state->documents, [state](const void*, const ModelData* data){ |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
193 | if (data->canvas != nullptr) { |
|
375
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
194 | data->canvas->setLayerEnabled(data->axesLayer.get(), state->renderPreferences.drawAxes); |
|
376
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
195 | data->canvas->update(); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
196 | } |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
197 | }); |
|
375
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
198 | state->mainWindow.setRenderStyle(state->renderPreferences.style); |
|
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
199 | state->mainWindow.actionDrawAxes->setChecked(state->renderPreferences.drawAxes); |
|
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
200 | state->mainWindow.actionWireframe->setChecked(state->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
|
201 | } |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
202 | |
|
376
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
203 | static gl::build_preferences load_gl_build_preferences_from_settings() |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
204 | { |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
205 | return gl::build_preferences{ |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
206 | .mainColor = setting<Setting::MainColor>(), |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
207 | .backgroundColor = setting<Setting::BackgroundColor>(), |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
208 | }; |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
209 | } |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
210 | |
|
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
211 | static gl::RenderPreferences loadRenderPreferences() |
|
201
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 | return gl::RenderPreferences{ |
|
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
214 | .style = setting<Setting::RenderStyle>(), |
|
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
215 | .selectedColor = setting<Setting::SelectedColor>(), |
|
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
216 | .lineThickness = setting<Setting::LineThickness>(), |
|
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
217 | .lineAntiAliasing = setting<Setting::LineAntiAliasing>(), |
|
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
217
diff
changeset
|
218 | .drawAxes = setting<Setting::DrawAxes>(), |
|
231
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
219 | .wireframe = setting<Setting::Wireframe>(), |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
220 | }; |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
221 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
222 | |
|
354
91053052bb28
Readd the MainWindow class and renderstyle button handling to it
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
353
diff
changeset
|
223 | static void initializeTools(MainWindow* ui, ToolWidgets* toolWidgets, QWidget* parent) |
|
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
224 | { |
|
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
|
225 | 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
|
226 | { |
|
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
|
227 | 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
|
228 | 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
|
229 | 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
|
230 | } 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
|
231 | { |
|
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
|
232 | .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
|
233 | .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
|
234 | .icon = {":/icons/navigate-outline.png"}, |
|
330
edb6c09cdd3c
Delete object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
329
diff
changeset
|
235 | .widget = nullptr, |
|
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
|
236 | }, |
|
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
|
237 | { |
|
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
|
238 | .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
|
239 | .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
|
240 | .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
|
241 | .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
|
242 | }, |
|
232
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
243 | { |
|
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
244 | .name = QObject::tr("Circle"), |
|
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
245 | .tooltip = QObject::tr("Draw circular primitives."), |
|
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
246 | .icon = {":/icons/linetype-circularprimitive.png"}, |
|
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
247 | .widget = toolWidgets->circleToolOptions, |
|
232
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
248 | }, |
|
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
|
249 | }; |
|
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
|
250 | 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
|
251 | 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
|
252 | 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
|
253 | action->setCheckable(true); |
|
278
304386ff96a4
Make editing tools disabled until a document is selected
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
274
diff
changeset
|
254 | action->setEnabled(false); |
|
374
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
255 | action->setData(QVariant::fromValue(static_cast<editing_mode_e>(i))); |
|
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
|
256 | 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
|
257 | 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
|
258 | 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
|
259 | 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
|
260 | 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
|
261 | 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
|
262 | } |
|
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
|
263 | ui->toolWidgetStack->addWidget(widget); |
|
232
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
264 | 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
|
265 | ui->toolWidgetStack->setCurrentIndex(i); |
|
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
231
diff
changeset
|
266 | }); |
|
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
|
267 | } |
|
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
|
268 | } |
|
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
|
269 | |
|
289
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
270 | template<class SubWindow, class... Args> |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
271 | SubWindow* createSubWindow(QMdiArea* mdiArea, Args&&... args) |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
272 | { |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
273 | // Qt seems to have a bug where the first created sub window does not render |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
274 | // properly until it is minimized and maximized again. This only happens |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
275 | // if we give the mdi area as a parent argument. As a work-around, we create |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
276 | // the sub window with parent=nullptr, and add it manually. |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
277 | // c.f. https://bugreports.qt.io/browse/QTBUG-69495 |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
278 | SubWindow* subWindow = new SubWindow{args..., nullptr}; |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
279 | mdiArea->addSubWindow(subWindow); |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
280 | return subWindow; |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
281 | } |
|
a0ddbc9a4e77
Work around a Qt bug involving the rendering behavior of the first created sub window
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
286
diff
changeset
|
282 | |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
283 | static void executeAction(QTextDocument* model, const ModelAction& action) |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
284 | { |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
285 | std::visit(overloaded{ |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
286 | [model](const AppendToModel& action){ |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
287 | QTextCursor cursor{model}; |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
288 | cursor.movePosition(QTextCursor::End); |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
289 | const QString newText = modelElementToString(action.newElement); |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
290 | // Make sure we have an empty line |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
291 | if (not model->lastBlock().text().isEmpty()) { |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
292 | cursor.insertBlock(); |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
293 | } |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
294 | cursor.insertText(newText); |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
295 | }, |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
296 | [](const DeleteFromModel&){}, |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
297 | [model](const ModifyModel& action){ |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
298 | QTextBlock block = model->findBlockByLineNumber((int) action.position); |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
299 | if (block.isValid()) { |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
300 | QTextCursor cursor{block}; |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
301 | cursor.select(QTextCursor::LineUnderCursor); |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
302 | cursor.insertText(modelElementToString(action.newElement)); |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
303 | } |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
304 | //model->assignAt(action.position, action.newElement); |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
305 | }, |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
306 | }, action); |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
307 | } |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
308 | |
|
356
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
309 | QFont codeEditorFontFromSettings() |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
310 | { |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
311 | QFont font{}; |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
312 | if (setting<Setting::CodeEditorUseSystemFont>()) |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
313 | { |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
314 | font.setStyleHint(QFont::Monospace); |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
315 | } |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
316 | else |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
317 | { |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
318 | font.setFamily(setting<Setting::CodeEditorFontFamily>()); |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
319 | font.setPointSize(setting<Setting::CodeEditorFontSize>()); |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
320 | } |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
321 | return font; |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
322 | } |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
323 | |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
324 | static void openModelForEditing(MainState* state, const ModelId modelId) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
325 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
326 | QTextDocument* model = state->documents.getModelById(modelId); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
327 | if (model != nullptr) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
328 | ModelData* data = new ModelData(&state->documents); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
329 | data->tools = std::make_unique<EditTools>(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
330 | data->canvas = std::make_unique<PartRenderer>(model, &state->documents, state->colorTable); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
331 | data->axesLayer = std::make_unique<AxesLayer>(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
332 | data->gridLayer = std::make_unique<GridLayer>(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
333 | data->gridLayer->setGridMatrix(DEFAULT_GRID_MATRIX); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
334 | data->tools->setGridMatrix(DEFAULT_GRID_MATRIX); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
335 | data->model = model; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
336 | data->canvas->addRenderLayer(data->axesLayer.get()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
337 | data->canvas->setLayerEnabled(data->axesLayer.get(), setting<Setting::DrawAxes>()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
338 | data->canvas->addRenderLayer(data->gridLayer.get()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
339 | data->canvas->addRenderLayer(data->tools.get()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
340 | new LDrawSyntaxHighlighter{model}; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
341 | data->textcursor = std::make_unique<QTextCursor>(model); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
342 | state->documents.setModelPayload(modelId, data); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
343 | QObject::connect( |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
344 | data->tools.get(), |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
345 | &EditTools::modelAction, |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
346 | std::bind(executeAction, model, std::placeholders::_1)); |
|
376
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
347 | data->canvas->render_preferences = &state->renderPreferences; |
|
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
348 | data->canvas->build_preferences = &state->user_gl_build_preferences; |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
349 | QObject::connect( |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
350 | data->tools.get(), |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
351 | &EditTools::newStatusText, |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
352 | [&state](const QString& newStatusText) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
353 | state->mainWindow.statusBar()->showMessage(newStatusText); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
354 | }); |
|
328
3ea38fd469ca
Replace item view with a text editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
327
diff
changeset
|
355 | #if 0 |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
356 | QObject::connect( |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
357 | data->tools.get(), |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
358 | &EditTools::select, |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
359 | [modelId, &documents](const QSet<ElementId>& indices, bool retain) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
360 | ModelData* data = findModelData(&documents, modelId); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
361 | if (data != nullptr) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
362 | if (not retain) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
363 | data->textcursor->clearSelection(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
364 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
365 | for (const ElementId id : indices) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
366 | opt<int> index = data->model->find(id); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
367 | if (index.has_value()) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
368 | const QModelIndex qindex = data->model->index(*index); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
369 | data->itemSelectionModel->select(qindex, QItemSelectionModel::Select); |
|
217
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
370 | } |
|
6d95c1a41e6e
reimplement EditTools as a render layer
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
216
diff
changeset
|
371 | } |
|
243
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
372 | } |
|
959469a7e149
Make the grid black on bright backgrounds
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
241
diff
changeset
|
373 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
374 | #endif |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
375 | #if 0 |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
376 | QObject::connect(this, &Main::settingsChanged, [modelId, this]{ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
377 | ModelData* data = findModelData(&state.documents, modelId); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
378 | if (data != nullptr) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
379 | data->gridLayer->settingsChanged(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
380 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
381 | }); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
382 | #endif |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
383 | QObject::connect(data->canvas.get(), &PartRenderer::message, &state->messageLog, &MessageLog::addMessage); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
384 | QObject::connect( |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
385 | data->tools.get(), |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
386 | &EditTools::suggestCursor, |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
387 | data->canvas.get(), |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
388 | &QWidget::setCursor); |
|
374
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
389 | data->tools->setEditMode(editing_mode_e::select); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
390 | const QFileInfo fileInfo{*state->documents.modelPath(modelId)}; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
391 | auto* const subWindow = createSubWindow<ModelSubWindow>(state->mainWindow.mdiArea, modelId); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
392 | subWindow->setMinimumSize({96, 96}); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
393 | subWindow->resize({320, 200}); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
394 | subWindow->setWidget(data->canvas.get()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
395 | subWindow->setWindowTitle(tabName(fileInfo)); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
396 | subWindow->show(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
397 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
398 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
399 | |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
400 | static void updateRecentlyOpenedDocumentsMenu(MainState* state) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
401 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
402 | state->mainWindow.rebuildRecentFilesMenu(state->recentlyOpenedFiles); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
403 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
404 | |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
405 | static void restoreSettings(MainState* state) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
406 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
407 | state->recentlyOpenedFiles = setting<Setting::RecentFiles>(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
408 | state->renderPreferences = loadRenderPreferences(); |
|
376
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
409 | state->user_gl_build_preferences = load_gl_build_preferences_from_settings(); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
410 | state->libraries.restoreFromSettings(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
411 | updateRecentlyOpenedDocumentsMenu(state); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
412 | state->colorTable = loadColors(&state->libraries); |
|
375
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
413 | updateRenderPreferences(state); |
|
376
3cef3b016330
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
375
diff
changeset
|
414 | rebuild_polygons_for_all_models(state); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
415 | state->mainWindow.mdiArea->setViewMode(setting<Setting::ViewMode>()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
416 | state->mainWindow.retranslateUi(&state->mainWindow); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
417 | state->mainWindow.setToolButtonStyle(setting<Setting::ToolButtonStyle>()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
418 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
419 | |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
420 | static void saveSettings(MainState* state) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
421 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
422 | setSetting<Setting::MainWindowGeometry>(state->mainWindow.saveGeometry()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
423 | setSetting<Setting::MainWindowState>(state->mainWindow.saveState()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
424 | setSetting<Setting::RecentFiles>(state->recentlyOpenedFiles); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
425 | setSetting<Setting::RenderStyle>(state->renderPreferences.style); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
426 | setSetting<Setting::DrawAxes>(state->renderPreferences.drawAxes); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
427 | setSetting<Setting::Wireframe>(state->renderPreferences.wireframe); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
428 | state->libraries.storeToSettings(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
429 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
430 | |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
431 | static void addRecentlyOpenedFile(MainState* state, const QString& path) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
432 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
433 | constexpr int maxRecentlyOpenedFiles = 10; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
434 | state->recentlyOpenedFiles.removeAll(path); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
435 | state->recentlyOpenedFiles.insert(0, path); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
436 | while (state->recentlyOpenedFiles.size() > maxRecentlyOpenedFiles) |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
437 | { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
438 | state->recentlyOpenedFiles.removeLast(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
439 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
440 | saveSettings(state); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
441 | updateRecentlyOpenedDocumentsMenu(state); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
442 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
443 | |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
444 | static void saveCurrentModel(MainState* state, ModelId modelId) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
445 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
446 | QString error; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
447 | QTextStream errorStream{&error}; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
448 | const bool succeeded = state->documents.saveModel(modelId, errorStream); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
449 | if (not succeeded) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
450 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
451 | QMessageBox::critical(&state->mainWindow, QObject::tr("Save error"), error); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
452 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
453 | else |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
454 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
455 | const QString* pathPtr = state->documents.modelPath(modelId); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
456 | if (pathPtr != nullptr) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
457 | addRecentlyOpenedFile(state, *pathPtr); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
458 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
459 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
460 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
461 | |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
462 | static void saveCurrentModelAs(MainState* state) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
463 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
464 | const std::optional<ModelId> modelId = findCurrentModelId(&state->mainWindow); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
465 | if (modelId.has_value()) |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
466 | { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
467 | const QString* pathPtr = state->documents.modelPath(*modelId); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
468 | QString defaultPath = (pathPtr != nullptr) ? *pathPtr : ""; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
469 | const QString newPath = QFileDialog::getSaveFileName( |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
470 | &state->mainWindow, |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
471 | QObject::tr("Save as…"), |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
472 | QFileInfo{defaultPath}.absoluteDir().path(), |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
473 | QObject::tr("LDraw files (*.ldr *dat);;All files (*)") |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
474 | ); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
475 | if (not newPath.isEmpty()) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
476 | QString error; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
477 | QTextStream errorStream{&error}; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
478 | state->documents.setModelPath(*modelId, newPath, state->libraries, errorStream); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
479 | QMdiSubWindow* const subWindow = state->mainWindow.mdiArea->currentSubWindow(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
480 | if (subWindow != nullptr) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
481 | subWindow->setWindowTitle(tabName(QFileInfo{newPath})); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
482 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
483 | saveCurrentModel(state, *modelId); |
|
350
676d0b43b577
Opening recently opened files works again now
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
338
diff
changeset
|
484 | } |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
485 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
486 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
487 | |
|
374
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
488 | static void checkEditingModeAction(MainState* state, const editing_mode_e mode) |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
489 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
490 | const bool hasDocument = currentModelData(&state->mainWindow, &state->documents) != nullptr; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
491 | for (QAction* action : state->mainWindow.editingModesToolBar->actions()) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
492 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
493 | action->setEnabled(hasDocument); |
|
374
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
494 | action->setChecked(hasDocument and action->data().value<editing_mode_e>() == mode); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
495 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
496 | } |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
497 | |
|
370
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
498 | static void update_model_grid_matrix(MainState* state) |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
499 | { |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
500 | const glm::mat4 new_grid_matrix = state->mainWindow.gridMatrix->value(); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
501 | forEachModel(&state->documents, [&](const void*, const ModelData* data) |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
502 | { |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
503 | if (data->gridLayer != nullptr and data->tools != nullptr and data->canvas != nullptr) |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
504 | { |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
505 | data->gridLayer->setGridMatrix(new_grid_matrix); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
506 | data->tools->setGridMatrix(new_grid_matrix); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
507 | data->canvas->setModelViewOrigin(new_grid_matrix[3]); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
508 | data->canvas->update(); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
509 | } |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
510 | }); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
511 | } |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
512 | |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
513 | static void set_grid_scale(MainState* state, const float factor) |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
514 | { |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
515 | const glm::mat4 original = state->mainWindow.gridMatrix->value(); |
|
371
171d3f9638a9
rename some functions
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
370
diff
changeset
|
516 | const glm::mat4 unscaled = unscale_matrix(original).unscaled; |
|
370
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
517 | const glm::mat4 rescaled = factor * unscaled; |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
518 | state->mainWindow.gridMatrix->setValue(rescaled); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
519 | update_model_grid_matrix(state); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
520 | } |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
521 | |
|
374
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
522 | static void replace_color_in_selected_code(QTextCursor* cursor, const ColorIndex color) |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
523 | { |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
524 | const auto pattern = R"(^(\s*(?:1|2|3|4|5)\s+)\d+)"; |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
525 | static const QRegularExpression regular_expression{pattern, QRegularExpression::MultilineOption}; |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
526 | QString text = cursor->selectedText(); |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
527 | // Qt has decided to be "smart" and uses strange unicode characters instead of newlines |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
528 | text.replace("\u2029", "\n"); |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
529 | text.replace(regular_expression, QStringLiteral(R"(\1%1)").arg(color.index)); |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
530 | cursor->removeSelectedText(); |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
531 | cursor->insertText(text); |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
532 | } |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
533 | |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
534 | int main(int argc, char *argv[]) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
535 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
536 | doQtRegistrations(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
537 | QApplication app{argc, argv}; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
538 | QApplication::setWindowIcon(QIcon{":/icons/appicon.png"}); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
539 | MainState state; |
|
361
c5e8b68e34f8
Move some recent file handling to MainWindow
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
359
diff
changeset
|
540 | QObject::connect( |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
541 | &state.mainWindow, |
|
361
c5e8b68e34f8
Move some recent file handling to MainWindow
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
359
diff
changeset
|
542 | &MainWindow::recentFileSelected, |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
543 | [&state](const QString& path) { |
|
368
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
544 | const auto id = openModelFromPath(&state, path); |
|
361
c5e8b68e34f8
Move some recent file handling to MainWindow
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
359
diff
changeset
|
545 | if (id.has_value()) |
|
c5e8b68e34f8
Move some recent file handling to MainWindow
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
359
diff
changeset
|
546 | { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
547 | openModelForEditing(&state, id.value()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
548 | addRecentlyOpenedFile(&state, path); |
|
361
c5e8b68e34f8
Move some recent file handling to MainWindow
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
359
diff
changeset
|
549 | } |
|
c5e8b68e34f8
Move some recent file handling to MainWindow
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
359
diff
changeset
|
550 | } |
|
c5e8b68e34f8
Move some recent file handling to MainWindow
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
359
diff
changeset
|
551 | ); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
552 | QObject::connect(state.mainWindow.actionNew, &QAction::triggered, |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
553 | [&state]{ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
554 | openModelForEditing(&state, state.documents.newModel()); |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
555 | } |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
556 | ); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
557 | QObject::connect(state.mainWindow.actionOpen, &QAction::triggered, |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
558 | [&state] |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
559 | { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
560 | const QString path = getOpenModelPath(&state.mainWindow); |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
561 | if (not path.isEmpty()) |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
562 | { |
|
368
9444de9762c3
Simplify signature of openModelFromPath
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
367
diff
changeset
|
563 | const std::optional<ModelId> id = openModelFromPath(&state, path); |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
564 | if (id.has_value()) { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
565 | openModelForEditing(&state, id.value()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
566 | addRecentlyOpenedFile(&state, path); |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
567 | } |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
568 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
569 | } |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
570 | ); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
571 | QObject::connect(state.mainWindow.actionSettingsEditor, &QAction::triggered, [ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
572 | &state, |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
573 | defaultKeyboardShortcuts = uiutilities::makeKeySequenceMap(uiutilities::collectActions(&state.mainWindow))] |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
574 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
575 | if (state.mainWindow.mdiArea->findChildren<SettingsEditor*>().isEmpty()) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
576 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
577 | auto* const settingsEditor = createSubWindow<SettingsEditor>(state.mainWindow.mdiArea, defaultKeyboardShortcuts); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
578 | QObject::connect(settingsEditor, &SettingsEditor::settingsChanged, [&]{ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
579 | restoreSettings(&state); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
580 | }); |
|
285
99af8bf63d10
Don't create more than one settings editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
284
diff
changeset
|
581 | settingsEditor->setAttribute(Qt::WA_DeleteOnClose); |
|
99af8bf63d10
Don't create more than one settings editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
284
diff
changeset
|
582 | settingsEditor->show(); |
|
99af8bf63d10
Don't create more than one settings editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
284
diff
changeset
|
583 | } |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
584 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
585 | QObject::connect(state.mainWindow.actionQuit, &QAction::triggered, &state.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
|
586 | #if 0 |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
587 | QObject::connect(ui.actionAdjustGridToView, &QAction::triggered, [&]{ |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
588 | if (ModelData* data = currentModelData(&ui, &documents)) { |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
589 | adjustGridToView(data->canvas.get()); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
590 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
591 | }); |
|
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
|
592 | #endif |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
593 | QObject::connect(state.mainWindow.actionClose, &QAction::triggered, [&state]{ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
594 | if (ModelData* data = currentModelData(&state.mainWindow, &state.documents)) { |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
595 | // TODO |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
596 | } |
|
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
597 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
598 | QObject::connect(state.mainWindow.actionSaveAs, &QAction::triggered, [&state]{ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
599 | saveCurrentModelAs(&state); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
600 | }); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
601 | QObject::connect(state.mainWindow.actionSave, &QAction::triggered, [&state] |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
602 | { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
603 | const std::optional<ModelId> modelId = findCurrentModelId(&state.mainWindow); |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
604 | if (modelId.has_value()) { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
605 | const QString* path = state.documents.modelPath(*modelId); |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
606 | if (path == nullptr or path->isEmpty()) { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
607 | saveCurrentModelAs(&state); |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
608 | } |
|
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
609 | else { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
610 | saveCurrentModel(&state, *modelId); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
611 | } |
|
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 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
614 | QObject::connect(state.mainWindow.actionDrawAxes, &QAction::triggered, [&state] |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
615 | (bool drawAxes) |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
616 | { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
617 | state.renderPreferences.drawAxes = drawAxes; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
618 | saveSettings(&state); |
|
375
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
619 | updateRenderPreferences(&state); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
620 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
621 | QObject::connect(state.mainWindow.actionWireframe, &QAction::triggered, [&state] |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
622 | (bool enabled) |
|
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
623 | { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
624 | state.renderPreferences.wireframe = enabled; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
625 | saveSettings(&state); |
|
375
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
626 | updateRenderPreferences(&state); |
|
231
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
230
diff
changeset
|
627 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
628 | QObject::connect(&state.mainWindow, &MainWindow::renderStyleSelected, [&state] |
|
354
91053052bb28
Readd the MainWindow class and renderstyle button handling to it
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
353
diff
changeset
|
629 | (gl::RenderStyle newStyle) |
|
91053052bb28
Readd the MainWindow class and renderstyle button handling to it
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
353
diff
changeset
|
630 | { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
631 | state.renderPreferences.style = newStyle; |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
632 | saveSettings(&state); |
|
375
21a5ecbe34e4
Simplify signature of updateRenderPreferences
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
374
diff
changeset
|
633 | updateRenderPreferences(&state); |
|
354
91053052bb28
Readd the MainWindow class and renderstyle button handling to it
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
353
diff
changeset
|
634 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
635 | initializeTools(&state.mainWindow, &state.toolWidgets, &state.mainWindow); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
636 | for (QAction* action : state.mainWindow.editingModesToolBar->actions()) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
637 | QObject::connect(action, &QAction::triggered, [action, &state] |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
638 | { |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
639 | if (ModelData* data = currentModelData(&state.mainWindow, &state.documents)) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
640 | { |
|
374
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
641 | const editing_mode_e mode = action->data().value<editing_mode_e>(); |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
642 | data->tools->setEditMode(mode); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
643 | checkEditingModeAction(&state, 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
|
644 | } |
|
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 | } |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
647 | QObject::connect(state.mainWindow.mdiArea, &QMdiArea::subWindowActivated, |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
648 | [&state](QMdiSubWindow* subWindow) |
|
353
c229d38f04c6
Use explicit captures in main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
352
diff
changeset
|
649 | { |
|
214
8e1fe64ce4e3
begin refactor of gl side
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
212
diff
changeset
|
650 | ModelSubWindow* modelSubWindow = qobject_cast<ModelSubWindow*>(subWindow); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
651 | if (modelSubWindow != nullptr) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
652 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
653 | if (ModelData* data = state.documents.findPayload<ModelData>(modelSubWindow->modelId)) |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
654 | { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
655 | checkEditingModeAction(&state, data->tools->currentEditingMode()); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
656 | state.mainWindow.modelEdit->setDocument(data->model); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
657 | state.mainWindow.modelEdit->setTextCursor(*data->textcursor); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
658 | state.mainWindow.modelEdit->setFont(codeEditorFontFromSettings()); |
|
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
|
659 | } |
|
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
|
660 | } |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
661 | else |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
662 | { |
|
374
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
663 | checkEditingModeAction(&state, editing_mode_e::select); |
|
282
f2dc3bbecbfa
Make settings editor a sub window instead of a dialog
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
281
diff
changeset
|
664 | } |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
665 | state.mainWindow.modelEdit->setEnabled(modelSubWindow != nullptr); |
|
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
|
666 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
667 | state.mainWindow.messageLog->setModel(&state.messageLog); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
668 | QObject::connect(&state.documents, &DocumentManager::message, &state.messageLog, &MessageLog::addMessage); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
669 | QObject::connect(&state.messageLog, &MessageLog::rowsAboutToBeInserted, [&state]{ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
670 | const auto bar = state.mainWindow.messageLog->verticalScrollBar(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
671 | state.mainWindow.messageLog->setProperty("shouldAutoScroll", bar->value() == bar->maximum()); |
|
236
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
672 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
673 | QObject::connect(&state.messageLog, &MessageLog::rowsInserted, [&state]{ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
674 | state.mainWindow.messageLog->resizeRowsToContents(); |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
675 | if (state.mainWindow.messageLog->property("shouldAutoScroll").toBool()) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
676 | state.mainWindow.messageLog->scrollToBottom(); |
|
236
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
677 | } |
|
1fa0e1de9f0a
Made message log a model
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
235
diff
changeset
|
678 | }); |
|
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
679 | QObject::connect( |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
680 | state.toolWidgets.circleToolOptions, |
|
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
681 | &CircleToolOptionsWidget::optionsChanged, |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
682 | [&state](const CircleToolOptions& options) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
683 | if (ModelData* data = currentModelData(&state.mainWindow, &state.documents)) { |
|
251
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
684 | data->tools->setCircleToolOptions(options); |
|
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
685 | } |
|
94b0a30a1886
Add object editor into main
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
686 | }); |
|
262
dc33f8a707c4
Add action to make a model unofficial (modifies the !LDRAW_ORG line)
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
687 | QObject::connect( |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
688 | state.mainWindow.actionMakeUnofficial, |
|
262
dc33f8a707c4
Add action to make a model unofficial (modifies the !LDRAW_ORG line)
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
689 | &QAction::triggered, |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
690 | [&state]{ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
691 | if (ModelData* data = currentModelData(&state.mainWindow, &state.documents)) { |
| 338 | 692 | QTextDocument* const model = data->model; |
|
262
dc33f8a707c4
Add action to make a model unofficial (modifies the !LDRAW_ORG line)
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
693 | for (const ModelAction& action : ldraw::makeUnofficial(model)) { |
|
dc33f8a707c4
Add action to make a model unofficial (modifies the !LDRAW_ORG line)
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
694 | executeAction(model, action); |
|
dc33f8a707c4
Add action to make a model unofficial (modifies the !LDRAW_ORG line)
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
695 | } |
|
dc33f8a707c4
Add action to make a model unofficial (modifies the !LDRAW_ORG line)
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
696 | } |
|
dc33f8a707c4
Add action to make a model unofficial (modifies the !LDRAW_ORG line)
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
697 | }); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
698 | QObject::connect(state.mainWindow.actionAboutQt, &QAction::triggered, &QApplication::aboutQt); |
| 327 | 699 | QObject::connect( |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
700 | state.mainWindow.modelEdit, |
|
328
3ea38fd469ca
Replace item view with a text editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
327
diff
changeset
|
701 | &QPlainTextEdit::textChanged, |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
702 | [&state]{ |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
703 | if (ModelData* data = currentModelData(&state.mainWindow, &state.documents)) { |
|
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
704 | state.documents.loadDependenciesForAllModels(state.libraries); |
|
328
3ea38fd469ca
Replace item view with a text editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
327
diff
changeset
|
705 | data->canvas->update(); |
| 327 | 706 | } |
| 707 | }); | |
|
356
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
708 | QObject::connect( |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
709 | state.mainWindow.gridMatrix, |
|
356
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
710 | &MatrixEditor::valueChanged, |
|
370
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
711 | [&state] |
|
356
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
712 | { |
|
370
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
713 | update_model_grid_matrix(&state); |
|
356
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
714 | } |
|
65b4741b302d
Made editor font configurable
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
355
diff
changeset
|
715 | ); |
|
367
df61cd3d5ab4
Also connect up the "Delete" action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
363
diff
changeset
|
716 | QObject::connect( |
|
df61cd3d5ab4
Also connect up the "Delete" action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
363
diff
changeset
|
717 | state.mainWindow.actionDelete, |
|
df61cd3d5ab4
Also connect up the "Delete" action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
363
diff
changeset
|
718 | &QAction::triggered, |
|
df61cd3d5ab4
Also connect up the "Delete" action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
363
diff
changeset
|
719 | [&state]{ |
|
df61cd3d5ab4
Also connect up the "Delete" action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
363
diff
changeset
|
720 | QTextCursor cursor = state.mainWindow.modelEdit->textCursor(); |
|
df61cd3d5ab4
Also connect up the "Delete" action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
363
diff
changeset
|
721 | cursor.removeSelectedText(); |
|
df61cd3d5ab4
Also connect up the "Delete" action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
363
diff
changeset
|
722 | } |
|
df61cd3d5ab4
Also connect up the "Delete" action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
363
diff
changeset
|
723 | ); |
|
370
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
724 | QObject::connect( |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
725 | state.mainWindow.actionGridCoarse, |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
726 | &QAction::triggered, |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
727 | [&state]{ |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
728 | set_grid_scale(&state, 5.0f); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
729 | } |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
730 | ); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
731 | QObject::connect( |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
732 | state.mainWindow.actionGridMedium, |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
733 | &QAction::triggered, |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
734 | [&state]{ |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
735 | set_grid_scale(&state, 1.0f); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
736 | } |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
737 | ); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
738 | QObject::connect( |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
739 | state.mainWindow.actionGridFine, |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
740 | &QAction::triggered, |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
741 | [&state]{ |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
742 | set_grid_scale(&state, 0.1f); |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
743 | } |
|
b2f9ded235a6
Grid scaling buttons now work
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
368
diff
changeset
|
744 | ); |
|
374
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
745 | QObject::connect( |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
746 | state.mainWindow.action_make_stuff_red, |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
747 | &QAction::triggered, |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
748 | [&state]{ |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
749 | QTextCursor cursor = state.mainWindow.modelEdit->textCursor(); |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
750 | replace_color_in_selected_code(&cursor, ColorIndex{4}); |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
751 | } |
|
75efc3ba5a56
More refactor and renaming
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
371
diff
changeset
|
752 | ); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
753 | restoreSettings(&state); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
754 | const int result = app.exec(); |
|
362
e1d646a4cbd8
Extracted the state of the program into a MainState structure, and extracted local functions of main() into static functions.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
361
diff
changeset
|
755 | saveSettings(&state); |
|
201
5d201ee4a9c3
Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents:
200
diff
changeset
|
756 | return result; |
| 0 | 757 | } |