Visually clean up date condition

- add "and" separator if "between" check is chosen
- split dateTimeEdit into a dateEdit and a timeEdit to make editing
  easier
- move ignore* checkboxes in front of respective edit widgets to make
  their intention more clear and add tooltips to further clarify their
  use
This commit is contained in:
WarmUpTill 2022-02-08 20:46:36 +01:00 committed by WarmUpTill
parent f8e3a3e275
commit bfa8f4d9d5
3 changed files with 104 additions and 30 deletions

View File

@ -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"

View File

@ -26,8 +26,8 @@ public:
return std::make_shared<MacroConditionDate>(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<MacroConditionDate> _entryData;
private:
void SetWidgetStatus();
void ShowSecondDateSelection(bool visible);
bool _loading = true;
};

View File

@ -105,28 +105,48 @@ static inline void populateConditionSelection(QComboBox *list)
}
}
#include <QCalendarWidget>
MacroConditionDateEdit::MacroConditionDateEdit(
QWidget *parent, std::shared_ptr<MacroConditionDate> 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<std::string, QWidget *> 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<std::mutex> 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<std::mutex> 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<std::mutex> lock(switcher->m);
_entryData->_dateTime2.setDate(date);
}
void MacroConditionDateEdit::Time2Changed(const QTime &time)
{
if (_loading || !_entryData) {
return;
}
std::lock_guard<std::mutex> lock(switcher->m);
_entryData->_dateTime2.setTime(time);
}
void MacroConditionDateEdit::IgnoreDateChanged(int state)
@ -210,7 +256,8 @@ void MacroConditionDateEdit::IgnoreDateChanged(int state)
}
std::lock_guard<std::mutex> 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<std::mutex> 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<int>(_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();
}