history.cpp

Sun, 21 Apr 2013 16:36:20 +0300

author
Santeri Piippo <crimsondusk64@gmail.com>
date
Sun, 21 Apr 2013 16:36:20 +0300
changeset 121
7e87c85ad092
parent 118
649110bb36a8
child 127
a6e2067bb2f1
permissions
-rw-r--r--

Rotation improvements; allow radials be inlined

85
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 * LDForge: LDraw parts authoring CAD
104
6e29bb0e83c5 GL picking stuff
Santeri Piippo <crimsondusk64@gmail.com>
parents: 102
diff changeset
3 * Copyright (C) 2013 Santeri Piippo
85
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4 *
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 * This program is free software: you can redistribute it and/or modify
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 * it under the terms of the GNU General Public License as published by
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 * the Free Software Foundation, either version 3 of the License, or
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8 * (at your option) any later version.
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9 *
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful,
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 * GNU General Public License for more details.
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
14 *
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17 */
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 #include "history.h"
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 #include "ldtypes.h"
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
21 #include "file.h"
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
22 #include "misc.h"
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23 #include "gui.h"
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
24
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
25 EXTERN_ACTION (undo)
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
26 EXTERN_ACTION (redo)
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
27
85
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
28 // =============================================================================
89
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
29 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
30 // =============================================================================
91
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
31 namespace History {
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
32 std::vector<HistoryEntry*> entries;
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
33
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
34 static long lPos = -1;
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
35
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
36 // =========================================================================
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
37 void addEntry (HistoryEntry* entry) {
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
38 // If there's any entries after our current position, we need to remove them now
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
39 for (ulong i = lPos + 1; i < entries.size(); ++i) {
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
40 delete entries[i];
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
41 entries.erase (entries.begin() + i);
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
42 }
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
43
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
44 entries.push_back (entry);
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
45 lPos++;
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
46
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
47 updateActions ();
91
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
48 }
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
49
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
50 // =========================================================================
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
51 void undo () {
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
52 if (lPos == -1)
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
53 return; // nothing to undo
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
54
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
55 entries[lPos--]->undo ();
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
56 updateActions ();
91
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
57 }
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
58
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
59 // =========================================================================
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
60 void redo () {
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
61 if (lPos == (long) entries.size () - 1)
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
62 return; // nothing to redo;
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
63
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
64 entries[++lPos]->redo ();
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
65 updateActions ();
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
66 }
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
67
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
68 // =========================================================================
96
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
69 void clear () {
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
70 for (HistoryEntry* entry : entries)
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
71 delete entry;
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
72
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
73 entries.clear ();
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
74 lPos = -1;
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
75 updateActions ();
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
76 }
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
77
2f175b3d8211 Added history dialog, cannot display all types yet
Santeri Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
78 // =========================================================================
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
79 void updateActions () {
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
80 ACTION_NAME (undo)->setEnabled (lPos > -1);
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
81 ACTION_NAME (redo)->setEnabled (lPos < (long) entries.size () - 1);
91
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
82 }
97
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
83
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
84 // =========================================================================
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
85 long pos () {
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
86 return lPos;
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
87 }
91
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
88 }
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
89
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
90 // =============================================================================
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
91 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
92 // =============================================================================
97
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
93 void DelHistory::undo () {
85
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
94 for (ulong i = 0; i < cache.size(); ++i) {
94
a9e67f6e610e Added history management for cut and paste, copy doesn't alter the object list by itself so it doesn't touch history
Santeri Piippo <crimsondusk64@gmail.com>
parents: 93
diff changeset
95 ulong idx = cache.size() - i - 1;
a9e67f6e610e Added history management for cut and paste, copy doesn't alter the object list by itself so it doesn't touch history
Santeri Piippo <crimsondusk64@gmail.com>
parents: 93
diff changeset
96 LDObject* obj = cache[idx]->clone ();
a9e67f6e610e Added history management for cut and paste, copy doesn't alter the object list by itself so it doesn't touch history
Santeri Piippo <crimsondusk64@gmail.com>
parents: 93
diff changeset
97 g_CurrentFile->objects.insert (g_CurrentFile->objects.begin() + indices[idx], obj);
85
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
98 }
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
99
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
100 g_ForgeWindow->refresh ();
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
101 }
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
102
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103 // =============================================================================
97
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
104 void DelHistory::redo () {
85
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
105 for (ulong i = 0; i < cache.size(); ++i) {
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106 LDObject* obj = g_CurrentFile->objects[indices[i]];
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
107
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
108 g_CurrentFile->forgetObject (obj);
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
109 delete obj;
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
110 }
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
111
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
112 g_ForgeWindow->refresh ();
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
113 }
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
114
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
115 // =============================================================================
97
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
116 DelHistory::~DelHistory () {
85
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
117 for (LDObject* obj : cache)
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
118 delete obj;
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
119 }
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
120
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
121 // =============================================================================
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
122 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
123 // =============================================================================
89
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
124 void SetColorHistory::undo () {
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
125 // Restore colors
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
126 for (ulong i = 0; i < ulaIndices.size (); ++i)
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
127 g_CurrentFile->objects[ulaIndices[i]]->dColor = daColors[i];
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
128
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
129 g_ForgeWindow->refresh ();
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
130 }
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
131
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
132 void SetColorHistory::redo () {
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
133 // Re-set post color
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
134 for (ulong i = 0; i < ulaIndices.size (); ++i)
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
135 g_CurrentFile->objects[ulaIndices[i]]->dColor = dNewColor;
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
136
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
137 g_ForgeWindow->refresh ();
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
138 }
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
139
90
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
140 SetColorHistory::~SetColorHistory () {}
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
141
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
142 // =============================================================================
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
143 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
144 // =============================================================================
117
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
145 void EditHistory::undo () {
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
146 for (ulong idx : ulaIndices) {
118
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
147 printf ("undo %lu\n", idx);
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
148 g_CurrentFile->object (idx)->replace (paOldObjs[idx]->clone ());
117
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
149 }
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
150
90
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
151 g_ForgeWindow->refresh ();
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
152 }
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
153
117
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
154 void EditHistory::redo () {
118
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
155 for (ulong idx : ulaIndices)
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
156 g_CurrentFile->object (idx)->replace (paNewObjs[idx]->clone ());
117
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
157
90
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
158 g_ForgeWindow->refresh ();
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
159 }
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
160
117
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
161 EditHistory::~EditHistory () {
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
162 for (ulong idx : ulaIndices) {
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
163 delete paOldObjs[idx];
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
164 delete paNewObjs[idx];
7eb7a43a511b Generalized SetContentsHistory to an EditHistory
Santeri Piippo <crimsondusk64@gmail.com>
parents: 104
diff changeset
165 }
90
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
166 }
03f718ed5b33 Added history handling for set contents
Santeri Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
167
89
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
168 // =============================================================================
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
169 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
5e6c08e98dbf Allow undo of set color
Santeri Piippo <crimsondusk64@gmail.com>
parents: 85
diff changeset
170 // =============================================================================
91
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
171 std::vector<LDObject*> ListMoveHistory::getObjects (short ofs) {
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
172 std::vector<LDObject*> objs;
85
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
173
91
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
174 for (ulong idx : ulaIndices)
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
175 objs.push_back (g_CurrentFile->objects[idx + ofs]);
85
b1541b547c8c Added undo/redo foundations. Capable of undoing and redoing delete operations
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
176
91
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
177 return objs;
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
178 }
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
179
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
180 void ListMoveHistory::undo () {
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
181 std::vector<LDObject*> objs = getObjects (bUp ? -1 : 1);
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
182 LDObject::moveObjects (objs, !bUp);
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
183 g_ForgeWindow->buildObjList ();
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
184 }
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
185
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
186 void ListMoveHistory::redo () {
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
187 std::vector<LDObject*> objs = getObjects (0);
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
188 LDObject::moveObjects (objs, bUp);
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
189 g_ForgeWindow->buildObjList ();
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
190 }
b4dda6348e7e History handling for list moving
Santeri Piippo <crimsondusk64@gmail.com>
parents: 90
diff changeset
191
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
192 ListMoveHistory::~ListMoveHistory() {}
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
193
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
194 // =============================================================================
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
195 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
196 // =============================================================================
97
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
197 AddHistory::~AddHistory () {
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
198 for (LDObject* pObj : paObjs)
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
199 delete pObj;
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
200 }
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
201
97
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
202 void AddHistory::undo () {
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
203 for (ulong i = 0; i < paObjs.size(); ++i) {
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
204 ulong idx = ulaIndices[ulaIndices.size() - i - 1];
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
205 LDObject* obj = g_CurrentFile->objects[idx];
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
206
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
207 g_CurrentFile->forgetObject (obj);
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
208 delete obj;
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
209 }
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
210
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
211 g_ForgeWindow->refresh ();
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
212 }
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
213
97
52bcca21579e Fleshed out the history dialog further
Santeri Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
214 void AddHistory::redo () {
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
215 for (ulong i = 0; i < paObjs.size(); ++i) {
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
216 ulong idx = ulaIndices[i];
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
217 LDObject* obj = paObjs[i]->clone ();
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
218
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
219 g_CurrentFile->objects.insert (g_CurrentFile->objects.begin() + idx, obj);
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
220 }
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
221
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
222 g_ForgeWindow->refresh ();
93
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
223 }
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
224
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
225 // =============================================================================
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
226 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
227 // =============================================================================
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
228 QuadSplitHistory::~QuadSplitHistory () {
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
229 for (LDQuad* pQuad : paQuads)
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
230 delete pQuad;
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
231 }
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
232
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
233 void QuadSplitHistory::undo () {
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
234 for (ulong i = 0; i < paQuads.size(); ++i) {
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
235 // The quad was replaced by the first triangle and a second one was
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
236 // added after it. Thus, we remove the second one here and replace
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
237 // the first with a copy of the quad.
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
238 ulong idx = ulaIndices[i];
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
239
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
240 LDTriangle* tri1 = static_cast<LDTriangle*> (g_CurrentFile->objects[idx]),
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
241 *tri2 = static_cast<LDTriangle*> (g_CurrentFile->objects[idx + 1]);
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
242 LDQuad* pCopy = paQuads[i]->clone ();
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
243
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
244 tri1->replace (pCopy);
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
245 g_CurrentFile->forgetObject (tri2);
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
246 delete tri2;
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
247 }
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
248
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
249 g_ForgeWindow->refresh ();
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
250 }
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
251
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
252 void QuadSplitHistory::redo () {
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
253 for (long i = paQuads.size() - 1; i >= 0; --i) {
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
254 ulong idx = ulaIndices[i];
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
255
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
256 LDQuad* pQuad = static_cast<LDQuad*> (g_CurrentFile->objects[idx]);
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
257 std::vector<LDTriangle*> paTriangles = pQuad->splitToTriangles ();
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
258
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
259 g_CurrentFile->objects[idx] = paTriangles[0];
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
260 g_CurrentFile->objects.insert (g_CurrentFile->objects.begin() + idx + 1, paTriangles[1]);
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
261 delete pQuad;
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
262 }
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
263
92682e6369e9 Added history handling for quad splitting.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
264 g_ForgeWindow->refresh ();
98
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
265 }
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
266
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
267 // =============================================================================
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
268 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
269 // =============================================================================
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
270 void InlineHistory::undo () {
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
271 for (long i = ulaBitIndices.size() - 1; i >= 0; --i) {
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
272 LDObject* obj = g_CurrentFile->objects [ulaBitIndices[i]];
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
273 g_CurrentFile->forgetObject (obj);
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
274 delete obj;
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
275 }
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
276
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
277 for (ulong i = 0; i < ulaRefIndices.size(); ++i) {
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
278 LDSubfile* obj = paRefs[i]->clone ();
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
279 g_CurrentFile->objects.insert (g_CurrentFile->objects.begin() + ulaRefIndices[i], obj);
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
280 }
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
281
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
282 g_ForgeWindow->refresh ();
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
283 }
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
284
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
285 void InlineHistory::redo () {
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
286 for (long i = ulaRefIndices.size() - 1; i >= 0; --i) {
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
287 ulong idx = ulaRefIndices[i];
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
288
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
289 assert (g_CurrentFile->object (idx)->getType () == OBJ_Subfile);
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
290 LDSubfile* ref = static_cast<LDSubfile*> (g_CurrentFile->object (idx));
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
291 vector<LDObject*> objs = ref->inlineContents (bDeep, false);
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
292
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
293 for (LDObject* obj : objs)
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
294 g_CurrentFile->objects.insert (g_CurrentFile->objects.begin() + idx++, obj);
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
295
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
296 g_CurrentFile->forgetObject (ref);
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
297 delete ref;
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
298 }
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
299
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
300 g_ForgeWindow->refresh ();
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
301 }
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
302
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
303 InlineHistory::~InlineHistory () {
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
304 for (LDSubfile* ref : paRefs)
5dcc551f260a Added inlining history management
Santeri Piippo <crimsondusk64@gmail.com>
parents: 97
diff changeset
305 delete ref;
102
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
306 }
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
307
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
308 // =============================================================================
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
309 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
310 // =============================================================================
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
311 MoveHistory::~MoveHistory () {}
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
312
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
313 void MoveHistory::undo () {
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
314 const vertex vInverse = -vVector;
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
315
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
316 for (ulong i : ulaIndices)
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
317 g_CurrentFile->object (i)->move (vInverse);
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
318 g_ForgeWindow->refresh ();
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
319 }
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
320
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
321 void MoveHistory::redo () {
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
322 for (ulong i : ulaIndices)
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
323 g_CurrentFile->object (i)->move (vVector);
cacd4681ccb4 Added basic object moving with MLCAD-like controls.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 98
diff changeset
324 g_ForgeWindow->refresh ();
118
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
325 }
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
326
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
327 // =============================================================================
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
328 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
329 // =============================================================================
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
330 ComboHistory::~ComboHistory () {
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
331 for (HistoryEntry* pEntry : paEntries)
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
332 delete pEntry;
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
333 }
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
334
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
335 void ComboHistory::undo () {
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
336 for (long i = paEntries.size() - 1; i >= 0; --i) {
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
337 HistoryEntry* pEntry = paEntries[i];
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
338 pEntry->undo ();
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
339 }
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
340 }
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
341
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
342 void ComboHistory::redo () {
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
343 for (HistoryEntry* pEntry : paEntries)
649110bb36a8 Added winding reversal, though undoing it isn't quite ready yet.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 117
diff changeset
344 pEntry->redo ();
92
586d294ca83f Added history management for auto-bordering (and mass-addition in general)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
345 }

mercurial