Engauge Digitizer  2
DocumentModelDigitizeCurve.cpp
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 "DocumentModelDigitizeCurve.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 bool DEFAULT_CURSOR_STANDARD_CROSS = true;
17 const int DEFAULT_CURSOR_INNER_RADIUS = 5;
18 const int DEFAULT_CURSOR_LINE_WIDTH = 2;
19 const CursorSize DEFAULT_CURSOR_SIZE = CURSOR_SIZE_32;
20 
22  m_cursorStandardCross (DEFAULT_CURSOR_STANDARD_CROSS),
23  m_cursorInnerRadius (DEFAULT_CURSOR_INNER_RADIUS),
24  m_cursorLineWidth (DEFAULT_CURSOR_LINE_WIDTH),
25  m_cursorSize (DEFAULT_CURSOR_SIZE)
26 {
27 }
28 
30  m_cursorStandardCross (document.modelDigitizeCurve().cursorStandardCross()),
31  m_cursorInnerRadius (document.modelDigitizeCurve().cursorInnerRadius()),
32  m_cursorLineWidth (document.modelDigitizeCurve().cursorLineWidth()),
33  m_cursorSize (document.modelDigitizeCurve().cursorSize())
34 {
35 }
36 
38  m_cursorStandardCross (other.cursorStandardCross()),
39  m_cursorInnerRadius (other.cursorInnerRadius()),
40  m_cursorLineWidth (other.cursorLineWidth()),
41  m_cursorSize (other.cursorSize ())
42 {
43 }
44 
46 {
47  m_cursorStandardCross = other.cursorStandardCross();
48  m_cursorInnerRadius = other.cursorInnerRadius();
49  m_cursorLineWidth = other.cursorLineWidth();
50  m_cursorSize = other.cursorSize ();
51 
52  return *this;
53 }
54 
56 {
57  return m_cursorInnerRadius;
58 }
59 
61 {
62  return m_cursorLineWidth;
63 }
64 
66 {
67  return m_cursorSize;
68 }
69 
71 {
72  return m_cursorStandardCross;
73 }
74 
75 void DocumentModelDigitizeCurve::loadXml(QXmlStreamReader &reader)
76 {
77  LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelDigitizeCurve::loadXml";
78 
79  bool success = true;
80 
81  QXmlStreamAttributes attributes = reader.attributes();
82 
83  if (attributes.hasAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_INNER_RADIUS) &&
84  attributes.hasAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_LINE_WIDTH) &&
85  attributes.hasAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_SIZE) &&
86  attributes.hasAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_STANDARD_CROSS)) {
87 
88  // Boolean values
89  QString standardCrossValue = attributes.value(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_STANDARD_CROSS).toString();
90 
91  setCursorInnerRadius (attributes.value(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_INNER_RADIUS).toInt());
92  setCursorLineWidth (attributes.value(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_LINE_WIDTH).toInt());
93  setCursorSize ((CursorSize) attributes.value(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_SIZE).toInt());
94  setCursorStandardCross (standardCrossValue == DOCUMENT_SERIALIZE_BOOL_TRUE);
95 
96  // Read until end of this subtree
97  while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
98  (reader.name() != DOCUMENT_SERIALIZE_DIGITIZE_CURVE)){
99  loadNextFromReader(reader);
100  if (reader.atEnd()) {
101  success = false;
102  break;
103  }
104  }
105  }
106 
107  if (!success) {
108  reader.raiseError (QObject::tr ("Cannot read digitize curve data"));
109  }
110 }
111 
113  QTextStream &str) const
114 {
115  str << indentation << "DocumentModelDigitizeCurve\n";
116 
117  indentation += INDENTATION_DELTA;
118 
119  str << indentation << "cursorStandardCross=" << (m_cursorStandardCross ? "true" : "false") << "\n";
120  str << indentation << "cursorInnerRadius=" << m_cursorInnerRadius << "\n";
121  str << indentation << "cursorSize=" << m_cursorSize << "\n";
122  str << indentation << "cursorLineWidth=" << m_cursorLineWidth << "\n";
123 }
124 
125 void DocumentModelDigitizeCurve::saveXml(QXmlStreamWriter &writer) const
126 {
127  LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelDigitizeCurve::saveXml";
128 
129  writer.writeStartElement(DOCUMENT_SERIALIZE_DIGITIZE_CURVE);
130  writer.writeAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_INNER_RADIUS, QString::number (m_cursorInnerRadius));
131  writer.writeAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_LINE_WIDTH, QString::number (m_cursorLineWidth));
132  writer.writeAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_SIZE, QString::number (m_cursorSize));
133  writer.writeAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_STANDARD_CROSS, m_cursorStandardCross ?
134  DOCUMENT_SERIALIZE_BOOL_TRUE :
135  DOCUMENT_SERIALIZE_BOOL_FALSE);
136  writer.writeEndElement();
137 }
138 
140 {
141  m_cursorInnerRadius = cursorInnerRadius;
142 }
143 
145 {
146  m_cursorLineWidth = cursorLineWidth;
147 }
148 
150 {
151  m_cursorSize = cursorSize;
152 }
153 
155 {
156  m_cursorStandardCross = cursorStandardCross;
157 }
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
CursorSize cursorSize() const
Get method for cursor size.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
void setCursorLineWidth(int lineWidth)
Set method for cursor line width.
void setCursorSize(CursorSize cursorSize)
Set method for cursor size.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
void setCursorInnerRadius(int innerRadius)
Set method for cursor inner radius.
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
int cursorInnerRadius() const
Get method for cursor inner radius.
bool cursorStandardCross() const
Get method for cursor type.
int cursorLineWidth() const
Get method for cursor line width.
DocumentModelDigitizeCurve & operator=(const DocumentModelDigitizeCurve &other)
Assignment constructor.
DocumentModelDigitizeCurve()
Default constructor.
void setCursorStandardCross(bool cursorStandardCross)
Set method for cursor type.