/** * LtsAngleEdit * $Id$ * $HeadURL$ * $Author$ * * Created by Steve Kemayou, ESZS, 2024-10-16 */ #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); /// set value of spinbox with index. index start from 0. Counting from Left to right. void setValue(const double value, AngleUnitType valueUnit); /// set value with current unit of given angle and convert it to current defined unit in combobox unit void setValue(const double value, AngleUnitType valueUnit, unsigned int dboxIndex); void hideUnits(const QVector &list); /// list of units that will not be displayed in cbox void showUnits(const QVector &list); /// list of units to be displayed in cbox LtsAngleEdit::AngleUnitType getAngleCurrentUnit() const; /// get cbox current unit void initAngleEditWidget(const unsigned int sboxCount); /// this method initialize the angle edit widget. sboxCount give number of spinbox to be created double getAngle(unsigned int sboxIndex = 0) const; /// sboxIndex default index value is 0; also when more than one dbox is created double getAngleConverted(const double angle, LtsAngleEdit::AngleUnitType newAngleUnit, LtsAngleEdit::AngleUnitType oldAngleUnit); void setEnable(int sbIndex, bool enabled); /// set spinbox at index enabled or disabled void showSpinbox(int sbIndex, bool visible); /// show spinBox of specific index. Indexes start from 0. protected: void setCboxUnit(); /// fill combobox with units private Q_SLOTS: void onCBoxAngleUnitChanged(); private: Ui_LtsAngleEdit *m_ui; QMap> m_sBoxMap; /// Map QMap> m_dboxLimitMap; /// minAngle, maxAngle, decimal place, single step AngleUnitType m_currAngleUnit; QSet m_hiddenUnits; }; }//namespace LtsAngleEdit