19 #include "xml_parameter_reader.h" 24 namespace ParameterGui
27 : tree_widget(tree_widget)
29 QStyle * style = tree_widget->style();
31 subsection_icon.addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon), QIcon::Normal, QIcon::Off);
32 subsection_icon.addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Normal, QIcon::On);
34 parameter_icon.addPixmap(style->standardPixmap(QStyle::SP_FileIcon));
41 xml.setDevice(device);
51 while (
xml.readNext() != QXmlStreamReader::Invalid)
53 if (
xml.isStartElement())
54 if (
xml.name() ==
"ParameterHandler")
62 xml.raiseError(QObject::tr(
"The file is not an ParameterHandler XML file."));
71 return QObject::tr(
"%1\nLine %2, column %3")
72 .arg(
xml.errorString())
73 .arg(
xml.lineNumber())
74 .arg(
xml.columnNumber());
81 Q_ASSERT(
xml.isStartElement() &&
xml.name() ==
"ParameterHandler");
83 while (
xml.readNext() != QXmlStreamReader::Invalid)
85 if (
xml.isEndElement() &&
xml.name() ==
"ParameterHandler")
88 if (
xml.isStartElement())
126 Q_ASSERT(
xml.isStartElement());
131 subsection->setText(0,
demangle(
xml.name().toString()));
135 while (
xml.readNext() != QXmlStreamReader::Invalid)
137 if (
xml.isEndElement())
140 if (
xml.isStartElement())
142 if (
xml.name() ==
"value")
144 subsection->setFlags(subsection->flags() | Qt::ItemIsEditable);
149 subsection->setFlags(subsection->flags() | Qt::NoItemFlags);
160 Q_ASSERT(
xml.isStartElement() &&
xml.name() ==
"value");
162 QString value =
xml.readElementText();
163 parent->setText(1, value);
166 while (
xml.readNext() != QXmlStreamReader::Invalid)
168 if (
xml.isStartElement())
170 if (
xml.isStartElement() &&
xml.name() ==
"default_value")
172 QString default_value =
xml.readElementText();
173 parent->setText(2, default_value);
175 else if (
xml.isStartElement() &&
xml.name() ==
"documentation")
177 QString documentation =
xml.readElementText();
178 parent->setText(3, documentation);
180 if (!documentation.isEmpty())
182 parent->setToolTip(0,
"Documentation: " + documentation);
183 parent->setToolTip(1,
"Documentation: " + documentation);
184 parent->setStatusTip(0,
"Documentation: " + documentation);
187 else if (
xml.isStartElement() &&
xml.name() ==
"pattern")
189 QString pattern =
xml.readElementText();
190 parent->setText(4, pattern);
193 else if (
xml.isStartElement() &&
xml.name() ==
"pattern_description")
195 QString pattern_description =
xml.readElementText();
196 parent->setText(5, pattern_description);
199 parent->setStatusTip(1,
"Type: " + pattern_description +
" Default: " + parent->text(2));
204 QRegExp rx_string(
"\\b(Anything|FileName|DirectoryName|Selection|List|MultipleSelection)\\b"),
205 rx_integer(
"\\b(Integer)\\b"),
206 rx_double(
"\\b(Float|Floating|Double)\\b"),
207 rx_bool(
"\\b(Selection true|false)\\b");
209 if (rx_string.indexIn (pattern_description) != -1)
211 QString value = parent->text(1);
213 parent->setData(1, Qt::EditRole, value);
214 parent->setData(1, Qt::DisplayRole, value);
216 else if (rx_integer.indexIn (pattern_description) != -1)
218 QString text = parent->text(1);
222 int value = text.toInt(&ok);
226 parent->setData(1, Qt::EditRole, value);
227 parent->setData(1, Qt::DisplayRole, value);
230 xml.raiseError(QObject::tr(
"Cannot convert integer type to integer!"));
232 else if (rx_double.indexIn (pattern_description) != -1)
234 QString text = parent->text(1);
238 double value = text.toDouble(&ok);
242 parent->setData(1, Qt::EditRole, value);
243 parent->setData(1, Qt::DisplayRole, value);
246 xml.raiseError(QObject::tr(
"Cannot convert double type to double!"));
249 if (rx_bool.indexIn (pattern_description) != -1)
251 QRegExp test(parent->text(1));
255 if (test.exactMatch(
"true"))
257 else if (test.exactMatch(
"false"))
260 xml.raiseError(QObject::tr(
"Cannot convert boolen type to boolean!"));
262 parent->setText(1,
"");
263 parent->setData(1, Qt::EditRole, value);
264 parent->setData(1, Qt::DisplayRole, value);
271 xml.raiseError(QObject::tr(
"Incomplete or unknown Parameter!"));
282 QTreeWidgetItem * child_item;
285 child_item =
new QTreeWidgetItem(item);
290 child_item->setData(0, Qt::DisplayRole,
xml.name().toString());
291 child_item->setText(0,
xml.name().toString());
300 std::string s_temp (s.toStdString());
303 u.reserve (s_temp.size());
305 for (
unsigned int i=0; i<s_temp.size(); ++i)
306 if (s_temp[i] !=
'_')
307 u.push_back (s_temp[i]);
310 Q_ASSERT (i+2 < s_temp.size());
315 case '0': c = 0 * 16;
break;
316 case '1': c = 1 * 16;
break;
317 case '2': c = 2 * 16;
break;
318 case '3': c = 3 * 16;
break;
319 case '4': c = 4 * 16;
break;
320 case '5': c = 5 * 16;
break;
321 case '6': c = 6 * 16;
break;
322 case '7': c = 7 * 16;
break;
323 case '8': c = 8 * 16;
break;
324 case '9': c = 9 * 16;
break;
325 case 'a': c = 10 * 16;
break;
326 case 'b': c = 11 * 16;
break;
327 case 'c': c = 12 * 16;
break;
328 case 'd': c = 13 * 16;
break;
329 case 'e': c = 14 * 16;
break;
330 case 'f': c = 15 * 16;
break;
336 case '0': c += 0;
break;
337 case '1': c += 1;
break;
338 case '2': c += 2;
break;
339 case '3': c += 3;
break;
340 case '4': c += 4;
break;
341 case '5': c += 5;
break;
342 case '6': c += 6;
break;
343 case '7': c += 7;
break;
344 case '8': c += 8;
break;
345 case '9': c += 9;
break;
346 case 'a': c += 10;
break;
347 case 'b': c += 11;
break;
348 case 'c': c += 12;
break;
349 case 'd': c += 13;
break;
350 case 'e': c += 14;
break;
351 case 'f': c += 15;
break;
356 u.push_back (static_cast<char>(c));
362 QString v (u.c_str());
XMLParameterReader(QTreeWidget *tree_widget)
QTreeWidgetItem * create_child_item(QTreeWidgetItem *item)
bool read_xml_file(QIODevice *device)
QString demangle(const QString &s)
void read_parameter_element(QTreeWidgetItem *parent)
QString error_string() const
QTreeWidget * tree_widget
void read_subsection_element(QTreeWidgetItem *parent)