From 5298cf0e522eb65cc8965aff8ee8e9bbfe51395f Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 6 Mar 2022 12:07:43 +0300 Subject: [PATCH] Added ability to provide style to box for choosing date and time. --- .../SourceFiles/ui/boxes/choose_date_time.cpp | 23 ++++++++++++++----- .../SourceFiles/ui/boxes/choose_date_time.h | 17 ++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/ui/boxes/choose_date_time.cpp b/Telegram/SourceFiles/ui/boxes/choose_date_time.cpp index 023f7a94ce..2f77253c14 100644 --- a/Telegram/SourceFiles/ui/boxes/choose_date_time.cpp +++ b/Telegram/SourceFiles/ui/boxes/choose_date_time.cpp @@ -58,6 +58,15 @@ QString TimeString(QTime time) { } // namespace +ChooseDateTimeStyleArgs::ChooseDateTimeStyleArgs() +: labelStyle(&st::boxLabel) +, dateFieldStyle(&st::scheduleDateField) +, timeFieldStyle(&st::scheduleTimeField) +, separatorStyle(&st::scheduleTimeSeparator) +, atStyle(&st::scheduleAtLabel) +, calendarStyle(&st::defaultCalendarColors) { +} + ChooseDateTimeBoxDescriptor ChooseDateTimeBox( not_null box, ChooseDateTimeBoxArgs &&args) { @@ -76,25 +85,25 @@ ChooseDateTimeBoxDescriptor ChooseDateTimeBox( box->addRow(object_ptr( box, std::move(args.description), - st::boxLabel)); + *args.style.labelStyle)); } const auto parsed = base::unixtime::parse(args.time); const auto state = box->lifetime().make_state(State{ .date = parsed.date(), .day = CreateChild( content, - st::scheduleDateField), + *args.style.dateFieldStyle), .time = CreateChild( content, TimeString(parsed.time()), - st::scheduleTimeField, - st::scheduleDateField, - st::scheduleTimeSeparator, + *args.style.timeFieldStyle, + *args.style.dateFieldStyle, + *args.style.separatorStyle, st::scheduleTimeSeparatorPadding), .at = CreateChild( content, tr::lng_schedule_at(), - st::scheduleAtLabel), + *args.style.atStyle), }); state->date.value( @@ -155,6 +164,7 @@ ChooseDateTimeBoxDescriptor ChooseDateTimeBox( const auto calendar = content->lifetime().make_state>(); + const auto calendarStyle = args.style.calendarStyle; QObject::connect(state->day, &InputField::focused, [=] { if (*calendar) { return; @@ -169,6 +179,7 @@ ChooseDateTimeBoxDescriptor ChooseDateTimeBox( }), .minDate = minDate(), .maxDate = maxDate(), + .stColors = *calendarStyle, })); (*calendar)->boxClosing( ) | rpl::start_with_next(crl::guard(state->time, [=] { diff --git a/Telegram/SourceFiles/ui/boxes/choose_date_time.h b/Telegram/SourceFiles/ui/boxes/choose_date_time.h index 24391b48b0..1a12c7ffa1 100644 --- a/Telegram/SourceFiles/ui/boxes/choose_date_time.h +++ b/Telegram/SourceFiles/ui/boxes/choose_date_time.h @@ -9,6 +9,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/layers/generic_box.h" +namespace style { +struct FlatLabel; +struct InputField; +struct CalendarColors; +} // namespace style + namespace Ui { class RoundButton; @@ -19,6 +25,16 @@ struct ChooseDateTimeBoxDescriptor { rpl::producer values; }; +struct ChooseDateTimeStyleArgs { + ChooseDateTimeStyleArgs(); + const style::FlatLabel *labelStyle; + const style::InputField *dateFieldStyle; + const style::InputField *timeFieldStyle; + const style::FlatLabel *separatorStyle; + const style::FlatLabel *atStyle; + const style::CalendarColors *calendarStyle; +}; + struct ChooseDateTimeBoxArgs { rpl::producer title; rpl::producer submit; @@ -27,6 +43,7 @@ struct ChooseDateTimeBoxArgs { TimeId time = 0; Fn max; rpl::producer description; + ChooseDateTimeStyleArgs style; }; ChooseDateTimeBoxDescriptor ChooseDateTimeBox(