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;
55 void StationListModel::readStationsElement()
58 while (!m_reader.atEnd()) {
59 if (m_reader.isEndElement()) {
62 } else if (m_reader.isStartElement()) {
63 if (m_reader.name() == "station") {
74 void StationListModel::readStationElement()
76 QStandardItem *item = new QStandardItem;
78 while (!m_reader.atEnd()) {
79 if (m_reader.isEndElement()) {
80 this->appendRow(item);
83 } else if (m_reader.isStartElement()) {
84 if (m_reader.name() == "pos") {
86 } else if (m_reader.name() == "name") {
87 readNameElement(item);
97 void StationListModel::readPosElement(QStandardItem *item)
99 QStringList coordinates = m_reader.readElementText().split(",");
100 QGeoCoordinate pos = QGeoCoordinate(coordinates[0].toDouble(), coordinates[1].toDouble());
101 item->setData(QVariant::fromValue(pos), PositionRole);
102 qDebug() << "pos:" << pos;
103 m_reader.readElementText();
104 if (m_reader.isEndElement()) {
109 void StationListModel::readNameElement(QStandardItem *item)
111 item->setText(m_reader.readElementText());
112 qDebug() << "name:" << item->text();
113 if (m_reader.isEndElement()) {
118 void StationListModel::skipUnknownElement()
120 qDebug() << "skipping unknown element";
123 while (!m_reader.atEnd()) {
124 if (m_reader.isEndElement()) {
127 } else if (!m_reader.isStartElement()) {
128 skipUnknownElement();