WimaMeasurementArea.h 2.94 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1
#pragma once
2

3
#include <QFutureWatcher>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
4
#include <QObject>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
5
#include <QTimer>
6

Valentin Platzgummer's avatar
Valentin Platzgummer committed
7
#include "WimaArea.h"
8

Valentin Platzgummer's avatar
Valentin Platzgummer committed
9
#include "SettingsFact.h"
10

11 12 13 14 15 16 17 18 19
class TileData : public QObject {
public:
  QmlObjectListModel tiles;
  QVariantList tileCenterPoints;

  TileData();
  ~TileData();

  TileData &operator=(const TileData &other);
20 21
  bool operator==(const TileData &other) const;
  bool operator!=(const TileData &other) const;
22 23 24 25 26

  void clear();
  std::size_t size() const;
};

27 28
class WimaMeasurementArea : public WimaArea {
  Q_OBJECT
29

30
  enum class STATE { IDLE, DEFERED, UPDATEING, RESTARTING, STOP };
31

32
public:
33 34 35 36
  WimaMeasurementArea(QObject *parent = nullptr);
  WimaMeasurementArea(const WimaMeasurementArea &other,
                      QObject *parent = nullptr);
  WimaMeasurementArea &operator=(const WimaMeasurementArea &other);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
37
  ~WimaMeasurementArea();
38

Valentin Platzgummer's avatar
Valentin Platzgummer committed
39 40 41 42
  Q_PROPERTY(Fact *tileHeight READ tileHeight CONSTANT)
  Q_PROPERTY(Fact *tileWidth READ tileWidth CONSTANT)
  Q_PROPERTY(Fact *minTileArea READ minTileArea CONSTANT)
  Q_PROPERTY(Fact *showTiles READ showTiles CONSTANT)
43 44
  Q_PROPERTY(QmlObjectListModel *tiles READ tiles NOTIFY tilesChanged)
  Q_PROPERTY(int maxTiles READ maxTiles NOTIFY maxTilesChanged)
45
  Q_PROPERTY(QVector<int> progress READ progressQml NOTIFY progressChanged)
46 47

  // Overrides from WimaPolygon
Valentin Platzgummer's avatar
Valentin Platzgummer committed
48 49 50
  QString mapVisualQML(void) const;
  QString editorQML(void) const;

51
  // Property getters.
Valentin Platzgummer's avatar
Valentin Platzgummer committed
52 53 54 55
  Fact *tileHeight();
  Fact *tileWidth();
  Fact *minTileArea();
  Fact *showTiles();
56
  QmlObjectListModel *tiles();
57 58
  const QVector<int> &progress() const;
  QVector<int> progressQml() const;
59
  const QmlObjectListModel *tiles() const;
60 61
  const QVariantList &tileCenterPoints() const; // List of QGeoCoordinate
  const TileData &tileData() const;
62 63
  int maxTiles() const;
  bool ready() const;
64 65 66 67 68 69 70 71 72 73

  // Member Methodes
  void saveToJson(QJsonObject &json);
  bool loadFromJson(const QJsonObject &json, QString &errorString);

  // Static Variables
  static const char *settingsGroup;
  static const char *tileHeightName;
  static const char *tileWidthName;
  static const char *minTileAreaName;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
74
  static const char *showTilesName;
75
  static const char *WimaMeasurementAreaName;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
76 77

signals:
78 79
  void tilesChanged();
  void maxTilesChanged();
80
  void progressChanged();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
81
  void progressAccepted();
82
  void progressNotAccepted();
83
  void readyChanged();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
84 85

public slots:
86
  bool setProgress(const QVector<int> &p);
87

Valentin Platzgummer's avatar
Valentin Platzgummer committed
88 89 90
private slots:
  void doUpdate();
  void deferUpdate();
91
  void storeTiles();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
92 93
  void disableUpdate();
  void enableUpdate();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
94

Valentin Platzgummer's avatar
Valentin Platzgummer committed
95
private:
96 97
  // Member Methodes
  void init();
98
  void setState(STATE s);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
99

100 101
  // Members
  QMap<QString, FactMetaData *> _metaDataMap;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
102

103
  SettingsFact _tileHeight;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
104
  SettingsFact _tileWidth;
105
  SettingsFact _minTileAreaPercent; // 0..100
Valentin Platzgummer's avatar
Valentin Platzgummer committed
106 107
  SettingsFact _showTiles;

108
  QVector<int> _progress;
109
  // Tile stuff.
Valentin Platzgummer's avatar
Valentin Platzgummer committed
110
  // Tile stuff.
111
  mutable QTimer _timer;
112
  using DataPtr = std::shared_ptr<TileData>;
113
  mutable STATE _state;
114 115
  mutable TileData _tileData;
  mutable QFutureWatcher<DataPtr> _watcher;
116
};