1 /******************************************************************************************************
2 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5 ******************************************************************************************************/
6
7 #include "CmdMediator.h"
8 #include "DocumentModelGridRemoval.h"
9 #include "DocumentSerialize.h"
10 #include "Logger.h"
11 #include <QObject>
12 #include <QTextStream>
13 #include <QXmlStreamWriter>
14 #include "Xml.h"
15
16 const double CLOSE_DISTANCE_DEFAULT = 10.0;
17
18 // These defaults should always be overwritten when Document coordinates are defined
19 const int DEFAULT_COUNT = 2;
20 const double DEFAULT_NON_COUNT = 0.0;
21
DocumentModelGridRemoval()22 DocumentModelGridRemoval::DocumentModelGridRemoval() :
23 m_stable (false),
24 m_removeDefinedGridLines (false),
25 m_closeDistance (CLOSE_DISTANCE_DEFAULT),
26 m_gridCoordDisableX (GRID_COORD_DISABLE_COUNT),
27 m_countX (DEFAULT_COUNT),
28 m_startX (DEFAULT_NON_COUNT),
29 m_stepX (DEFAULT_NON_COUNT),
30 m_stopX (DEFAULT_NON_COUNT),
31 m_gridCoordDisableY (GRID_COORD_DISABLE_COUNT),
32 m_countY (DEFAULT_COUNT),
33 m_startY (DEFAULT_NON_COUNT),
34 m_stepY (DEFAULT_NON_COUNT),
35 m_stopY (DEFAULT_NON_COUNT)
36 {
37 }
38
DocumentModelGridRemoval(double startX,double startY,double stepX,double stepY,int countX,int countY)39 DocumentModelGridRemoval::DocumentModelGridRemoval (double startX,
40 double startY,
41 double stepX,
42 double stepY,
43 int countX,
44 int countY) :
45 m_stable (false),
46 m_removeDefinedGridLines (false),
47 m_closeDistance (CLOSE_DISTANCE_DEFAULT),
48 m_gridCoordDisableX (GRID_COORD_DISABLE_COUNT),
49 m_countX (countX),
50 m_startX (startX),
51 m_stepX (stepX),
52 m_stopX (startX + (countX - 1.0) * stepX),
53 m_gridCoordDisableY (GRID_COORD_DISABLE_COUNT),
54 m_countY (countY),
55 m_startY (startY),
56 m_stepY (stepY),
57 m_stopY (startY + (countY - 1.0) * stepY)
58 {
59 }
60
DocumentModelGridRemoval(const Document & document)61 DocumentModelGridRemoval::DocumentModelGridRemoval(const Document &document) :
62 m_stable (document.modelGridRemoval().stable()),
63 m_removeDefinedGridLines (document.modelGridRemoval().removeDefinedGridLines()),
64 m_closeDistance (document.modelGridRemoval().closeDistance()),
65 m_gridCoordDisableX (document.modelGridRemoval().gridCoordDisableX()),
66 m_countX (document.modelGridRemoval().countX()),
67 m_startX (document.modelGridRemoval().startX()),
68 m_stepX (document.modelGridRemoval().stepX()),
69 m_stopX (document.modelGridRemoval().stopX()),
70 m_gridCoordDisableY (document.modelGridRemoval().gridCoordDisableY()),
71 m_countY (document.modelGridRemoval().countY()),
72 m_startY (document.modelGridRemoval().startY()),
73 m_stepY (document.modelGridRemoval().stepY()),
74 m_stopY (document.modelGridRemoval().stopY())
75 {
76 }
77
DocumentModelGridRemoval(const DocumentModelGridRemoval & other)78 DocumentModelGridRemoval::DocumentModelGridRemoval(const DocumentModelGridRemoval &other) :
79 m_stable (other.stable()),
80 m_removeDefinedGridLines (other.removeDefinedGridLines()),
81 m_closeDistance (other.closeDistance()),
82 m_gridCoordDisableX (other.gridCoordDisableX()),
83 m_countX (other.countX()),
84 m_startX (other.startX()),
85 m_stepX (other.stepX()),
86 m_stopX (other.stopX()),
87 m_gridCoordDisableY (other.gridCoordDisableX()),
88 m_countY (other.countY()),
89 m_startY (other.startY()),
90 m_stepY (other.stepY()),
91 m_stopY (other.stopY())
92 {
93 }
94
operator =(const DocumentModelGridRemoval & other)95 DocumentModelGridRemoval &DocumentModelGridRemoval::operator=(const DocumentModelGridRemoval &other)
96 {
97 m_stable = other.stable();
98 m_removeDefinedGridLines = other.removeDefinedGridLines();
99 m_closeDistance = other.closeDistance();
100 m_gridCoordDisableX = other.gridCoordDisableX();
101 m_countX = other.countX();
102 m_startX = other.startX();
103 m_stepX = other.stepX();
104 m_stopX = other.stopX();
105 m_gridCoordDisableY = other.gridCoordDisableY();
106 m_countY = other.countY();
107 m_startY = other.startY();
108 m_stepY = other.stepY();
109 m_stopY = other.stopY();
110
111 return *this;
112 }
113
closeDistance() const114 double DocumentModelGridRemoval::closeDistance() const
115 {
116 return m_closeDistance;
117 }
118
countX() const119 int DocumentModelGridRemoval::countX() const
120 {
121 return m_countX;
122 }
123
countY() const124 int DocumentModelGridRemoval::countY() const
125 {
126 return m_countY;
127 }
128
gridCoordDisableX() const129 GridCoordDisable DocumentModelGridRemoval::gridCoordDisableX () const
130 {
131 return m_gridCoordDisableX;
132 }
133
gridCoordDisableY() const134 GridCoordDisable DocumentModelGridRemoval::gridCoordDisableY () const
135 {
136 return m_gridCoordDisableY;
137 }
138
loadXml(QXmlStreamReader & reader)139 void DocumentModelGridRemoval::loadXml(QXmlStreamReader &reader)
140 {
141 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelGridRemoval::loadXml";
142
143 bool success = true;
144
145 QXmlStreamAttributes attributes = reader.attributes();
146
147 if (attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STABLE) &&
148 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_DEFINED_GRID_LINES) &&
149 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_CLOSE_DISTANCE) &&
150 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COORD_DISABLE_X) &&
151 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COUNT_X) &&
152 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_START_X) &&
153 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STEP_X) &&
154 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STOP_X) &&
155 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COORD_DISABLE_Y) &&
156 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COUNT_Y) &&
157 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_START_Y) &&
158 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STEP_Y) &&
159 attributes.hasAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STOP_Y)) {
160
161 // Boolean values
162 QString stableValue = attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_STABLE).toString();
163 QString definedValue = attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_DEFINED_GRID_LINES).toString();
164
165 setStable (stableValue == DOCUMENT_SERIALIZE_BOOL_TRUE);
166 setRemoveDefinedGridLines (definedValue == DOCUMENT_SERIALIZE_BOOL_TRUE);
167 setCloseDistance (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_CLOSE_DISTANCE).toDouble());
168 setGridCoordDisableX (static_cast<GridCoordDisable> (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_COORD_DISABLE_X).toInt()));
169 setCountX (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_COUNT_X).toInt());
170 setStartX (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_START_X).toDouble());
171 setStepX (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_STEP_X).toDouble());
172 setStopX (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_STOP_X).toDouble());
173 setGridCoordDisableY (static_cast<GridCoordDisable> (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_COORD_DISABLE_Y).toInt()));
174 setCountY (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_COUNT_Y).toInt());
175 setStartY (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_START_Y).toDouble());
176 setStepY (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_STEP_Y).toDouble());
177 setStopY (attributes.value(DOCUMENT_SERIALIZE_GRID_REMOVAL_STOP_Y).toDouble());
178
179 // Read until end of this subtree
180 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
181 (reader.name() != DOCUMENT_SERIALIZE_GRID_REMOVAL)){
182 loadNextFromReader(reader);
183 if (reader.atEnd()) {
184 success = false;
185 break;
186 }
187 }
188 }
189
190 if (!success) {
191 reader.raiseError (QObject::tr ("Cannot read grid removal data"));
192 }
193 }
194
printStream(QString indentation,QTextStream & str) const195 void DocumentModelGridRemoval::printStream(QString indentation,
196 QTextStream &str) const
197 {
198 str << indentation << "DocumentModelGridRemoval\n";
199
200 indentation += INDENTATION_DELTA;
201
202 str << indentation << "stable=" << (m_stable ? "true" : "false") << "\n";
203 str << indentation << "removeDefinedGridLines=" << (m_removeDefinedGridLines ? "true" : "false") << "\n";
204 str << indentation << "closeDistance=" << m_closeDistance << "\n";
205 str << indentation << "gridCoordDisableX=" << gridCoordDisableToString (m_gridCoordDisableX) << "\n";
206 str << indentation << "countX=" << m_countX << "\n";
207 str << indentation << "startX=" << m_startX << "\n";
208 str << indentation << "stepX=" << m_stepX << "\n";
209 str << indentation << "stopX=" << m_stopX << "\n";
210 str << indentation << "gridCoordDisableY=" << gridCoordDisableToString (m_gridCoordDisableY) << "\n";
211 str << indentation << "countY=" << m_countY << "\n";
212 str << indentation << "startY=" << m_startY << "\n";
213 str << indentation << "stepY=" << m_stepY << "\n";
214 str << indentation << "stopY=" << m_stopY << "\n";
215 }
216
removeDefinedGridLines() const217 bool DocumentModelGridRemoval::removeDefinedGridLines () const
218 {
219 return m_removeDefinedGridLines;
220 }
221
saveXml(QXmlStreamWriter & writer) const222 void DocumentModelGridRemoval::saveXml(QXmlStreamWriter &writer) const
223 {
224 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelGridRemoval::saveXml";
225
226 writer.writeStartElement(DOCUMENT_SERIALIZE_GRID_REMOVAL);
227 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STABLE, m_stable ?
228 DOCUMENT_SERIALIZE_BOOL_TRUE :
229 DOCUMENT_SERIALIZE_BOOL_FALSE);
230 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_DEFINED_GRID_LINES, m_removeDefinedGridLines ?
231 DOCUMENT_SERIALIZE_BOOL_TRUE :
232 DOCUMENT_SERIALIZE_BOOL_FALSE);
233 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_CLOSE_DISTANCE, QString::number (m_closeDistance));
234 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COORD_DISABLE_X, QString::number (m_gridCoordDisableX));
235 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COORD_DISABLE_X_STRING, gridCoordDisableToString (m_gridCoordDisableX));
236 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COUNT_X, QString::number (m_countX));
237 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_START_X, QString::number (m_startX));
238 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STEP_X, QString::number (m_stepX));
239 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STOP_X, QString::number (m_stopX));
240 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COORD_DISABLE_Y, QString::number (m_gridCoordDisableY));
241 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COORD_DISABLE_Y_STRING, gridCoordDisableToString (m_gridCoordDisableY));
242 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_COUNT_Y, QString::number (m_countY));
243 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_START_Y, QString::number (m_startY));
244 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STEP_Y, QString::number (m_stepY));
245 writer.writeAttribute(DOCUMENT_SERIALIZE_GRID_REMOVAL_STOP_Y, QString::number (m_stopY));
246
247 writer.writeEndElement();
248 }
249
setCloseDistance(double closeDistance)250 void DocumentModelGridRemoval::setCloseDistance(double closeDistance)
251 {
252 m_closeDistance = closeDistance;
253 }
254
setCountX(int countX)255 void DocumentModelGridRemoval::setCountX(int countX)
256 {
257 m_countX = countX;
258 }
259
setCountY(int countY)260 void DocumentModelGridRemoval::setCountY(int countY)
261 {
262 m_countY = countY;
263 }
264
setGridCoordDisableX(GridCoordDisable gridCoordDisable)265 void DocumentModelGridRemoval::setGridCoordDisableX (GridCoordDisable gridCoordDisable)
266 {
267 m_gridCoordDisableX = gridCoordDisable;
268 }
269
setGridCoordDisableY(GridCoordDisable gridCoordDisable)270 void DocumentModelGridRemoval::setGridCoordDisableY (GridCoordDisable gridCoordDisable)
271 {
272 m_gridCoordDisableY = gridCoordDisable;
273 }
274
setRemoveDefinedGridLines(bool removeDefinedGridLines)275 void DocumentModelGridRemoval::setRemoveDefinedGridLines (bool removeDefinedGridLines)
276 {
277 m_removeDefinedGridLines = removeDefinedGridLines;
278 }
279
setStable()280 void DocumentModelGridRemoval::setStable ()
281 {
282 m_stable = true;
283 }
284
setStable(bool stable)285 void DocumentModelGridRemoval::setStable (bool stable)
286 {
287 m_stable = stable;
288 }
289
setStartX(double startX)290 void DocumentModelGridRemoval::setStartX(double startX)
291 {
292 m_startX = startX;
293 }
294
setStartY(double startY)295 void DocumentModelGridRemoval::setStartY(double startY)
296 {
297 m_startY = startY;
298 }
299
setStepX(double stepX)300 void DocumentModelGridRemoval::setStepX(double stepX)
301 {
302 m_stepX = stepX;
303 }
304
setStepY(double stepY)305 void DocumentModelGridRemoval::setStepY(double stepY)
306 {
307 m_stepY = stepY;
308 }
309
setStopX(double stopX)310 void DocumentModelGridRemoval::setStopX(double stopX)
311 {
312 m_stopX = stopX;
313 }
314
setStopY(double stopY)315 void DocumentModelGridRemoval::setStopY(double stopY)
316 {
317 m_stopY = stopY;
318 }
319
stable() const320 bool DocumentModelGridRemoval::stable () const
321 {
322 return m_stable;
323 }
324
startX() const325 double DocumentModelGridRemoval::startX() const
326 {
327 return m_startX;
328 }
329
startY() const330 double DocumentModelGridRemoval::startY() const
331 {
332 return m_startY;
333 }
334
stepX() const335 double DocumentModelGridRemoval::stepX() const
336 {
337 return m_stepX;
338 }
339
stepY() const340 double DocumentModelGridRemoval::stepY() const
341 {
342 return m_stepY;
343 }
344
stopX() const345 double DocumentModelGridRemoval::stopX() const
346 {
347 return m_stopX;
348 }
349
stopY() const350 double DocumentModelGridRemoval::stopY() const
351 {
352 return m_stopY;
353 }
354