mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-21 17:34:57 -05:00
Add DayOfWeekSelector
This commit is contained in:
parent
fcb3ea50d3
commit
7048925d6e
|
|
@ -150,6 +150,8 @@ target_sources(
|
|||
utils/connection-manager.hpp
|
||||
utils/cursor-helpers.cpp
|
||||
utils/cursor-helpers.hpp
|
||||
utils/day-of-week-selector.cpp
|
||||
utils/day-of-week-selector.hpp
|
||||
utils/filter-selection.cpp
|
||||
utils/filter-selection.hpp
|
||||
utils/hotkey-helpers.cpp
|
||||
|
|
|
|||
121
plugins/base/utils/day-of-week-selector.cpp
Normal file
121
plugins/base/utils/day-of-week-selector.cpp
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
#include "day-of-week-selector.hpp"
|
||||
#include "obs-module-helper.hpp"
|
||||
|
||||
#include <QPushButton>
|
||||
#include <QHBoxLayout>
|
||||
|
||||
namespace advss {
|
||||
|
||||
DayOfWeekSelector::DayOfWeekSelector(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
auto layout = new QHBoxLayout(this);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
layout->setSpacing(4);
|
||||
|
||||
const QVector<QPair<Day, QString>> days = {
|
||||
{Monday, obs_module_text("AdvSceneSwitcher.day.monday")},
|
||||
{Tuesday, obs_module_text("AdvSceneSwitcher.day.tuesday")},
|
||||
{Wednesday, obs_module_text("AdvSceneSwitcher.day.wednesday")},
|
||||
{Thursday, obs_module_text("AdvSceneSwitcher.day.thursday")},
|
||||
{Friday, obs_module_text("AdvSceneSwitcher.day.friday")},
|
||||
{Saturday, obs_module_text("AdvSceneSwitcher.day.saturday")},
|
||||
{Sunday, obs_module_text("AdvSceneSwitcher.day.sunday")}};
|
||||
|
||||
for (const auto &[day, name] : days) {
|
||||
auto btn = new QPushButton(this);
|
||||
btn->setText(name);
|
||||
btn->setCheckable(true);
|
||||
|
||||
connect(btn, &QPushButton::toggled, this,
|
||||
&DayOfWeekSelector::OnButtonToggled);
|
||||
|
||||
layout->addWidget(btn);
|
||||
m_buttons.insert(day, btn);
|
||||
}
|
||||
|
||||
setLayout(layout);
|
||||
}
|
||||
|
||||
void DayOfWeekSelector::OnButtonToggled(bool)
|
||||
{
|
||||
emit SelectionChanged(SelectedDays());
|
||||
}
|
||||
|
||||
QSet<DayOfWeekSelector::Day> DayOfWeekSelector::SelectedDays() const
|
||||
{
|
||||
QSet<Day> result;
|
||||
for (auto it = m_buttons.begin(); it != m_buttons.end(); ++it) {
|
||||
if (it.value()->isChecked()) {
|
||||
result.insert(it.key());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void DayOfWeekSelector::SetSelectedDays(const QSet<Day> &days)
|
||||
{
|
||||
for (auto it = m_buttons.begin(); it != m_buttons.end(); ++it) {
|
||||
it.value()->setChecked(days.contains(it.key()));
|
||||
}
|
||||
}
|
||||
|
||||
QString DayOfWeekSelector::ToString(const QSet<Day> &days)
|
||||
{
|
||||
const QVector<QPair<Day, QString>> dayNames = {
|
||||
{Monday, obs_module_text("AdvSceneSwitcher.day.monday")},
|
||||
{Tuesday, obs_module_text("AdvSceneSwitcher.day.tuesday")},
|
||||
{Wednesday, obs_module_text("AdvSceneSwitcher.day.wednesday")},
|
||||
{Thursday, obs_module_text("AdvSceneSwitcher.day.thursday")},
|
||||
{Friday, obs_module_text("AdvSceneSwitcher.day.friday")},
|
||||
{Saturday, obs_module_text("AdvSceneSwitcher.day.saturday")},
|
||||
{Sunday, obs_module_text("AdvSceneSwitcher.day.sunday")}};
|
||||
|
||||
if (days.isEmpty()) {
|
||||
return obs_module_text("AdvSceneSwitcher.day.none");
|
||||
}
|
||||
|
||||
if (days.size() == 7) {
|
||||
return obs_module_text("AdvSceneSwitcher.day.any");
|
||||
}
|
||||
|
||||
QStringList parts;
|
||||
for (const auto &[day, name] : dayNames) {
|
||||
if (days.contains(day)) {
|
||||
parts << name;
|
||||
}
|
||||
}
|
||||
|
||||
return parts.join(", ");
|
||||
}
|
||||
|
||||
void SaveSelectedDays(obs_data_t *settings,
|
||||
const QSet<DayOfWeekSelector::Day> &days)
|
||||
{
|
||||
uint64_t mask = 0;
|
||||
|
||||
for (DayOfWeekSelector::Day day : days) {
|
||||
mask |= (1ULL << static_cast<int>(day));
|
||||
}
|
||||
|
||||
obs_data_set_int(settings, "selectedDays",
|
||||
static_cast<long long>(mask));
|
||||
}
|
||||
|
||||
QSet<DayOfWeekSelector::Day> LoadSelectedDays(obs_data_t *settings)
|
||||
{
|
||||
QSet<DayOfWeekSelector::Day> result;
|
||||
|
||||
uint64_t mask = static_cast<uint64_t>(
|
||||
obs_data_get_int(settings, "selectedDays"));
|
||||
|
||||
for (int i = DayOfWeekSelector::Monday; i <= DayOfWeekSelector::Sunday;
|
||||
++i) {
|
||||
if (mask & (1ULL << i)) {
|
||||
result.insert(static_cast<DayOfWeekSelector::Day>(i));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace advss
|
||||
45
plugins/base/utils/day-of-week-selector.hpp
Normal file
45
plugins/base/utils/day-of-week-selector.hpp
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
#pragma once
|
||||
#include <QWidget>
|
||||
#include <QSet>
|
||||
|
||||
#include <obs-data.h>
|
||||
|
||||
class QPushButton;
|
||||
|
||||
namespace advss {
|
||||
|
||||
class DayOfWeekSelector : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum Day {
|
||||
Monday = 1,
|
||||
Tuesday,
|
||||
Wednesday,
|
||||
Thursday,
|
||||
Friday,
|
||||
Saturday,
|
||||
Sunday
|
||||
};
|
||||
Q_ENUM(Day)
|
||||
|
||||
explicit DayOfWeekSelector(QWidget *parent = nullptr);
|
||||
|
||||
QSet<Day> SelectedDays() const;
|
||||
void SetSelectedDays(const QSet<Day> &days);
|
||||
static QString ToString(const QSet<Day> &days);
|
||||
|
||||
signals:
|
||||
void SelectionChanged(const QSet<Day> &days);
|
||||
|
||||
private:
|
||||
void OnButtonToggled(bool checked);
|
||||
|
||||
QMap<Day, QPushButton *> m_buttons;
|
||||
};
|
||||
|
||||
void SaveSelectedDays(obs_data_t *settings,
|
||||
const QSet<DayOfWeekSelector::Day> &days);
|
||||
QSet<DayOfWeekSelector::Day> LoadSelectedDays(obs_data_t *settings);
|
||||
|
||||
} // namespace advss
|
||||
Loading…
Reference in New Issue
Block a user