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