From d3780244cd55379d7d670d4c3b9c717d3ccd92ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Sun, 29 Dec 2024 22:30:00 +0100 Subject: [PATCH] Improved calendar rendering, standartization of some templates and cleanup of old styles. --- .../CalendarPageViewModel.cs | 21 ++- Wino.Calendar/App.xaml | 7 +- .../Controls/AllDayItemsControl.xaml | 6 +- .../Controls/AllDayItemsControl.xaml.cs | 61 +++++--- .../Controls/CalendarDayItemsControl.cs | 132 ------------------ Wino.Calendar/Controls/CalendarItemControl.cs | 42 ------ Wino.Calendar/Controls/WinoCalendarPanel.cs | 112 +++++++-------- .../Styles/CalendarDayItemsControl.xaml | 21 --- .../Styles/CalendarItemControlResources.xaml | 30 ---- .../CalendarItemControlResources.xaml.cs | 12 -- ...tyles.xaml => CalendarThemeResources.xaml} | 0 .../Styles/DayColumnControlResources.xaml | 102 -------------- .../Styles/DayColumnControlResources.xaml.cs | 12 -- .../Styles/WinoCalendarResources.xaml | 114 ++++++++++++++- Wino.Calendar/Styles/WinoCalendarView.xaml | 2 +- Wino.Calendar/Wino.Calendar.csproj | 22 +-- .../Collections/CalendarEventCollection.cs | 73 ++++++++-- .../Models/Calendar/DayRangeRenderModel.cs | 45 +++++- 18 files changed, 333 insertions(+), 481 deletions(-) delete mode 100644 Wino.Calendar/Controls/CalendarDayItemsControl.cs delete mode 100644 Wino.Calendar/Controls/CalendarItemControl.cs delete mode 100644 Wino.Calendar/Styles/CalendarDayItemsControl.xaml delete mode 100644 Wino.Calendar/Styles/CalendarItemControlResources.xaml delete mode 100644 Wino.Calendar/Styles/CalendarItemControlResources.xaml.cs rename Wino.Calendar/Styles/{CalendarRenderStyles.xaml => CalendarThemeResources.xaml} (100%) delete mode 100644 Wino.Calendar/Styles/DayColumnControlResources.xaml delete mode 100644 Wino.Calendar/Styles/DayColumnControlResources.xaml.cs diff --git a/Wino.Calendar.ViewModels/CalendarPageViewModel.cs b/Wino.Calendar.ViewModels/CalendarPageViewModel.cs index 2c9a9605..ca306576 100644 --- a/Wino.Calendar.ViewModels/CalendarPageViewModel.cs +++ b/Wino.Calendar.ViewModels/CalendarPageViewModel.cs @@ -63,8 +63,10 @@ namespace Wino.Calendar.ViewModels _calendarService = calendarService; _accountCalendarStateService = accountCalendarStateService; _preferencesService = preferencesService; + } + // TODO: Replace when calendar settings are updated. // Should be a field ideally. private BaseCalendarTypeDrawingStrategy GetDrawingStrategy(CalendarDisplayType displayType) @@ -225,7 +227,8 @@ namespace Wino.Calendar.ViewModels var range = new DateRange(startDate, endDate); var renderOptions = new CalendarRenderOptions(range, _currentSettings); - renderModels.Add(new DayRangeRenderModel(renderOptions)); + var dayRangeHeaderModel = new DayRangeRenderModel(renderOptions); + renderModels.Add(dayRangeHeaderModel); } // Dates are loaded. Now load the events for them. @@ -334,20 +337,24 @@ namespace Wino.Calendar.ViewModels dayRangeRenderModel.Period.End) .ConfigureAwait(false); - foreach (var calendarItem in events) + var groupedEvents = events.GroupBy(a => a.StartTime.Date); + + foreach (var group in groupedEvents) { - var calendarDayModel = dayRangeRenderModel.CalendarDays.FirstOrDefault(a => a.RepresentingDate.Date == calendarItem.StartTime.Date); + var startDate = group.Key; + + var calendarDayModel = dayRangeRenderModel.CalendarDays.FirstOrDefault(a => a.RepresentingDate.Date == startDate); if (calendarDayModel == null) continue; - var calendarItemViewModel = new CalendarItemViewModel(calendarItem); + var calendarItemViewModels = group.Select(a => new CalendarItemViewModel(a)); await ExecuteUIThread(() => { - // TODO: EventsCollection should not take CalendarItem, but CalendarItemViewModel. - // Enforce it later on. + // Use range-based add for performance. + // No need to report changes since at this point nothing is rendered on the UI. - calendarDayModel.EventsCollection.Add(calendarItemViewModel); + calendarDayModel.EventsCollection.AddCalendarItemRange(calendarItemViewModels, reportChange: false); }); } } diff --git a/Wino.Calendar/App.xaml b/Wino.Calendar/App.xaml index a66721ce..1b0db3ef 100644 --- a/Wino.Calendar/App.xaml +++ b/Wino.Calendar/App.xaml @@ -14,19 +14,14 @@ - - + - - - - diff --git a/Wino.Calendar/Controls/AllDayItemsControl.xaml b/Wino.Calendar/Controls/AllDayItemsControl.xaml index b25d73b0..820bd279 100644 --- a/Wino.Calendar/Controls/AllDayItemsControl.xaml +++ b/Wino.Calendar/Controls/AllDayItemsControl.xaml @@ -15,7 +15,7 @@ + ItemsSource="{x:Bind EventCollection.AllDayEvents}" />