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 "CurveStyle.h"
8 #include "DocumentSerialize.h"
9 #include "Logger.h"
10 #include <QTextStream>
11 #include <QXmlStreamReader>
12 #include <QXmlStreamWriter>
13 #include "Xml.h"
14 
CurveStyle()15 CurveStyle::CurveStyle()
16 {
17 }
18 
CurveStyle(const LineStyle & lineStyle,const PointStyle & pointStyle)19 CurveStyle::CurveStyle (const LineStyle &lineStyle,
20                         const PointStyle &pointStyle) :
21   m_pointStyle (pointStyle),
22   m_lineStyle (lineStyle)
23 {
24 }
25 
lineStyle() const26 LineStyle CurveStyle::lineStyle() const
27 {
28   return m_lineStyle;
29 }
30 
loadXml(QXmlStreamReader & reader)31 QString CurveStyle::loadXml(QXmlStreamReader &reader)
32 {
33   LOG4CPP_INFO_S ((*mainCat)) << "CurveStyle::loadXml";
34 
35   bool success = true;
36   QString curveName;
37 
38   QXmlStreamAttributes attributes = reader.attributes();
39 
40   if (attributes.hasAttribute(DOCUMENT_SERIALIZE_CURVE_NAME)) {
41 
42     curveName = attributes.value (DOCUMENT_SERIALIZE_CURVE_NAME).toString();
43 
44     // Read until end of this subtree
45     while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
46     (reader.name() != DOCUMENT_SERIALIZE_POINT_STYLE)){
47       loadNextFromReader(reader);
48 
49       if (reader.atEnd()) {
50         success = false;
51         break;
52       }
53 
54       if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
55           (reader.name() == DOCUMENT_SERIALIZE_LINE_STYLE)) {
56 
57         m_lineStyle.loadXml (reader);
58 
59       } else if ((reader.tokenType() == QXmlStreamReader::StartElement) &
60                  (reader.name() == DOCUMENT_SERIALIZE_POINT_STYLE)) {
61 
62         m_pointStyle.loadXml (reader);
63 
64       }
65     }
66   }
67 
68   if (!success) {
69     reader.raiseError (QObject::tr ("Cannot read curve style data"));
70   }
71 
72   return curveName;
73 }
74 
pointStyle() const75 PointStyle CurveStyle::pointStyle() const
76 {
77   return m_pointStyle;
78 }
79 
printStream(QString indentation,QTextStream & str) const80 void CurveStyle::printStream(QString indentation,
81                              QTextStream &str) const
82 {
83   str << indentation << "CurveStyle\n";
84 
85   indentation += INDENTATION_DELTA;
86 
87   m_pointStyle.printStream (indentation,
88                             str);
89   m_lineStyle.printStream (indentation,
90                            str);
91 }
92 
saveXml(QXmlStreamWriter & writer,const QString & curveName) const93 void CurveStyle::saveXml(QXmlStreamWriter &writer,
94                          const QString &curveName) const
95 {
96   LOG4CPP_INFO_S ((*mainCat)) << "CurveStyle::saveXml";
97 
98   writer.writeStartElement(DOCUMENT_SERIALIZE_CURVE_STYLE);
99   writer.writeAttribute (DOCUMENT_SERIALIZE_CURVE_NAME, curveName);
100   m_lineStyle.saveXml (writer);
101   m_pointStyle.saveXml (writer);
102   writer.writeEndElement();
103 }
104 
setLineColor(ColorPalette lineColor)105 void CurveStyle::setLineColor (ColorPalette lineColor)
106 {
107   m_lineStyle.setPaletteColor(lineColor);
108 }
109 
setLineConnectAs(CurveConnectAs curveConnectAs)110 void CurveStyle::setLineConnectAs (CurveConnectAs curveConnectAs)
111 {
112   m_lineStyle.setCurveConnectAs(curveConnectAs);
113 }
114 
setLineStyle(const LineStyle & lineStyle)115 void CurveStyle::setLineStyle(const LineStyle &lineStyle)
116 {
117   m_lineStyle = lineStyle;
118 }
119 
setLineWidth(int width)120 void CurveStyle::setLineWidth (int width)
121 {
122   m_lineStyle.setWidth(width);
123 }
124 
setPointColor(ColorPalette curveColor)125 void CurveStyle::setPointColor (ColorPalette curveColor)
126 {
127   m_pointStyle.setPaletteColor(curveColor);
128 }
129 
setPointLineWidth(int width)130 void CurveStyle::setPointLineWidth (int width)
131 {
132   m_pointStyle.setLineWidth(width);
133 }
134 
setPointRadius(int radius)135 void CurveStyle::setPointRadius (int radius)
136 {
137   m_pointStyle.setRadius(radius);
138 }
139 
setPointShape(PointShape shape)140 void CurveStyle::setPointShape (PointShape shape)
141 {
142   m_pointStyle.setShape(shape);
143 }
144 
setPointStyle(const PointStyle & pointStyle)145 void CurveStyle::setPointStyle(const PointStyle &pointStyle)
146 {
147   m_pointStyle = pointStyle;
148 }
149