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