#pragma once #include #include #include #include class Ui_LtsAngleEdit; namespace LtsWidgets { class LTSWIDGETS_EXPORT LtsAngleEdit : public QWidget { Q_OBJECT public: explicit LtsAngleEdit(QWidget *parent = nullptr); ~LtsAngleEdit(); enum class AngleUnitType : unsigned int { Deg = 0, Mil = 1, Rad = 2 }; Q_ENUM(AngleUnitType) enum LimTuple : int { AngleMin, AngleMax, DecimalPlace, SingleStep }; const QString spinBoxName = QStringLiteral("sboxAngleValue"); QString toString(AngleUnitType t); void setAngleUnit(const AngleUnitType &type); void setValue(const double value, unsigned int dboxIndex=0); void setValue(const double value, AngleUnitType valueUnit); void setValue(const double value, AngleUnitType valueUnit, unsigned int dboxIndex); void hideUnits(const QVector &list); void showUnits(const QVector &list); LtsAngleEdit::AngleUnitType getAngleCurrentUnit() const; void initAngleEditWidget(const unsigned int sboxCount); double getAngle(unsigned int sboxIndex = 0) const; double getAngleConverted(const double angle, LtsAngleEdit::AngleUnitType newAngleUnit, LtsAngleEdit::AngleUnitType oldAngleUnit); void setEnable(int sbIndex, bool enabled); void showSpinbox(int sbIndex, bool visible); protected: void setCboxUnit(); private Q_SLOTS: void onCBoxAngleUnitChanged(); private: Ui_LtsAngleEdit *m_ui; QMap> m_sBoxMap; QMap> m_dboxLimitMap; AngleUnitType m_currAngleUnit; QSet m_hiddenUnits; }; }