File indexing completed on 2024-05-12 04:42:52
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KPUBLICTRANSPORT_JOURNEYQUERYMODEL_H 0008 #define KPUBLICTRANSPORT_JOURNEYQUERYMODEL_H 0009 0010 #include "kpublictransport_export.h" 0011 #include "abstractquerymodel.h" 0012 0013 #include <KPublicTransport/JourneyRequest> 0014 0015 namespace KPublicTransport { 0016 0017 class Journey; 0018 class JourneyQueryModelPrivate; 0019 0020 /** 0021 * Model representing journey query results. 0022 * This takes care of dynamically updating as results arrive from different 0023 * backends, including merging them, as well as providing a way to search 0024 * for earlier/later journeys for the initial request. 0025 */ 0026 class KPUBLICTRANSPORT_EXPORT JourneyQueryModel : public AbstractQueryModel 0027 { 0028 Q_OBJECT 0029 0030 /** Specify the requested journey. */ 0031 Q_PROPERTY(KPublicTransport::JourneyRequest request READ request WRITE setRequest NOTIFY requestChanged) 0032 0033 /** Whether querying for later journeys is possible. */ 0034 Q_PROPERTY(bool canQueryNext READ canQueryNext NOTIFY canQueryPrevNextChanged) 0035 /** Whether querying for earlier journey is possible. */ 0036 Q_PROPERTY(bool canQueryPrevious READ canQueryPrevious NOTIFY canQueryPrevNextChanged) 0037 0038 public: 0039 explicit JourneyQueryModel(QObject *parent = nullptr); 0040 ~JourneyQueryModel() override; 0041 0042 JourneyRequest request() const; 0043 /** Specify the actual journey query. */ 0044 void setRequest(const JourneyRequest &req); 0045 0046 bool canQueryNext() const; 0047 /** Search for later journeys. 0048 * Has no effect if canQueryNext() returns @c false. 0049 */ 0050 Q_INVOKABLE void queryNext(); 0051 0052 bool canQueryPrevious() const; 0053 /** Search for earlier journeys. 0054 * Has no effect if canQueryPrevious() returns @c false. 0055 */ 0056 Q_INVOKABLE void queryPrevious(); 0057 0058 enum Roles { 0059 JourneyRole = Qt::UserRole, 0060 ScheduledDepartureTime, 0061 ScheduledArrivalTime 0062 }; 0063 Q_ENUM(Roles) 0064 0065 int rowCount(const QModelIndex &parent) const override; 0066 QVariant data(const QModelIndex &index, int role) const override; 0067 QHash<int, QByteArray> roleNames() const override; 0068 0069 /** The current model content. */ 0070 const std::vector<Journey>& journeys() const; 0071 0072 Q_SIGNALS: 0073 void requestChanged(); 0074 void canQueryPrevNextChanged(); 0075 0076 private: 0077 friend class JourneyQueryModelPrivate; 0078 Q_DECLARE_PRIVATE(JourneyQueryModel) 0079 }; 0080 0081 } 0082 0083 #endif // KPUBLICTRANSPORT_JOURNEYQUERYMODEL_H