src/lddocument.cpp

Fri, 22 Jun 2018 15:03:50 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Fri, 22 Jun 2018 15:03:50 +0300
changeset 1424
737df8e904af
parent 1400
ae83213bdd63
child 1440
265b2e95a8e8
permissions
-rw-r--r--

removed a duplicate member

655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 * LDForge: LDraw parts authoring CAD
1326
69a90bd2dba2 Happy new year 2018
Teemu Piippo <teemu@hecknology.net>
parents: 1318
diff changeset
3 * Copyright (C) 2013 - 2018 Teemu Piippo
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4 *
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 * This program is free software: you can redistribute it and/or modify
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 * it under the terms of the GNU General Public License as published by
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 * the Free Software Foundation, either version 3 of the License, or
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8 * (at your option) any later version.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9 *
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful,
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 * GNU General Public License for more details.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
14 *
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17 */
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 #include <QMessageBox>
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 #include <QFileDialog>
1145
02264bf0108d Renamed ldDocument.cpp → lddocument.cpp
Teemu Piippo <teemu@hecknology.net>
parents: 1135
diff changeset
21 #include "lddocument.h"
998
5be0ce31ce60 Now compiles again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 997
diff changeset
22 #include "documentmanager.h"
1295
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
23 #include "parser.h"
1318
568fcfc6da71 removed unnecessary files and includes
Teemu Piippo <teemu@hecknology.net>
parents: 1317
diff changeset
24 #include "editHistory.h"
568fcfc6da71 removed unnecessary files and includes
Teemu Piippo <teemu@hecknology.net>
parents: 1317
diff changeset
25 #include "glShared.h"
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
26
997
1b49f34e533d Commit work done on document manager. Happy 3rd birthday LDForge!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 994
diff changeset
27 LDDocument::LDDocument (DocumentManager* parent) :
1079
67c6e5d32e68 More rework on model stuff, removals of LDSpawn calls. Most importantly, the LDraw code parsing function was moved to Model.
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
28 Model {parent},
978
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 971
diff changeset
29 HierarchyElement (parent),
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
30 m_history (new EditHistory (this)),
1015
92c6ec099075 Added triangle count to viewport, added compile-time line length check
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1014
diff changeset
31 m_savePosition(-1),
1424
737df8e904af removed a duplicate member
Teemu Piippo <teemu@hecknology.net>
parents: 1400
diff changeset
32 m_tabIndex(-1)
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
33 {
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
34 connect(
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
35 this,
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
36 SIGNAL(objectAdded(QModelIndex)),
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
37 this,
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
38 SLOT(handleNewObject(QModelIndex))
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
39 );
1272
bf0ac547b934 migrated model swapping to mvc and made Model::swapObjects to emit dataChanged signals as a temporary solution
Santeri Piippo
parents: 1269
diff changeset
40
bf0ac547b934 migrated model swapping to mvc and made Model::swapObjects to emit dataChanged signals as a temporary solution
Santeri Piippo
parents: 1269
diff changeset
41 connect(
bf0ac547b934 migrated model swapping to mvc and made Model::swapObjects to emit dataChanged signals as a temporary solution
Santeri Piippo
parents: 1269
diff changeset
42 this,
1273
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1272
diff changeset
43 &Model::rowsMoved,
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1272
diff changeset
44 [&](const QModelIndex&, int start, int end, const QModelIndex&, int row)
1272
bf0ac547b934 migrated model swapping to mvc and made Model::swapObjects to emit dataChanged signals as a temporary solution
Santeri Piippo
parents: 1269
diff changeset
45 {
1273
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1272
diff changeset
46 history()->add<MoveHistoryEntry>(start, end, row);
1272
bf0ac547b934 migrated model swapping to mvc and made Model::swapObjects to emit dataChanged signals as a temporary solution
Santeri Piippo
parents: 1269
diff changeset
47 }
bf0ac547b934 migrated model swapping to mvc and made Model::swapObjects to emit dataChanged signals as a temporary solution
Santeri Piippo
parents: 1269
diff changeset
48 );
1280
5c30efc9032b fixed: LDDocument created one removal connection to the model for each object added, so removing an object from a model of 9 objects added 9 deletion entries to history
Santeri Piippo
parents: 1279
diff changeset
49 connect(
5c30efc9032b fixed: LDDocument created one removal connection to the model for each object added, so removing an object from a model of 9 objects added 9 deletion entries to history
Santeri Piippo
parents: 1279
diff changeset
50 this,
5c30efc9032b fixed: LDDocument created one removal connection to the model for each object added, so removing an object from a model of 9 objects added 9 deletion entries to history
Santeri Piippo
parents: 1279
diff changeset
51 SIGNAL(aboutToRemoveObject(QModelIndex)),
5c30efc9032b fixed: LDDocument created one removal connection to the model for each object added, so removing an object from a model of 9 objects added 9 deletion entries to history
Santeri Piippo
parents: 1279
diff changeset
52 this,
5c30efc9032b fixed: LDDocument created one removal connection to the model for each object added, so removing an object from a model of 9 objects added 9 deletion entries to history
Santeri Piippo
parents: 1279
diff changeset
53 SLOT(handleImminentObjectRemoval(QModelIndex)),
5c30efc9032b fixed: LDDocument created one removal connection to the model for each object added, so removing an object from a model of 9 objects added 9 deletion entries to history
Santeri Piippo
parents: 1279
diff changeset
54 Qt::DirectConnection
5c30efc9032b fixed: LDDocument created one removal connection to the model for each object added, so removing an object from a model of 9 objects added 9 deletion entries to history
Santeri Piippo
parents: 1279
diff changeset
55 );
1377
0b9a946002be fixed changing a document not updating its references in other files
Teemu Piippo <teemu@hecknology.net>
parents: 1340
diff changeset
56 connect(
0b9a946002be fixed changing a document not updating its references in other files
Teemu Piippo <teemu@hecknology.net>
parents: 1340
diff changeset
57 this,
0b9a946002be fixed changing a document not updating its references in other files
Teemu Piippo <teemu@hecknology.net>
parents: 1340
diff changeset
58 &Model::modelChanged,
0b9a946002be fixed changing a document not updating its references in other files
Teemu Piippo <teemu@hecknology.net>
parents: 1340
diff changeset
59 [&]()
0b9a946002be fixed changing a document not updating its references in other files
Teemu Piippo <teemu@hecknology.net>
parents: 1340
diff changeset
60 {
0b9a946002be fixed changing a document not updating its references in other files
Teemu Piippo <teemu@hecknology.net>
parents: 1340
diff changeset
61 this->m_needsRecache = true;
0b9a946002be fixed changing a document not updating its references in other files
Teemu Piippo <teemu@hecknology.net>
parents: 1340
diff changeset
62 }
0b9a946002be fixed changing a document not updating its references in other files
Teemu Piippo <teemu@hecknology.net>
parents: 1340
diff changeset
63 );
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
64 }
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
65
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
66 LDDocument::~LDDocument()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
67 {
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
68 m_isBeingDestroyed = true;
784
f82ab4d3c7b4 - made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 782
diff changeset
69 delete m_history;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
70 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
71
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
72 QString LDDocument::name() const
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
73 {
1308
dcc8c02530c2 Begin rework to add support for multiple libraries
Teemu Piippo <teemu@hecknology.net>
parents: 1306
diff changeset
74 return this->header.name;
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
75 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
76
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
77 void LDDocument::setName (QString value)
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
78 {
1308
dcc8c02530c2 Begin rework to add support for multiple libraries
Teemu Piippo <teemu@hecknology.net>
parents: 1306
diff changeset
79 this->header.name = value;
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
80 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
81
983
05ba93066194 Refactor edit history
Teemu Piippo <crimsondusk64@gmail.com>
parents: 981
diff changeset
82 EditHistory* LDDocument::history() const
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
83 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
84 return m_history;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
85 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
86
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
87 QString LDDocument::fullPath()
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
88 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
89 return m_fullPath;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
90 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
91
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
92 void LDDocument::setFullPath (QString value)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
93 {
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
94 m_fullPath = value;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
95 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
96
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
97 int LDDocument::tabIndex() const
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
98 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
99 return m_tabIndex;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
100 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
101
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
102 void LDDocument::setTabIndex (int value)
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
103 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
104 m_tabIndex = value;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
105 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
106
1391
5fa4bf1fc781 added work done on cylinders
Teemu Piippo <teemu@hecknology.net>
parents: 1384
diff changeset
107 const QVector<LDPolygon>& LDDocument::polygonData() const
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
108 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
109 return m_polygonData;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
110 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
111
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
112 long LDDocument::savePosition() const
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
113 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
114 return m_savePosition;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
115 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
116
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
117 void LDDocument::setSavePosition (long value)
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
118 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
119 m_savePosition = value;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
120 }
784
f82ab4d3c7b4 - made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 782
diff changeset
121
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
122 QString LDDocument::defaultName() const
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
123 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
124 return m_defaultName;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
125 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
126
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
127 void LDDocument::setDefaultName (QString value)
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
128 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
129 m_defaultName = value;
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
130 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
131
1090
ed73c4f48ca4 The current document pointer may no longer be null.
Teemu Piippo <teemu@hecknology.net>
parents: 1086
diff changeset
132 void LDDocument::setFrozen(bool value)
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
133 {
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
134 m_isFrozen = value;
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
135 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
136
1090
ed73c4f48ca4 The current document pointer may no longer be null.
Teemu Piippo <teemu@hecknology.net>
parents: 1086
diff changeset
137 bool LDDocument::isFrozen() const
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
138 {
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
139 return m_isFrozen;
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
140 }
788
c9d1dad83ad0 - added an action for opening the subfiles pointed to by selected references as editable documents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 786
diff changeset
141
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
142 void LDDocument::addHistoryStep()
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
143 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
144 history()->addStep();
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
145 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
146
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
147 void LDDocument::undo()
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
148 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
149 history()->undo();
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
150 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
151
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
152 void LDDocument::redo()
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
153 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
154 history()->redo();
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
155 }
784
f82ab4d3c7b4 - made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 782
diff changeset
156
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
157 void LDDocument::clearHistory()
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
158 {
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
159 history()->clear();
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
160 }
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
161
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
162 void LDDocument::close()
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
163 {
1090
ed73c4f48ca4 The current document pointer may no longer be null.
Teemu Piippo <teemu@hecknology.net>
parents: 1086
diff changeset
164 if (not isFrozen())
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
165 {
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
166 setFrozen(true);
1424
737df8e904af removed a duplicate member
Teemu Piippo <teemu@hecknology.net>
parents: 1400
diff changeset
167 documentManager()->documentClosed(this);
784
f82ab4d3c7b4 - made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 782
diff changeset
168 }
f82ab4d3c7b4 - made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 782
diff changeset
169 }
f82ab4d3c7b4 - made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 782
diff changeset
170
f82ab4d3c7b4 - made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 782
diff changeset
171 // =============================================================================
f82ab4d3c7b4 - made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 782
diff changeset
172 //
979
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
173 // Performs safety checks. Do this before closing any files!
880d3fe9ac7c Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
174 //
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
175 bool LDDocument::isSafeToClose()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
176 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
177 setlocale (LC_ALL, "C");
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
178
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
179 // If we have unsaved changes, warn and give the option of saving.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
180 if (hasUnsavedChanges())
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
181 {
1156
c20ee66b6705 Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents: 1145
diff changeset
182 QString message = format(tr("There are unsaved changes to %1. Should it be saved?"), getDisplayName());
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
183
1156
c20ee66b6705 Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents: 1145
diff changeset
184 int button = QMessageBox::question (m_window, tr("Unsaved Changes"), message,
c20ee66b6705 Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents: 1145
diff changeset
185 (QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel), QMessageBox::Cancel);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
186
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
187 switch (button)
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
188 {
1156
c20ee66b6705 Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents: 1145
diff changeset
189 case QMessageBox::Yes:
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
190 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
191 // If we don't have a file path yet, we have to ask the user for one.
1064
4c7a353cf583 Replaced '.length()' with 'length()' where appropriate
Teemu Piippo <teemu@hecknology.net>
parents: 1063
diff changeset
192 if (name().isEmpty())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
193 {
978
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 971
diff changeset
194 QString newpath = QFileDialog::getSaveFileName (m_window, QObject::tr ("Save As"),
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 971
diff changeset
195 name(), QObject::tr ("LDraw files (*.dat *.ldr)"));
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
196
1064
4c7a353cf583 Replaced '.length()' with 'length()' where appropriate
Teemu Piippo <teemu@hecknology.net>
parents: 1063
diff changeset
197 if (newpath.isEmpty())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
198 return false;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
199
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
200 setName (newpath);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
201 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
202
662
2f1bd9112408 - use the keyword 'not' in place of the exclamation mark for operator!, this is clearer. also converted uses of '== false' to this.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 656
diff changeset
203 if (not save())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
204 {
920
147497785496 - fixed stability problems
Teemu Piippo <crimsondusk64@gmail.com>
parents: 902
diff changeset
205 message = format (QObject::tr ("Failed to save %1 (%2)\nDo you still want to close?"),
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
206 name(), strerror (errno));
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
207
1156
c20ee66b6705 Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents: 1145
diff changeset
208 if (QMessageBox::critical (m_window, tr("Save Failure"), message,
c20ee66b6705 Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents: 1145
diff changeset
209 (QMessageBox::Yes | QMessageBox::No), QMessageBox::No) == QMessageBox::No)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
210 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
211 return false;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
212 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
213 }
744
bbe0e1834065 - removed rest of the uses of <anonymous>
Santeri Piippo <crimsondusk64@gmail.com>
parents: 739
diff changeset
214 break;
bbe0e1834065 - removed rest of the uses of <anonymous>
Santeri Piippo <crimsondusk64@gmail.com>
parents: 739
diff changeset
215 }
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
216
1156
c20ee66b6705 Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents: 1145
diff changeset
217 case QMessageBox::Cancel:
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
218 return false;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
219
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
220 default:
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
221 break;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
222 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
223 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
224
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
225 return true;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
226 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
227
1306
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1305
diff changeset
228 static QString headerToString(const Model& model, const LDHeader& header)
1295
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
229 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
230 QString result;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
231
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
232 if (header.type != LDHeader::NoHeader)
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
233 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
234 QString partTypeString;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
235
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
236 for (
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
237 auto iterator = Parser::typeStrings.begin();
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
238 iterator != Parser::typeStrings.end();
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
239 ++iterator
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
240 ) {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
241 if (iterator.value() == header.type)
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
242 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
243 partTypeString += "Unofficial_" + iterator.key();
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
244 break;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
245 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
246 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
247
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
248 if (header.qualfiers & LDHeader::Physical_Color)
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
249 partTypeString += " Physical_Colour";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
250
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
251 if (header.qualfiers & LDHeader::Flexible_Section)
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
252 partTypeString += " Flexible_Section";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
253
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
254 if (header.qualfiers & LDHeader::Alias)
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
255 partTypeString += " Alias";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
256
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
257 result += "0 " + header.description + "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
258 result += "0 Name: " + header.name + "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
259 result += "0 Author: " + header.author + "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
260 result += "0 !LDRAW_ORG " + partTypeString + "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
261
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
262 switch (header.license)
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
263 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
264 case LDHeader::CaLicense:
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
265 result += "0 !LICENSE Redistributable under CCAL version 2.0 : see CAreadme.txt\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
266 break;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
267 case LDHeader::NonCaLicense:
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
268 result += "0 !LICENSE Not redistributable : see NonCAreadme.txt\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
269 break;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
270 case LDHeader::UnspecifiedLicense:
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
271 break;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
272 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
273
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
274 if (not header.help.isEmpty())
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
275 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
276 result += "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
277 for (QString line : header.help.split("\n"))
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
278 result += "0 !HELP " + line + "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
279 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
280
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
281 result += "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
282
1306
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1305
diff changeset
283 switch (model.winding())
1295
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
284 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
285 case CounterClockwise:
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
286 result += "0 BFC CERTIFY CCW\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
287 break;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
288
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
289 case Clockwise:
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
290 result += "0 BFC CERTIFY CW\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
291 break;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
292
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
293 case NoWinding:
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
294 result += "0 BFC NOCERTIFY\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
295 break;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
296 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
297
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
298 if (not header.category.isEmpty() or not header.keywords.isEmpty())
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
299 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
300 result += "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
301
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
302 if (not header.category.isEmpty())
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
303 result += "0 !CATEGORY " + header.category + "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
304
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
305 if (not header.keywords.isEmpty())
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
306 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
307 for (QString line : header.keywords.split("\n"))
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
308 result += "0 !KEYWORDS " + line + "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
309 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
310 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
311
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
312 if (not header.cmdline.isEmpty())
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
313 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
314 result += "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
315 result += "0 !CMDLINE " + header.cmdline + "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
316 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
317
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
318 if (not header.history.isEmpty())
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
319 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
320 result += "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
321
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
322 for (const LDHeader::HistoryEntry& historyEntry : header.history)
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
323 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
324 QString author = historyEntry.author;
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
325
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
326 if (not author.startsWith("{"))
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
327 author = "[" + author + "]";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
328
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
329 result += "0 !HISTORY ";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
330 result += historyEntry.date.toString(Qt::ISODate) + " ";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
331 result += author + " ";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
332 result += historyEntry.description + "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
333 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
334 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
335
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
336 result += "\r\n";
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
337 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
338
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
339 return result.toUtf8();
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
340 }
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
341
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
342 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
343 //
1135
8e0691be0b6f Removed the intXX type aliases and removed uses of intXX_t in favor of qintXX
Teemu Piippo <teemu@hecknology.net>
parents: 1123
diff changeset
344 bool LDDocument::save (QString path, qint64* sizeptr)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
345 {
1090
ed73c4f48ca4 The current document pointer may no longer be null.
Teemu Piippo <teemu@hecknology.net>
parents: 1086
diff changeset
346 if (isFrozen())
781
aa823ba3241d - when saving, prepare the data first into a buffer and then write to disk, minimizing the time needed to perform the I/O operation.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 770
diff changeset
347 return false;
aa823ba3241d - when saving, prepare the data first into a buffer and then write to disk, minimizing the time needed to perform the I/O operation.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 770
diff changeset
348
1064
4c7a353cf583 Replaced '.length()' with 'length()' where appropriate
Teemu Piippo <teemu@hecknology.net>
parents: 1063
diff changeset
349 if (path.isEmpty())
834
3e697ba996e8 - now prints the filesize upon successful save
Santeri Piippo <crimsondusk64@gmail.com>
parents: 831
diff changeset
350 path = fullPath();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
351
1295
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
352 QByteArray data;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
353
1295
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
354 if (this->header.type != LDHeader::NoHeader)
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
355 {
ac8f0297885b the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
356 header.name = LDDocument::shortenName(path);
1306
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1305
diff changeset
357 data += headerToString(*this, this->header).toUtf8();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
358 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
359
944
1a6f1997fcbe Replace casts
Teemu Piippo <crimsondusk64@gmail.com>
parents: 943
diff changeset
360 // File is open, now save the model to it. Note that LDraw requires files to have DOS line endings.
1a6f1997fcbe Replace casts
Teemu Piippo <crimsondusk64@gmail.com>
parents: 943
diff changeset
361 for (LDObject* obj : objects())
834
3e697ba996e8 - now prints the filesize upon successful save
Santeri Piippo <crimsondusk64@gmail.com>
parents: 831
diff changeset
362 {
1236
861bf8ebb8ec BFC INVERTNEXT objects are no longer individual objects
Santeri Piippo
parents: 1159
diff changeset
363 if (obj->isInverted())
861bf8ebb8ec BFC INVERTNEXT objects are no longer individual objects
Santeri Piippo
parents: 1159
diff changeset
364 data += "0 BFC INVERTNEXT\r\n";
781
aa823ba3241d - when saving, prepare the data first into a buffer and then write to disk, minimizing the time needed to perform the I/O operation.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 770
diff changeset
365
1236
861bf8ebb8ec BFC INVERTNEXT objects are no longer individual objects
Santeri Piippo
parents: 1159
diff changeset
366 data += (obj->asText() + "\r\n").toUtf8();
834
3e697ba996e8 - now prints the filesize upon successful save
Santeri Piippo <crimsondusk64@gmail.com>
parents: 831
diff changeset
367 }
3e697ba996e8 - now prints the filesize upon successful save
Santeri Piippo <crimsondusk64@gmail.com>
parents: 831
diff changeset
368
3e697ba996e8 - now prints the filesize upon successful save
Santeri Piippo <crimsondusk64@gmail.com>
parents: 831
diff changeset
369 QFile f (path);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
370
781
aa823ba3241d - when saving, prepare the data first into a buffer and then write to disk, minimizing the time needed to perform the I/O operation.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 770
diff changeset
371 if (not f.open (QIODevice::WriteOnly))
aa823ba3241d - when saving, prepare the data first into a buffer and then write to disk, minimizing the time needed to perform the I/O operation.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 770
diff changeset
372 return false;
aa823ba3241d - when saving, prepare the data first into a buffer and then write to disk, minimizing the time needed to perform the I/O operation.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 770
diff changeset
373
1236
861bf8ebb8ec BFC INVERTNEXT objects are no longer individual objects
Santeri Piippo
parents: 1159
diff changeset
374 if (sizeptr)
861bf8ebb8ec BFC INVERTNEXT objects are no longer individual objects
Santeri Piippo
parents: 1159
diff changeset
375 *sizeptr = data.size();
861bf8ebb8ec BFC INVERTNEXT objects are no longer individual objects
Santeri Piippo
parents: 1159
diff changeset
376
781
aa823ba3241d - when saving, prepare the data first into a buffer and then write to disk, minimizing the time needed to perform the I/O operation.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 770
diff changeset
377 f.write (data);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
378 f.close();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
379
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
380 // We have successfully saved, update the save position now.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
381 setSavePosition (history()->position());
834
3e697ba996e8 - now prints the filesize upon successful save
Santeri Piippo <crimsondusk64@gmail.com>
parents: 831
diff changeset
382 setFullPath (path);
3e697ba996e8 - now prints the filesize upon successful save
Santeri Piippo <crimsondusk64@gmail.com>
parents: 831
diff changeset
383 setName (shortenName (path));
978
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 971
diff changeset
384 m_window->updateDocumentListItem (this);
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 971
diff changeset
385 m_window->updateTitle();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
386 return true;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
387 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
388
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
389 void LDDocument::handleNewObject(const QModelIndex& index)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
390 {
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
391 LDObject* object = lookup(index);
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
392 history()->add<AddHistoryEntry>(index);
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
393 connect(
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
394 object,
1279
0f6a4a7cafec renamed signal
Santeri Piippo
parents: 1278
diff changeset
395 SIGNAL(modified(LDObjectState, LDObjectState)),
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
396 this,
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
397 SLOT(objectChanged(LDObjectState, LDObjectState))
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
398 );
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
399 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
400
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
401 void LDDocument::objectChanged(const LDObjectState& before, const LDObjectState& after)
1073
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
402 {
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
403 LDObject* object = qobject_cast<LDObject*>(sender());
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
404
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
405 if (object)
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
406 {
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
407 QModelIndex index = this->indexOf(object);
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
408 history()->add<EditHistoryEntry>(index, before, after);
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
409 redoVertices();
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
410 emit objectModified(object);
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
411 emit dataChanged(index, index);
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
412 }
1073
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
413 }
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
414
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
415 void LDDocument::handleImminentObjectRemoval(const QModelIndex& index)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
416 {
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
417 LDObject* object = lookup(index);
949
a9ba8ffd9534 actually added updaterevision.py, more fixing
Teemu Piippo <crimsondusk64@gmail.com>
parents: 946
diff changeset
418
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
419 if (not isFrozen() and not m_isBeingDestroyed)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
420 {
1269
ec691d9472b3 Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents: 1263
diff changeset
421 history()->add<DelHistoryEntry>(index);
1073
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
422 m_objectVertices.remove(object);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
423 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
424 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
425
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
426 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
427 //
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
428 bool LDDocument::hasUnsavedChanges() const
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
429 {
1090
ed73c4f48ca4 The current document pointer may no longer be null.
Teemu Piippo <teemu@hecknology.net>
parents: 1086
diff changeset
430 return not isFrozen() and history()->position() != savePosition();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
431 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
432
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
433 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
434 //
789
4b7306f52bb5 - String -> QString
Santeri Piippo <crimsondusk64@gmail.com>
parents: 788
diff changeset
435 QString LDDocument::getDisplayName()
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
436 {
662
2f1bd9112408 - use the keyword 'not' in place of the exclamation mark for operator!, this is clearer. also converted uses of '== false' to this.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 656
diff changeset
437 if (not name().isEmpty())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
438 return name();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
439
662
2f1bd9112408 - use the keyword 'not' in place of the exclamation mark for operator!, this is clearer. also converted uses of '== false' to this.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 656
diff changeset
440 if (not defaultName().isEmpty())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
441 return "[" + defaultName() + "]";
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
442
920
147497785496 - fixed stability problems
Teemu Piippo <crimsondusk64@gmail.com>
parents: 902
diff changeset
443 return QObject::tr ("untitled");
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
444 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
445
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
446 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
447 //
719
f2cc5964f52d - sped up known vertex information gathering by an order of magnitude
Santeri Piippo <crimsondusk64@gmail.com>
parents: 717
diff changeset
448 void LDDocument::initializeCachedData()
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
449 {
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
450 if (m_needsRecache)
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
451 {
1384
4c134708be05 some fixes
Teemu Piippo <teemu@hecknology.net>
parents: 1383
diff changeset
452 this->m_polygonData.clear();
1079
67c6e5d32e68 More rework on model stuff, removals of LDSpawn calls. Most importantly, the LDraw code parsing function was moved to Model.
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
453 Model model {m_documents};
1377
0b9a946002be fixed changing a document not updating its references in other files
Teemu Piippo <teemu@hecknology.net>
parents: 1340
diff changeset
454 this->inlineContents(model, true, true);
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
455
1073
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
456 for (LDObject* obj : model.objects())
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
457 {
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1118
diff changeset
458 if (obj->type() == LDObjectType::SubfileReference)
867
557cb07dbe57 - now tries to download missing files off ldraw.org
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
459 {
557cb07dbe57 - now tries to download missing files off ldraw.org
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
460 print ("Warning: unable to inline %1 into %2",
1263
0256edecda54 LDSubfileReference now contains the name of the subfile and not a pointer anymore. Some methods now require a DocumentManager* for context on resolving the name.
Santeri Piippo
parents: 1262
diff changeset
461 static_cast<LDSubfileReference*> (obj)->referenceName(),
867
557cb07dbe57 - now tries to download missing files off ldraw.org
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
462 getDisplayName());
557cb07dbe57 - now tries to download missing files off ldraw.org
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
463 continue;
557cb07dbe57 - now tries to download missing files off ldraw.org
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
464 }
557cb07dbe57 - now tries to download missing files off ldraw.org
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
465
1400
ae83213bdd63 refactored LDPolygon
Teemu Piippo <teemu@hecknology.net>
parents: 1394
diff changeset
466 LDPolygon data = obj->getPolygon();
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
467
1400
ae83213bdd63 refactored LDPolygon
Teemu Piippo <teemu@hecknology.net>
parents: 1394
diff changeset
468 if (data.isValid())
ae83213bdd63 refactored LDPolygon
Teemu Piippo <teemu@hecknology.net>
parents: 1394
diff changeset
469 m_polygonData << data;
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
470 }
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
471
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
472 m_needsRecache = false;
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
473 }
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
474
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
475 if (m_verticesOutdated)
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
476 {
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 857
diff changeset
477 m_objectVertices.clear();
1079
67c6e5d32e68 More rework on model stuff, removals of LDSpawn calls. Most importantly, the LDraw code parsing function was moved to Model.
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
478 Model model {m_documents};
1073
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
479 inlineContents(model, true, false);
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
480
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
481 for (LDObject* object : model)
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
482 {
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
483 auto iterator = m_objectVertices.find (object);
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
484
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
485 if (iterator == m_objectVertices.end())
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
486 iterator = m_objectVertices.insert (object, QSet<Vertex>());
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
487 else
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
488 iterator->clear();
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
489
1263
0256edecda54 LDSubfileReference now contains the name of the subfile and not a pointer anymore. Some methods now require a DocumentManager* for context on resolving the name.
Santeri Piippo
parents: 1262
diff changeset
490 object->getVertices(documentManager(), *iterator);
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
491 }
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
492
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
493 m_vertices.clear();
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
494
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
495 for (const QSet<Vertex>& vertices : m_objectVertices)
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
496 m_vertices.unite(vertices);
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
497
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
498 m_verticesOutdated = false;
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
499 }
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
500 }
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
501
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
502 // =============================================================================
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
503 //
1391
5fa4bf1fc781 added work done on cylinders
Teemu Piippo <teemu@hecknology.net>
parents: 1384
diff changeset
504 QVector<LDPolygon> LDDocument::inlinePolygons()
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
505 {
719
f2cc5964f52d - sped up known vertex information gathering by an order of magnitude
Santeri Piippo <crimsondusk64@gmail.com>
parents: 717
diff changeset
506 initializeCachedData();
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
507 return polygonData();
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
508 }
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
509
1288
d1e45f90654b Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents: 1280
diff changeset
510 /*
d1e45f90654b Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents: 1280
diff changeset
511 * Inlines this document into the given model
d1e45f90654b Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents: 1280
diff changeset
512 */
1073
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
513 void LDDocument::inlineContents(Model& model, bool deep, bool renderinline)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
514 {
1298
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
515 // Protect against circular references by not inling if called by recursion again.
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
516 if (not m_isInlining)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
517 {
1298
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
518 m_isInlining = true;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
519
1298
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
520 // First ask the manager to deal with this inline (this takes logoed studs into account)
1424
737df8e904af removed a duplicate member
Teemu Piippo <teemu@hecknology.net>
parents: 1400
diff changeset
521 if (not documentManager()->preInline(this, model, deep, renderinline))
1298
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
522 {
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
523 for (LDObject* object : objects())
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
524 {
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
525 // Skip those without effect on the model meaning
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
526 if (object->isScemantic())
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
527 {
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
528 // Got another sub-file reference, recurse and inline it too if we're deep-inlining.
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
529 // If not, just add it into the objects normally.
1394
8d9d0532b3df fixed cylinder rendering
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
530 if (deep and object->isRasterizable())
1298
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
531 {
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
532 LDSubfileReference* reference = static_cast<LDSubfileReference*>(object);
1391
5fa4bf1fc781 added work done on cylinders
Teemu Piippo <teemu@hecknology.net>
parents: 1384
diff changeset
533 reference->rasterize(
1305
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1298
diff changeset
534 documentManager(),
1306
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1305
diff changeset
535 this->winding(),
1305
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1298
diff changeset
536 model,
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1298
diff changeset
537 deep,
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1298
diff changeset
538 renderinline
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1298
diff changeset
539 );
1298
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
540 }
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
541 else
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
542 {
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
543 model.insertCopy(model.size(), object);
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
544 }
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
545 }
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
546 }
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
547 }
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
548
dbc8bb2a4d84 fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents: 1295
diff changeset
549 m_isInlining = false;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
550 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
551 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
552
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
553 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
554 //
1329
025578d6e491 rewrote LDDocument::shortenName using Qt stuff
Teemu Piippo <teemu@hecknology.net>
parents: 1326
diff changeset
555 QString LDDocument::shortenName(const QFileInfo& path) // [static]
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
556 {
1329
025578d6e491 rewrote LDDocument::shortenName using Qt stuff
Teemu Piippo <teemu@hecknology.net>
parents: 1326
diff changeset
557 QString shortname = path.fileName();
025578d6e491 rewrote LDDocument::shortenName using Qt stuff
Teemu Piippo <teemu@hecknology.net>
parents: 1326
diff changeset
558 QString topdirname = QFileInfo {path.absoluteFilePath()}.dir().dirName();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
559
1329
025578d6e491 rewrote LDDocument::shortenName using Qt stuff
Teemu Piippo <teemu@hecknology.net>
parents: 1326
diff changeset
560 if (isOneOf(topdirname, "s", "48", "8"))
025578d6e491 rewrote LDDocument::shortenName using Qt stuff
Teemu Piippo <teemu@hecknology.net>
parents: 1326
diff changeset
561 return topdirname + "\\" + shortname;
025578d6e491 rewrote LDDocument::shortenName using Qt stuff
Teemu Piippo <teemu@hecknology.net>
parents: 1326
diff changeset
562 else
025578d6e491 rewrote LDDocument::shortenName using Qt stuff
Teemu Piippo <teemu@hecknology.net>
parents: 1326
diff changeset
563 return shortname;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
564 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
565
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
566 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
567 //
1031
55c0d3beea0d removed removeDuplicates in favor of QSet, and the unused ObjectList class
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1017
diff changeset
568 const QSet<Vertex>& LDDocument::inlineVertices()
719
f2cc5964f52d - sped up known vertex information gathering by an order of magnitude
Santeri Piippo <crimsondusk64@gmail.com>
parents: 717
diff changeset
569 {
f2cc5964f52d - sped up known vertex information gathering by an order of magnitude
Santeri Piippo <crimsondusk64@gmail.com>
parents: 717
diff changeset
570 initializeCachedData();
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 857
diff changeset
571 return m_vertices;
719
f2cc5964f52d - sped up known vertex information gathering by an order of magnitude
Santeri Piippo <crimsondusk64@gmail.com>
parents: 717
diff changeset
572 }
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
573
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
574 void LDDocument::redoVertices()
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
575 {
1102
c73f9d2e8b85 Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
Teemu Piippo <teemu@hecknology.net>
parents: 1101
diff changeset
576 m_verticesOutdated = true;
835
268413885cb1 - reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents: 834
diff changeset
577 }
1340
ea1b3ea9a3ca more work on 8-primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1329
diff changeset
578
ea1b3ea9a3ca more work on 8-primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1329
diff changeset
579 decltype(LDHeader::license) LDHeader::defaultLicense()
ea1b3ea9a3ca more work on 8-primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1329
diff changeset
580 {
ea1b3ea9a3ca more work on 8-primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1329
diff changeset
581 if (config::useCaLicense())
ea1b3ea9a3ca more work on 8-primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1329
diff changeset
582 return LDHeader::CaLicense;
ea1b3ea9a3ca more work on 8-primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1329
diff changeset
583 else
ea1b3ea9a3ca more work on 8-primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1329
diff changeset
584 return LDHeader::UnspecifiedLicense;
ea1b3ea9a3ca more work on 8-primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1329
diff changeset
585 }

mercurial