1 /*
2 * tilesetchanges.cpp
3 * Copyright 2011, Maus <Zeitmaus@github>
4 * Copyright 2011-2013, Thorbjørn Lindeijer <thorbjorn@lindeijer.nl>
5 *
6 * This file is part of Tiled.
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the Free
10 * Software Foundation; either version 2 of the License, or (at your option)
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 * more details.
17 *
18 * You should have received a copy of the GNU General Public License along with
19 * this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 #include "tilesetchanges.h"
23
24 #include "tilesetdocument.h"
25 #include "tilesetmanager.h"
26
27 #include <QCoreApplication>
28
29 namespace Tiled {
30
RenameTileset(TilesetDocument * tilesetDocument,const QString & newName)31 RenameTileset::RenameTileset(TilesetDocument *tilesetDocument,
32 const QString &newName)
33 : QUndoCommand(QCoreApplication::translate("Undo Commands",
34 "Change Tileset Name"))
35 , mTilesetDocument(tilesetDocument)
36 , mOldName(tilesetDocument->tileset()->name())
37 , mNewName(newName)
38 {}
39
undo()40 void RenameTileset::undo()
41 {
42 mTilesetDocument->setTilesetName(mOldName);
43 }
44
redo()45 void RenameTileset::redo()
46 {
47 mTilesetDocument->setTilesetName(mNewName);
48 }
49
50
ChangeTilesetTileOffset(TilesetDocument * tilesetDocument,QPoint tileOffset)51 ChangeTilesetTileOffset::ChangeTilesetTileOffset(TilesetDocument *tilesetDocument,
52 QPoint tileOffset)
53 : QUndoCommand(QCoreApplication::translate("Undo Commands",
54 "Change Drawing Offset"))
55 , mTilesetDocument(tilesetDocument)
56 , mOldTileOffset(tilesetDocument->tileset()->tileOffset())
57 , mNewTileOffset(tileOffset)
58 {}
59
undo()60 void ChangeTilesetTileOffset::undo()
61 {
62 mTilesetDocument->setTilesetTileOffset(mOldTileOffset);
63 }
64
redo()65 void ChangeTilesetTileOffset::redo()
66 {
67 mTilesetDocument->setTilesetTileOffset(mNewTileOffset);
68 }
69
mergeWith(const QUndoCommand * other)70 bool ChangeTilesetTileOffset::mergeWith(const QUndoCommand *other)
71 {
72 const ChangeTilesetTileOffset *o = static_cast<const ChangeTilesetTileOffset*>(other);
73 if (mTilesetDocument != o->mTilesetDocument)
74 return false;
75
76 mNewTileOffset = o->mNewTileOffset;
77 return true;
78 }
79
80
TilesetParameters(const Tileset & tileset)81 TilesetParameters::TilesetParameters(const Tileset &tileset)
82 : imageSource(tileset.imageSource())
83 , transparentColor(tileset.transparentColor())
84 , tileSize(tileset.tileSize())
85 , tileSpacing(tileset.tileSpacing())
86 , margin(tileset.margin())
87 {
88 }
89
operator !=(const TilesetParameters & other) const90 bool TilesetParameters::operator != (const TilesetParameters &other) const
91 {
92 return imageSource != other.imageSource ||
93 transparentColor != other.transparentColor ||
94 tileSize != other.tileSize ||
95 tileSpacing != other.tileSpacing ||
96 margin != other.margin;
97 }
98
ChangeTilesetParameters(TilesetDocument * tilesetDocument,const TilesetParameters & parameters)99 ChangeTilesetParameters::ChangeTilesetParameters(TilesetDocument *tilesetDocument,
100 const TilesetParameters ¶meters)
101 : QUndoCommand(QCoreApplication::translate("Undo Commands", "Edit Tileset"))
102 , mTilesetDocument(tilesetDocument)
103 , mOldParameters(*tilesetDocument->tileset())
104 , mNewParameters(parameters)
105 {
106 }
107
undo()108 void ChangeTilesetParameters::undo()
109 {
110 apply(mOldParameters);
111 }
112
redo()113 void ChangeTilesetParameters::redo()
114 {
115 apply(mNewParameters);
116 }
117
apply(const TilesetParameters & parameters)118 void ChangeTilesetParameters::apply(const TilesetParameters ¶meters)
119 {
120 Tileset &tileset = *mTilesetDocument->tileset();
121
122 tileset.setImageSource(parameters.imageSource);
123 tileset.setTransparentColor(parameters.transparentColor);
124 tileset.setTileSize(parameters.tileSize);
125 tileset.setTileSpacing(parameters.tileSpacing);
126 tileset.setMargin(parameters.margin);
127
128 if (tileset.loadImage())
129 emit TilesetManager::instance()->tilesetImagesChanged(&tileset);
130
131 emit mTilesetDocument->tilesetChanged(&tileset);
132 }
133
134
ChangeTilesetColumnCount(TilesetDocument * tilesetDocument,int columnCount)135 ChangeTilesetColumnCount::ChangeTilesetColumnCount(TilesetDocument *tilesetDocument,
136 int columnCount)
137 : QUndoCommand(QCoreApplication::translate("Undo Commands", "Change Columns"))
138 , mTilesetDocument(tilesetDocument)
139 , mColumnCount(columnCount)
140 {
141 }
142
swap()143 void ChangeTilesetColumnCount::swap()
144 {
145 Tileset &tileset = *mTilesetDocument->tileset();
146
147 int oldColumnCount = tileset.columnCount();
148 tileset.setColumnCount(mColumnCount);
149 mColumnCount = oldColumnCount;
150
151 emit mTilesetDocument->tilesetChanged(&tileset);
152 }
153
ChangeTilesetBackgroundColor(TilesetDocument * tilesetDocument,const QColor & color)154 ChangeTilesetBackgroundColor::ChangeTilesetBackgroundColor(TilesetDocument *tilesetDocument,
155 const QColor &color)
156 : QUndoCommand(QCoreApplication::translate("Undo Commands", "Change Background Color"))
157 , mTilesetDocument(tilesetDocument)
158 , mColor(color)
159 {
160 }
161
swap()162 void ChangeTilesetBackgroundColor::swap()
163 {
164 Tileset &tileset = *mTilesetDocument->tileset();
165
166 QColor color = tileset.backgroundColor();
167 tileset.setBackgroundColor(mColor);
168 mColor = color;
169
170 emit mTilesetDocument->tilesetChanged(&tileset);
171 }
172
173
ChangeTilesetOrientation(TilesetDocument * tilesetDocument,Tileset::Orientation orientation)174 ChangeTilesetOrientation::ChangeTilesetOrientation(TilesetDocument *tilesetDocument,
175 Tileset::Orientation orientation)
176 : QUndoCommand(QCoreApplication::translate("Undo Commands", "Change Orientation"))
177 , mTilesetDocument(tilesetDocument)
178 , mOrientation(orientation)
179 {
180 }
181
swap()182 void ChangeTilesetOrientation::swap()
183 {
184 Tileset &tileset = *mTilesetDocument->tileset();
185
186 Tileset::Orientation orientation = tileset.orientation();
187 tileset.setOrientation(mOrientation);
188 mOrientation = orientation;
189
190 emit mTilesetDocument->tilesetChanged(&tileset);
191 }
192
193
ChangeTilesetObjectAlignment(TilesetDocument * tilesetDocument,Alignment objectAlignment)194 ChangeTilesetObjectAlignment::ChangeTilesetObjectAlignment(TilesetDocument *tilesetDocument,
195 Alignment objectAlignment)
196 : QUndoCommand(QCoreApplication::translate("Undo Commands", "Change Object Alignment"))
197 , mTilesetDocument(tilesetDocument)
198 , mObjectAlignment(objectAlignment)
199 {
200 }
201
swap()202 void ChangeTilesetObjectAlignment::swap()
203 {
204 Tileset &tileset = *mTilesetDocument->tileset();
205
206 Alignment objectAlignment = tileset.objectAlignment();
207 mTilesetDocument->setTilesetObjectAlignment(mObjectAlignment);
208 mObjectAlignment = objectAlignment;
209 }
210
211
ChangeTilesetGridSize(TilesetDocument * tilesetDocument,QSize gridSize)212 ChangeTilesetGridSize::ChangeTilesetGridSize(TilesetDocument *tilesetDocument,
213 QSize gridSize)
214 : QUndoCommand(QCoreApplication::translate("Undo Commands", "Change Grid Size"))
215 , mTilesetDocument(tilesetDocument)
216 , mGridSize(gridSize)
217 {
218 }
219
swap()220 void ChangeTilesetGridSize::swap()
221 {
222 Tileset &tileset = *mTilesetDocument->tileset();
223
224 QSize gridSize = tileset.gridSize();
225 tileset.setGridSize(mGridSize);
226 mGridSize = gridSize;
227
228 emit mTilesetDocument->tilesetChanged(&tileset);
229 }
230
231
ChangeTilesetTransformationFlags(TilesetDocument * tilesetDocument,Tileset::TransformationFlags newValue)232 ChangeTilesetTransformationFlags::ChangeTilesetTransformationFlags(TilesetDocument *tilesetDocument,
233 Tileset::TransformationFlags newValue)
234 : QUndoCommand(QCoreApplication::translate("Undo Commands", "Change Tileset"))
235 , mTilesetDocument(tilesetDocument)
236 , mOldValue(tilesetDocument->tileset()->transformationFlags())
237 , mNewValue(newValue)
238 {
239 }
240
undo()241 void ChangeTilesetTransformationFlags::undo()
242 {
243 mTilesetDocument->setTilesetTransformationFlags(mOldValue);
244 }
redo()245 void ChangeTilesetTransformationFlags::redo()
246 {
247 mTilesetDocument->setTilesetTransformationFlags(mNewValue);
248 }
249
250 } // namespace Tiled
251