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 "DocumentModelAxesChecker.h"
9 #include "DocumentSerialize.h"
10 #include "Logger.h"
11 #include <QObject>
12 #include <QTextStream>
13 #include "QtToString.h"
14 #include <QXmlStreamWriter>
15 #include "Xml.h"
16
17 const int DEFAULT_CHECKER_SECONDS = 3;
18
19 // Color that should be easily visible against black axes lines. Red resonates with
20 // the default axes point color, and seems fairly bright when opacity is made transparent.
21 const ColorPalette DEFAULT_LINE_COLOR = COLOR_PALETTE_RED;
22
DocumentModelAxesChecker()23 DocumentModelAxesChecker::DocumentModelAxesChecker() :
24 m_checkerMode (CHECKER_MODE_N_SECONDS),
25 m_checkerSeconds (DEFAULT_CHECKER_SECONDS),
26 m_lineColor (DEFAULT_LINE_COLOR)
27 {
28 }
29
DocumentModelAxesChecker(const Document & document)30 DocumentModelAxesChecker::DocumentModelAxesChecker(const Document &document) :
31 m_checkerMode (document.modelAxesChecker().checkerMode()),
32 m_checkerSeconds (document.modelAxesChecker().checkerSeconds()),
33 m_lineColor (document.modelAxesChecker().lineColor())
34 {
35 }
36
DocumentModelAxesChecker(const DocumentModelAxesChecker & other)37 DocumentModelAxesChecker::DocumentModelAxesChecker(const DocumentModelAxesChecker &other) :
38 m_checkerMode (other.checkerMode()),
39 m_checkerSeconds (other.checkerSeconds()),
40 m_lineColor (other.lineColor())
41 {
42 }
43
operator =(const DocumentModelAxesChecker & other)44 DocumentModelAxesChecker &DocumentModelAxesChecker::operator=(const DocumentModelAxesChecker &other)
45 {
46 m_checkerMode = other.checkerMode();
47 m_checkerSeconds = other.checkerSeconds();
48 m_lineColor = other.lineColor();
49
50 return *this;
51 }
52
checkerMode() const53 CheckerMode DocumentModelAxesChecker::checkerMode() const
54 {
55 return m_checkerMode;
56 }
57
checkerSeconds() const58 int DocumentModelAxesChecker::checkerSeconds() const
59 {
60 return m_checkerSeconds;
61 }
62
lineColor() const63 ColorPalette DocumentModelAxesChecker::lineColor () const
64 {
65 return m_lineColor;
66 }
67
loadXml(QXmlStreamReader & reader)68 void DocumentModelAxesChecker::loadXml(QXmlStreamReader &reader)
69 {
70 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelAxesChecker::loadXml";
71
72 bool success = true;
73
74 QXmlStreamAttributes attributes = reader.attributes();
75
76 if (attributes.hasAttribute(DOCUMENT_SERIALIZE_AXES_CHECKER_MODE) &&
77 attributes.hasAttribute(DOCUMENT_SERIALIZE_AXES_CHECKER_SECONDS) &&
78 attributes.hasAttribute(DOCUMENT_SERIALIZE_AXES_CHECKER_LINE_COLOR)) {
79
80 setCheckerMode (static_cast<CheckerMode> (attributes.value(DOCUMENT_SERIALIZE_AXES_CHECKER_MODE).toInt()));
81 setCheckerSeconds (attributes.value(DOCUMENT_SERIALIZE_AXES_CHECKER_SECONDS).toInt());
82 setLineColor (static_cast<ColorPalette> (attributes.value(DOCUMENT_SERIALIZE_AXES_CHECKER_LINE_COLOR).toInt()));
83
84 // Read until end of this subtree
85 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
86 (reader.name() != DOCUMENT_SERIALIZE_AXES_CHECKER)){
87 loadNextFromReader(reader);
88 if (reader.atEnd()) {
89 success = false;
90 break;
91 }
92 }
93 }
94
95 if (!success) {
96 reader.raiseError (QObject::tr ("Cannot read axes checker data"));
97 }
98 }
99
printStream(QString indentation,QTextStream & str) const100 void DocumentModelAxesChecker::printStream(QString indentation,
101 QTextStream &str) const
102 {
103 str << indentation << "DocumentModelAxesChecker\n";
104
105 indentation += INDENTATION_DELTA;
106
107 str << indentation << "checkerMode=" << checkerModeToString (m_checkerMode) << "\n";
108 str << indentation << "checkerSeconds=" << m_checkerSeconds << "\n";
109 str << indentation << "color=" << colorPaletteToString (m_lineColor) << "\n";
110 }
111
saveXml(QXmlStreamWriter & writer) const112 void DocumentModelAxesChecker::saveXml(QXmlStreamWriter &writer) const
113 {
114 LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelAxesChecker::saveXml";
115
116 writer.writeStartElement(DOCUMENT_SERIALIZE_AXES_CHECKER);
117 writer.writeAttribute(DOCUMENT_SERIALIZE_AXES_CHECKER_MODE, QString::number (m_checkerMode));
118 writer.writeAttribute(DOCUMENT_SERIALIZE_AXES_CHECKER_SECONDS, QString::number (m_checkerSeconds));
119 writer.writeAttribute(DOCUMENT_SERIALIZE_AXES_CHECKER_LINE_COLOR, QString::number (m_lineColor));
120 writer.writeEndElement();
121 }
122
setCheckerMode(CheckerMode checkerMode)123 void DocumentModelAxesChecker::setCheckerMode(CheckerMode checkerMode)
124 {
125 m_checkerMode = checkerMode;
126 }
127
setCheckerSeconds(int seconds)128 void DocumentModelAxesChecker::setCheckerSeconds(int seconds)
129 {
130 m_checkerSeconds = seconds;
131 }
132
setLineColor(ColorPalette lineColor)133 void DocumentModelAxesChecker::setLineColor (ColorPalette lineColor)
134 {
135 m_lineColor = lineColor;
136 }
137