#pragma once #include "lts_widgets_export.h" #include "qcheckbox.h" #include "qpushbutton.h" #include #include namespace Ui { class LtsDateTimeEditLe; class LtsDateTimeEdit; } class QLineEdit; class QShortcut; namespace LtsWidgets { class LTSWIDGETS_EXPORT LtsDateTimeEdit : public QWidget { Q_OBJECT Q_PROPERTY(bool autoForward READ getAutoForward WRITE setAutoForward) Q_PROPERTY(bool editTimezone READ getEditTimezone WRITE setEditTimezone) Q_PROPERTY(bool withButtons READ getWithButtons WRITE setWithButtons) Q_PROPERTY(bool withSlider READ getWithSlider WRITE setWithSlider) Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly) Q_PROPERTY(bool withNowButton READ withNowButton WRITE setWithNowButton) Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable) Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled) public: using CurrentTimeCallback = std::function; explicit LtsDateTimeEdit(QWidget *parent = nullptr, bool withNowButton = true, bool checkable = false); ~LtsDateTimeEdit(); bool setupUiTouch(); qint64 msecsSinceEpoch() const; bool isEmpty() const; bool isValidDate() const; void setAutoForward(const bool af) { m_autoForward = af; } bool getAutoForward() const { return m_autoForward; } void setEditTimezone(const bool edit); bool getEditTimezone() const { return m_editTimezone; } void setWithButtons(const bool buttons); bool getWithButtons() const { return m_withButtons; } void setWithSlider(const bool slider); bool getWithSlider() const { return m_withSlider; } void setReadOnly(const bool readOnly); bool isReadOnly() const { return m_readOnly; } void setCheckable(bool checkable); bool isCheckable() const { return m_checkable; } void setChecked(bool bChecked); bool isChecked() const; void setWithNowButton(bool nowButton); bool withNowButton() const { return m_withNowButton; } void setMinimumTimeMSec(qint64 msec); qint64 minimumTimeMSec() const { return m_minTimeMSec; } void setMaximumTimeMSec(qint64 msec); qint64 maximumTimeMSec() const { return m_maxTimeMSec; } void setMinMaxTimeMSec(qint64 min, qint64 max) { setMinimumTimeMSec(min); setMaximumTimeMSec(max); } void setRetrieveCurrentTimeCallback(const CurrentTimeCallback &cb); bool setTimezone(char tz); char getTimezone() const; qint64 getTimezoneAsSecs() const; void setSubWidgetsProperties(const QString &name, const QVariant &value); Q_SIGNALS: void dateTimeChanged(); void toggled(bool on); public Q_SLOTS: bool setMsecsSinceEpoch(qint64 msec, bool setToNearestPossible = true); void clear(); private: void clearTimezone(); void setMinMaxMonth(int minMonth, int maxMonth); bool setMonth(int month); int getMonth() const; bool setDay(int day); int getDay() const; bool setHHMMSS(int hour, int minute, int second); int getHour() const; int getMinute() const; int getSecond() const; bool setYear(int year); int getYear() const; bool isEmptyDay() const; bool isEmptyHHMMSS() const; bool isEmptyTimezone() const; bool isEmptyMonth() const; bool isEmptyYear() const; bool hasFocus() const; bool isDataAcceptable(); void showInvalidData(bool setFocus); bool isLineEditDataAcceptable(QLineEdit *le) const; bool isDayAcceptable() const; bool isHHMMSSAcceptable() const; bool isMonthAcceptable() const; bool isYearAcceptable() const; bool isTzAcceptable() const; QCheckBox* checkBox() const; QPushButton* pbNow() const; private Q_SLOTS: void setFixedDateTime(); void setOffsetDateTime(); void setSliderValue(int val); void valueDayChanged(const QString &str); void fixupHHMMSS(); void valueMonthChanged(const QString &str); void valueMonthChanged2(const QString &str); void valueTimezoneChangedStr(const QString &str); void valueTimezoneChangedInt(int newTimezone); void valueYearChanged(const QString &str); void onBackHourClicked(); void onBackMinuteClicked(); void onBackSecondClicked(); void onForwardSecondClicked(); void onForwardMinuteClicked(); void onForwardHourClicked(); void onCheckBoxChanged(); void disableControls(); void enableControls(); void enaDisaControls(bool bEnable); void onFocusOutHHMMSS(); void onFocusOutTZ(); void onFocusOutDay(); void onFocusOutMonth(); void onFocusOutYear(); void onFocusOutBackspace(); void onFocusOut(); void onHmsWheelEvent(bool bForward, int cursorPos); void onDayWheelEvent(bool bForward, int cursorPos); void onMonthWheelEvent(bool bForward, int cursorPos); void onYearWheelEvent(bool bForward, int cursorPos); private: Ui::LtsDateTimeEditLe *m_uiLe{nullptr}; Ui::LtsDateTimeEdit *m_uiTouch{nullptr}; QShortcut *m_scFixed = nullptr; QShortcut *m_scOffset = nullptr; CurrentTimeCallback m_getCurrentTimeCallback = nullptr; qint64 m_minTimeMSec = 0; qint64 m_maxTimeMSec = 0; qint64 m_curTimeMSec = -1; bool m_editTimezone = true; bool m_autoForward = true; bool m_withButtons = false; bool m_withSlider = false; bool m_readOnly = false; bool m_checkable = false; bool m_withNowButton = false; int m_minMonth{0}; int m_maxMonth{0}; bool m_backspacePressed = false; bool m_recursionAvoid = false; bool m_dateIsAcceptable = false; }; }