1 #include "stationlistmodel.h"
6 #include <QStandardItem>
7 #include <QGeoCoordinate>
10 Q_DECLARE_METATYPE(QGeoCoordinate)
12 StationListModel::StationListModel(QObject *parent) :
13 QStandardItemModel(parent)
19 bool StationListModel::load(const QString &filename)
24 qDebug() << "loading file:" << fi.absoluteFilePath();
26 if (!file.open(QFile::ReadOnly | QFile::Text)) {
27 qDebug() << "cannot open file:" << filename;
30 m_reader.setDevice(&file);
32 while (!m_reader.atEnd()) {
33 if (m_reader.isStartElement()) {
34 if(m_reader.name() == "stations") {
35 readStationsElement();
37 m_reader.raiseError(tr("Not a qpl file"));
44 if (m_reader.hasError()) {
45 qDebug() << "parser error for:" << filename;
47 } else if (file.error() != QFile::NoError) {
48 qDebug() << "file error for:" << filename;
54 void StationListModel::readStationsElement()
57 while (!m_reader.atEnd()) {
58 if (m_reader.isEndElement()) {
61 } else if (m_reader.isStartElement()) {
62 if (m_reader.name() == "station") {
73 void StationListModel::readStationElement()
75 QStandardItem *item = new QStandardItem;
77 while (!m_reader.atEnd()) {
78 if (m_reader.isEndElement()) {
79 this->appendRow(item);
82 } else if (m_reader.isStartElement()) {
83 if (m_reader.name() == "pos") {
85 } else if (m_reader.name() == "name") {
86 readNameElement(item);
96 void StationListModel::readPosElement(QStandardItem *item)
98 QStringList coordinates = m_reader.readElementText().split(",");
99 QGeoCoordinate pos = QGeoCoordinate(coordinates[0].toDouble(), coordinates[1].toDouble());
100 item->setData(QVariant::fromValue(pos), PositionRole);
101 qDebug() << "pos:" << pos;
102 m_reader.readElementText();
103 if (m_reader.isEndElement()) {
108 void StationListModel::readNameElement(QStandardItem *item)
110 item->setText(m_reader.readElementText());
111 qDebug() << "name:" << item->text();
112 if (m_reader.isEndElement()) {
117 void StationListModel::skipUnknownElement()
119 qDebug() << "skipping unknown element";
122 while (!m_reader.atEnd()) {
123 if (m_reader.isEndElement()) {
126 } else if (!m_reader.isStartElement()) {
127 skipUnknownElement();