libosmscout  1.1.1
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 <osmscout/MapProvider.h>
29 #include <osmscout/Settings.h>
30 
31 namespace osmscout {
32 
38  Q_OBJECT
39 
40  Q_PROPERTY(bool valid READ isValid() CONSTANT)
41  Q_PROPERTY(QString name READ getName() CONSTANT)
42  Q_PROPERTY(QStringList path READ getPath() CONSTANT)
43  Q_PROPERTY(QString description READ getDescription() CONSTANT)
44 
45 private:
46  bool valid{false};
47  QString name;
48  QStringList path;
49  QString description;
50 
51 public:
52  AvailableMapsModelItem() = default;
53 
54  AvailableMapsModelItem(const QString &name, const QStringList &path, const QString &description):
55  valid(true), name(name), path(path), description(description){};
56 
58  QObject(o.parent()),
59  valid(o.valid), name(o.name), path(o.path), description(o.description){};
60 
61  ~AvailableMapsModelItem() override = default;
62 
64  {
65  valid=o.valid;
66  name=o.name;
67  path=o.path;
68  description=o.description;
69  return *this;
70  }
71 
72  QString getName() const
73  {
74  return name;
75  }
76 
77  QStringList getPath() const
78  {
79  return path;
80  }
81 
82  QString getDescription() const
83  {
84  return description;
85  }
86 
87  bool isValid() const
88  {
89  return valid;
90  }
91 
92  virtual bool isDirectory() const = 0;
93 };
94 
100  Q_OBJECT
101 
102 public:
103  AvailableMapsModelDir(const QString &name, const QList<QString> &path, const QString &description):
104  AvailableMapsModelItem(name, path, description){};
105 
106  AvailableMapsModelDir(const AvailableMapsModelDir &o) = default;
107 
108  ~AvailableMapsModelDir() override = default;
109 
110  bool isDirectory() const override
111  {
112  return true;
113  };
114 };
115 
121  Q_OBJECT
122 
123  Q_PROPERTY(quint64 byteSize READ getSize() CONSTANT)
124  Q_PROPERTY(QString size READ getSizeHuman() CONSTANT)
125  Q_PROPERTY(QString serverDirectory READ getServerDirectory() CONSTANT)
126  Q_PROPERTY(QDateTime time READ getCreation() CONSTANT)
127  Q_PROPERTY(int version READ getVersion() CONSTANT)
128 
129 private:
130  MapProvider provider;
131  uint64_t size{0};
132  QString serverDirectory;
133  QDateTime creation;
134  int version{-1};
135 
136 public:
137  AvailableMapsModelMap() = default;
138 
139  AvailableMapsModelMap(const QString &name, const QList<QString> &path, const QString &description, const MapProvider &provider,
140  uint64_t size, const QString &serverDirectory, const QDateTime &creation, int version):
141  AvailableMapsModelItem(name, path, description), provider(provider), size(size), serverDirectory(serverDirectory),
142  creation(creation), version(version) {};
143 
144  AvailableMapsModelMap(const AvailableMapsModelMap &o) = default;
145 
146  ~AvailableMapsModelMap() override = default;
147 
148  bool isDirectory() const override
149  {
150  return false;
151  };
152 
153  AvailableMapsModelMap& operator=(const AvailableMapsModelMap &o) = default;
154 
155  MapProvider getProvider() const;
156  uint64_t getSize() const;
157  QString getSizeHuman() const;
158  QString getServerDirectory() const;
159  QDateTime getCreation() const;
160  int getVersion() const;
161 };
162 
186 class OSMSCOUT_CLIENT_QT_API AvailableMapsModel : public QAbstractItemModel {
187  Q_OBJECT
188 
189  Q_PROPERTY(bool loading READ isLoading NOTIFY loadingChanged)
190  Q_PROPERTY(QString fetchError READ getFetchError NOTIFY loadingChanged)
191 
192 signals:
193  void loadingChanged();
194 
195 public slots:
196  void listDownloaded(const MapProvider &provider, QNetworkReply*);
197  void reload();
198 
199 public:
201 
202  ~AvailableMapsModel() override;
203 
204  enum Roles {
205  NameRole = Qt::UserRole, // localized name
206  PathRole = Qt::UserRole+1, // path in tree
207  DirRole = Qt::UserRole+2, // isDir? true: false
208  ServerDirectoryRole = Qt::UserRole+3, // server path for this map
209  TimeRole = Qt::UserRole+4, // QTime of map creation
210  VersionRole = Qt::UserRole+5,
211  ByteSizeRole = Qt::UserRole+6,
212  ProviderUriRole = Qt::UserRole+7,
213  DescriptionRole = Qt::UserRole+8,
214  SizeRole = Qt::UserRole+9,
215  MapRole = Qt::UserRole+10,
216  };
217  Q_ENUM(Roles)
218 
219  Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override;
220  Q_INVOKABLE int columnCount(const QModelIndex &parent = QModelIndex()) const override;
221  Q_INVOKABLE QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override;
222  Q_INVOKABLE QModelIndex parent(const QModelIndex &index) const override;
223 
224  Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const override;
225  QHash<int, QByteArray> roleNames() const override;
226  Q_INVOKABLE Qt::ItemFlags flags(const QModelIndex &index) const override;
227 
228  Q_INVOKABLE QVariant map(const QModelIndex &index) const;
229 
237  Q_INVOKABLE QVariant timeOfMap(QStringList path);
238  Q_INVOKABLE QObject* mapByPath(QStringList path);
239 
240  bool isLoading() const{
241  return requests>0;
242  }
243 
244  QString getFetchError() const {
245  return fetchError;
246  }
247 
248 private:
249  void append(AvailableMapsModelItem *item);
250  QList<AvailableMapsModelItem *> findChildrenByPath(QStringList dir) const;
251 
252  QNetworkAccessManager webCtrl;
253  QNetworkDiskCache diskCache;
254  QList<MapProvider> mapProviders;
255  size_t requests{0};
256  QList<AvailableMapsModelItem*> items;
257  QString fetchError;
258 };
259 
260 }
261 
262 Q_DECLARE_METATYPE(osmscout::AvailableMapsModelMap)
263 
264 #endif /* OSMSCOUT_CLIENT_QT_AVAILABLEMAPMODEL_H */
Definition: MapProvider.h:38
#define OSMSCOUT_CLIENT_QT_API
Definition: ClientQtImportExport.h:45
AvailableMapsModelDir(const QString &name, const QList< QString > &path, const QString &description)
Definition: AvailableMapsModel.h:103
QString getName() const
Definition: AvailableMapsModel.h:72
bool isLoading() const
Definition: AvailableMapsModel.h:240
bool isDirectory() const override
Definition: AvailableMapsModel.h:148
AvailableMapsModelItem(const AvailableMapsModelItem &o)
Definition: AvailableMapsModel.h:57
QString name
Definition: AvailableMapsModel.h:41
QStringList path
Definition: AvailableMapsModel.h:42
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:139
AvailableMapsModelItem(const QString &name, const QStringList &path, const QString &description)
Definition: AvailableMapsModel.h:54
QStringList getPath() const
Definition: AvailableMapsModel.h:77
bool isDirectory() const override
Definition: AvailableMapsModel.h:110
Definition: Area.h:38
Definition: AvailableMapsModel.h:99
Roles
Definition: AvailableMapsModel.h:204
AvailableMapsModelItem & operator=(const AvailableMapsModelItem &o)
Definition: AvailableMapsModel.h:63
Definition: AvailableMapsModel.h:120
Definition: AvailableMapsModel.h:186
bool valid
Definition: AvailableMapsModel.h:40
QString getDescription() const
Definition: AvailableMapsModel.h:82
QString description
Definition: AvailableMapsModel.h:43
Definition: AvailableMapsModel.h:37
QString getFetchError() const
Definition: AvailableMapsModel.h:244
bool isValid() const
Definition: AvailableMapsModel.h:87