MeasurementArea.h 2.52 KB
Newer Older
1 2 3 4
#pragma once

#include <QFutureWatcher>
#include <QObject>
5
#include <QSharedPointer>
6 7
#include <QTimer>

8
#include "GeoArea.h"
9 10 11
#include "MeasurementComplexItem/nemo_interface/MeasurementTile.h"
#include "ProgressArray.h"
#include "TileDiff.h"
12 13 14

#include "SettingsFact.h"

15
class MeasurementArea : public GeoArea {
16 17
  Q_OBJECT
  enum class STATE { IDLE, DEFERED, UPDATEING, RESTARTING, STOP };
18
  using TilePtr = QSharedPointer<QmlObjectListModel>;
19 20

public:
21 22 23 24
  MeasurementArea(QObject *parent = nullptr);
  MeasurementArea(const MeasurementArea &other, QObject *parent = nullptr);
  MeasurementArea &operator=(const MeasurementArea &other);
  ~MeasurementArea();
25 26 27 28 29 30 31 32

  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)
  Q_PROPERTY(QmlObjectListModel *tiles READ tiles NOTIFY tilesChanged)
  Q_PROPERTY(int maxTiles READ maxTiles NOTIFY maxTilesChanged)

33 34 35
  // Overrides from GeoArea
  QString mapVisualQML(void) const override;
  QString editorQML(void) const override;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
36
  MeasurementArea *clone(QObject *parent = nullptr) const override;
37
  bool saveToJson(QJsonObject &json) override;
38
  bool loadFromJson(const QJsonObject &json, QString &errorString) override;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
39
  Q_INVOKABLE virtual bool isCorrect() override;
40 41 42 43 44 45 46 47 48 49 50

  // Property getters.
  Fact *tileHeight();
  Fact *tileWidth();
  Fact *minTileArea();
  Fact *showTiles();
  QmlObjectListModel *tiles();
  const QmlObjectListModel *tiles() const;
  int maxTiles() const;
  bool ready() const;

51 52
  bool measurementCompleted() const;

53 54
  // Static Variables
  static const char *settingsGroup;
55
  static const char *nameString;
56

57 58 59 60
signals:
  void tilesChanged();
  void maxTilesChanged();
  void readyChanged();
61
  void progressChanged();
62 63

public slots:
64 65
  void updateIds(const QList<TileDiff> &array);
  void updateProgress(const ProgressArray &array);
66 67
  Q_INVOKABLE void randomProgress();
  Q_INVOKABLE void resetProgress();
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

private slots:
  void doUpdate();
  void deferUpdate();
  void storeTiles();
  void disableUpdate();
  void enableUpdate();

private:
  // Member Methodes
  void init();
  void setState(STATE s);

  // Members
  QMap<QString, FactMetaData *> _metaDataMap;

  SettingsFact _tileHeight;
  SettingsFact _tileWidth;
  SettingsFact _minTileAreaPercent; // 0..100
  SettingsFact _showTiles;

  // Tile stuff.
90
  bool _toManyTiles;
91
  TilePtr _tiles;
92
  std::map<QString /*id*/, int> _indexMap;
93 94 95
  QTimer _timer;
  STATE _state;
  QFutureWatcher<TilePtr> _watcher;
96
};