OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
commands.hpp
Go to the documentation of this file.
1 #ifndef CSM_WOLRD_COMMANDS_H
2 #define CSM_WOLRD_COMMANDS_H
3 
4 #include "record.hpp"
5 
6 #include <string>
7 #include <map>
8 #include <memory>
9 #include <vector>
10 
11 #include <QVariant>
12 #include <QUndoCommand>
13 #include <QModelIndex>
14 
15 #include "columnimp.hpp"
16 #include "universalid.hpp"
17 #include "nestedtablewrapper.hpp"
18 
19 class QModelIndex;
20 class QAbstractItemModel;
21 
22 namespace CSMWorld
23 {
24  class IdTable;
25  class IdTree;
26  struct RecordBase;
27  struct NestedTableWrapperBase;
28 
29  class TouchCommand : public QUndoCommand
30  {
31  public:
32 
33  TouchCommand(IdTable& model, const std::string& id, QUndoCommand* parent=nullptr);
34 
35  void redo() override;
36  void undo() override;
37 
38  private:
39 
41  std::string mId;
42  std::unique_ptr<RecordBase> mOld;
43 
44  bool mChanged;
45  };
46 
57  {
58  public:
59 
60  ImportLandTexturesCommand(IdTable& landTable, IdTable& ltexTable,
61  QUndoCommand* parent);
62 
63  void redo() override;
64  void undo() override;
65 
66  protected:
67 
69 
70  virtual const std::string& getOriginId() const = 0;
71  virtual const std::string& getDestinationId() const = 0;
72 
73  virtual void onRedo() = 0;
74  virtual void onUndo() = 0;
75 
79  int mOldState;
80  std::vector<std::string> mCreatedTextures;
81  };
82 
87  {
88  public:
89 
90  CopyLandTexturesCommand(IdTable& landTable, IdTable& ltexTable, const std::string& origin,
91  const std::string& dest, QUndoCommand* parent = nullptr);
92 
93  private:
94 
95  const std::string& getOriginId() const override;
96  const std::string& getDestinationId() const override;
97 
98  void onRedo() override {}
99  void onUndo() override {}
100 
101  std::string mOriginId;
102  std::string mDestId;
103  };
104 
109  {
110  public:
111 
112  TouchLandCommand(IdTable& landTable, IdTable& ltexTable,
113  const std::string& id, QUndoCommand* parent = nullptr);
114 
115  private:
116 
117  const std::string& getOriginId() const override;
118  const std::string& getDestinationId() const override;
119 
120  void onRedo() override;
121  void onUndo() override;
122 
123  std::string mId;
124  std::unique_ptr<RecordBase> mOld;
125 
126  bool mChanged;
127  };
128 
130  {
132  QModelIndex mIndex;
133  QVariant mNew;
134  QVariant mOld;
135 
137  QModelIndex mRecordStateIndex;
139 
140  public:
141 
142  ModifyCommand (QAbstractItemModel& model, const QModelIndex& index, const QVariant& new_,
143  QUndoCommand *parent = 0);
144 
145  virtual void redo();
146 
147  virtual void undo();
148  };
149 
151  {
152  std::map<int, QVariant> mValues;
153  std::map<int, std::pair<int, QVariant> > mNestedValues;
156 
157  protected:
158 
160  std::string mId;
162 
163  protected:
164 
166  void applyModifications();
167 
168  public:
169 
170  CreateCommand (IdTable& model, const std::string& id, QUndoCommand *parent = 0);
171 
172  void setType (UniversalId::Type type);
173 
174  void addValue (int column, const QVariant& value);
175 
176  void addNestedValue(int parentColumn, int nestedColumn, const QVariant &value);
177 
178  virtual void redo();
179 
180  virtual void undo();
181  };
182 
184  {
185  std::string mIdOrigin;
186 
187  public:
188 
189  CloneCommand (IdTable& model, const std::string& idOrigin,
190  const std::string& IdDestination,
191  const UniversalId::Type type,
192  QUndoCommand* parent = 0);
193 
194  virtual void redo();
195 
196  virtual void undo();
197  };
198 
200  {
202  std::string mId;
204 
205  // not implemented
206  RevertCommand (const RevertCommand&);
208 
209  public:
210 
211  RevertCommand (IdTable& model, const std::string& id, QUndoCommand *parent = 0);
212 
213  virtual ~RevertCommand();
214 
215  virtual void redo();
216 
217  virtual void undo();
218  };
219 
221  {
223  std::string mId;
226 
227  // not implemented
228  DeleteCommand (const DeleteCommand&);
230 
231  public:
232 
233  DeleteCommand (IdTable& model, const std::string& id,
235 
236  virtual ~DeleteCommand();
237 
238  virtual void redo();
239 
240  virtual void undo();
241  };
242 
244  {
247  std::vector<int> mNewOrder;
248 
249  public:
250 
251  ReorderRowsCommand (IdTable& model, int baseIndex, const std::vector<int>& newOrder);
252 
253  virtual void redo();
254 
255  virtual void undo();
256  };
257 
259  {
260  public:
261 
262  CreatePathgridCommand(IdTable& model, const std::string& id, QUndoCommand *parent = 0);
263 
264  virtual void redo();
265  };
266 
273  {
275  int mRow;
276  QModelIndex mIndex;
277  QVariant mNew; // invalid, if new cell ID has not been calculated yet
278  QVariant mOld;
279 
280  public:
281 
282  UpdateCellCommand (IdTable& model, int row, QUndoCommand *parent = 0);
283 
284  virtual void redo();
285 
286  virtual void undo();
287  };
288 
289 
291  {
293 
294  public:
295  NestedTableStoring(const IdTree& model, const std::string& id, int parentColumn);
296 
298 
299  protected:
300 
301  const NestedTableWrapperBase& getOld() const;
302  };
303 
305  {
307 
308  std::string mId;
309 
311 
313 
314  // The command to redo/undo the Modified status of a record
316 
317  public:
318 
319  DeleteNestedCommand (IdTree& model, const std::string& id, int nestedRow, int parentColumn, QUndoCommand* parent = 0);
320 
321  virtual void redo();
322 
323  virtual void undo();
324  };
325 
327  {
329 
330  std::string mId;
331 
332  int mNewRow;
333 
335 
336  // The command to redo/undo the Modified status of a record
338 
339  public:
340 
341  AddNestedCommand(IdTree& model, const std::string& id, int nestedRow, int parentColumn, QUndoCommand* parent = 0);
342 
343  virtual void redo();
344 
345  virtual void undo();
346  };
347 }
348 
349 #endif
const std::string & getDestinationId() const override
Definition: commands.cpp:169
ModifyCommand(QAbstractItemModel &model, const QModelIndex &index, const QVariant &new_, QUndoCommand *parent=0)
Definition: commands.cpp:188
ModifyCommand * mModifyParentCommand
Definition: commands.hpp:315
Definition: nestedtablewrapper.hpp:6
UpdateCellCommand(IdTable &model, int row, QUndoCommand *parent=0)
Definition: commands.cpp:435
int mOldState
Definition: commands.hpp:79
int mNewRow
Definition: commands.hpp:332
std::vector< int > mNewOrder
Definition: commands.hpp:247
Definition: commands.hpp:183
virtual const std::string & getDestinationId() const =0
Definition: commands.hpp:150
ModifyCommand * mModifyParentCommand
Definition: commands.hpp:337
Definition: idtable.hpp:15
IdTable & mModel
Definition: commands.hpp:201
ReorderRowsCommand(IdTable &model, int baseIndex, const std::vector< int > &newOrder)
Definition: commands.cpp:368
This command brings a land record into the current plugin, adding LandTexture records and modifying t...
Definition: commands.hpp:108
Definition: commands.hpp:290
UniversalId::Type mType
Definition: commands.hpp:225
int mBaseIndex
Definition: commands.hpp:246
IdTable & mTable
Definition: commands.hpp:40
const NestedTableWrapperBase & getOld() const
Definition: commands.cpp:546
Definition: commands.hpp:199
void redo() override
Definition: commands.cpp:54
QModelIndex mIndex
Definition: commands.hpp:276
CreatePathgridCommand(IdTable &model, const std::string &id, QUndoCommand *parent=0)
Definition: commands.cpp:411
const std::string & getOriginId() const override
Definition: commands.cpp:143
QModelIndex mRecordStateIndex
Definition: commands.hpp:137
void undo() override
Definition: commands.cpp:35
Type
Definition: universalid.hpp:40
QVariant mNew
Definition: commands.hpp:277
std::string mIdOrigin
Definition: commands.hpp:185
IdTree & mModel
Definition: commands.hpp:306
DeleteCommand & operator=(const DeleteCommand &)
std::map< int, std::pair< int, QVariant > > mNestedValues
Definition: commands.hpp:153
LandTexturesColumn::DataType DataType
Definition: commands.hpp:68
void setType(UniversalId::Type type)
Definition: commands.cpp:280
virtual void redo()
Definition: commands.cpp:441
Definition: commands.hpp:220
void onUndo() override
Definition: commands.hpp:99
NestedTableWrapperBase * mOld
Definition: commands.hpp:292
CopyLandTexturesCommand(IdTable &landTable, IdTable &ltexTable, const std::string &origin, const std::string &dest, QUndoCommand *parent=nullptr)
Definition: commands.cpp:135
std::string mOriginId
Definition: commands.hpp:101
Adds LandTexture records and modifies texture indices as needed.
Definition: commands.hpp:56
std::string mDestId
Definition: commands.hpp:102
virtual const std::string & getOriginId() const =0
State
Definition: record.hpp:10
int mParentColumn
Definition: commands.hpp:334
CreateCommand(IdTable &model, const std::string &id, QUndoCommand *parent=0)
Definition: commands.cpp:264
void undo() override
Definition: commands.cpp:113
void addValue(int column, const QVariant &value)
Definition: commands.cpp:270
IdTree & mModel
Definition: commands.hpp:328
This command is used to fix LandTexture records and texture indices after cloning a Land...
Definition: commands.hpp:86
int mNestedRow
Definition: commands.hpp:312
NestedTableStoring(const IdTree &model, const std::string &id, int parentColumn)
Definition: commands.cpp:538
virtual void redo()
Definition: commands.cpp:373
bool mChanged
Definition: commands.hpp:126
std::string mId
Definition: commands.hpp:308
RevertCommand & operator=(const RevertCommand &)
virtual void undo()
Definition: commands.cpp:501
QVector< uint16_t > DataType
Definition: columnimp.hpp:2510
std::string mId
Definition: commands.hpp:223
CSMWorld::RecordBase::State mOldRecordState
Definition: commands.hpp:138
QVariant mOld
Definition: commands.hpp:134
IdTable & mModel
Definition: commands.hpp:245
virtual ~DeleteCommand()
Definition: commands.cpp:340
RecordBase * mOld
Definition: commands.hpp:203
void onRedo() override
Definition: commands.hpp:98
void applyModifications()
Apply modifications set via addValue.
Definition: commands.cpp:242
DeleteCommand(const DeleteCommand &)
virtual void undo()
Definition: commands.cpp:467
const std::string & getDestinationId() const override
Definition: commands.cpp:148
virtual void undo()
Definition: commands.cpp:291
virtual void redo()
Definition: commands.cpp:493
Definition: commands.hpp:29
std::vector< std::string > mCreatedTextures
Definition: commands.hpp:80
virtual void redo()
Definition: commands.cpp:309
ImportLandTexturesCommand(IdTable &landTable, IdTable &ltexTable, QUndoCommand *parent)
Definition: commands.cpp:44
Definition: commands.hpp:243
IdTable & mLands
Definition: commands.hpp:76
Definition: commands.hpp:258
~NestedTableStoring()
Definition: commands.cpp:541
const std::string & getOriginId() const override
Definition: commands.cpp:164
RevertCommand(const RevertCommand &)
std::string mId
Definition: commands.hpp:123
UniversalId::Type mType
Definition: commands.hpp:161
Definition: commands.hpp:304
std::map< int, QVariant > mValues
Definition: commands.hpp:152
int mRow
Definition: commands.hpp:275
Definition: record.hpp:8
QAbstractItemModel * mModel
Definition: commands.hpp:131
void redo() override
Definition: commands.cpp:30
bool mHasRecordState
Definition: commands.hpp:136
IdTable & mModel
Definition: commands.hpp:159
AddNestedCommand(IdTree &model, const std::string &id, int nestedRow, int parentColumn, QUndoCommand *parent=0)
Definition: commands.cpp:508
Update cell ID according to x/y-coordinates.
Definition: commands.hpp:272
IdTable & mModel
Definition: commands.hpp:222
TouchLandCommand(IdTable &landTable, IdTable &ltexTable, const std::string &id, QUndoCommand *parent=nullptr)
Definition: commands.cpp:153
std::unique_ptr< RecordBase > mOld
Definition: commands.hpp:124
RecordBase * mOld
Definition: commands.hpp:224
TouchCommand(IdTable &model, const std::string &id, QUndoCommand *parent=nullptr)
Definition: commands.cpp:19
DeleteNestedCommand(IdTree &model, const std::string &id, int nestedRow, int parentColumn, QUndoCommand *parent=0)
Definition: commands.cpp:473
Definition: commands.hpp:129
virtual void redo()
Definition: commands.cpp:400
CloneCommand(IdTable &model, const std::string &idOrigin, const std::string &IdDestination, const UniversalId::Type type, QUndoCommand *parent=0)
Definition: commands.cpp:389
void onUndo() override
Definition: commands.cpp:179
int mParentColumn
Definition: commands.hpp:310
std::unique_ptr< RecordBase > mOld
Definition: commands.hpp:42
void onRedo() override
Definition: commands.cpp:174
Definition: universalid.hpp:42
std::string mId
Definition: commands.hpp:202
bool mChanged
Definition: commands.hpp:44
Definition: idtree.hpp:25
virtual void undo()
Definition: commands.cpp:326
IdTable & mLtexs
Definition: commands.hpp:77
virtual void redo()
Definition: commands.cpp:524
DataType mOld
Definition: commands.hpp:78
virtual void redo()
Definition: commands.cpp:226
virtual void redo()
Definition: commands.cpp:345
virtual void redo()
Definition: commands.cpp:417
QVariant mNew
Definition: commands.hpp:133
Definition: commands.hpp:326
std::string mId
Definition: commands.hpp:41
virtual void undo()
Definition: commands.cpp:378
virtual void undo()
Definition: commands.cpp:531
std::string mId
Definition: commands.hpp:330
virtual void undo()
Definition: commands.cpp:232
virtual void redo()
Definition: commands.cpp:285
QModelIndex mIndex
Definition: commands.hpp:132
QVariant mOld
Definition: commands.hpp:278
void addNestedValue(int parentColumn, int nestedColumn, const QVariant &value)
Definition: commands.cpp:275
IdTable & mModel
Definition: commands.hpp:274
virtual void undo()
Definition: commands.cpp:362
std::string mId
Definition: commands.hpp:160
virtual ~RevertCommand()
Definition: commands.cpp:304
virtual void undo()
Definition: commands.cpp:406