diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 5969a9ff..90ead36d 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -242,7 +242,10 @@ AdvSceneSwitcher.condition.date.state.at="At" AdvSceneSwitcher.condition.date.state.after="After" AdvSceneSwitcher.condition.date.state.before="Before" AdvSceneSwitcher.condition.date.state.between="Between" -AdvSceneSwitcher.condition.date.entry.line1="{{condition}} {{dateTime}} {{dateTime2}} {{ignoreDate}} Ignore date component {{ignoreTime}} Ignore time component" +AdvSceneSwitcher.condition.date.separator="and" +AdvSceneSwitcher.condition.date.ignoreDate="If unchecked the date component will be ignored" +AdvSceneSwitcher.condition.date.ignoreTime="If unchecked the time component will be ignored" +AdvSceneSwitcher.condition.date.entry.line1="{{condition}} {{ignoreDate}}{{date}} {{ignoreTime}}{{time}} {{separator}} {{date2}} {{time2}}" AdvSceneSwitcher.condition.date.entry.line2="{{repeat}} Repeat every {{duration}} on date match" AdvSceneSwitcher.condition.sceneTransform="Scene item transform" AdvSceneSwitcher.condition.sceneTransform.getTransform="Get transform" diff --git a/src/headers/macro-condition-date.hpp b/src/headers/macro-condition-date.hpp index 0cc2aca8..0af5148f 100644 --- a/src/headers/macro-condition-date.hpp +++ b/src/headers/macro-condition-date.hpp @@ -26,8 +26,8 @@ public: return std::make_shared(m); } - QDateTime _dateTime; - QDateTime _dateTime2; + QDateTime _dateTime = QDateTime::currentDateTime(); + QDateTime _dateTime2 = QDateTime::currentDateTime(); bool _ignoreDate = false; bool _ignoreTime = false; bool _repeat = false; @@ -57,8 +57,10 @@ public: private slots: void ConditionChanged(int cond); - void DateTimeChanged(const QDateTime &datetime); - void DateTime2Changed(const QDateTime &datetime); + void DateChanged(const QDate &date); + void TimeChanged(const QTime &time); + void Date2Changed(const QDate &date); + void Time2Changed(const QTime &time); void IgnoreDateChanged(int state); void IgnoreTimeChanged(int state); void RepeatChanged(int state); @@ -69,8 +71,11 @@ signals: protected: QComboBox *_condition; - QDateTimeEdit *_dateTime; - QDateTimeEdit *_dateTime2; + QDateEdit *_date; + QTimeEdit *_time; + QLabel *_separator; + QDateEdit *_date2; + QTimeEdit *_time2; QCheckBox *_ignoreDate; QCheckBox *_ignoreTime; QCheckBox *_repeat; @@ -78,6 +83,7 @@ protected: std::shared_ptr _entryData; private: + void SetWidgetStatus(); void ShowSecondDateSelection(bool visible); bool _loading = true; }; diff --git a/src/macro-condition-date.cpp b/src/macro-condition-date.cpp index 220a0e1c..7707a0c8 100644 --- a/src/macro-condition-date.cpp +++ b/src/macro-condition-date.cpp @@ -105,28 +105,48 @@ static inline void populateConditionSelection(QComboBox *list) } } +#include + MacroConditionDateEdit::MacroConditionDateEdit( QWidget *parent, std::shared_ptr entryData) : QWidget(parent) { _condition = new QComboBox(); - _dateTime = new QDateTimeEdit(); - _dateTime->setCalendarPopup(true); - _dateTime->setDisplayFormat("yyyy.MM.dd hh:mm:ss"); - _dateTime2 = new QDateTimeEdit(); - _dateTime2->setCalendarPopup(true); - _dateTime2->setDisplayFormat("yyyy.MM.dd hh:mm:ss"); + _date = new QDateEdit(); + _date->setDisplayFormat("yyyy.MM.dd "); + _date->setCalendarPopup(true); + auto cal = _date->calendarWidget(); + cal->showSelectedDate(); + _time = new QTimeEdit(); + _time->setDisplayFormat("hh:mm:ss"); + _separator = new QLabel( + obs_module_text("AdvSceneSwitcher.condition.date.separator")); + _date2 = new QDateEdit(); + _date2->setDisplayFormat("yyyy.MM.dd "); + _date2->setCalendarPopup(true); + cal = _date2->calendarWidget(); + cal->showSelectedDate(); + _time2 = new QTimeEdit(); + _time2->setDisplayFormat("hh:mm:ss"); _ignoreDate = new QCheckBox(); + _ignoreDate->setToolTip( + obs_module_text("AdvSceneSwitcher.condition.date.ignoreDate")); _ignoreTime = new QCheckBox(); + _ignoreTime->setToolTip( + obs_module_text("AdvSceneSwitcher.condition.date.ignoreTime")); _repeat = new QCheckBox(); _duration = new DurationSelection(); QWidget::connect(_condition, SIGNAL(currentIndexChanged(int)), this, SLOT(ConditionChanged(int))); - QWidget::connect(_dateTime, SIGNAL(dateTimeChanged(const QDateTime &)), - this, SLOT(DateTimeChanged(const QDateTime &))); - QWidget::connect(_dateTime2, SIGNAL(dateTimeChanged(const QDateTime &)), - this, SLOT(DateTime2Changed(const QDateTime &))); + QWidget::connect(_date, SIGNAL(dateChanged(const QDate &)), this, + SLOT(DateChanged(const QDate &))); + QWidget::connect(_date2, SIGNAL(dateChanged(const QDate &)), this, + SLOT(Date2Changed(const QDate &))); + QWidget::connect(_time, SIGNAL(timeChanged(const QTime &)), this, + SLOT(TimeChanged(const QTime &))); + QWidget::connect(_time2, SIGNAL(timeChanged(const QTime &)), this, + SLOT(Time2Changed(const QTime &))); QWidget::connect(_ignoreDate, SIGNAL(stateChanged(int)), this, SLOT(IgnoreDateChanged(int))); QWidget::connect(_ignoreTime, SIGNAL(stateChanged(int)), this, @@ -143,8 +163,11 @@ MacroConditionDateEdit::MacroConditionDateEdit( auto line1Layout = new QHBoxLayout; std::unordered_map widgetPlaceholders = { {"{{condition}}", _condition}, - {"{{dateTime}}", _dateTime}, - {"{{dateTime2}}", _dateTime2}, + {"{{date}}", _date}, + {"{{time}}", _time}, + {"{{separator}}", _separator}, + {"{{date2}}", _date2}, + {"{{time2}}", _time2}, {"{{ignoreDate}}", _ignoreDate}, {"{{ignoreTime}}", _ignoreTime}, {"{{repeat}}", _repeat}, @@ -180,27 +203,50 @@ void MacroConditionDateEdit::ConditionChanged(int cond) DateCondition::BETWEEN); } -void MacroConditionDateEdit::DateTimeChanged(const QDateTime &datetime) +void MacroConditionDateEdit::DateChanged(const QDate &date) { if (_loading || !_entryData) { return; } std::lock_guard lock(switcher->m); - _entryData->_dateTime = datetime; + _entryData->_dateTime.setDate(date); emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); } -void MacroConditionDateEdit::DateTime2Changed(const QDateTime &datetime) +void MacroConditionDateEdit::TimeChanged(const QTime &time) { if (_loading || !_entryData) { return; } std::lock_guard lock(switcher->m); - _entryData->_dateTime2 = datetime; + _entryData->_dateTime.setTime(time); + + emit HeaderInfoChanged( + QString::fromStdString(_entryData->GetShortDesc())); +} + +void MacroConditionDateEdit::Date2Changed(const QDate &date) +{ + if (_loading || !_entryData) { + return; + } + + std::lock_guard lock(switcher->m); + _entryData->_dateTime2.setDate(date); +} + +void MacroConditionDateEdit::Time2Changed(const QTime &time) +{ + if (_loading || !_entryData) { + return; + } + + std::lock_guard lock(switcher->m); + _entryData->_dateTime2.setTime(time); } void MacroConditionDateEdit::IgnoreDateChanged(int state) @@ -210,7 +256,8 @@ void MacroConditionDateEdit::IgnoreDateChanged(int state) } std::lock_guard lock(switcher->m); - _entryData->_ignoreDate = state; + _entryData->_ignoreDate = !state; + SetWidgetStatus(); } void MacroConditionDateEdit::IgnoreTimeChanged(int state) @@ -220,7 +267,8 @@ void MacroConditionDateEdit::IgnoreTimeChanged(int state) } std::lock_guard lock(switcher->m); - _entryData->_ignoreTime = state; + _entryData->_ignoreTime = !state; + SetWidgetStatus(); } void MacroConditionDateEdit::RepeatChanged(int state) @@ -261,19 +309,36 @@ void MacroConditionDateEdit::UpdateEntryData() } _condition->setCurrentIndex(static_cast(_entryData->_condition)); - _dateTime->setDateTime(_entryData->_dateTime); - _dateTime2->setDateTime(_entryData->_dateTime2); - _ignoreDate->setChecked(_entryData->_ignoreDate); - _ignoreTime->setChecked(_entryData->_ignoreTime); + _date->setDate(_entryData->_dateTime.date()); + _time->setTime(_entryData->_dateTime.time()); + _date2->setDate(_entryData->_dateTime2.date()); + _time2->setTime(_entryData->_dateTime2.time()); + _ignoreDate->setChecked(!_entryData->_ignoreDate); + _ignoreTime->setChecked(!_entryData->_ignoreTime); _repeat->setChecked(_entryData->_repeat); _duration->SetDuration(_entryData->_duration); _duration->setDisabled(!_entryData->_repeat); + SetWidgetStatus(); +} + +void MacroConditionDateEdit::SetWidgetStatus() +{ + if (!_entryData) { + return; + } + + _date->setDisabled(_entryData->_ignoreDate); + _date2->setDisabled(_entryData->_ignoreDate); + _time->setDisabled(_entryData->_ignoreTime); + _time2->setDisabled(_entryData->_ignoreTime); ShowSecondDateSelection(_entryData->_condition == DateCondition::BETWEEN); } void MacroConditionDateEdit::ShowSecondDateSelection(bool visible) { - _dateTime2->setVisible(visible); + _separator->setVisible(visible); + _date2->setVisible(visible); + _time2->setVisible(visible); adjustSize(); }