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 &parameters)
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 &parameters)
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