libosmscout 1.1.1
Loading...
Searching...
No Matches
AvailableMapsModel.h
Go to the documentation of this file.
1#ifndef OSMSCOUT_CLIENT_QT_AVAILABLEMAPSMODEL_H
2#define OSMSCOUT_CLIENT_QT_AVAILABLEMAPSMODEL_H
3
4/*
5 OSMScout - a Qt backend for libosmscout and libosmscout-map
6 Copyright (C) 2016 Lukas Karas
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21*/
22
23#include <QAbstractListModel>
24#include <QNetworkAccessManager>
25#include <QNetworkDiskCache>
26#include <QNetworkReply>
27
28#include <osmscoutclient/MapProvider.h>
29#include <osmscoutclient/Settings.h>
30
32
33namespace osmscout {
34
40 Q_OBJECT
41
42 Q_PROPERTY(bool valid READ isValid() CONSTANT)
43 Q_PROPERTY(QString name READ getName() CONSTANT)
44 Q_PROPERTY(QStringList path READ getPath() CONSTANT)
45 Q_PROPERTY(QString description READ getDescription() CONSTANT)
46
47private:
48 bool valid{false};
49 QString name;
50 QStringList path;
51 QString description;
52
53public:
55
56 AvailableMapsModelItem(const QString &name, const QStringList &path, const QString &description):
58
60 QObject(o.parent()),
62
63 ~AvailableMapsModelItem() override = default;
64
66 {
67 valid=o.valid;
68 name=o.name;
69 path=o.path;
71 return *this;
72 }
73
74 QString getName() const
75 {
76 return name;
77 }
78
79 QStringList getPath() const
80 {
81 return path;
82 }
83
84 QString getDescription() const
85 {
86 return description;
87 }
88
89 bool isValid() const
90 {
91 return valid;
92 }
93
94 virtual bool isDirectory() const = 0;
95};
96
102 Q_OBJECT
103
104public:
105 AvailableMapsModelDir(const QString &name, const QList<QString> &path, const QString &description):
107
109
110 ~AvailableMapsModelDir() override = default;
111
112 bool isDirectory() const override
113 {
114 return true;
115 };
116};
117
123 Q_OBJECT
124
125 Q_PROPERTY(quint64 byteSize READ getSize() CONSTANT)
126 Q_PROPERTY(QString size READ getSizeHuman() CONSTANT)
127 Q_PROPERTY(QString serverDirectory READ getServerDirectory() CONSTANT)
128 Q_PROPERTY(QDateTime time READ getCreation() CONSTANT)
129 Q_PROPERTY(int version READ getVersion() CONSTANT)
130
131private:
132 MapProvider provider;
133 uint64_t size{0};
134 QString serverDirectory;
135 QDateTime creation;
136 int version{-1};
137
138public:
140
141 AvailableMapsModelMap(const QString &name, const QList<QString> &path, const QString &description, const MapProvider &provider,
142 uint64_t size, const QString &serverDirectory, const QDateTime &creation, int version):
144 creation(creation), version(version) {};
145
147
148 ~AvailableMapsModelMap() override = default;
149
150 bool isDirectory() const override
151 {
152 return false;
153 };
154
156
157 MapProvider getProvider() const;
158 uint64_t getSize() const;
159 QString getSizeHuman() const;
160 QString getServerDirectory() const;
161 QDateTime getCreation() const;
162 int getVersion() const;
163};
164
188class OSMSCOUT_CLIENT_QT_API AvailableMapsModel : public QAbstractItemModel {
189 Q_OBJECT
190
191 Q_PROPERTY(bool loading READ isLoading NOTIFY loadingChanged)
192 Q_PROPERTY(QString fetchError READ getFetchError NOTIFY loadingChanged)
193
194signals:
196
197public slots:
198 void listDownloaded(const MapProvider &provider, QNetworkReply*);
199 void reload();
200
201public:
203
205
206 enum Roles {
207 NameRole = Qt::UserRole, // localized name
208 PathRole = Qt::UserRole+1, // path in tree
209 DirRole = Qt::UserRole+2, // isDir? true: false
210 ServerDirectoryRole = Qt::UserRole+3, // server path for this map
211 TimeRole = Qt::UserRole+4, // QTime of map creation
212 VersionRole = Qt::UserRole+5,
213 ByteSizeRole = Qt::UserRole+6,
214 ProviderUriRole = Qt::UserRole+7,
215 DescriptionRole = Qt::UserRole+8,
216 SizeRole = Qt::UserRole+9,
217 MapRole = Qt::UserRole+10,
218 };
219 Q_ENUM(Roles)
220
221 Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override;
222 Q_INVOKABLE int columnCount(const QModelIndex &parent = QModelIndex()) const override;
223 Q_INVOKABLE QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override;
224 Q_INVOKABLE QModelIndex parent(const QModelIndex &index) const override;
225
226 Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const override;
227 QHash<int, QByteArray> roleNames() const override;
228 Q_INVOKABLE Qt::ItemFlags flags(const QModelIndex &index) const override;
229
230 Q_INVOKABLE QVariant map(const QModelIndex &index) const;
231
239 Q_INVOKABLE QVariant timeOfMap(QStringList path);
240 Q_INVOKABLE QObject* mapByPath(QStringList path);
241
242 bool isLoading() const{
243 return requests>0;
244 }
245
246 QString getFetchError() const {
247 return fetchError;
248 }
249
250private:
251 void append(AvailableMapsModelItem *item);
252 QList<AvailableMapsModelItem *> findChildrenByPath(QStringList dir) const;
253
254 QNetworkAccessManager webCtrl;
255 QNetworkDiskCache diskCache;
256 QList<MapProvider> mapProviders;
257 size_t requests{0};
258 QList<AvailableMapsModelItem*> items;
259 QString fetchError;
260};
261
262}
263
264Q_DECLARE_METATYPE(osmscout::AvailableMapsModelMap)
265
266#endif /* OSMSCOUT_CLIENT_QT_AVAILABLEMAPMODEL_H */
#define OSMSCOUT_CLIENT_QT_API
Definition ClientQtImportExport.h:45
bool isDirectory() const override
Definition AvailableMapsModel.h:112
~AvailableMapsModelDir() override=default
AvailableMapsModelDir(const QString &name, const QList< QString > &path, const QString &description)
Definition AvailableMapsModel.h:105
AvailableMapsModelDir(const AvailableMapsModelDir &o)=default
bool loading
Definition AvailableMapsModel.h:191
Q_INVOKABLE QObject * mapByPath(QStringList path)
QString getFetchError() const
Definition AvailableMapsModel.h:246
Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const override
Q_INVOKABLE QVariant map(const QModelIndex &index) const
Q_INVOKABLE QModelIndex parent(const QModelIndex &index) const override
Q_INVOKABLE QVariant timeOfMap(QStringList path)
QString fetchError
Definition AvailableMapsModel.h:192
Q_INVOKABLE QModelIndex index(int row, int column=0, const QModelIndex &parent=QModelIndex()) const override
Q_INVOKABLE int rowCount(const QModelIndex &parent=QModelIndex()) const override
Roles
Definition AvailableMapsModel.h:206
@ VersionRole
Definition AvailableMapsModel.h:212
@ DirRole
Definition AvailableMapsModel.h:209
@ DescriptionRole
Definition AvailableMapsModel.h:215
@ MapRole
Definition AvailableMapsModel.h:217
@ ByteSizeRole
Definition AvailableMapsModel.h:213
@ ServerDirectoryRole
Definition AvailableMapsModel.h:210
@ TimeRole
Definition AvailableMapsModel.h:211
@ NameRole
Definition AvailableMapsModel.h:207
@ SizeRole
Definition AvailableMapsModel.h:216
@ PathRole
Definition AvailableMapsModel.h:208
@ ProviderUriRole
Definition AvailableMapsModel.h:214
QHash< int, QByteArray > roleNames() const override
bool isLoading() const
Definition AvailableMapsModel.h:242
Q_INVOKABLE int columnCount(const QModelIndex &parent=QModelIndex()) const override
void listDownloaded(const MapProvider &provider, QNetworkReply *)
Q_INVOKABLE Qt::ItemFlags flags(const QModelIndex &index) const override
Definition AvailableMapsModel.h:39
CONSTANTQString description
Definition AvailableMapsModel.h:45
AvailableMapsModelItem(const AvailableMapsModelItem &o)
Definition AvailableMapsModel.h:59
QStringList getPath() const
Definition AvailableMapsModel.h:79
CONSTANTQString name
Definition AvailableMapsModel.h:43
AvailableMapsModelItem(const QString &name, const QStringList &path, const QString &description)
Definition AvailableMapsModel.h:56
bool valid
Definition AvailableMapsModel.h:42
virtual bool isDirectory() const =0
~AvailableMapsModelItem() override=default
CONSTANTQStringList path
Definition AvailableMapsModel.h:44
AvailableMapsModelItem & operator=(const AvailableMapsModelItem &o)
Definition AvailableMapsModel.h:65
QString getDescription() const
Definition AvailableMapsModel.h:84
QString getName() const
Definition AvailableMapsModel.h:74
bool isValid() const
Definition AvailableMapsModel.h:89
Definition AvailableMapsModel.h:122
MapProvider getProvider() const
CONSTANTQDateTime time
Definition AvailableMapsModel.h:128
AvailableMapsModelMap(const AvailableMapsModelMap &o)=default
quint64 byteSize
Definition AvailableMapsModel.h:125
AvailableMapsModelMap & operator=(const AvailableMapsModelMap &o)=default
CONSTANTint version
Definition AvailableMapsModel.h:129
~AvailableMapsModelMap() override=default
QString getServerDirectory() const
bool isDirectory() const override
Definition AvailableMapsModel.h:150
CONSTANTQString serverDirectory
Definition AvailableMapsModel.h:127
CONSTANTQString size
Definition AvailableMapsModel.h:126
AvailableMapsModelMap(const QString &name, const QList< QString > &path, const QString &description, const MapProvider &provider, uint64_t size, const QString &serverDirectory, const QDateTime &creation, int version)
Definition AvailableMapsModel.h:141
Definition Area.h:39