]> Shamusworld >> Repos - guemap/blob - src/undo.h
Initial commit of GUEmap v3.
[guemap] / src / undo.h
1 //
2 // GUEmap
3 // Copyright 1997-2007 by Christopher J. Madsen
4 // (C) 2019 James Hammons
5 //
6 // GUEmap is licensed under either version 2 of the GPL, or (at your option)
7 // any later version.  See LICENSE file for details.
8 //
9 // undo.h: interface of UndoRec and its derived classes
10 //
11
12 #ifndef __UNDO_H__
13 #define __UNDO_H__
14
15 #include "globals.h"
16
17 class MapDoc;
18
19
20 class UndoRec
21 {
22         public:
23                 bool oldModified;
24
25         public:
26                 UndoRec(bool modified);
27                 virtual ~UndoRec();
28
29                 // Functions unique to UndoRec
30                 UndoRec * undo(MapDoc & doc);
31
32                 // Pure virtual functions (MUST be implemented by derived classes)
33                 virtual const char * getName() const = 0;
34                 virtual UndoRec * undoChange(MapDoc & doc) = 0;
35 };
36
37
38 class UndoAdd: public UndoRec
39 {
40         public:
41                 int edges;
42                 PageNumVec pageNums;
43                 RoomNumVec roomNums;
44
45         public:
46                 UndoAdd(bool modified, int edgeCount, RoomNumVec & theRoomNums, PageNumVec & thePageNums);
47                 UndoAdd(bool modified, RoomNum roomNum, int edgeCount);
48                 UndoAdd(bool modified, short pageNum);
49                 UndoAdd(bool modified);
50
51                 // Overloaded functions
52                 const char * getName() const;
53                 UndoRec * undoChange(MapDoc & doc);
54 };
55
56
57 class UndoChangeEdge: public UndoRec
58 {
59         public:
60                 MapEdge edge;
61
62         public:
63                 UndoChangeEdge(bool modified, const MapEdge & theEdge);
64
65                 // Overloaded functions
66                 const char * getName() const;
67                 UndoRec * undoChange(MapDoc & doc);
68 };
69
70
71 class UndoDelete: public UndoRec
72 {
73         public:
74                 EdgeVec edges;
75                 PageVec pages;
76                 PageNumVec pageNums;
77                 RoomArray rooms;
78                 RoomNumVec roomNums;
79
80         public:
81                 UndoDelete(const MapDoc & doc, int numSelected, const ByteVec & selectedRooms, int numSelectedPages, const ByteVec & selectedPages);
82                 UndoDelete(const MapDoc & doc, int numEdges, const RoomNumVec & theRoomNums, const PageNumVec & thePageNums);
83                 UndoDelete(bool modified, const MapEdge & edge);
84                 UndoDelete(bool modified, EdgeVec & theEdges);
85                 void addRoom(VecSize pos, RoomNum n, MapRoom * r);
86                 void addRooms(VecSize n);
87
88                 // Overloaded functions
89                 const char * getName() const;
90                 UndoRec * undoChange(MapDoc & doc);
91 };
92
93
94 class UndoChanges: public UndoRec
95 {
96         public:
97                 UndoRec * add;
98                 UndoRec * del;
99
100         public:
101                 UndoChanges(bool modified, RoomNum roomNum, int edgeCount, const MapEdge & edge);
102                 UndoChanges(bool modified, int roomNum, int edgeCount, EdgeVec & edges);
103                 UndoChanges(bool modified, RoomNum roomNum, MapRoom * room, EdgeVec & edges);
104
105                 // Overloaded functions
106                 const char * getName() const;
107                 UndoRec * undoChange(MapDoc & doc);
108 };
109
110
111 class UndoMove: public UndoRec
112 {
113         public:
114                 QSize offset;
115                 PageNumVec pageNums;
116                 RoomNumVec roomNums;
117
118         public:
119                 UndoMove(bool modified, const QSize & moved, int numSelected, const ByteVec & selectedRooms, int numSelectedPages, const ByteVec & selectedPages);
120                 UndoMove(bool modified, const QSize & moved, RoomNumVec & rooms, PageNumVec & pages);
121
122                 // Overloaded functions
123                 const char * getName() const;
124                 UndoRec * undoChange(MapDoc & doc);
125 };
126
127
128 class UndoPaginate: public UndoRec
129 {
130         public:
131                 PageVec pages;
132
133         public:
134                 UndoPaginate(MapDoc & doc);
135                 const PageVec & getPages() const;
136
137                 // Overloaded functions
138                 const char * getName() const;
139                 UndoRec * undoChange(MapDoc & doc);
140 };
141
142
143 class UndoRoomInfo : public UndoRec
144 {
145         public:
146                 RoomNum num;
147                 MapRoom room;
148
149         public:
150                 UndoRoomInfo(const MapDoc & doc, RoomNum roomNum);
151
152                 // Overloaded functions
153                 const char * getName() const;
154                 UndoRec * undoChange(MapDoc & doc);
155 };
156
157 #endif  // __UNDO_H__
158