src/main.cpp

Wed, 19 Apr 2023 22:51:56 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Wed, 19 Apr 2023 22:51:56 +0300
changeset 381
80bea7a6e84f
parent 376
3cef3b016330
child 383
530d23cd4e97
permissions
-rw-r--r--

Made library_role_e an enum class

201
5d201ee4a9c3 Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 200
diff changeset
1 #include <QApplication>
327
2aa15daa0216 Add copy action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 325
diff changeset
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
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
26
201
5d201ee4a9c3 Continue giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 200
diff changeset
27 static const QDir LOCALE_DIR {":/locale"};
0
f9f4d4d6f162 initial commit
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
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
719b909a7d2b Delete unused code
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 337
diff changeset
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
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 158
diff changeset
44 static void doQtRegistrations()
0
f9f4d4d6f162 initial commit
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
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
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 158
diff changeset
55 qRegisterMetaTypeStreamOperators<Library>("Library");
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 158
diff changeset
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
c5830bce1c23 Fix crashing
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 333
diff changeset
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
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 158
diff changeset
61 }
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 158
diff changeset
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
719b909a7d2b Delete unused code
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 337
diff changeset
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
2aa15daa0216 Add copy action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 325
diff changeset
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
2aa15daa0216 Add copy action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 325
diff changeset
706 }
2aa15daa0216 Add copy action
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 325
diff changeset
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
f9f4d4d6f162 initial commit
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
757 }

mercurial