handling
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5150
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
#define wxHW_SCROLLBAR_NEVER 0x0002
#define wxHW_SCROLLBAR_AUTO 0x0004
#define wxHW_SCROLLBAR_NEVER 0x0002
#define wxHW_SCROLLBAR_AUTO 0x0004
+/*
+ * wxCalendarCtrl flags
+ */
+#define wxCAL_SUNDAY_FIRST 0x0000
+#define wxCAL_MONDAY_FIRST 0x0001
+#define wxCAL_SHOW_HOLIDAYS 0x0002
+
/*
* extended dialog specifiers. these values are stored in a different
* flag and thus do not overlap with other style flags. note that these
/*
* extended dialog specifiers. these values are stored in a different
* flag and thus do not overlap with other style flags. note that these
int year)
{
// take the current month/year if none specified
int year)
{
// take the current month/year if none specified
- ReplaceDefaultYearMonthWithCurrent(&year, &month);
+ if ( year == Inv_Year )
+ year = GetYear();
+ if ( month == Inv_Month )
+ month = GetMonth();
return Set(GetNumOfDaysInMonth(year, month), month, year);
}
return Set(GetNumOfDaysInMonth(year, month), month, year);
}
wxDateTime::Tm tm = m_date.GetTm();
wxDateTime date = wxDateTime(1, tm.mon, tm.year);
wxDateTime::Tm tm = m_date.GetTm();
wxDateTime date = wxDateTime(1, tm.mon, tm.year);
- if ( date.GetWeekDay() != wxDateTime::Sun )
- {
- date.SetToPrevWeekDay(wxDateTime::Sun);
- // be sure to do it or it might gain 1 hour if DST changed in between
- date.ResetTime();
- }
- //else: we already have it
+ // rewind back
+ date.SetToPrevWeekDay(GetWindowStyle() & wxCAL_MONDAY_FIRST
+ ? wxDateTime::Mon : wxDateTime::Sun);
+
+ // be sure to do it or it might gain 1 hour if DST changed in between
+ date.ResetTime();
size_t wxCalendarCtrl::GetWeek(const wxDateTime& date) const
{
size_t wxCalendarCtrl::GetWeek(const wxDateTime& date) const
{
- return date.GetWeekOfMonth(wxDateTime::Sunday_First);
+ return date.GetWeekOfMonth(GetWindowStyle() & wxCAL_MONDAY_FIRST
+ ? wxDateTime::Monday_First
+ : wxDateTime::Sunday_First);
}
// ----------------------------------------------------------------------------
}
// ----------------------------------------------------------------------------
- wxDateTime::WeekDay wd;
-
dc.SetFont(m_font);
RecalcGeometry();
dc.SetFont(m_font);
RecalcGeometry();
dc.SetBackgroundMode(wxTRANSPARENT);
dc.SetPen(*wxLIGHT_GREY_PEN);
dc.DrawRectangle(0, 0, 7*m_widthCol, m_heightRow);
dc.SetBackgroundMode(wxTRANSPARENT);
dc.SetPen(*wxLIGHT_GREY_PEN);
dc.DrawRectangle(0, 0, 7*m_widthCol, m_heightRow);
- for ( wd = wxDateTime::Sun; wd < wxDateTime::Inv_WeekDay; wxNextWDay(wd) )
+
+ bool startOnMonday = (GetWindowStyle() & wxCAL_MONDAY_FIRST) != 0;
+ for ( size_t wd = 0; wd < 7; wd++ )
- dc.DrawText(m_weekdays[wd], wd*m_widthCol + 1, 0);
+ size_t n;
+ if ( startOnMonday )
+ n = wd == 6 ? 0 : wd + 1;
+ else
+ n = wd;
+
+ dc.DrawText(m_weekdays[n], wd*m_widthCol + 1, 0);
printf("painting week %d at y = %d\n", nWeek, y);
#endif
printf("painting week %d at y = %d\n", nWeek, y);
#endif
- for ( wd = wxDateTime::Sun; wd < wxDateTime::Inv_WeekDay; wxNextWDay(wd) )
+ for ( size_t wd = 0; wd < 7; wd++ )
{
if ( IsDateShown(date) )
{
{
if ( IsDateShown(date) )
{
- SetDateAndNotify(m_date + wxDateSpan::Day());
+ if ( event.ControlDown() )
+ SetDateAndNotify(wxDateTime(m_date).SetToNextWeekDay(
+ GetWindowStyle() & wxCAL_MONDAY_FIRST
+ ? wxDateTime::Sun : wxDateTime::Sat));
+ else
+ SetDateAndNotify(m_date + wxDateSpan::Day());
- SetDateAndNotify(m_date - wxDateSpan::Day());
+ if ( event.ControlDown() )
+ SetDateAndNotify(wxDateTime(m_date).SetToPrevWeekDay(
+ GetWindowStyle() & wxCAL_MONDAY_FIRST
+ ? wxDateTime::Mon : wxDateTime::Sun));
+ else
+ SetDateAndNotify(m_date - wxDateSpan::Day());
- SetDateAndNotify(wxDateTime::Today());
+ if ( event.ControlDown() )
+ SetDateAndNotify(wxDateTime::Today());
+ else
+ SetDateAndNotify(wxDateTime(1, m_date.GetMonth(), m_date.GetYear()));
+ break;
+
+ case WXK_END:
+ SetDateAndNotify(wxDateTime(m_date).SetToLastMonthDay());