#include "stationschedulemodel.h"
#include "dataprovider.h"
+#include "settings.h"
#include <QDebug>
#include <QWebElement>
#include <QWebFrame>
#include <QWebPage>
+
StationScheduleModel::StationScheduleModel(const QString &name, QObject *parent) :
QAbstractListModel(parent),
m_name(name)
roles[DepartureStationRole] = "departureStation";
roles[DepartureTimeRole] = "departureTime";
roles[ArrivalStationRole] = "arrivalStation";
- roles[ArrivalTimeRole] = "ArrivalTime";
- roles[DetailsUrlRole] = "DetailsUrl";
+ roles[ArrivalTimeRole] = "arrivalTime";
+ roles[DetailsUrlRole] = "detailsUrl";
roles[DelayRole] = "delay";
roles[DelayClassRole] = "delayClassRole";
setRoleNames(roles);
}
}
+StationScheduleModel::ScheduleType StationScheduleModel::type()
+{
+ return m_scheduleType;
+}
+
+void StationScheduleModel::setType(StationScheduleModel::ScheduleType type)
+{
+ if (type != m_scheduleType) {
+ emit layoutAboutToBeChanged();
+ beginResetModel();
+ m_scheduleType = type;
+ emit typeChanged();
+ endResetModel();
+ emit layoutChanged();
+ Settings *settings = Settings::instance();
+ settings->setShowArrivalsPreferred(m_scheduleType == ArrivalSchedule ? true : false);
+ }
+}
+
static void parseDelayClass(const QWebElement &element, StationScheduleItem &item)
{
if (!element.isNull()) {
qDebug() << "--- end of query result ----- cut here ------";
emit layoutAboutToBeChanged();
- beginInsertRows(QModelIndex(), 0, 0);
+ beginResetModel();
QWebPage page;
page.mainFrame()->setContent(htmlReply, "text/html", baseUrl);
QWebElement doc = page.mainFrame()->documentElement();
if (current.isNull())
break;
}
- endInsertRows();
+ endResetModel();
emit layoutChanged();
}
int StationScheduleModel::rowCount(const QModelIndex &parent) const
{
- qDebug() << "schedule.count" << m_departureSchedules.count();
- return m_departureSchedules.count();
+ Q_UNUSED(parent);
+ if (m_scheduleType == DepartureSchedule) {
+ qDebug() << "schedule.count" << m_departureSchedules.count();
+ return m_departureSchedules.count();
+ } else {
+ qDebug() << "schedule.count" << m_arrivalSchedules.count();
+ return m_arrivalSchedules.count();
+ }
}
QVariant StationScheduleModel::data(const QModelIndex &index, int role) const
if (!index.isValid()) {
return QVariant();
}
- if (index.row() >= m_departureSchedules.count()) {
+ const QList<StationScheduleItem> &schedules =
+ (m_scheduleType == DepartureSchedule) ? m_departureSchedules : m_arrivalSchedules;
+ if (index.row() < 0 || index.row() >= schedules.count()) {
return QVariant();
}
- StationScheduleItem item = m_departureSchedules[index.row()];
+ StationScheduleItem item = schedules[index.row()];
switch (role) {
case Qt::DisplayRole:
case TrainRole:
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
+ Q_PROPERTY(ScheduleType type READ type WRITE setType NOTIFY typeChanged)
+ Q_ENUMS(ScheduleType)
enum StationRoles {
TrainRole = Qt::UserRole +1,
};
public:
+ enum ScheduleType {
+ DepartureSchedule,
+ ArrivalSchedule
+ };
+
explicit StationScheduleModel(const QString &name = "", QObject *parent = 0);
QString &name();
void setName(const QString &name);
+ ScheduleType type();
+ void setType(ScheduleType type);
+
int rowCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
signals:
void nameChanged();
+ void typeChanged();
public slots:
void fetch(const QString &name);
QString m_name;
QList<StationScheduleItem> m_departureSchedules;
QList<StationScheduleItem> m_arrivalSchedules;
+ ScheduleType m_scheduleType;
};
#endif // STATIONSCHEDULEMODEL_H