Engauge Digitizer 2
Loading...
Searching...
No Matches
DocumentModelColorFilter.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"
10#include "DocumentSerialize.h"
11#include "EngaugeAssert.h"
12#include "Logger.h"
13#include <QStringList>
14#include <QTextStream>
15#include <QXmlStreamWriter>
16#include "Xml.h"
17
19{
20 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::DocumentModelColorFilter";
21}
22
24{
25 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::DocumentModelColorFilter";
26
27 // Axis curve
28 const Curve &curveAxes = coordSystem.curveAxes();
29 m_colorFilterSettingsList [AXIS_CURVE_NAME] = curveAxes.colorFilterSettings ();
30
31 // Graph curves
32 QStringList graphCurveNames = coordSystem.curvesGraphsNames();
33 QStringList::const_iterator itr;
34 for (itr = graphCurveNames.begin (); itr != graphCurveNames.end (); itr++) {
35
36 const QString &graphCurveName = *itr;
37 const Curve *graphCurve = coordSystem.curveForCurveName(graphCurveName);
38 m_colorFilterSettingsList [graphCurveName] = graphCurve->colorFilterSettings();
39 }
40}
41
43{
44 // Curve filters
45 ColorFilterSettingsList::const_iterator itr;
46 for (itr = other.colorFilterSettingsList ().constBegin (); itr != other.colorFilterSettingsList().constEnd(); itr++) {
47 QString curveName = itr.key();
49 m_colorFilterSettingsList [curveName] = colorFilterSettings;
50 }
51}
52
54{
55 // Curve filters
56 ColorFilterSettingsList::const_iterator itr;
57 for (itr = other.colorFilterSettingsList ().constBegin (); itr != other.colorFilterSettingsList ().constEnd(); itr++) {
58 QString curveName = itr.key();
60 m_colorFilterSettingsList [curveName] = colorFilterSettings;
61 }
62
63 return *this;
64}
65
67{
68 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
69 return m_colorFilterSettingsList [curveName].colorFilterMode();
70}
71
73{
74 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
75 return m_colorFilterSettingsList [curveName];
76}
77
79{
80 return m_colorFilterSettingsList;
81}
82
83int DocumentModelColorFilter::foregroundHigh (const QString &curveName) const
84{
85 QStringList curveNames (m_colorFilterSettingsList.keys());
86 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::foregroundHigh"
87 << " curve=" << curveName.toLatin1().data()
88 << " curves=" << curveNames.join(",").toLatin1().data();
89
90 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
91 return m_colorFilterSettingsList [curveName].foregroundHigh();
92}
93
94int DocumentModelColorFilter::foregroundLow (const QString &curveName) const
95{
96 QStringList curveNames (m_colorFilterSettingsList.keys());
97 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::foregroundLow"
98 << " curve=" << curveName.toLatin1().data()
99 << " curves=" << curveNames.join(",").toLatin1().data();
100
101 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
102 return m_colorFilterSettingsList [curveName].foregroundLow();
103}
104
105double DocumentModelColorFilter::high (const QString &curveName) const
106{
107 QStringList curveNames (m_colorFilterSettingsList.keys());
108 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::high"
109 << " curve=" << curveName.toLatin1().data()
110 << " curves=" << curveNames.join(",").toLatin1().data();
111
112 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
113 return m_colorFilterSettingsList [curveName].high();
114}
115
116int DocumentModelColorFilter::hueHigh (const QString &curveName) const
117{
118 QStringList curveNames (m_colorFilterSettingsList.keys());
119 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::hueHigh"
120 << " curve=" << curveName.toLatin1().data()
121 << " curves=" << curveNames.join(",").toLatin1().data();
122
123 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
124 return m_colorFilterSettingsList [curveName].hueHigh();
125}
126
127int DocumentModelColorFilter::hueLow (const QString &curveName) const
128{
129 QStringList curveNames (m_colorFilterSettingsList.keys());
130 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::hueLow"
131 << " curve=" << curveName.toLatin1().data()
132 << " curves=" << curveNames.join(",").toLatin1().data();
133
134 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
135 return m_colorFilterSettingsList [curveName].hueLow();
136}
137
138int DocumentModelColorFilter::intensityHigh (const QString &curveName) const
139{
140 QStringList curveNames (m_colorFilterSettingsList.keys());
141 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::intensityHigh"
142 << " curve=" << curveName.toLatin1().data()
143 << " curves=" << curveNames.join(",").toLatin1().data();
144
145 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
146 return m_colorFilterSettingsList [curveName].intensityHigh();
147}
148
149int DocumentModelColorFilter::intensityLow (const QString &curveName) const
150{
151 QStringList curveNames (m_colorFilterSettingsList.keys());
152 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::intensityLow"
153 << " curve=" << curveName.toLatin1().data()
154 << " curves=" << curveNames.join(",").toLatin1().data();
155
156 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
157 return m_colorFilterSettingsList [curveName].intensityLow();
158}
159
160void DocumentModelColorFilter::loadXml(QXmlStreamReader &reader)
161{
162 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::loadXml";
163
164 bool success = true;
165
166 m_colorFilterSettingsList.clear();
167
168 // A mistake was made, and the DOCUMENT_SERIALIZE_FILTER tag was used for DocumentModelColorFilter,
169 // and DOCUMENT_SERIALIZE_COLOR_FILTER is used for ColorFilterSettings. Too late to change now.
170 bool inFilter = false;
171 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
172 (reader.name() != DOCUMENT_SERIALIZE_FILTER)) {
173 loadNextFromReader(reader);
174 if (reader.atEnd()) {
175 success = false;
176 break;
177 }
178
179 if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
180 (reader.name() == DOCUMENT_SERIALIZE_COLOR_FILTER)) {
181
182 inFilter = true;
183 }
184
185 if (inFilter && ((reader.tokenType() == QXmlStreamReader::StartElement) &&
186 (reader.name() == DOCUMENT_SERIALIZE_COLOR_FILTER))) {
187
188 QXmlStreamAttributes attributes = reader.attributes();
189
190 if (attributes.hasAttribute(DOCUMENT_SERIALIZE_CURVE_NAME)) {
191
192 QString curveName = attributes.value(DOCUMENT_SERIALIZE_CURVE_NAME).toString();
193
195 m_colorFilterSettingsList [curveName] = colorFilterSettings;
196
197 } else {
198 success = false;
199 break;
200 }
201 }
202 }
203
204 if (!success) {
205 reader.raiseError(QObject::tr ("Cannot read filter data"));
206 }
207
208 // Read past the end token from the first settings so that is not confused with the end token from the after settings
209 loadNextFromReader(reader);
210}
211
212double DocumentModelColorFilter::low (const QString &curveName) const
213{
214 QStringList curveNames (m_colorFilterSettingsList.keys());
215 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::low"
216 << " curve=" << curveName.toLatin1().data()
217 << " curves=" << curveNames.join(",").toLatin1().data();
218
219 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
220 return m_colorFilterSettingsList [curveName].low();
221}
222
223int DocumentModelColorFilter::saturationHigh (const QString &curveName) const
224{
225 QStringList curveNames (m_colorFilterSettingsList.keys());
226 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::saturationHigh"
227 << " curve=" << curveName.toLatin1().data()
228 << " curves=" << curveNames.join(",").toLatin1().data();
229
230 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
231 return m_colorFilterSettingsList [curveName].saturationHigh();
232}
233
234int DocumentModelColorFilter::saturationLow (const QString &curveName) const
235{
236 QStringList curveNames (m_colorFilterSettingsList.keys());
237 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::saturationLow"
238 << " curve=" << curveName.toLatin1().data()
239 << " curves=" << curveNames.join(",").toLatin1().data();
240
241 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
242 return m_colorFilterSettingsList [curveName].saturationLow();
243}
244
245void DocumentModelColorFilter::saveXml(QXmlStreamWriter &writer) const
246{
247 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelColorFilter::saveXml";
248
249 writer.writeStartElement(DOCUMENT_SERIALIZE_FILTER);
250
251 // Loop through filters
252 ColorFilterSettingsList::const_iterator itr;
253 for (itr = m_colorFilterSettingsList.begin (); itr != m_colorFilterSettingsList.end (); itr++) {
254
255 QString curveName = itr.key();
256 const ColorFilterSettings &colorFilterSettings = itr.value();
257
258 colorFilterSettings.saveXml(writer,
259 curveName);
260 }
261
262 writer.writeEndElement();
263}
264
267{
268 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
269 m_colorFilterSettingsList [curveName].setColorFilterMode(colorFilterMode);
270}
271
272void DocumentModelColorFilter::setForegroundHigh (const QString &curveName,
273 int foregroundHigh)
274{
275 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
276 m_colorFilterSettingsList [curveName].setForegroundHigh(foregroundHigh);
277}
278
279void DocumentModelColorFilter::setForegroundLow (const QString &curveName,
280 int foregroundLow)
281{
282 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
283 m_colorFilterSettingsList [curveName].setForegroundLow(foregroundLow);
284}
285
286void DocumentModelColorFilter::setHigh (const QString &curveName,
287 double s0To1)
288{
289 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
290 m_colorFilterSettingsList [curveName].setHigh(s0To1);
291}
292
293void DocumentModelColorFilter::setHueHigh (const QString &curveName,
294 int hueHigh)
295{
296 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
297 m_colorFilterSettingsList [curveName].setHueHigh(hueHigh);
298}
299
300void DocumentModelColorFilter::setHueLow (const QString &curveName,
301 int hueLow)
302{
303 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
304 m_colorFilterSettingsList [curveName].setHueLow(hueLow);
305}
306
307void DocumentModelColorFilter::setIntensityHigh (const QString &curveName,
308 int intensityHigh)
309{
310 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
311 m_colorFilterSettingsList [curveName].setIntensityHigh(intensityHigh);
312}
313
314void DocumentModelColorFilter::setIntensityLow (const QString &curveName,
315 int intensityLow)
316{
317 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
318 m_colorFilterSettingsList [curveName].setIntensityLow(intensityLow);
319}
320
321void DocumentModelColorFilter::setLow (const QString &curveName,
322 double s0To1)
323{
324 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
325 m_colorFilterSettingsList [curveName].setLow(s0To1);
326}
327
328void DocumentModelColorFilter::setSaturationHigh (const QString &curveName,
329 int saturationHigh)
330{
331 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
332 m_colorFilterSettingsList [curveName].setSaturationHigh(saturationHigh);
333}
334
335void DocumentModelColorFilter::setSaturationLow (const QString &curveName,
336 int saturationLow)
337{
338 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
339 m_colorFilterSettingsList [curveName].setSaturationLow(saturationLow);
340}
341
342void DocumentModelColorFilter::setValueHigh (const QString &curveName,
343 int valueHigh)
344{
345 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
346 m_colorFilterSettingsList [curveName].setValueHigh(valueHigh);
347}
348
349void DocumentModelColorFilter::setValueLow (const QString &curveName,
350 int valueLow)
351{
352 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
353 m_colorFilterSettingsList [curveName].setValueLow(valueLow);
354}
355
356int DocumentModelColorFilter::valueHigh (const QString &curveName) const
357{
358 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
359 return m_colorFilterSettingsList [curveName].valueHigh();
360}
361
362int DocumentModelColorFilter::valueLow (const QString &curveName) const
363{
364 ENGAUGE_ASSERT (m_colorFilterSettingsList.contains (curveName));
365 return m_colorFilterSettingsList [curveName].valueLow();
366}
const QString AXIS_CURVE_NAME
ColorFilterMode
QHash< QString, ColorFilterSettings > ColorFilterSettingsList
const QString DOCUMENT_SERIALIZE_COLOR_FILTER
const QString DOCUMENT_SERIALIZE_CURVE_NAME
const QString DOCUMENT_SERIALIZE_FILTER
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT.
log4cpp::Category * mainCat
Definition Logger.cpp:14
QXmlStreamReader::TokenType loadNextFromReader(QXmlStreamReader &reader)
Load next token from xml reader.
Definition Xml.cpp:14
Color filter parameters for one curve. For a class, this is handled the same as LineStyle and PointSt...
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 one set of digitized Points.
Definition Curve.h:34
ColorFilterSettings colorFilterSettings() const
Return the color filter.
Definition Curve.cpp:139
double high(const QString &curveName) const
High value of foreground, hue, intensity, saturation or value according to current filter mode.
void setValueHigh(const QString &curveName, int valueHigh)
Set method for value high.
double low(const QString &curveName) const
Low value of foreground, hue, intensity, saturation or value according to current filter mode normali...
int hueLow(const QString &curveName) const
Get method for hue lower bound.
DocumentModelColorFilter()
Default constructor.
int hueHigh(const QString &curveName) const
Get method for hue higher bound.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
const ColorFilterSettings colorFilterSettings(const QString &curveName) const
Get method for copying one color filter. Cannot return just a reference or else there is a warning ab...
ColorFilterMode colorFilterMode(const QString &curveName) const
Get method for filter mode.
void setIntensityLow(const QString &curveName, int intensityLow)
Set method for intensity lower bound.
int foregroundHigh(const QString &curveName) const
Get method for foreground higher bound.
int saturationLow(const QString &curveName) const
Get method for saturation lower bound.
DocumentModelColorFilter & operator=(const DocumentModelColorFilter &other)
Assignment constructor.
int foregroundLow(const QString &curveName) const
Get method for foreground lower bound.
void setHigh(const QString &curveName, double s0To1)
Set the high value for the current filter mode.
void setHueHigh(const QString &curveName, int hueHigh)
Set method for hue higher bound.
void setForegroundHigh(const QString &curveName, int foregroundHigh)
Set method for foreground higher bound.
void setSaturationHigh(const QString &curveName, int saturationHigh)
Set method for saturation high.
void setHueLow(const QString &curveName, int hueLow)
Set method for hue lower bound.
const ColorFilterSettingsList & colorFilterSettingsList() const
Get method for copying all color filters in one step.
int valueLow(const QString &curveName) const
Get method for value low.
int saturationHigh(const QString &curveName) const
Get method for saturation higher bound.
void setValueLow(const QString &curveName, int valueLow)
Set method for value low.
void setSaturationLow(const QString &curveName, int saturationLow)
Set method for saturation low.
void setColorFilterMode(const QString &curveName, ColorFilterMode colorFilterMode)
Set method for filter mode.
int valueHigh(const QString &curveName) const
Get method for value high.
int intensityHigh(const QString &curveName) const
Get method for intensity higher bound.
void setIntensityHigh(const QString &curveName, int intensityHigh)
Set method for intensity higher bound.
void setLow(const QString &curveName, double s0To1)
Set the low value for the current filter mode.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
void setForegroundLow(const QString &curveName, int foregroundLow)
Set method for foreground lower bound.
int intensityLow(const QString &curveName) const
Get method for intensity lower bound.
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18