Mercurial > hg > easaier-soundaccess
comparison data/fileio/QueryConfigReader.cpp @ 15:11e298cdb9e7
add
- EasaierSessionManager
- Easaier menus
- Interval model
author | lbajardsilogic |
---|---|
date | Mon, 14 May 2007 13:10:49 +0000 |
parents | |
children | 59d84a8bb76c |
comparison
equal
deleted
inserted
replaced
14:819ad579459f | 15:11e298cdb9e7 |
---|---|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ | |
2 | |
3 /* Sound Access | |
4 EASAIER client application. | |
5 Silogic 2007. Laure Bajard. | |
6 | |
7 This program is free software; you can redistribute it and/or | |
8 modify it under the terms of the GNU General Public License as | |
9 published by the Free Software Foundation; either version 2 of the | |
10 License, or (at your option) any later version. See the file | |
11 COPYING included with this distribution for more information. | |
12 */ | |
13 | |
14 #include "QueryConfigReader.h" | |
15 | |
16 #include <iostream> | |
17 | |
18 #include "model/QueryModel.h" | |
19 | |
20 QueryConfigReader::QueryConfigReader(QueryModel * queryModel) : | |
21 m_queryModel(queryModel) | |
22 {} | |
23 | |
24 bool QueryConfigReader::parse(const QString & filename) | |
25 { | |
26 QueryConfigHandler handler(m_queryModel); | |
27 QXmlSimpleReader reader; | |
28 reader.setContentHandler(&handler); | |
29 reader.setErrorHandler(&handler); | |
30 | |
31 QFile file(filename); | |
32 | |
33 if (!file.open(QFile::ReadOnly | QFile::Text)) { | |
34 return false; | |
35 } | |
36 | |
37 QXmlInputSource xmlInputSource(&file); | |
38 if (reader.parse(xmlInputSource)) | |
39 { | |
40 return true; | |
41 } | |
42 | |
43 return false; | |
44 } | |
45 | |
46 QueryConfigHandler::QueryConfigHandler(QueryModel * queryModel) : QXmlDefaultHandler(), | |
47 m_inTheme(false), | |
48 m_inFieldGroup(false), | |
49 m_queryModel(queryModel) | |
50 {} | |
51 | |
52 bool QueryConfigHandler::startElement(const QString &namespaceURI, const QString &localName, | |
53 const QString &qName, const QXmlAttributes &attributes) | |
54 { | |
55 | |
56 QString name = qName.toLower(); | |
57 | |
58 bool ok = false; | |
59 | |
60 // Valid element names: | |
61 // | |
62 // easaierquery | |
63 // theme | |
64 // fieldgroup | |
65 // field | |
66 | |
67 if (name == "easaierquery") { | |
68 | |
69 // nothing needed | |
70 ok = true; | |
71 | |
72 } else if (name == "theme") { | |
73 | |
74 m_inTheme = true; | |
75 m_queryModel->addTheme(attributes.value("name"), attributes.value("label")); | |
76 ok = true; | |
77 | |
78 } else if (name == "fieldgroup") { | |
79 | |
80 m_inFieldGroup = true; | |
81 m_queryModel->newGroup(attributes.value("name"), attributes.value("label")); | |
82 ok = true; | |
83 | |
84 } else if (name == "field") { | |
85 | |
86 ok = true; | |
87 QString name = attributes.value("name"); | |
88 QString label = attributes.value("label"); | |
89 QString type = attributes.value("xsi:type"); | |
90 QString range = attributes.value("range"); | |
91 QString unit = attributes.value("unit"); | |
92 QString comment = attributes.value("comment"); | |
93 m_queryModel->addProperty(name, label, type, range, unit, comment); | |
94 | |
95 } | |
96 | |
97 if (!ok) { | |
98 std::cerr << "WARNING: QueryConfigReader-XML: Failed to completely process element \"" | |
99 << name.toLocal8Bit().data() << "\"" << std::endl; | |
100 } | |
101 | |
102 return true; | |
103 } | |
104 | |
105 bool QueryConfigHandler::endElement(const QString &namespaceURI, const QString &localName, | |
106 const QString &qName) | |
107 { | |
108 QString name = qName.toLower(); | |
109 | |
110 if (name == "theme") | |
111 { | |
112 m_inTheme = false; | |
113 } | |
114 else if (name == "fieldgroup") | |
115 { | |
116 m_inFieldGroup = false; | |
117 } | |
118 | |
119 return true; | |
120 } | |
121 | |
122 bool QueryConfigHandler::characters(const QString &str) | |
123 { | |
124 bool ok = false; | |
125 | |
126 return true; | |
127 } | |
128 | |
129 bool QueryConfigHandler::error(const QXmlParseException &exception) | |
130 { | |
131 QString errorString; | |
132 errorString += QString("ERROR: QueryConfigReader-XML: %1 at line %2, column %3") | |
133 .arg(exception.message()) | |
134 .arg(exception.lineNumber()) | |
135 .arg(exception.columnNumber()); | |
136 std::cerr << errorString.toLocal8Bit().data() << std::endl; | |
137 return QXmlDefaultHandler::error(exception); | |
138 } | |
139 | |
140 bool QueryConfigHandler::fatalError(const QXmlParseException &exception) | |
141 { | |
142 QString errorString; | |
143 errorString += QString("FATAL ERROR: QueryConfigReader-XML: %1 at line %2, column %3") | |
144 .arg(exception.message()) | |
145 .arg(exception.lineNumber()) | |
146 .arg(exception.columnNumber()); | |
147 std::cerr << errorString.toLocal8Bit().data() << std::endl; | |
148 return QXmlDefaultHandler::fatalError(exception); | |
149 } |