GeneratorBase.h 1.12 KB
Newer Older
1 2
#pragma once

3
#include <QJsonObject>
4
#include <QObject>
5
#include <QString>
6 7 8 9

#include <functional>
#include <memory>

10
#include "geometry/snake.h"
11

12
#include "AreaData.h"
13 14 15 16 17 18

namespace routing {

class GeneratorBase : public QObject {
  Q_OBJECT
public:
19
  using Data = AreaData *;
20 21 22 23 24 25 26 27 28
  using Generator = std::function<bool(snake::Transects &)>;

  explicit GeneratorBase(QObject *parent = nullptr);
  explicit GeneratorBase(Data d, QObject *parent = nullptr);
  ~GeneratorBase();

  Q_PROPERTY(QString editorQml READ editorQml CONSTANT)
  Q_PROPERTY(QString mapVisualQml READ mapVisualQml CONSTANT)

29 30
  virtual QString editorQml() = 0;
  virtual QString mapVisualQml() = 0;
31

32 33 34
  virtual bool save(QJsonObject &obj) const = 0;
  virtual bool load(const QJsonObject &obj, QString &guiErrorMessage) = 0;

35 36 37 38 39 40
  virtual QString name() = 0;
  virtual QString abbreviation() = 0;

  virtual bool get(Generator &generator) = 0;

  Data data() const;
41
  void setData(Data d);
42 43 44

signals:
  void generatorChanged();
45
  void dataChanged();
46 47 48 49 50

protected:
  virtual void establishConnections();
  virtual void deleteConnections();
  Data _d;
51 52

private:
53 54 55
};

} // namespace routing