Engauge Digitizer 2
Loading...
Searching...
No Matches
CurveStyles.cpp
Go to the documentation of this file.
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 "CoordSystem.h"
9#include "CurveStyles.h"
10#include "DocumentSerialize.h"
11#include "EngaugeAssert.h"
12#include "Logger.h"
13#include <QDebug>
14#include <QXmlStreamReader>
15#include <QXmlStreamWriter>
16#include "Xml.h"
17
21
23{
24 // Axis curve
25 const Curve &curveAxes = coordSystem.curveAxes();
26 m_curveStyles [AXIS_CURVE_NAME].setLineStyle (curveAxes.curveStyle().lineStyle());
27 m_curveStyles [AXIS_CURVE_NAME].setPointStyle (curveAxes.curveStyle().pointStyle());
28
29 // Graph curves
30 QStringList graphCurveNames = coordSystem.curvesGraphsNames();
31 QStringList::const_iterator itr;
32 for (itr = graphCurveNames.begin (); itr != graphCurveNames.end (); itr++) {
33
34 const QString &graphCurveName = *itr;
35 const Curve *graphCurve = coordSystem.curveForCurveName(graphCurveName);
36 m_curveStyles [graphCurveName].setLineStyle (graphCurve->curveStyle().lineStyle());
37 m_curveStyles [graphCurveName].setPointStyle (graphCurve->curveStyle().pointStyle());
38 }
39}
40
42{
43 const QStringList curveNames = other.curveNames();
44 QStringList::const_iterator itr;
45 for (itr = curveNames.begin(); itr != curveNames.end(); itr++) {
46
47 QString curveName = *itr;
48
49 m_curveStyles [curveName] = other.curveStyle (curveName);
50 }
51}
52
54{
55 const QStringList curveNames = other.curveNames();
56 QStringList::const_iterator itr;
57 for (itr = curveNames.begin(); itr != curveNames.end(); itr++) {
58
59 QString curveName = *itr;
60
61 m_curveStyles [curveName] = other.curveStyle (curveName);
62 }
63
64 return *this;
65}
66
67QStringList CurveStyles::curveNames () const
68{
69 QStringList curveNames;
70 CurveStylesInternal::const_iterator itr;
71 for (itr = m_curveStyles.begin(); itr != m_curveStyles.end(); itr++) {
72
73 curveNames << itr.key();
74 }
75
76 return curveNames;
77}
78
79CurveStyle CurveStyles::curveStyle (const QString &curveName) const
80{
81 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
82 return m_curveStyles [curveName];
83}
84
85ColorPalette CurveStyles::lineColor (const QString &curveName) const
86{
87 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
88 return m_curveStyles [curveName].lineStyle().paletteColor();
89}
90
91CurveConnectAs CurveStyles::lineConnectAs (const QString &curveName) const
92{
93 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
94 return m_curveStyles [curveName].lineStyle().curveConnectAs();
95}
96
97const LineStyle CurveStyles::lineStyle (const QString &curveName) const
98{
99 return m_curveStyles [curveName].lineStyle();
100}
101
102int CurveStyles::lineWidth (const QString &curveName) const
103{
104 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
105 return signed (m_curveStyles [curveName].lineStyle().width());
106}
107
108void CurveStyles::loadXml (QXmlStreamReader &reader)
109{
110 bool success = true;
111
112 // Read through each DOCUMENT_SERIALIZE_LINE_STYLE and DOCUMENT_SERIALIZE_POINT_STYLE until end of DOCUMENT_SERIALIZE_CURVE_STYLES is encountered
113 while (loadNextFromReader (reader)) {
114
115 if (reader.atEnd() || reader.hasError ()) {
116 success = false;
117 break;
118 }
119
120 if ((reader.tokenType() == QXmlStreamReader::EndElement) &&
121 (reader.name() == DOCUMENT_SERIALIZE_CURVE_STYLES)) {
122 break;
123 }
124
125 // Not done yet
126 if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
127 (reader.name() == DOCUMENT_SERIALIZE_CURVE_STYLE)) {
128
129 // Node has a CurveStyle that we need to parse and save
131 QString curveName = curveStyle.loadXml (reader);
132
133 m_curveStyles [curveName] = curveStyle;
134 }
135 }
136
137 if (!success) {
138 reader.raiseError ("Cannot read curve styles");
139 }
140}
141
142ColorPalette CurveStyles::pointColor (const QString &curveName) const
143{
144 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
145 return m_curveStyles [curveName].pointStyle().paletteColor();
146}
147
148bool CurveStyles::pointIsCircle (const QString &curveName) const
149{
150 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
151 return m_curveStyles [curveName].pointStyle().isCircle();
152}
153
154int CurveStyles::pointLineWidth (const QString &curveName) const
155{
156 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
157 return m_curveStyles [curveName].pointStyle().lineWidth();
158}
159
160QPolygonF CurveStyles::pointPolygon (const QString &curveName) const
161{
162 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
163 return m_curveStyles [curveName].pointStyle().polygon();
164}
165
166int CurveStyles::pointRadius (const QString &curveName) const
167{
168 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
169 return m_curveStyles [curveName].pointStyle().radius();
170}
171
172PointShape CurveStyles::pointShape (const QString &curveName) const
173{
174 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
175 return m_curveStyles [curveName].pointStyle().shape ();
176}
177
178const PointStyle CurveStyles::pointStyle (const QString &curveName) const
179{
180 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
181 return m_curveStyles [curveName].pointStyle();
182}
183
184void CurveStyles::saveXml(QXmlStreamWriter &writer) const
185{
186 LOG4CPP_INFO_S ((*mainCat)) << "CurveStyles::saveXml";
187
188 writer.writeStartElement(DOCUMENT_SERIALIZE_CURVE_STYLES);
189 CurveStylesInternal::const_iterator itr;
190 for (itr = m_curveStyles.begin(); itr != m_curveStyles.end(); itr++) {
191
192 QString curveName = itr.key();
193 const CurveStyle &curveStyle = itr.value();
194
195 curveStyle.saveXml(writer,
196 curveName);
197 }
198 writer.writeEndElement();
199}
200
201void CurveStyles::setCurveStyle (const QString &curveName,
202 const CurveStyle &curveStyle)
203{
204 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
205 m_curveStyles [curveName] = curveStyle;
206}
207
208void CurveStyles::setLineColor (const QString &curveName,
210{
211 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
212 CurveStyle &curveStyle = m_curveStyles [curveName];
213 curveStyle.setLineColor (lineColor);
214}
215
216void CurveStyles::setLineConnectAs (const QString &curveName,
217 CurveConnectAs curveConnectAs)
218{
219 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
220 CurveStyle &curveStyle = m_curveStyles [curveName];
221 curveStyle.setLineConnectAs(curveConnectAs);
222}
223
224void CurveStyles::setLineWidth (const QString &curveName,
225 int width)
226{
227 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
228 CurveStyle &curveStyle = m_curveStyles [curveName];
229 curveStyle.setLineWidth(width);
230}
231
232void CurveStyles::setPointColor (const QString &curveName,
233 ColorPalette curveColor)
234{
235 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
236 CurveStyle &curveStyle = m_curveStyles [curveName];
237 curveStyle.setPointColor (curveColor);
238}
239
240void CurveStyles::setPointLineWidth (const QString &curveName,
241 int width)
242{
243 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
244 CurveStyle &curveStyle = m_curveStyles [curveName];
245 curveStyle.setPointLineWidth (width);
246}
247
248void CurveStyles::setPointRadius (const QString &curveName,
249 int radius)
250{
251 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
252 CurveStyle &curveStyle = m_curveStyles [curveName];
253 curveStyle.setPointRadius (radius);
254}
255
256void CurveStyles::setPointShape (const QString &curveName,
257 PointShape shape)
258{
259 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
260 CurveStyle &curveStyle = m_curveStyles [curveName];
261 curveStyle.setPointShape (shape);
262}
263
const QString AXIS_CURVE_NAME
ColorPalette
CurveConnectAs
const QString DOCUMENT_SERIALIZE_CURVE_STYLES
const QString DOCUMENT_SERIALIZE_CURVE_STYLE
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT.
log4cpp::Category * mainCat
Definition Logger.cpp:14
PointShape
Definition PointShape.h:12
QXmlStreamReader::TokenType loadNextFromReader(QXmlStreamReader &reader)
Load next token from xml reader.
Definition Xml.cpp:14
Storage of data belonging to one coordinate system.
Definition CoordSystem.h:44
virtual Curve * curveForCurveName(const QString &curveName)
See CurvesGraphs::curveForCurveName, although this also works for AXIS_CURVE_NAME.
virtual const Curve & curveAxes() const
Get method for axis curve.
virtual QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Container for LineStyle and PointStyle for one Curve.
Definition CurveStyle.h:19
LineStyle lineStyle() const
Get method for LineStyle.
PointStyle pointStyle() const
Get method for PointStyle.
ColorPalette pointColor(const QString &curveName) const
Get method for curve point color in specified curve.
bool pointIsCircle(const QString &curveName) const
Get method for curve point is circle in specified curve.
const LineStyle lineStyle(const QString &curveName) const
Get method for copying one line style in one step.
void setPointRadius(const QString &curveName, int radius)
Set method for curve point radius.
void setPointLineWidth(const QString &curveName, int width)
Set method for curve point perimeter line width.
void setPointColor(const QString &curveName, ColorPalette curveColor)
Set method curve point color in specified curve.
ColorPalette lineColor(const QString &curveName) const
Get method for line color in specified curve.
int pointRadius(const QString &curveName) const
Get method for curve point radius.
void saveXml(QXmlStreamWriter &writer) const
Serialize to xml.
void loadXml(QXmlStreamReader &reader)
Load from serialized xml.
int pointLineWidth(const QString &curveName) const
Get method for curve point line width.
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
CurveConnectAs lineConnectAs(const QString &curveName) const
Get method for connect as method for lines in specified curve.
void setLineColor(const QString &curveName, ColorPalette lineColor)
Set method for line color in specified curve.
QPolygonF pointPolygon(const QString &curveName) const
Get method for curve point polygon in specified curve.
const PointStyle pointStyle(const QString &curveName) const
Get method for copying one point style. Cannot return just a reference or else there is a warning abo...
QStringList curveNames() const
List of all curve names.
int lineWidth(const QString &curveName) const
Get method for line width in specified curve.
void setCurveStyle(const QString &curveName, const CurveStyle &curveStyle)
Set method for curve style.
CurveStyles()
Default constructor.
void setPointShape(const QString &curveName, PointShape shape)
Set method for curve point shape in specified curve.
void setLineWidth(const QString &curveName, int width)
Set method for line width in specified curve.
CurveStyles & operator=(const CurveStyles &other)
Assignment constructor.
PointShape pointShape(const QString &curveName) const
Get method for curve point shape.
void setLineConnectAs(const QString &curveName, CurveConnectAs curveConnectAs)
Set method for connect as method for lines in specified curve.
Container for one set of digitized Points.
Definition Curve.h:34
CurveStyle curveStyle() const
Return the curve style.
Definition Curve.cpp:149
Details for a specific Line.
Definition LineStyle.h:20
Details for a specific Point.
Definition PointStyle.h:21
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18