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 "DocumentModelSegments.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 DEFAULT_POINT_SEPARATION = 25;
17 const double DEFAULT_MIN_LENGTH = 2;
18 const double DEFAULT_LINE_WIDTH = 4;
19 const ColorPalette DEFAULT_LINE_COLOR (COLOR_PALETTE_GREEN);
20
DocumentModelSegments()21 DocumentModelSegments::DocumentModelSegments() :
22 m_pointSeparation (DEFAULT_POINT_SEPARATION),
23 m_minLength (DEFAULT_MIN_LENGTH),
24 m_fillCorners (false),
25 m_lineWidth (DEFAULT_LINE_WIDTH),
26 m_lineColor (DEFAULT_LINE_COLOR)
27 {
28 }
29
DocumentModelSegments(const Document & document)30 DocumentModelSegments::DocumentModelSegments(const Document &document) :
31 m_pointSeparation (document.modelSegments().pointSeparation()),
32 m_minLength (document.modelSegments().minLength()),
33 m_fillCorners (document.modelSegments().fillCorners()),
34 m_lineWidth (document.modelSegments().lineWidth()),
35 m_lineColor (document.modelSegments().lineColor())
36 {
37 }
38
DocumentModelSegments(const DocumentModelSegments & other)39 DocumentModelSegments::DocumentModelSegments(const DocumentModelSegments &other) :
40 m_pointSeparation (other.pointSeparation()),
41 m_minLength (other.minLength()),
42 m_fillCorners (other.fillCorners ()),
43 m_lineWidth (other.lineWidth()),
44 m_lineColor (other.lineColor())
45 {
46 }
47
operator =(const DocumentModelSegments & other)48 DocumentModelSegments &DocumentModelSegments::operator=(const DocumentModelSegments &other)
49 {
50 m_pointSeparation = other.pointSeparation();
51 m_minLength = other.minLength();
52 m_fillCorners = other.fillCorners ();
53 m_lineWidth = other.lineWidth();
54 m_lineColor = other.lineColor();
55
56 return *this;
57 }
58
fillCorners() const59 bool DocumentModelSegments::fillCorners () const
60 {
61 return m_fillCorners;
62 }
63
lineColor() const64 ColorPalette DocumentModelSegments::lineColor() const
65 {
66 return m_lineColor;
67 }
68
lineWidth() const69 double DocumentModelSegments::lineWidth() const
70 {
71 return m_lineWidth;
72 }
73
loadXml(QXmlStreamReader & reader)74 void DocumentModelSegments::loadXml(QXmlStreamReader &reader)
75 {
76 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelSegments::loadXml";
77
78 bool success = true;
79
80 // Read until end of this subtree
81 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
82 (reader.name() != DOCUMENT_SERIALIZE_SEGMENTS)){
83 loadNextFromReader(reader);
84 if (reader.atEnd()) {
85 success = false;
86 break;
87 }
88 }
89
90 if (!success) {
91 reader.raiseError(QObject::tr ("Cannot read segment data"));
92 }
93 }
94
minLength() const95 double DocumentModelSegments::minLength() const
96 {
97 return m_minLength;
98 }
99
pointSeparation() const100 double DocumentModelSegments::pointSeparation() const
101 {
102 return m_pointSeparation;
103 }
104
printStream(QString indentation,QTextStream & str) const105 void DocumentModelSegments::printStream(QString indentation,
106 QTextStream &str) const
107 {
108 str << indentation << "DocumentModelSegments\n";
109
110 indentation += INDENTATION_DELTA;
111
112 str << indentation << "pointSeparation=" << m_pointSeparation << "\n";
113 str << indentation << "minLength=" << m_minLength << "\n";
114 str << indentation << "fillCorners=" << (m_fillCorners ? "true" : "false") << "\n";
115 str << indentation << "lineWidth=" << m_lineWidth << "\n";
116 str << indentation << "lineColor=" << colorPaletteToString (m_lineColor) << "\n";
117 }
118
saveXml(QXmlStreamWriter & writer) const119 void DocumentModelSegments::saveXml(QXmlStreamWriter &writer) const
120 {
121 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelSegments::saveXml";
122
123 writer.writeStartElement(DOCUMENT_SERIALIZE_SEGMENTS);
124 writer.writeAttribute(DOCUMENT_SERIALIZE_SEGMENTS_POINT_SEPARATION, QString::number (m_pointSeparation));
125 writer.writeAttribute(DOCUMENT_SERIALIZE_SEGMENTS_MIN_LENGTH, QString::number (m_minLength));
126 writer.writeAttribute(DOCUMENT_SERIALIZE_SEGMENTS_FILL_CORNERS, m_fillCorners ?
127 DOCUMENT_SERIALIZE_BOOL_TRUE :
128 DOCUMENT_SERIALIZE_BOOL_FALSE);
129 writer.writeAttribute(DOCUMENT_SERIALIZE_SEGMENTS_LINE_WIDTH, QString::number (m_lineWidth));
130 writer.writeAttribute(DOCUMENT_SERIALIZE_SEGMENTS_LINE_COLOR, QString::number (m_lineColor));
131 writer.writeAttribute(DOCUMENT_SERIALIZE_SEGMENTS_LINE_COLOR_STRING, colorPaletteToString (m_lineColor));
132 writer.writeEndElement();
133 }
134
setFillCorners(bool fillCorners)135 void DocumentModelSegments::setFillCorners (bool fillCorners)
136 {
137 m_fillCorners = fillCorners;
138 }
139
setLineColor(ColorPalette lineColor)140 void DocumentModelSegments::setLineColor(ColorPalette lineColor)
141 {
142 m_lineColor = lineColor;
143 }
144
setLineWidth(double lineWidth)145 void DocumentModelSegments::setLineWidth(double lineWidth)
146 {
147 m_lineWidth = lineWidth;
148 }
149
setMinLength(double minLength)150 void DocumentModelSegments::setMinLength(double minLength)
151 {
152 m_minLength = minLength;
153 }
154
setPointSeparation(double pointSeparation)155 void DocumentModelSegments::setPointSeparation(double pointSeparation)
156 {
157 m_pointSeparation = pointSeparation;
158 }
159