Sun, 18 Mar 2018 12:33:29 +0200
fixed infinite recursion and integrated the subfilereference editor
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 |
1072 | 3 | * Copyright (C) 2013 - 2017 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 | #pragma once |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
20 | #include <QObject> |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
21 | #include "main.h" |
1147
a26568aa3cce
Renamed ldObject.cpp → linetypes/modelobject.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1145
diff
changeset
|
22 | #include "linetypes/modelobject.h" |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
23 | #include "editHistory.h" |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
655
diff
changeset
|
24 | #include "glShared.h" |
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
|
25 | #include "model.h" |
1159
6ad8cdcd88d9
print() is no longer a global function but is tied to HierarchyElement.
Teemu Piippo <teemu@hecknology.net>
parents:
1147
diff
changeset
|
26 | #include "hierarchyelement.h" |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
27 | |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
28 | struct LDGLData; |
997
1b49f34e533d
Commit work done on document manager. Happy 3rd birthday LDForge!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
29 | class DocumentManager; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
30 | |
1291
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
31 | enum Winding |
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
32 | { |
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
33 | NoWinding, |
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
34 | CounterClockwise, |
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
35 | Clockwise, |
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
36 | }; |
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
37 | |
1287
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
38 | struct LDHeader |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
39 | { |
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:
1287
diff
changeset
|
40 | struct HistoryEntry |
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:
1287
diff
changeset
|
41 | { |
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:
1287
diff
changeset
|
42 | QDate date; |
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:
1287
diff
changeset
|
43 | QString author; |
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:
1287
diff
changeset
|
44 | QString description; |
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:
1287
diff
changeset
|
45 | }; |
1287
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
46 | enum FileType |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
47 | { |
1291
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
48 | NoHeader, |
1287
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
49 | Part, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
50 | Subpart, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
51 | Shortcut, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
52 | Primitive, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
53 | Primitive_8, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
54 | Primitive_48, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
55 | Configuration, |
1291
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
56 | } type = NoHeader; |
1287
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
57 | enum Qualifier |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
58 | { |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
59 | Alias = 1 << 0, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
60 | Physical_Color = 1 << 1, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
61 | Flexible_Section = 1 << 2, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
62 | }; |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
63 | QFlags<Qualifier> qualfiers; |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
64 | QString description; |
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:
1287
diff
changeset
|
65 | QString name; |
1291
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
66 | QString author; |
1287
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
67 | QString category; |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
68 | QString cmdline; |
1291
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
69 | QString help; |
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
70 | QString keywords; |
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:
1287
diff
changeset
|
71 | QVector<HistoryEntry> history; |
1291
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
72 | Winding winding = NoWinding; |
1287
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
73 | enum |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
74 | { |
1295
ac8f0297885b
the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
75 | UnspecifiedLicense, |
1287
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
76 | CaLicense, |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
77 | NonCaLicense |
1295
ac8f0297885b
the header is now also saved
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
78 | } license = UnspecifiedLicense; |
1287
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
79 | }; |
f1da43b7f5c6
begin work on document loading rework
Teemu Piippo <teemu@hecknology.net>
parents:
1286
diff
changeset
|
80 | |
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:
1287
diff
changeset
|
81 | Q_DECLARE_OPERATORS_FOR_FLAGS(QFlags<LDHeader::Qualifier>) |
1291
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
82 | Winding operator^(Winding one, Winding other); |
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:
1287
diff
changeset
|
83 | |
717
fdc285e5952f
- reimplemented vertex snapping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
706
diff
changeset
|
84 | // |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
85 | // This class stores a document either as a editable file for the user or for |
784
f82ab4d3c7b4
- made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
768
diff
changeset
|
86 | // subfile caching. |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
87 | // |
784
f82ab4d3c7b4
- made LDDocument use shared pointers, this eliminates a lot of document-related crashes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
768
diff
changeset
|
88 | // A document is implicit when they are opened automatically for caching purposes |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
89 | // and are hidden from the user. User-opened files are explicit (not implicit). |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
90 | // |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
91 | // The default name is a placeholder, initially suggested name for a file. The |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
92 | // primitive generator uses this to give initial names to primitives. |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
93 | // |
1113
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1102
diff
changeset
|
94 | class LDDocument : public Model, public HierarchyElement |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
95 | { |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
96 | Q_OBJECT |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
97 | |
794 | 98 | public: |
1291
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
99 | LDHeader header; |
9c570a30c98a
Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
100 | |
997
1b49f34e533d
Commit work done on document manager. Happy 3rd birthday LDForge!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
101 | LDDocument (DocumentManager* parent); |
794 | 102 | ~LDDocument(); |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
103 | |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
104 | void addHistoryStep(); |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
105 | void clearHistory(); |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
106 | void close(); |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
107 | QString defaultName() const; |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
108 | QString fullPath(); |
794 | 109 | QString getDisplayName(); |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
110 | bool hasUnsavedChanges() const; |
983
05ba93066194
Refactor edit history
Teemu Piippo <crimsondusk64@gmail.com>
parents:
980
diff
changeset
|
111 | EditHistory* history() const; |
794 | 112 | void initializeCachedData(); |
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
|
113 | void inlineContents(Model& model, bool deep, bool renderinline); |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
114 | QList<LDPolygon> inlinePolygons(); |
1031
55c0d3beea0d
removed removeDuplicates in favor of QSet, and the unused ObjectList class
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1017
diff
changeset
|
115 | const QSet<Vertex>& inlineVertices(); |
1090
ed73c4f48ca4
The current document pointer may no longer be null.
Teemu Piippo <teemu@hecknology.net>
parents:
1086
diff
changeset
|
116 | bool isFrozen() const; |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
117 | bool isSafeToClose(); |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
118 | QString name() const; |
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
|
119 | void objectRemoved(LDObject* object, int index); |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
120 | const QList<LDPolygon>& polygonData() const; |
1017
fc1c13db9618
Renamed ConfigurationValueBag to Configuration and added a pointer to it into HierarchyElement. This helps with the fight against global variables.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1015
diff
changeset
|
121 | void recountTriangles(); |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
122 | void redo(); |
835
268413885cb1
- reimplemented vertex tracking using a method similar to what the GL compiler uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
834
diff
changeset
|
123 | void redoVertices(); |
1135
8e0691be0b6f
Removed the intXX type aliases and removed uses of intXX_t in favor of qintXX
Teemu Piippo <teemu@hecknology.net>
parents:
1118
diff
changeset
|
124 | bool save (QString path = "", qint64* sizeptr = nullptr); |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
125 | long savePosition() const; |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
126 | void setDefaultName (QString value); |
1090
ed73c4f48ca4
The current document pointer may no longer be null.
Teemu Piippo <teemu@hecknology.net>
parents:
1086
diff
changeset
|
127 | void setFrozen(bool value); |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
128 | void setFullPath (QString value); |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
129 | void setName (QString value); |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
130 | void setSavePosition (long value); |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
131 | void setTabIndex (int value); |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
132 | int tabIndex() const; |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
133 | void undo(); |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
134 | void vertexChanged (const Vertex& a, const Vertex& b); |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
135 | |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
136 | static QString shortenName (QString a); // Turns a full path into a relative path |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
137 | |
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
|
138 | protected: |
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
|
139 | LDObject* withdrawAt(int position); |
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
|
140 | |
794 | 141 | private: |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
142 | QString m_name; |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
143 | QString m_fullPath; |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
144 | QString m_defaultName; |
983
05ba93066194
Refactor edit history
Teemu Piippo <crimsondusk64@gmail.com>
parents:
980
diff
changeset
|
145 | EditHistory* m_history; |
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
|
146 | bool m_isFrozen = true; // Document may not be modified |
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
|
147 | bool m_verticesOutdated = true; |
1275 | 148 | bool m_isBeingDestroyed = false; |
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
|
149 | bool m_needsRecache = true; // The next polygon inline of this document rebuilds stored polygon data. |
1298
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1295
diff
changeset
|
150 | bool m_isInlining = false; |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
151 | long m_savePosition; |
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
152 | int m_tabIndex; |
1015
92c6ec099075
Added triangle count to viewport, added compile-time line length check
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1014
diff
changeset
|
153 | int m_triangleCount; |
979
880d3fe9ac7c
Refactor LDDocument's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
154 | QList<LDPolygon> m_polygonData; |
1031
55c0d3beea0d
removed removeDuplicates in favor of QSet, and the unused ObjectList class
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1017
diff
changeset
|
155 | QMap<LDObject*, QSet<Vertex>> m_objectVertices; |
55c0d3beea0d
removed removeDuplicates in favor of QSet, and the unused ObjectList class
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1017
diff
changeset
|
156 | QSet<Vertex> m_vertices; |
997
1b49f34e533d
Commit work done on document manager. Happy 3rd birthday LDForge!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
157 | DocumentManager* m_manager; |
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
|
158 | |
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
|
159 | template<typename T, typename... Args> |
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
|
160 | void addToHistory(Args&&... args) |
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
|
161 | { |
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
|
162 | m_history->add<T>(args...); |
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
|
163 | } |
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
|
164 | |
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
|
165 | private slots: |
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
|
166 | void objectChanged(const LDObjectState &before, const LDObjectState &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
|
167 | void handleNewObject(const QModelIndex& 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
|
168 | void handleImminentObjectRemoval(const QModelIndex& index); |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
169 | }; |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
170 | |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
171 | // Parses a string line containing an LDraw object and returns the object parsed. |
944 | 172 | LDObject* ParseLine (QString line); |