#include <QStandardItem>
#include <QGeoCoordinate>
+#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
QTM_USE_NAMESPACE
Q_DECLARE_METATYPE(QGeoCoordinate)
+#endif
StationListModel::StationListModel(QObject *parent) :
QStandardItemModel(parent)
{
setRowCount(0);
+#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
+ setRoleNames(roleNames());
+#endif
}
bool StationListModel::load(const QString &filename)
qDebug() << "loading file:" << fi.absoluteFilePath();
+ emit layoutAboutToBeChanged();
+ beginResetModel();
if (!file.open(QFile::ReadOnly | QFile::Text)) {
qDebug() << "cannot open file:" << filename;
return false;
}
}
file.close();
+ qDebug() << rowCount() << "stations loaded";
if (m_reader.hasError()) {
qDebug() << "parser error for:" << filename;
return false;
qDebug() << "file error for:" << filename;
return false;
}
+ endResetModel();
emit layoutChanged();
return true;
}
+QHash<int, QByteArray> StationListModel::roleNames() const
+{
+ QHash<int, QByteArray> roles;
+ roles[Qt::DisplayRole] = "name";
+ roles[StationListModel::PositionRole] = "position";
+ roles[StationListModel::StationCodeRole] = "code";
+ return roles;
+}
+
+int StationListModel::rowCount(const QModelIndex &parent) const
+{
+ return QStandardItemModel::rowCount(parent);
+
+}
+
void StationListModel::readStationsElement()
{
m_reader.readNext();
if (m_reader.name() == "station") {
readStationElement();
} else {
- skipUnknownElement();
+ skipUnknownElement(m_reader.name().toString());
}
} else {
m_reader.readNext();
readPosElement(item);
} else if (m_reader.name() == "name") {
readNameElement(item);
+ } else if (m_reader.name() == "code") {
+ readCodeElement(item);
} else {
- skipUnknownElement();
+ skipUnknownElement(m_reader.name().toString());
}
} else {
m_reader.readNext();
}
}
-void StationListModel::skipUnknownElement()
+void StationListModel::readCodeElement(QStandardItem *item)
+{
+ const QString code = m_reader.readElementText();
+ qDebug() << "reading code element" << code;
+
+ item->setData(QVariant::fromValue(code), StationCodeRole);
+ if (m_reader.isEndElement()) {
+ m_reader.readNext();
+ }
+}
+
+void StationListModel::skipUnknownElement(const QString &name)
{
- qDebug() << "skipping unknown element";
+ qDebug() << "skipping unknown element" << name << "at line" << m_reader.lineNumber();
m_reader.readNext();
while (!m_reader.atEnd()) {
m_reader.readNext();
break;
} else if (!m_reader.isStartElement()) {
- skipUnknownElement();
+ skipUnknownElement(m_reader.name().toString());
} else {
m_reader.readNext();
}