File indexing completed on 2024-05-12 04:42:42

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KPUBLICTRANSPORT_INDIVIDUALTRANSPORT_H
0008 #define KPUBLICTRANSPORT_INDIVIDUALTRANSPORT_H
0009 
0010 #include "kpublictransport_export.h"
0011 #include "datatypes.h"
0012 
0013 namespace KPublicTransport {
0014 
0015 class IndividualTransportPrivate;
0016 
0017 /** Individual transport mode details for a journey section, and for specifying journey requests. */
0018 class KPUBLICTRANSPORT_EXPORT IndividualTransport
0019 {
0020     KPUBLICTRANSPORT_GADGET(IndividualTransport)
0021 public:
0022     /** Mode of (individual) transportation. */
0023     enum Mode {
0024         Walk,
0025         Bike,
0026         Car
0027     };
0028     Q_ENUM(Mode)
0029     KPUBLICTRANSPORT_PROPERTY(Mode, mode, setMode)
0030 
0031 public:
0032     /** Qualifier on how the mode of transport is used. */
0033     enum Qualifier {
0034         None, ///< not applicable, or bike is taken on public transport legs.
0035         Park, ///< for access legs, vehicle is parked before taking public transport.
0036         Rent, ///< use a rental vehicle
0037         Dropoff, ///< for access legs: vehicle is not taken onto public transport but also doesn't need parking
0038         Pickup, ///<  for egress legs: vehicle is available at the last public transport leg
0039     };
0040     Q_ENUM(Qualifier)
0041     KPUBLICTRANSPORT_PROPERTY(Qualifier, qualifier, setQualifier)
0042 
0043 public:
0044     IndividualTransport(Mode mode, Qualifier qualifier = None);
0045 
0046     bool operator==(const IndividualTransport &other) const;
0047     bool operator!=(const IndividualTransport &other) const;
0048 
0049     /** Serializes one object to JSON. */
0050     static QJsonObject toJson(const IndividualTransport &it);
0051     /** Serializes a vector of objects to JSON. */
0052     static QJsonArray toJson(const std::vector<IndividualTransport> &its);
0053     /** Deserialize an object from JSON. */
0054     static IndividualTransport fromJson(const QJsonObject &obj);
0055     /** Deserialize a list of journey from JSON. */
0056     static std::vector<IndividualTransport> fromJson(const QJsonArray &array);
0057 
0058     /** @internal for QML bindings only */
0059     static std::vector<IndividualTransport> fromVariant(const QVariantList &v);
0060 };
0061 
0062 }
0063 
0064 Q_DECLARE_METATYPE(KPublicTransport::IndividualTransport)
0065 
0066 #endif // KPUBLICTRANSPORT_INDIVIDUALTRANSPORT_H