Engauge Digitizer  2
PointIdentifiers.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 "DocumentSerialize.h"
8 #include "EngaugeAssert.h"
9 #include "Logger.h"
10 #include "PointIdentifiers.h"
11 #include <QObject>
12 #include <QXmlStreamReader>
13 #include <QXmlStreamWriter>
14 #include "Xml.h"
15 
17 {
18 }
19 
20 bool PointIdentifiers::contains(const QString &pointIdentifier) const
21 {
22  LOG4CPP_DEBUG_S ((*mainCat)) << "PointIdentifiers::contains"
23  << " pointCount=" << m_pointIdentifiers.count();
24 
25  return m_pointIdentifiers.contains (pointIdentifier);
26 }
27 
29 {
30  return m_pointIdentifiers.count();
31 }
32 
33 QString PointIdentifiers::getKey (int i) const
34 {
35  ENGAUGE_ASSERT (i < m_pointIdentifiers.count());
36 
37  QList<QString> keys = m_pointIdentifiers.keys();
38 
39  return keys.at(i);
40 }
41 
42 bool PointIdentifiers::getValue (const QString &pointIdentifier) const
43 {
44  ENGAUGE_ASSERT (m_pointIdentifiers.contains (pointIdentifier));
45 
46  return m_pointIdentifiers [pointIdentifier];
47 }
48 
49 void PointIdentifiers::loadXml (QXmlStreamReader &reader)
50 {
51  bool success = true;
52 
53  // Read through each DOCUMENT_SERIALIZE_POINT_IDENTIFIER until end of DOCUMENT_SERIALIZE_POINT_IDENTIFIERS is encountered
54  while (loadNextFromReader (reader)) {
55 
56  if (reader.atEnd() || reader.hasError ()) {
57  success = false;
58  break;
59  }
60 
61  if ((reader.tokenType() == QXmlStreamReader::EndElement) &&
62  (reader.name() == DOCUMENT_SERIALIZE_POINT_IDENTIFIERS)) {
63  break;
64  }
65 
66  // Not done yet
67  if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
68  (reader.name() == DOCUMENT_SERIALIZE_POINT_IDENTIFIER)) {
69 
70  // This is an entry that we need to add
71  QXmlStreamAttributes attributes = reader.attributes();
72 
73  if (attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_NAME) &&
74  attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_VALUE)) {
75 
76  QString valueStr = attributes.value (DOCUMENT_SERIALIZE_POINT_IDENTIFIER_VALUE).toString();
77 
78  QString identifier = attributes.value (DOCUMENT_SERIALIZE_POINT_IDENTIFIER_NAME).toString();
79  bool value = (valueStr == DOCUMENT_SERIALIZE_BOOL_TRUE);
80 
81  m_pointIdentifiers [identifier] = value;
82  }
83  }
84  }
85 
86  if (!success) {
87  reader.raiseError (QObject::tr ("Cannot read point identifiers"));
88  }
89 }
90 
91 void PointIdentifiers::saveXml (QXmlStreamWriter &writer) const
92 {
93  writer.writeStartElement(DOCUMENT_SERIALIZE_POINT_IDENTIFIERS);
94  PointIdentifiersInternal::const_iterator itr;
95  for (itr = m_pointIdentifiers.begin(); itr != m_pointIdentifiers.end (); itr++) {
96  QString identifier = itr.key();
97  bool value = itr.value();
98  writer.writeStartElement (DOCUMENT_SERIALIZE_POINT_IDENTIFIER);
99  writer.writeAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_NAME, identifier);
100  writer.writeAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_VALUE,
101  value ? DOCUMENT_SERIALIZE_BOOL_TRUE : DOCUMENT_SERIALIZE_BOOL_FALSE);
102  writer.writeEndElement();
103  }
104  writer.writeEndElement();
105 }
106 
107 void PointIdentifiers::setKeyValue (const QString &pointIdentifier,
108  bool value)
109 {
110  m_pointIdentifiers [pointIdentifier] = value;
111 }
QString getKey(int i) const
Get key for index.
bool getValue(const QString &pointIdentifier) const
Get value for key.
void setKeyValue(const QString &pointIdentifier, bool value)
Set key/value pair.
void saveXml(QXmlStreamWriter &writer) const
Serialize table to xml.
PointIdentifiers()
Single constructor.
void loadXml(QXmlStreamReader &reader)
Load from serialized xml.
bool contains(const QString &pointIdentifier) const
True if specified entry exists in the table.
int count() const
Number of entries.