Engauge Digitizer  2
CurveStyles.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 "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 
19 {
20 }
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 
67 QStringList 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 
79 CurveStyle CurveStyles::curveStyle (const QString &curveName) const
80 {
81  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
82  return m_curveStyles [curveName];
83 }
84 
85 ColorPalette CurveStyles::lineColor (const QString &curveName) const
86 {
87  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
88  return m_curveStyles [curveName].lineStyle().paletteColor();
89 }
90 
91 CurveConnectAs CurveStyles::lineConnectAs (const QString &curveName) const
92 {
93  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
94  return m_curveStyles [curveName].lineStyle().curveConnectAs();
95 }
96 
97 const LineStyle CurveStyles::lineStyle (const QString &curveName) const
98 {
99  return m_curveStyles [curveName].lineStyle();
100 }
101 
102 int CurveStyles::lineWidth (const QString &curveName) const
103 {
104  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
105  return m_curveStyles [curveName].lineStyle().width();
106 }
107 
108 void 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 
142 ColorPalette CurveStyles::pointColor (const QString &curveName) const
143 {
144  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
145  return m_curveStyles [curveName].pointStyle().paletteColor();
146 }
147 
148 bool CurveStyles::pointIsCircle (const QString &curveName) const
149 {
150  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
151  return m_curveStyles [curveName].pointStyle().isCircle();
152 }
153 
154 int CurveStyles::pointLineWidth (const QString &curveName) const
155 {
156  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
157  return m_curveStyles [curveName].pointStyle().lineWidth();
158 }
159 
160 QPolygonF CurveStyles::pointPolygon (const QString &curveName) const
161 {
162  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
163  return m_curveStyles [curveName].pointStyle().polygon();
164 }
165 
166 int CurveStyles::pointRadius (const QString &curveName) const
167 {
168  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
169  return m_curveStyles [curveName].pointStyle().radius();
170 }
171 
172 PointShape CurveStyles::pointShape (const QString &curveName) const
173 {
174  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
175  return m_curveStyles [curveName].pointStyle().shape ();
176 }
177 
178 const PointStyle CurveStyles::pointStyle (const QString &curveName) const
179 {
180  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
181  return m_curveStyles [curveName].pointStyle();
182 }
183 
184 void 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 
201 void CurveStyles::setCurveStyle (const QString &curveName,
202  const CurveStyle &curveStyle)
203 {
204  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
205  m_curveStyles [curveName] = curveStyle;
206 }
207 
208 void CurveStyles::setLineColor (const QString &curveName,
209  ColorPalette lineColor)
210 {
211  ENGAUGE_ASSERT (m_curveStyles.contains (curveName));
212  CurveStyle &curveStyle = m_curveStyles [curveName];
213  curveStyle.setLineColor (lineColor);
214 }
215 
216 void 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 
224 void 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 
232 void 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 
240 void 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 
248 void 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 
256 void 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 
void setLineColor(const QString &curveName, ColorPalette lineColor)
Set method for line color in specified curve.
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
Definition: CurveStyles.cpp:79
void setLineConnectAs(const QString &curveName, CurveConnectAs curveConnectAs)
Set method for connect as method for lines in specified curve.
void setLineWidth(const QString &curveName, int width)
Set method for line width in specified curve.
CurveStyles()
Default constructor.
Definition: CurveStyles.cpp:18
void setPointLineWidth(const QString &curveName, int width)
Set method for curve point perimeter line width.
QStringList curveNames() const
List of all curve names.
Definition: CurveStyles.cpp:67
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:22
int lineWidth(const QString &curveName) const
Get method for line width in specified curve.
CurveStyles & operator=(const CurveStyles &other)
Assignment constructor.
Definition: CurveStyles.cpp:53
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:42
PointStyle pointStyle() const
Get method for PointStyle.
Definition: CurveStyle.cpp:75
void loadXml(QXmlStreamReader &reader)
Load from serialized xml.
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...
virtual QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
void saveXml(QXmlStreamWriter &writer) const
Serialize to xml.
PointShape pointShape(const QString &curveName) const
Get method for curve point shape.
bool pointIsCircle(const QString &curveName) const
Get method for curve point is circle in specified curve.
void setCurveStyle(const QString &curveName, const CurveStyle &curveStyle)
Set method for curve style.
ColorPalette pointColor(const QString &curveName) const
Get method for curve point color in specified curve.
Details for a specific Point.
Definition: PointStyle.h:20
QString loadXml(QXmlStreamReader &reader)
Load from serialized xml. Returns the curve name.
Definition: CurveStyle.cpp:31
QPolygonF pointPolygon(const QString &curveName) const
Get method for curve point polygon in specified curve.
const LineStyle lineStyle(const QString &curveName) const
Get method for copying one line style in one step.
Definition: CurveStyles.cpp:97
LineStyle lineStyle() const
Get method for LineStyle.
Definition: CurveStyle.cpp:26
int pointRadius(const QString &curveName) const
Get method for curve point radius.
Container for LineStyle and PointStyle for one Curve.
Definition: CurveStyle.h:18
Container for one set of digitized Points.
Definition: Curve.h:33
Details for a specific Line.
Definition: LineStyle.h:19
void setPointRadius(const QString &curveName, int radius)
Set method for curve point radius.
virtual Curve * curveForCurveName(const QString &curveName)
See CurvesGraphs::curveForCurveName, although this also works for AXIS_CURVE_NAME.
void saveXml(QXmlStreamWriter &writer, const QString &curveName) const
Serialize to xml.
Definition: CurveStyle.cpp:93
CurveConnectAs lineConnectAs(const QString &curveName) const
Get method for connect as method for lines in specified curve.
Definition: CurveStyles.cpp:91
CurveStyle curveStyle() const
Return the curve style.
Definition: Curve.cpp:148
ColorPalette lineColor(const QString &curveName) const
Get method for line color in specified curve.
Definition: CurveStyles.cpp:85
int pointLineWidth(const QString &curveName) const
Get method for curve point line width.
void setPointShape(const QString &curveName, PointShape shape)
Set method for curve point shape in specified curve.
virtual const Curve & curveAxes() const
Get method for axis curve.
void setPointColor(const QString &curveName, ColorPalette curveColor)
Set method curve point color in specified curve.