214 lines
5.3 KiB
C++
Executable File
214 lines
5.3 KiB
C++
Executable File
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "lts_widgets_export.h"
|
|
#include "qcheckbox.h"
|
|
#include "qpushbutton.h"
|
|
|
|
#include <QWidget>
|
|
#include <functional>
|
|
|
|
|
|
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<qint64()>;
|
|
|
|
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;
|
|
};
|
|
|
|
}
|