Remove commented out code
[quandoparte] / application / stationlistmodel.cpp
1 #include "stationlistmodel.h"
2
3 #include <QFile>
4 #include <QFileInfo>
5 #include <QDebug>
6 #include <QStandardItem>
7 #include <QGeoCoordinate>
8
9 QTM_USE_NAMESPACE
10 Q_DECLARE_METATYPE(QGeoCoordinate)
11
12 StationListModel::StationListModel(QObject *parent) :
13     QStandardItemModel(parent)
14
15 {
16     setRowCount(0);
17 }
18
19 bool StationListModel::load(const QString &filename)
20 {
21     QFile file(filename);
22     QFileInfo fi(file);
23
24     qDebug() << "loading file:" << fi.absoluteFilePath();
25
26     if (!file.open(QFile::ReadOnly | QFile::Text)) {
27         qDebug() << "cannot open file:" << filename;
28         return false;
29     }
30     m_reader.setDevice(&file);
31     m_reader.readNext();
32     while (!m_reader.atEnd()) {
33         if (m_reader.isStartElement()) {
34             if(m_reader.name() == "stations") {
35                 readStationsElement();
36             } else {
37                 m_reader.raiseError(tr("Not a qpl file"));
38             }
39         } else {
40             m_reader.readNext();
41         }
42     }
43     file.close();
44     if (m_reader.hasError()) {
45         qDebug() << "parser error for:" << filename;
46         return false;
47     } else if (file.error() != QFile::NoError) {
48         qDebug() << "file error for:" << filename;
49         return false;
50     }
51     emit layoutChanged();
52     return true;
53 }
54
55 void StationListModel::readStationsElement()
56 {
57     m_reader.readNext();
58     while (!m_reader.atEnd()) {
59         if (m_reader.isEndElement()) {
60             m_reader.readNext();
61             break;
62         } else if (m_reader.isStartElement()) {
63             if (m_reader.name() == "station") {
64                 readStationElement();
65             } else {
66                 skipUnknownElement();
67             }
68         } else {
69             m_reader.readNext();
70         }
71     }
72 }
73
74 void StationListModel::readStationElement()
75 {
76     QStandardItem *item = new QStandardItem;
77     m_reader.readNext();
78     while (!m_reader.atEnd()) {
79         if (m_reader.isEndElement()) {
80             this->appendRow(item);
81             m_reader.readNext();
82             break;
83         } else if (m_reader.isStartElement()) {
84             if (m_reader.name() == "pos") {
85                 readPosElement(item);
86             } else  if (m_reader.name() == "name") {
87                 readNameElement(item);
88             } else {
89                 skipUnknownElement();
90             }
91         } else {
92             m_reader.readNext();
93         }
94     }
95 }
96
97 void StationListModel::readPosElement(QStandardItem *item)
98 {
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()) {
105         m_reader.readNext();
106     }
107 }
108
109 void StationListModel::readNameElement(QStandardItem *item)
110 {
111     item->setText(m_reader.readElementText());
112     qDebug() << "name:" << item->text();
113     if (m_reader.isEndElement()) {
114         m_reader.readNext();
115     }
116 }
117
118 void StationListModel::skipUnknownElement()
119 {
120     qDebug() << "skipping unknown element";
121
122     m_reader.readNext();
123     while (!m_reader.atEnd()) {
124         if (m_reader.isEndElement()) {
125             m_reader.readNext();
126             break;
127         } else if (!m_reader.isStartElement()) {
128             skipUnknownElement();
129         } else {
130             m_reader.readNext();
131         }
132     }
133 }