diff --git a/headers/private/shared/CalendarView.h b/headers/private/shared/CalendarView.h index c644dfb749..9ce4216d0e 100644 --- a/headers/private/shared/CalendarView.h +++ b/headers/private/shared/CalendarView.h @@ -97,6 +97,7 @@ public: bool IsDayNameHeaderVisible() const; void SetDayNameHeaderVisible(bool visible); + void UpdateDayNameHeader(); bool IsWeekNumberHeaderVisible() const; void SetWeekNumberHeaderVisible(bool visible); @@ -151,6 +152,8 @@ private: void _SetupDayNumbers(); void _SetupWeekNumbers(); + void _PopulateDayNames(BDateFormatStyle style); + void _DrawDays(); void _DrawFocusRect(); void _DrawDayHeader(); diff --git a/src/kits/shared/CalendarView.cpp b/src/kits/shared/CalendarView.cpp index ca27ead725..7bb0c86362 100644 --- a/src/kits/shared/CalendarView.cpp +++ b/src/kits/shared/CalendarView.cpp @@ -11,6 +11,7 @@ #include +#include #include #include @@ -171,6 +172,7 @@ BCalendarView::AttachedToWindow() void BCalendarView::FrameResized(float width, float height) { + _SetupDayNames(); Invalidate(Bounds()); } @@ -703,6 +705,17 @@ BCalendarView::SetDayNameHeaderVisible(bool visible) } +void +BCalendarView::UpdateDayNameHeader() +{ + if (!fDayNameHeaderVisible) + return; + + _SetupDayNames(); + Invalidate(Bounds().InsetBySelf(1.0, 1.0)); +} + + bool BCalendarView::IsWeekNumberHeaderVisible() const { @@ -844,8 +857,26 @@ BCalendarView::_GetPreferredSize(float* _width, float* _height) void BCalendarView::_SetupDayNames() { - for (int32 i = 0; i <= 6; ++i) - fDayNames[i] = fDate.ShortDayName(1 + (fStartOfWeek - 1 + i) % 7); + BDateFormatStyle style = B_LONG_DATE_FORMAT; + float width, height; + while (style != B_DATE_FORMAT_STYLE_COUNT) { + _PopulateDayNames(style); + GetPreferredSize(&width, &height); + if (width < Bounds().Width()) + return; + style = static_cast(static_cast(style) + 1); + } +} + + +void +BCalendarView::_PopulateDayNames(BDateFormatStyle style) +{ + for (int32 i = 0; i <= 6; ++i) { + fDayNames[i] = ""; + BDateFormat().GetDayName(1 + (fStartOfWeek - 1 + i) % 7, + fDayNames[i], style); + } }