src/mainwindow.cpp

Wed, 25 May 2022 17:47:06 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Wed, 25 May 2022 17:47:06 +0300
changeset 194
be056e87c8ca
parent 191
d355d4c52d51
child 200
ca23936b455b
permissions
-rw-r--r--

simplify further

24
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
1 /*
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
2 * LDForge: LDraw parts authoring CAD
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
3 * Copyright (C) 2013 - 2020 Teemu Piippo
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
4 *
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
5 * This program is free software: you can redistribute it and/or modify
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
6 * it under the terms of the GNU General Public License as published by
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
7 * the Free Software Foundation, either version 3 of the License, or
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
8 * (at your option) any later version.
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
9 *
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
10 * This program is distributed in the hope that it will be useful,
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
13 * GNU General Public License for more details.
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
14 *
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
15 * You should have received a copy of the GNU General Public License
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
17 */
1a0faaaceb84 added license
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
18
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
19 #include <QLabel>
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
20 #include <QVBoxLayout>
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
21 #include <QCloseEvent>
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
22 #include <QFileDialog>
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
23 #include <QMessageBox>
0
f9f4d4d6f162 initial commit
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
24 #include "mainwindow.h"
f9f4d4d6f162 initial commit
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
25 #include "ui_mainwindow.h"
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
26 #include "settingseditor/settingseditor.h"
1
51d14b0c68c0 add version
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
27 #include "version.h"
8
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
28 #include "document.h"
16
Teemu Piippo <teemu@hecknology.net>
parents: 12
diff changeset
29 #include "uiutilities.h"
94
164f53fb5921 added a color select dialog
Teemu Piippo <teemu@hecknology.net>
parents: 79
diff changeset
30 #include "widgets/colorselectdialog.h"
169
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
31 #include "modeleditor.h"
0
f9f4d4d6f162 initial commit
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
32
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
33 template<typename BaseType, typename MemberType, typename DataType>
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
34 struct MemberData
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
35 {
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
36 std::size_t member;
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
37 DataType payload;
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
38 constexpr MemberType memberInstance(BaseType* instance) const
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
39 {
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
40 return *reinterpret_cast<MemberType*>(reinterpret_cast<char*>(instance) + this->member);
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
41 }
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
42 };
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
43
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
44 static constexpr MemberData<Ui_MainWindow, QAction*, gl::RenderStyle> renderStyleButtons[] = {
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
45 { offsetof(Ui_MainWindow, actionRenderStyleNormal), gl::RenderStyle::Normal },
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
46 { offsetof(Ui_MainWindow, actionRenderStyleBfc), gl::RenderStyle::BfcRedGreen },
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
47 { offsetof(Ui_MainWindow, actionRenderStyleRandom), gl::RenderStyle::RandomColors },
79
5fe2dd4e161a added a render style for pick scene
Teemu Piippo <teemu@hecknology.net>
parents: 48
diff changeset
48 { offsetof(Ui_MainWindow, actionRenderStylePickScene), gl::RenderStyle::PickScene },
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
49 };
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
50
41
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
51 class A : public QSettings
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
52 {
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
53 using QSettings::QSettings;
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
54 };
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
55
0
f9f4d4d6f162 initial commit
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
56 MainWindow::MainWindow(QWidget *parent) :
3
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
57 QMainWindow{parent},
5
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
58 ui{std::make_unique<Ui_MainWindow>()},
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
59 documents{this},
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
60 settings{},
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
61 libraries{this}
0
f9f4d4d6f162 initial commit
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
62 {
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
63 this->ui->setupUi(this);
16
Teemu Piippo <teemu@hecknology.net>
parents: 12
diff changeset
64 defaultKeyboardShortcuts = uiutilities::makeKeySequenceMap(uiutilities::collectActions(this));
5
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
65 connect(ui->actionNew, &QAction::triggered, this, &MainWindow::newModel);
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
66 connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::openModel);
3
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
67 connect(ui->actionQuit, &QAction::triggered, this, &QMainWindow::close);
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
68 connect(ui->actionSettingsEditor, &QAction::triggered, this, &MainWindow::runSettingsEditor);
128
7c834fe36b25 Moved automatic grid adjusting into a new action
Teemu Piippo <teemu@hecknology.net>
parents: 125
diff changeset
69 connect(ui->actionAdjustGridToView, &QAction::triggered, [&]()
7c834fe36b25 Moved automatic grid adjusting into a new action
Teemu Piippo <teemu@hecknology.net>
parents: 125
diff changeset
70 {
7c834fe36b25 Moved automatic grid adjusting into a new action
Teemu Piippo <teemu@hecknology.net>
parents: 125
diff changeset
71 if (this->currentDocument() != nullptr)
7c834fe36b25 Moved automatic grid adjusting into a new action
Teemu Piippo <teemu@hecknology.net>
parents: 125
diff changeset
72 {
191
d355d4c52d51 made editing tools not a polymorphic class tree
Teemu Piippo <teemu@hecknology.net>
parents: 183
diff changeset
73 adjustGridToView(this->currentDocument()->canvas);
128
7c834fe36b25 Moved automatic grid adjusting into a new action
Teemu Piippo <teemu@hecknology.net>
parents: 125
diff changeset
74 }
7c834fe36b25 Moved automatic grid adjusting into a new action
Teemu Piippo <teemu@hecknology.net>
parents: 125
diff changeset
75 });
141
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
76 connect(this->ui->actionSave, &QAction::triggered,
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
77 this, &MainWindow::actionSave);
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
78 connect(this->ui->actionSaveAs, &QAction::triggered,
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
79 this, &MainWindow::actionSaveAs);
160
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
80 connect(this->ui->actionClose, &QAction::triggered, this, &MainWindow::actionClose);
169
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
81 connect(this->ui->actionDelete, &QAction::triggered, this, &MainWindow::actionDelete);
183
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
82 connect(this->ui->actionInvert, &QAction::triggered, this, &MainWindow::actionInvert);
160
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
83 connect(this->ui->tabs, &QTabWidget::tabCloseRequested, this, &MainWindow::handleTabCloseButton);
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
84 for (auto data : ::renderStyleButtons)
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
85 {
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
86 QAction* action = data.memberInstance(this->ui.get());
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
87 connect(action, &QAction::triggered, [this, data]()
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
88 {
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
89 this->setRenderStyle(data.payload);
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
90 });
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
91 }
170
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
92 connect(this->ui->actionDrawAxes, &QAction::triggered, this, &MainWindow::setDrawAxes);
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
93 this->updateTitle();
40
30cb5e836736 added configurable background color
Teemu Piippo <teemu@hecknology.net>
parents: 39
diff changeset
94 this->restoreStartupSettings();
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
95 this->restoreSettings();
39
caac957e9834 Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents: 36
diff changeset
96 this->updateRenderPreferences();
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
97 this->newModel();
5
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
98 }
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
99
39
caac957e9834 Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents: 36
diff changeset
100 // MainWindow needs a destructor even if it is empty because otherwise the destructor of the
caac957e9834 Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents: 36
diff changeset
101 // std::unique_ptr is resolved in the header file, where it will complain about Ui_MainWindow
caac957e9834 Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents: 36
diff changeset
102 // being incomplete.
5
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
103 MainWindow::~MainWindow()
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
104 {
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
105 }
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
106
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
107 void MainWindow::newModel()
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
108 {
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
109 this->openModelForEditing(documents.newModel());
5
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
110 }
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
111
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
112 void MainWindow::openModel()
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
113 {
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
114 const QString path = QFileDialog::getOpenFileName(
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
115 this,
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
116 tr("Open model"),
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
117 "",
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
118 tr("LDraw models (*.ldr *.dat)"));
5
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
119 if (not path.isEmpty())
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
120 {
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
121 this->openModelFromPath(path);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
122 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
123 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
124
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
125 void MainWindow::openModelFromPath(const QString& path)
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
126 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
127 QString errorString;
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
128 QTextStream errorStream{&errorString};
148
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
129 std::optional<ModelId> modelIdOpt = this->documents.openModel(
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
130 path,
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
131 errorStream,
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
132 DocumentManager::OpenType::ManuallyOpened);
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
133 if (modelIdOpt.has_value())
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
134 {
148
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
135 const ModelId modelId = modelIdOpt.value();
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
136 this->documents.loadDependenciesForModel(modelId, path, this->libraries, errorStream);
12
fe67489523b5 added dependency loading
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
137 if (not errorString.isEmpty())
fe67489523b5 added dependency loading
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
138 {
fe67489523b5 added dependency loading
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
139 QMessageBox::warning(
fe67489523b5 added dependency loading
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
140 this,
fe67489523b5 added dependency loading
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
141 tr("Problem loading references"),
fe67489523b5 added dependency loading
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
142 errorString);
fe67489523b5 added dependency loading
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
143 }
148
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
144 this->openModelForEditing(modelId);
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
145 this->addRecentlyOpenedFile(path);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
146 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
147 else
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
148 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
149 QMessageBox::critical(
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
150 this,
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
151 tr("Problem opening file"),
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
152 utility::format(
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
153 tr("Could not open %1: %2"),
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
154 path,
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
155 errorString));
5
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
156 }
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
157 }
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
158
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
159 /**
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
160 * @brief Changes the application language to the specified language
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
161 * @param localeCode Code of the locale to translate to
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
162 */
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
163 void MainWindow::changeLanguage(QString localeCode)
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
164 {
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
165 if (not localeCode.isEmpty() and localeCode != this->currentLanguage)
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
166 {
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
167 this->currentLanguage = localeCode;
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
168 if (localeCode == "system")
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
169 {
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
170 localeCode = QLocale::system().name();
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
171 }
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
172 QLocale::setDefault({localeCode});
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
173 qApp->removeTranslator(&this->translator);
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
174 const bool loadSuccessful = this->translator.load(pathToTranslation(localeCode));
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
175 if (loadSuccessful)
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
176 {
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
177 qApp->installTranslator(&this->translator);
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
178 }
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
179 }
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
180 }
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
181
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
182 void MainWindow::addRecentlyOpenedFile(const QString& path)
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
183 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
184 this->recentlyOpenedFiles.removeAll(path);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
185 this->recentlyOpenedFiles.insert(0, path);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
186 while (this->recentlyOpenedFiles.size() > maxRecentlyOpenedFiles)
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
187 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
188 this->recentlyOpenedFiles.removeLast();
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
189 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
190 this->saveSettings();
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
191 this->updateRecentlyOpenedDocumentsMenu();
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
192 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
193
148
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
194 void MainWindow::openModelForEditing(const ModelId modelId)
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
195 {
148
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
196 Document* document = new Document{this->documents.getModelById(modelId), &this->documents, this->colorTable};
191
d355d4c52d51 made editing tools not a polymorphic class tree
Teemu Piippo <teemu@hecknology.net>
parents: 183
diff changeset
197 document->canvas->setRenderPreferences(this->renderPreferences);
47
cd6704009eb9 picking works now
Teemu Piippo <teemu@hecknology.net>
parents: 45
diff changeset
198 connect(document, &Document::newStatusText, [&](const QString& newStatusText)
cd6704009eb9 picking works now
Teemu Piippo <teemu@hecknology.net>
parents: 45
diff changeset
199 {
cd6704009eb9 picking works now
Teemu Piippo <teemu@hecknology.net>
parents: 45
diff changeset
200 this->statusBar()->showMessage(newStatusText);
cd6704009eb9 picking works now
Teemu Piippo <teemu@hecknology.net>
parents: 45
diff changeset
201 });
148
e1ced2523cad reworking
Teemu Piippo <teemu@hecknology.net>
parents: 147
diff changeset
202 const QFileInfo fileInfo{*this->documents.modelPath(modelId)};
174
3016b494685c show unnamed tabs as "<unnamed>" in the tab list
Teemu Piippo <teemu@hecknology.net>
parents: 170
diff changeset
203 QString tabName = fileInfo.baseName();
3016b494685c show unnamed tabs as "<unnamed>" in the tab list
Teemu Piippo <teemu@hecknology.net>
parents: 170
diff changeset
204 if (tabName.isEmpty())
3016b494685c show unnamed tabs as "<unnamed>" in the tab list
Teemu Piippo <teemu@hecknology.net>
parents: 170
diff changeset
205 {
3016b494685c show unnamed tabs as "<unnamed>" in the tab list
Teemu Piippo <teemu@hecknology.net>
parents: 170
diff changeset
206 tabName = tr("<unnamed>");
3016b494685c show unnamed tabs as "<unnamed>" in the tab list
Teemu Piippo <teemu@hecknology.net>
parents: 170
diff changeset
207 }
3016b494685c show unnamed tabs as "<unnamed>" in the tab list
Teemu Piippo <teemu@hecknology.net>
parents: 170
diff changeset
208 this->ui->tabs->addTab(document, tabName);
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
209 this->ui->tabs->setCurrentWidget(document);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
210 document->restoreSplitterState(this->documentSplitterState);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
211 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
212
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
213 void MainWindow::runSettingsEditor()
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
214 {
16
Teemu Piippo <teemu@hecknology.net>
parents: 12
diff changeset
215 SettingsEditor settingsEditor{&this->settings, this->defaultKeyboardShortcuts, this};
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
216 const int result = settingsEditor.exec();
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
217 if (result == QDialog::Accepted)
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
218 {
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
219 this->restoreSettings();
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
220 }
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
221 }
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
222
125
f127982d3412 Move tools under Document instead of MainWindow
Teemu Piippo <teemu@hecknology.net>
parents: 124
diff changeset
223 Document* MainWindow::currentDocument()
f127982d3412 Move tools under Document instead of MainWindow
Teemu Piippo <teemu@hecknology.net>
parents: 124
diff changeset
224 {
f127982d3412 Move tools under Document instead of MainWindow
Teemu Piippo <teemu@hecknology.net>
parents: 124
diff changeset
225 return qobject_cast<Document*>(this->ui->tabs->currentWidget());
f127982d3412 Move tools under Document instead of MainWindow
Teemu Piippo <teemu@hecknology.net>
parents: 124
diff changeset
226 }
f127982d3412 Move tools under Document instead of MainWindow
Teemu Piippo <teemu@hecknology.net>
parents: 124
diff changeset
227
178
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
228 const Document* MainWindow::currentDocument() const
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
229 {
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
230 return qobject_cast<const Document*>(this->ui->tabs->currentWidget());
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
231 }
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
232
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
233 void MainWindow::handleDocumentSplitterChange()
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
234 {
125
f127982d3412 Move tools under Document instead of MainWindow
Teemu Piippo <teemu@hecknology.net>
parents: 124
diff changeset
235 Document* currentDocument = this->currentDocument();
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
236 if (currentDocument != nullptr)
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
237 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
238 this->documentSplitterState = currentDocument->saveSplitterState();
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
239 for (int i = 0; i < this->ui->tabs->count(); i += 1)
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
240 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
241 Document* document = qobject_cast<Document*>(this->ui->tabs->widget(i));
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
242 if (document != nullptr and document != currentDocument)
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
243 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
244 document->restoreSplitterState(this->documentSplitterState);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
245 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
246 }
41
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
247 this->settings.setMainSplitterState(this->documentSplitterState);
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
248 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
249 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
250
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
251 void MainWindow::updateRecentlyOpenedDocumentsMenu()
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
252 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
253 this->ui->menuRecentFiles->clear();
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
254 for (const QString& path : this->recentlyOpenedFiles)
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
255 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
256 QAction* action = new QAction{path, this};
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
257 action->setData(path);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
258 this->ui->menuRecentFiles->addAction(action);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
259 connect(action, &QAction::triggered, this, &MainWindow::openRecentFile);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
260 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
261 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
262
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
263 void MainWindow::openRecentFile()
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
264 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
265 QAction* action = qobject_cast<QAction*>(this->sender());
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
266 if (action != nullptr)
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
267 {
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
268 const QString path = action->data().toString();
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
269 this->openModelFromPath(path);
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
270 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
271 }
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
272
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
273 void MainWindow::setRenderStyle(gl::RenderStyle renderStyle)
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
274 {
39
caac957e9834 Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents: 36
diff changeset
275 this->renderPreferences.style = renderStyle;
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
276 this->saveSettings();
39
caac957e9834 Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents: 36
diff changeset
277 this->updateRenderPreferences();
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
278 }
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
279
170
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
280 void MainWindow::setDrawAxes(bool drawAxes)
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
281 {
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
282 this->renderPreferences.drawAxes = drawAxes;
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
283 this->saveSettings();
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
284 this->updateRenderPreferences();
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
285 }
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
286
141
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
287 /**
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
288 * @brief Handles the "Save" (Ctrl+S) action
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
289 */
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
290 void MainWindow::actionSave()
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
291 {
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
292 if (this->currentDocument() != nullptr)
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
293 {
178
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
294 const std::optional<ModelId> modelId = this->findCurrentModelId();
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
295 if (modelId.has_value())
141
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
296 {
178
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
297 const QString* path = this->documents.modelPath(*modelId);
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
298 if (path == nullptr or path->isEmpty())
141
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
299 {
178
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
300 this->actionSaveAs();
141
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
301 }
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
302 else
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
303 {
178
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
304 QString error;
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
305 QTextStream errorStream{&error};
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
306 const bool succeeded = this->documents.saveModel(*modelId, errorStream);
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
307 if (not succeeded)
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
308 {
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
309 QMessageBox::critical(this, tr("Save error"), error);
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
310 }
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
311 else
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
312 {
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
313 this->addRecentlyOpenedFile(*path);
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
314 }
141
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
315 }
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
316 }
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
317 }
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
318 }
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
319
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
320 /**
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
321 * @brief Handles the "Save as…" (Ctrl+Shift+S) action
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
322 */
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
323 void MainWindow::actionSaveAs()
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
324 {
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
325 if (this->currentDocument() != nullptr)
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
326 {
178
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
327 const std::optional<ModelId> modelId = this->findCurrentModelId();
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
328 if (modelId.has_value())
141
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
329 {
178
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
330 const QString* pathPtr = this->documents.modelPath(*modelId);
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
331 QString defaultPath = (pathPtr != nullptr) ? *pathPtr : "";
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
332 const QString newPath = QFileDialog::getSaveFileName(
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
333 this,
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
334 tr("Save as…"),
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
335 QFileInfo{defaultPath}.absoluteDir().path(),
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
336 tr("LDraw files (*.ldr *dat);;All files (*)")
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
337 );
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
338 if (not newPath.isEmpty())
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
339 {
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
340 QString error;
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
341 QTextStream errorStream{&error};
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
342 this->documents.setModelPath(*modelId, newPath, this->libraries, errorStream);
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
343 this->ui->tabs->setTabText(this->ui->tabs->currentIndex(), QFileInfo{newPath}.fileName());
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
344 this->actionSave();
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
345 }
141
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
346 }
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
347 }
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
348 }
185eb297dc1e Saving works now
Teemu Piippo <teemu@hecknology.net>
parents: 128
diff changeset
349
160
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
350 /**
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
351 * @brief Handles the "Close" (Ctrl+W) action
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
352 */
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
353 void MainWindow::actionClose()
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
354 {
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
355 if (this->currentDocument() != nullptr)
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
356 {
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
357 this->closeDocument(this->currentDocument());
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
358 }
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
359 }
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
360
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
361 /**
169
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
362 * @brief Handles the "Delete" (Del) action
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
363 */
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
364 void MainWindow::actionDelete()
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
365 {
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
366 Document* document = this->currentDocument();
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
367 if (document != nullptr)
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
368 {
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
369 std::unique_ptr<ModelEditor> modelEditor = document->editModel();
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
370 QSet<ldraw::id_t> ids = document->selectedObjects(); // copy
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
371 for (const ldraw::id_t id : ids)
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
372 {
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
373 const QModelIndex index = modelEditor->model().find(id);
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
374 if (index.isValid())
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
375 {
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
376 modelEditor->remove(index.row());
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
377 }
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
378 }
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
379 }
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
380 }
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
381
6da096930534 Added the delete action
Teemu Piippo <teemu@hecknology.net>
parents: 160
diff changeset
382 /**
183
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
383 * @brief Handles the "Invert" action
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
384 */
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
385 void MainWindow::actionInvert()
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
386 {
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
387 Document* document = this->currentDocument();
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
388 if (document != nullptr)
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
389 {
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
390 // TODO: simplify
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
391 std::unique_ptr<ModelEditor> modelEditor = document->editModel();
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
392 const std::optional<ModelId> modelId = this->documents.findIdForModel(&modelEditor->model());
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
393 if (modelId.has_value())
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
394 {
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
395 ldraw::GetPolygonsContext context = {
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
396 .modelId = modelId.value(),
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
397 .documents = &this->documents,
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
398 };
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
399 for (const ldraw::id_t id : document->selectedObjects())
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
400 {
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
401 modelEditor->modifyObject(id, [&context](ldraw::Object* object)
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
402 {
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
403 object->invert(&context);
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
404 });
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
405 }
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
406 }
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
407 }
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
408 }
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
409
97b591813c8b - Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents: 178
diff changeset
410 /**
160
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
411 * @brief Removes the document at the specified tab index
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
412 * @param index
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
413 */
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
414 void MainWindow::handleTabCloseButton(int tabIndex)
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
415 {
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
416 if (tabIndex >= 0 and tabIndex < this->ui->tabs->count())
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
417 {
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
418 Document* document = qobject_cast<Document*>(this->ui->tabs->widget(tabIndex));
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
419 if (document != nullptr)
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
420 {
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
421 this->closeDocument(document);
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
422 }
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
423 }
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
424 }
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
425
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
426 /**
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
427 * @brief Closes the specified document
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
428 * @param document
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
429 */
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
430 void MainWindow::closeDocument(Document *document)
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
431 {
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
432 std::optional<ModelId> modelId = this->documents.findIdForModel(&document->getModel());
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
433 if (modelId.has_value())
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
434 {
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
435 this->documents.closeDocument(modelId.value());
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
436 delete document;
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
437 }
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
438 }
536efae7137e Add document closing
Teemu Piippo <teemu@hecknology.net>
parents: 148
diff changeset
439
178
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
440 std::optional<ModelId> MainWindow::findCurrentModelId() const
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
441 {
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
442 const Document* document = this->currentDocument();
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
443 if (document != nullptr)
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
444 {
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
445 return this->documents.findIdForModel(&document->getModel());
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
446 }
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
447 else
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
448 {
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
449 return {};
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
450 }
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
451 }
a23024fc98e0 fix saving
Teemu Piippo <teemu@hecknology.net>
parents: 174
diff changeset
452
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
453 void MainWindow::changeEvent(QEvent* event)
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
454 {
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
455 if (event != nullptr)
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
456 {
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
457 switch (event->type())
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
458 {
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
459 case QEvent::LanguageChange:
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
460 this->ui->retranslateUi(this);
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
461 break;
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
462 default:
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
463 break;
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
464 }
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
465 }
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
466 QMainWindow::changeEvent(event);
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
467 }
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
468
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
469 /**
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
470 * @brief Handles closing the main window
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
471 * @param event Event information
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
472 */
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
473 void MainWindow::closeEvent(QCloseEvent* event)
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
474 {
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
475 saveSettings();
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
476 event->accept();
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
477 }
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
478
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
479 /**
5
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
480 * @brief Updates the title of the main window so to contain the app's name
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
481 * and version as well as the open document name.
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
482 */
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
483 void MainWindow::updateTitle()
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
484 {
1
51d14b0c68c0 add version
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
485 QString title = ::appName;
51d14b0c68c0 add version
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
486 title += " ";
51d14b0c68c0 add version
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
487 title += fullVersionString();
51d14b0c68c0 add version
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
488 setWindowTitle(title);
0
f9f4d4d6f162 initial commit
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
489 }
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
490
39
caac957e9834 Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents: 36
diff changeset
491 void MainWindow::updateRenderPreferences()
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
492 {
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
493 for (int i = 0; i < this->ui->tabs->count(); i += 1)
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
494 {
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
495 Document* document = qobject_cast<Document*>(this->ui->tabs->widget(i));
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
496 if (document != nullptr)
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
497 {
191
d355d4c52d51 made editing tools not a polymorphic class tree
Teemu Piippo <teemu@hecknology.net>
parents: 183
diff changeset
498 document->canvas->setRenderPreferences(this->renderPreferences);
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
499 }
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
500 }
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
501 for (auto data : ::renderStyleButtons)
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
502 {
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
503 QAction* action = data.memberInstance(this->ui.get());
39
caac957e9834 Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents: 36
diff changeset
504 action->setChecked(this->renderPreferences.style == data.payload);
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
505 }
170
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
506 this->ui->actionDrawAxes->setChecked(this->renderPreferences.drawAxes);
36
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
507 }
bbb901b97404 added render style storage
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
508
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
509 /**
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
510 * @brief Stores the settings of the main window, storing geometry, etc
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
511 */
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
512 void MainWindow::saveSettings()
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
513 {
41
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
514 this->settings.setMainWindowGeometry(this->saveGeometry());
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
515 this->settings.setRecentFiles(this->recentlyOpenedFiles);
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
516 this->settings.setMainSplitterState(this->documentSplitterState);
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
517 this->settings.setRenderStyle(static_cast<int>(this->renderPreferences.style));
170
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
518 this->settings.setDrawAxes(this->renderPreferences.drawAxes);
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
519 this->libraries.storeToSettings(&this->settings);
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
520 }
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
521
40
30cb5e836736 added configurable background color
Teemu Piippo <teemu@hecknology.net>
parents: 39
diff changeset
522 void MainWindow::restoreStartupSettings()
30cb5e836736 added configurable background color
Teemu Piippo <teemu@hecknology.net>
parents: 39
diff changeset
523 {
41
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
524 this->restoreGeometry(this->settings.mainWindowGeometry());
40
30cb5e836736 added configurable background color
Teemu Piippo <teemu@hecknology.net>
parents: 39
diff changeset
525 }
30cb5e836736 added configurable background color
Teemu Piippo <teemu@hecknology.net>
parents: 39
diff changeset
526
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
527 /**
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
528 * @brief Restores saved settings relating to the main window
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
529 */
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
530 void MainWindow::restoreSettings()
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
531 {
41
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
532 this->recentlyOpenedFiles = this->settings.recentFiles();
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
533 this->documentSplitterState = this->settings.mainSplitterState();
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
534 this->renderPreferences.style = static_cast<gl::RenderStyle>(this->settings.renderStyle());
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
535 this->renderPreferences.mainColor = this->settings.mainColor();
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
536 this->renderPreferences.backgroundColor = this->settings.backgroundColor();
44
c6114b3af3a6 added configurable line thickness
Teemu Piippo <teemu@hecknology.net>
parents: 41
diff changeset
537 this->renderPreferences.lineThickness = this->settings.lineThickness();
45
272c84c7c87e added configurable line anti-aliasing
Teemu Piippo <teemu@hecknology.net>
parents: 44
diff changeset
538 this->renderPreferences.lineAntiAliasing = this->settings.lineAntiAliasing();
48
3c10f0e2fbe0 added selection highlighting
Teemu Piippo <teemu@hecknology.net>
parents: 47
diff changeset
539 this->renderPreferences.selectedColor = this->settings.selectedColor();
170
9b655f6fe5a1 Added a toggle for setting whether axes are drawn
Teemu Piippo <teemu@hecknology.net>
parents: 169
diff changeset
540 this->renderPreferences.drawAxes = this->settings.drawAxes();
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
541 const QString systemLocale = QLocale::system().name();
41
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
542 const QVariant defaultLocale = this->settings.locale();
0abada2a9802 added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents: 40
diff changeset
543 this->changeLanguage(defaultLocale.toString());
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
544 this->libraries.restoreFromSettings(&this->settings);
9
8b9780700b5e added saving of splitter state and recent files
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
545 this->updateRecentlyOpenedDocumentsMenu();
26
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 24
diff changeset
546 this->loadColors();
39
caac957e9834 Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents: 36
diff changeset
547 this->updateRenderPreferences();
7
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
548 }
68443f5be176 added the settings editor
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
549
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
550 QString MainWindow::pathToTranslation(const QString& localeCode)
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
551 {
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
552 QDir dir {":/locale"};
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
553 return dir.filePath(localeCode + ".qm");
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
554 }
26
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 24
diff changeset
555
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 24
diff changeset
556 void MainWindow::loadColors()
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 24
diff changeset
557 {
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 24
diff changeset
558 QTextStream errors;
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 24
diff changeset
559 this->colorTable = this->libraries.loadColorTable(errors);
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 24
diff changeset
560 }
97
d9a3b153f679 work on tools
Teemu Piippo <teemu@hecknology.net>
parents: 96
diff changeset
561
191
d355d4c52d51 made editing tools not a polymorphic class tree
Teemu Piippo <teemu@hecknology.net>
parents: 183
diff changeset
562 void MainWindow::keyReleaseEvent(QKeyEvent* /*event*/)
97
d9a3b153f679 work on tools
Teemu Piippo <teemu@hecknology.net>
parents: 96
diff changeset
563 {
191
d355d4c52d51 made editing tools not a polymorphic class tree
Teemu Piippo <teemu@hecknology.net>
parents: 183
diff changeset
564 /*
125
f127982d3412 Move tools under Document instead of MainWindow
Teemu Piippo <teemu@hecknology.net>
parents: 124
diff changeset
565 Document* document = this->currentDocument();
f127982d3412 Move tools under Document instead of MainWindow
Teemu Piippo <teemu@hecknology.net>
parents: 124
diff changeset
566 if (document != nullptr)
97
d9a3b153f679 work on tools
Teemu Piippo <teemu@hecknology.net>
parents: 96
diff changeset
567 {
125
f127982d3412 Move tools under Document instead of MainWindow
Teemu Piippo <teemu@hecknology.net>
parents: 124
diff changeset
568 document->handleKeyPress(event);
97
d9a3b153f679 work on tools
Teemu Piippo <teemu@hecknology.net>
parents: 96
diff changeset
569 }
191
d355d4c52d51 made editing tools not a polymorphic class tree
Teemu Piippo <teemu@hecknology.net>
parents: 183
diff changeset
570 */
97
d9a3b153f679 work on tools
Teemu Piippo <teemu@hecknology.net>
parents: 96
diff changeset
571 }

mercurial