#pragma once #include #include #include #include #include "ui_lts_coord_widget_mgrs.h" #include "ui_lts_coord_widget_wgs84.h" namespace LtsCoordWidget { class LtsCoordInputWidgetHandler : public QObject { Q_OBJECT public: explicit LtsCoordInputWidgetHandler(QObject *parent) : QObject(parent) {} virtual bool isValid() = 0; virtual void setCoordinate(const QPointF &geoCoord) = 0; virtual QPointF coordinate() const = 0; virtual QToolButton *resetButton() = 0; virtual void cleanup() = 0; virtual void clear() = 0; virtual void setSquaresEditable(bool bEditable) = 0; virtual void setWithSurroundingSquare(bool bEnabled) = 0; virtual void setMgrsSquares(const QVector &geoCoords) = 0; protected Q_SLOTS: void onCoordinateDataChanged(); Q_SIGNALS: void coordinateChanged(const QPointF &newGeoCoord); void invalidCoordinate(); }; class MgrsEdit final : public LtsCoordInputWidgetHandler { Q_OBJECT public: explicit MgrsEdit(int precision, QWidget *widget); ~MgrsEdit(); bool isValid() override; void setCoordinate(const QPointF &geoCoord) override; QPointF coordinate() const override; QToolButton *resetButton() override; void cleanup() override; void clear() override; void setSquaresEditable(bool bEditable) override; void setWithSurroundingSquare(bool bEnabled) override; void setMgrsSquares(const QVector &geoCoords) override; private: void setDefaultMgrsSquares(); void addMgrsSquare(const QString &newMgrsSquare); QStringList utmCoordsToList(const QVector &coords); private: int m_precision; bool m_withMgrsSquareOffset=false; Ui::Mgrs *m_ui; }; class Wgs84Edit final : public LtsCoordInputWidgetHandler { Q_OBJECT public: explicit Wgs84Edit(QWidget *widget); ~Wgs84Edit(); bool isValid() override; void setCoordinate(const QPointF &geoCoord) override; QPointF coordinate() const override; QToolButton *resetButton() override; void cleanup() override; void clear() override; void setSquaresEditable(bool bEditable) override { Q_UNUSED(bEditable); } void setWithSurroundingSquare(bool bEnabled) override { Q_UNUSED(bEnabled); } void setMgrsSquares(const QVector &geoCoords) override { Q_UNUSED(geoCoords); } private: Ui::Wgs84 *m_ui; }; class DoubleValidator final : public QDoubleValidator { Q_OBJECT public: DoubleValidator(double bottom, double top, int decimals, QObject *parent = nullptr); QValidator::State validate(QString &input, int &pos) const override; }; }