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,
209 ColorPalette lineColor)
210{
211 ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
212 CurveStyle &curveStyle = m_curveStyles [curveName];
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];
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];
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];
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 if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) define ENGAUGE...
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:43
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
void setLineColor(ColorPalette lineColor)
Set method for line color in specified curve.
void setPointRadius(int radius)
Set method for curve point radius.
LineStyle lineStyle() const
Get method for LineStyle.
void setPointLineWidth(int width)
Set method for curve point perimeter line width.
QString loadXml(QXmlStreamReader &reader)
Load from serialized xml. Returns the curve name.
void setLineConnectAs(CurveConnectAs curveConnectAs)
Set method for connect as method for lines in specified curve.
void setLineWidth(int width)
Set method for line width in specified curve.
void saveXml(QXmlStreamWriter &writer, const QString &curveName) const
Serialize to xml.
void setPointColor(ColorPalette curveColor)
Set method curve point color in specified curve.
PointStyle pointStyle() const
Get method for PointStyle.
void setPointShape(PointShape shape)
Set method for curve point shape in specified curve.
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition CurveStyles.h:23
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