BCalendarView: Adjust day name format to available space.

* Use BDateFormat::GetDayName() to fetch weekday names.
* Use appropriate symbol width(Mon, Mo, M) depending on the frame width.
* Provide functionality to update day name header in case of locale
preferences change.

Signed-off-by: Adrien Destugues <[email protected]>
This commit is contained in:
Akshay Agarwal
2017-09-01 20:20:06 +02:00
committed by Adrien Destugues
parent a222e4d0cc
commit 22d88eb415
2 changed files with 36 additions and 2 deletions
+3
View File
@@ -97,6 +97,7 @@ public:
bool IsDayNameHeaderVisible() const; bool IsDayNameHeaderVisible() const;
void SetDayNameHeaderVisible(bool visible); void SetDayNameHeaderVisible(bool visible);
void UpdateDayNameHeader();
bool IsWeekNumberHeaderVisible() const; bool IsWeekNumberHeaderVisible() const;
void SetWeekNumberHeaderVisible(bool visible); void SetWeekNumberHeaderVisible(bool visible);
@@ -151,6 +152,8 @@ private:
void _SetupDayNumbers(); void _SetupDayNumbers();
void _SetupWeekNumbers(); void _SetupWeekNumbers();
void _PopulateDayNames(BDateFormatStyle style);
void _DrawDays(); void _DrawDays();
void _DrawFocusRect(); void _DrawFocusRect();
void _DrawDayHeader(); void _DrawDayHeader();
+33 -2
View File
@@ -11,6 +11,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <DateFormat.h>
#include <LayoutUtils.h> #include <LayoutUtils.h>
#include <Window.h> #include <Window.h>
@@ -171,6 +172,7 @@ BCalendarView::AttachedToWindow()
void void
BCalendarView::FrameResized(float width, float height) BCalendarView::FrameResized(float width, float height)
{ {
_SetupDayNames();
Invalidate(Bounds()); 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 bool
BCalendarView::IsWeekNumberHeaderVisible() const BCalendarView::IsWeekNumberHeaderVisible() const
{ {
@@ -844,8 +857,26 @@ BCalendarView::_GetPreferredSize(float* _width, float* _height)
void void
BCalendarView::_SetupDayNames() BCalendarView::_SetupDayNames()
{ {
for (int32 i = 0; i <= 6; ++i) BDateFormatStyle style = B_LONG_DATE_FORMAT;
fDayNames[i] = fDate.ShortDayName(1 + (fStartOfWeek - 1 + i) % 7); float width, height;
while (style != B_DATE_FORMAT_STYLE_COUNT) {
_PopulateDayNames(style);
GetPreferredSize(&width, &height);
if (width < Bounds().Width())
return;
style = static_cast<BDateFormatStyle>(static_cast<int>(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);
}
} }