Sat, 24 Mar 2018 13:48:50 +0200
replaced remaining DIRSLASH, Dirname and Basename uses with Qt file info stuff
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
1 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
| 1326 | 3 | * Copyright (C) 2013 - 2018 Teemu Piippo |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
4 | * |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
8 | * (at your option) any later version. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
9 | * |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
13 | * GNU General Public License for more details. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
14 | * |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
17 | */ |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
18 | |
|
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:
diff
changeset
|
19 | #include "model.h" |
|
1147
a26568aa3cce
Renamed ldObject.cpp → linetypes/modelobject.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
20 | #include "linetypes/modelobject.h" |
|
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:
1077
diff
changeset
|
21 | #include "documentmanager.h" |
|
1273
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
22 | #include "generics/migrate.h" |
|
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
|
23 | #include "editHistory.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:
diff
changeset
|
24 | |
|
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:
1077
diff
changeset
|
25 | Model::Model(DocumentManager* manager) : |
|
1240
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
26 | QAbstractListModel {manager}, |
|
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:
1077
diff
changeset
|
27 | _manager {manager} {} |
|
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:
diff
changeset
|
28 | |
|
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:
diff
changeset
|
29 | Model::~Model() |
|
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:
diff
changeset
|
30 | { |
|
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:
diff
changeset
|
31 | for (int i = 0; i < countof(_objects); ++i) |
|
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:
diff
changeset
|
32 | delete _objects[i]; |
|
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:
diff
changeset
|
33 | } |
|
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:
diff
changeset
|
34 | |
|
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
|
35 | void Model::installObject(int row, LDObject* object) |
|
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:
diff
changeset
|
36 | { |
| 1279 | 37 | connect(object, SIGNAL(modified(LDObjectState, LDObjectState)), this, SLOT(recountTriangles())); |
|
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
|
38 | beginInsertRows({}, row, row); |
|
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 | _objects.insert(row, object); |
|
1278
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
40 | |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
41 | if (this->pickingColorCursor <= 0xffffff) |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
42 | { |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
43 | this->pickingColors[object] = this->pickingColorCursor; |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
44 | this->pickingColorCursor += 1; |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
45 | } |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
46 | |
| 1281 | 47 | _triangleCount += object->triangleCount(documentManager()); |
|
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
|
48 | emit objectAdded(index(row)); |
|
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
|
49 | endInsertRows(); |
|
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:
diff
changeset
|
50 | } |
|
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:
diff
changeset
|
51 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
52 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
53 | * Returns the amount of objects in this model. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
54 | */ |
|
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:
diff
changeset
|
55 | int Model::size() const |
|
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:
diff
changeset
|
56 | { |
|
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:
diff
changeset
|
57 | return _objects.size(); |
|
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:
diff
changeset
|
58 | } |
|
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:
diff
changeset
|
59 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
60 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
61 | * Returns the vector of objects in this model. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
62 | */ |
|
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:
diff
changeset
|
63 | const QVector<LDObject*>& Model::objects() const |
|
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:
diff
changeset
|
64 | { |
|
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:
diff
changeset
|
65 | return _objects; |
|
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:
diff
changeset
|
66 | } |
|
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:
diff
changeset
|
67 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
68 | /* |
|
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
|
69 | * Takes an existing object and copies it to this model, at the specified position. |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
70 | */ |
|
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
|
71 | void Model::insertCopy(int position, LDObject* object) |
|
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:
diff
changeset
|
72 | { |
|
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
|
73 | installObject(position, Serializer::clone(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
|
74 | } |
|
1261
5d2c9d36da9d
Removed LDObject::invert, inversion code moved to basic toolset
Santeri Piippo
parents:
1258
diff
changeset
|
75 | |
|
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
|
76 | void Model::insertFromArchive(int row, Serializer::Archive& archive) |
|
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
|
77 | { |
|
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
|
78 | LDObject* object = Serializer::restore(archive); |
|
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:
diff
changeset
|
79 | |
|
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
|
80 | 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
|
81 | installObject(row, object); |
|
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:
diff
changeset
|
82 | } |
|
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:
diff
changeset
|
83 | |
|
1273
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
84 | bool Model::moveRows( |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
85 | const QModelIndex&, |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
86 | int sourceRow, |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
87 | int count, |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
88 | const QModelIndex&, |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
89 | int destinationRow |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
90 | ) { |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
91 | int sourceRowLast = sourceRow + count - 1; |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
92 | |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
93 | if (range(0, 1, size() - count).contains(sourceRow) |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
94 | and range(0, 1, size()).contains(destinationRow) |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
95 | ) { |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
96 | beginMoveRows({}, sourceRow, sourceRowLast, {}, destinationRow); |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
97 | migrate(_objects, sourceRow, sourceRowLast, destinationRow); |
|
900f1dfae46b
Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents:
1272
diff
changeset
|
98 | endMoveRows(); |
|
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:
diff
changeset
|
99 | return true; |
|
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:
diff
changeset
|
100 | } |
|
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:
diff
changeset
|
101 | else |
|
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:
diff
changeset
|
102 | { |
|
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:
diff
changeset
|
103 | return false; |
|
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:
diff
changeset
|
104 | } |
|
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:
diff
changeset
|
105 | } |
|
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:
diff
changeset
|
106 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
107 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
108 | * Assigns a new object to the specified position in the model. The object that already is in the position is deleted in the process. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
109 | */ |
|
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
|
110 | bool Model::setObjectAt(int row, Serializer::Archive& archive) |
|
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:
diff
changeset
|
111 | { |
|
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
|
112 | LDObject* object = Serializer::restore(archive); |
|
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
|
113 | |
|
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
|
114 | if (object and row >= 0 and row < countof(_objects)) |
|
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:
diff
changeset
|
115 | { |
|
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
|
116 | removeAt(row); |
|
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
|
117 | insertCopy(row, 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
|
118 | return true; |
|
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:
diff
changeset
|
119 | } |
|
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:
diff
changeset
|
120 | else |
|
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:
diff
changeset
|
121 | { |
|
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
|
122 | return false; |
|
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:
diff
changeset
|
123 | } |
|
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:
diff
changeset
|
124 | } |
|
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:
diff
changeset
|
125 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
126 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
127 | * Returns the object at the specified position, or null if not found. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
128 | */ |
|
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:
diff
changeset
|
129 | LDObject* Model::getObject(int position) const |
|
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:
diff
changeset
|
130 | { |
|
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:
diff
changeset
|
131 | if (position >= 0 and position < countof(_objects)) |
|
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:
diff
changeset
|
132 | return _objects[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:
diff
changeset
|
133 | else |
|
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:
diff
changeset
|
134 | return nullptr; |
|
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:
diff
changeset
|
135 | } |
|
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:
diff
changeset
|
136 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
137 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
138 | * Removes the given object from the model. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
139 | */ |
|
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:
diff
changeset
|
140 | void Model::remove(LDObject* object) |
|
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:
diff
changeset
|
141 | { |
| 1258 | 142 | int position = indexOf(object).row(); |
| 143 | ||
|
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:
diff
changeset
|
144 | if (_objects[position] == object) |
|
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:
diff
changeset
|
145 | removeAt(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:
diff
changeset
|
146 | } |
|
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:
diff
changeset
|
147 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
148 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
149 | * Removes the object at the provided position. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
150 | */ |
|
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:
diff
changeset
|
151 | void Model::removeAt(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:
diff
changeset
|
152 | { |
|
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
|
153 | beginRemoveRows({}, position, position); |
|
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
|
154 | LDObject* object = _objects[position]; |
|
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
|
155 | emit aboutToRemoveObject(this->index(position)); |
|
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
|
156 | _objects.removeAt(position); |
|
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
|
157 | _needsTriangleRecount = true; |
|
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 | endRemoveRows(); |
|
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:
diff
changeset
|
159 | delete object; |
|
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:
diff
changeset
|
160 | } |
|
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:
diff
changeset
|
161 | |
| 1249 | 162 | void Model::removeAt(const QModelIndex& index) |
| 163 | { | |
| 164 | removeAt(index.row()); | |
| 165 | } | |
| 166 | ||
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
167 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
168 | * Replaces the given object with the contents of a model. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
169 | */ |
| 1258 | 170 | void Model::replace(LDObject* object, Model& model) |
|
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:
diff
changeset
|
171 | { |
| 1258 | 172 | QModelIndex index = this->indexOf(object); |
| 173 | ||
| 174 | if (index.isValid()) | |
|
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:
diff
changeset
|
175 | { |
|
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
|
176 | removeAt(index.row()); |
|
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:
diff
changeset
|
177 | |
|
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
|
178 | for (signed int i = countof(model.objects()) - 1; i >= 0; i -= 1) |
|
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
|
179 | insertCopy(index.row() + i, model.objects()[i]); |
|
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:
diff
changeset
|
180 | } |
|
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:
diff
changeset
|
181 | } |
|
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:
diff
changeset
|
182 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
183 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
184 | * Signals the model to recount its triangles. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
185 | */ |
|
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:
diff
changeset
|
186 | void Model::recountTriangles() |
|
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:
diff
changeset
|
187 | { |
|
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:
diff
changeset
|
188 | _needsTriangleRecount = true; |
|
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:
diff
changeset
|
189 | } |
|
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:
diff
changeset
|
190 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
191 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
192 | * Returns the triangle count in the model. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
193 | */ |
|
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:
diff
changeset
|
194 | int Model::triangleCount() const |
|
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:
diff
changeset
|
195 | { |
|
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:
diff
changeset
|
196 | if (_needsTriangleRecount) |
|
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:
diff
changeset
|
197 | { |
|
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:
diff
changeset
|
198 | _triangleCount = 0; |
|
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:
diff
changeset
|
199 | |
|
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:
diff
changeset
|
200 | for (LDObject* object : objects()) |
|
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:
1261
diff
changeset
|
201 | _triangleCount += object->triangleCount(documentManager()); |
|
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:
diff
changeset
|
202 | |
|
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:
diff
changeset
|
203 | _needsTriangleRecount = false; |
|
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:
diff
changeset
|
204 | } |
|
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:
diff
changeset
|
205 | |
|
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:
diff
changeset
|
206 | return _triangleCount; |
|
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:
diff
changeset
|
207 | } |
|
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:
diff
changeset
|
208 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
209 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
210 | * Merges the given model into this model, starting at the given position. The other model is emptied in the process. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
211 | */ |
|
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:
diff
changeset
|
212 | void Model::merge(Model& other, 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:
diff
changeset
|
213 | { |
|
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:
diff
changeset
|
214 | if (position < 0) |
|
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:
diff
changeset
|
215 | position = countof(_objects); |
|
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:
diff
changeset
|
216 | |
|
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:
diff
changeset
|
217 | // Copy the vector of objects to copy, so that we don't change the vector while iterating over it. |
|
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:
diff
changeset
|
218 | QVector<LDObject*> objectsCopy = other._objects; |
|
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:
diff
changeset
|
219 | |
|
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:
diff
changeset
|
220 | // Inform the contents of their new owner |
|
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:
diff
changeset
|
221 | for (LDObject* object : objectsCopy) |
|
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:
diff
changeset
|
222 | { |
|
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
|
223 | insertCopy(position, object); |
|
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:
diff
changeset
|
224 | position += 1; |
|
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:
diff
changeset
|
225 | } |
|
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:
diff
changeset
|
226 | |
|
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:
diff
changeset
|
227 | other.clear(); |
|
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:
diff
changeset
|
228 | } |
|
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:
diff
changeset
|
229 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
230 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
231 | * Returns the begin-iterator into this model, so that models can be used in foreach-loops. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
232 | */ |
|
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:
diff
changeset
|
233 | QVector<LDObject*>::iterator Model::begin() |
|
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:
diff
changeset
|
234 | { |
|
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:
diff
changeset
|
235 | return _objects.begin(); |
|
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:
diff
changeset
|
236 | } |
|
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:
diff
changeset
|
237 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
238 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
239 | * Returns the end-iterator into this mode, so that models can be used in foreach-loops. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
240 | */ |
|
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:
diff
changeset
|
241 | QVector<LDObject*>::iterator Model::end() |
|
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:
diff
changeset
|
242 | { |
|
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:
diff
changeset
|
243 | return _objects.end(); |
|
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:
diff
changeset
|
244 | } |
|
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:
diff
changeset
|
245 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
246 | /* |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
247 | * Removes all objects in this model. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
248 | */ |
|
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:
diff
changeset
|
249 | void Model::clear() |
|
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:
diff
changeset
|
250 | { |
|
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:
diff
changeset
|
251 | for (int i = _objects.size() - 1; i >= 0; i -= 1) |
|
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:
diff
changeset
|
252 | removeAt(i); |
|
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:
diff
changeset
|
253 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
254 | _triangleCount = 0; |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
255 | _needsTriangleRecount = false; |
|
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:
diff
changeset
|
256 | } |
|
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:
diff
changeset
|
257 | |
|
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:
diff
changeset
|
258 | /* |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
259 | * Returns whether or not this model is empty. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
260 | */ |
|
1077
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
261 | bool Model::isEmpty() const |
|
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
262 | { |
|
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
263 | return _objects.isEmpty(); |
|
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
264 | } |
|
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:
1077
diff
changeset
|
265 | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
266 | /* |
| 1258 | 267 | * Returns an index that corresponds to the given object |
| 268 | */ | |
| 269 | QModelIndex Model::indexOf(LDObject* object) const | |
| 270 | { | |
| 271 | for (int i = 0; i < this->size(); ++i) | |
| 272 | { | |
| 273 | if (this->getObject(i) == object) | |
| 274 | return index(i); | |
| 275 | } | |
| 276 | ||
| 277 | return {}; | |
| 278 | } | |
| 279 | ||
| 280 | /* | |
|
1091
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
281 | * Returns the model's associated document manager. This pointer is used to resolve subfile references. |
|
4a754362f660
Wrote documentation to the Model class.
Teemu Piippo <teemu@hecknology.net>
parents:
1087
diff
changeset
|
282 | */ |
|
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:
1077
diff
changeset
|
283 | DocumentManager* Model::documentManager() const |
|
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:
1077
diff
changeset
|
284 | { |
|
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:
1077
diff
changeset
|
285 | return _manager; |
|
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:
1077
diff
changeset
|
286 | } |
|
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:
1077
diff
changeset
|
287 | |
| 1244 | 288 | IndexGenerator Model::indices() const |
| 289 | { | |
| 290 | return {this}; | |
| 291 | } | |
| 292 | ||
|
1240
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
293 | int Model::rowCount(const QModelIndex&) const |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
294 | { |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
295 | return this->objects().size(); |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
296 | } |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
297 | |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
298 | QVariant Model::data(const QModelIndex& index, int role) const |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
299 | { |
| 1244 | 300 | if (index.row() < 0 or index.row() >= size()) |
| 301 | return {}; | |
| 302 | ||
|
1240
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
303 | LDObject* object = this->objects()[index.row()]; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
304 | |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
305 | switch (role) |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
306 | { |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
307 | case Qt::DisplayRole: |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
308 | { |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
309 | QString result = object->objectListText(); |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
310 | |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
311 | if (object->isInverted()) |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
312 | result.prepend("↺ "); |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
313 | |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
314 | return result; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
315 | } |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
316 | |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
317 | case Qt::DecorationRole: |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
318 | return MainWindow::getIcon(object->typeName()); |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
319 | |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
320 | case Qt::BackgroundColorRole: |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
321 | if (object->type() == LDObjectType::Error) |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
322 | return QColor {"#AA0000"}; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
323 | else |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
324 | return {}; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
325 | |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
326 | case Qt::ForegroundRole: |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
327 | if (object->type() == LDObjectType::Error) |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
328 | { |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
329 | return QColor {"#FFAA00"}; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
330 | } |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
331 | else if ( |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
332 | object->isColored() |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
333 | and object->color().isValid() |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
334 | and object->color() != MainColor |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
335 | and object->color() != EdgeColor |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
336 | ) { |
| 1244 | 337 | // If the object isn't in the main or edge color, draw this list |
| 338 | // entry in that color. | |
|
1240
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
339 | return object->color().faceColor(); |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
340 | } |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
341 | else |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
342 | { |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
343 | return {}; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
344 | } |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
345 | |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
346 | case Qt::FontRole: |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
347 | if (object->isHidden()) |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
348 | { |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
349 | QFont font; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
350 | font.setItalic(true); |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
351 | return font; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
352 | } |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
353 | else |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
354 | { |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
355 | return {}; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
356 | } |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
357 | |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
358 | default: |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
359 | return {}; |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
360 | } |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
361 | } |
|
cebb7ef54f41
changed Model into an MVC list model and replaced the objects list with a view into the model
Santeri Piippo
parents:
1149
diff
changeset
|
362 | |
| 1245 | 363 | /* |
| 1244 | 364 | bool Model::removeRows(int row, int count, const QModelIndex& parent) |
| 365 | { | |
| 366 | if (row >= 0 and row < size() and count <= size() - row) | |
| 367 | { | |
| 368 | beginRemoveRows(parent, row, row + count - 1); | |
| 369 | ||
| 370 | for (signed int i = row + count - 1; i >= row; i -= 1) | |
| 371 | this->removeAt(i); | |
| 372 | ||
| 373 | endRemoveRows(); | |
| 374 | return true; | |
| 375 | } | |
| 376 | else | |
| 377 | { | |
| 378 | return false; | |
| 379 | } | |
| 380 | } | |
| 1245 | 381 | */ |
| 382 | ||
| 383 | /* | |
| 384 | * Looks up an object by the given index. | |
| 385 | */ | |
| 386 | LDObject* Model::lookup(const QModelIndex &index) const | |
| 387 | { | |
| 388 | if (index.row() >= 0 and index.row() < size()) | |
| 389 | return this->objects()[index.row()]; | |
| 390 | else | |
| 391 | return nullptr; | |
| 392 | } | |
| 1244 | 393 | |
|
1278
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
394 | QColor Model::pickingColorForObject(const QModelIndex& objectIndex) const |
| 1247 | 395 | { |
|
1278
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
396 | return QColor::fromRgba(this->pickingColors.value(this->lookup(objectIndex)) | 0xff000000); |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
397 | } |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
398 | |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
399 | QModelIndex Model::objectByPickingColor(const QColor& color) const |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
400 | { |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
401 | if (color != qRgb(0, 0, 0)) |
| 1247 | 402 | { |
|
1278
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
403 | for (int row = 0; row < this->size(); row += 1) |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
404 | { |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
405 | if (this->pickingColorForObject(this->index(row)) == color) |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
406 | return this->index(row); |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
407 | } |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
408 | |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
409 | return {}; |
| 1247 | 410 | } |
|
1278
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
411 | else |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
412 | { |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
413 | return {}; |
|
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1277
diff
changeset
|
414 | } |
| 1247 | 415 | } |
| 416 | ||
|
1306
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
417 | Winding Model::winding() const |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
418 | { |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
419 | return this->_winding; |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
420 | } |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
421 | |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
422 | void Model::setWinding(Winding winding) |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
423 | { |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
424 | this->_winding = winding; |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
425 | emit windingChanged(this->_winding); |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
426 | } |
|
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1288
diff
changeset
|
427 | |
|
1087
80e25f6b0bb0
Some code cleanup in abstract editing modes.
Teemu Piippo <teemu@hecknology.net>
parents:
1082
diff
changeset
|
428 | int countof(Model& model) |
|
80e25f6b0bb0
Some code cleanup in abstract editing modes.
Teemu Piippo <teemu@hecknology.net>
parents:
1082
diff
changeset
|
429 | { |
|
80e25f6b0bb0
Some code cleanup in abstract editing modes.
Teemu Piippo <teemu@hecknology.net>
parents:
1082
diff
changeset
|
430 | return model.size(); |
|
80e25f6b0bb0
Some code cleanup in abstract editing modes.
Teemu Piippo <teemu@hecknology.net>
parents:
1082
diff
changeset
|
431 | } |