X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/db0b0942f8fe016db35fa00d6f2c5225cb61e529..96b2cbe8b39292fed91654ff0d1f4b1c16561acb:/src/msw/calctrl.cpp diff --git a/src/msw/calctrl.cpp b/src/msw/calctrl.cpp index a44ba3ae36..90faa55f47 100644 --- a/src/msw/calctrl.cpp +++ b/src/msw/calctrl.cpp @@ -56,6 +56,9 @@ wxCalendarCtrl::Create(wxWindow *parent, if ( !wxMSWDateControls::CheckInitialization() ) return false; + // we need the arrows for the navigation + style |= wxWANTS_CHARS; + // initialize the base class if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) ) return false; @@ -94,6 +97,8 @@ wxCalendarCtrl::Create(wxWindow *parent, UpdateMarks(); + Connect(wxEVT_LEFT_DOWN, + wxMouseEventHandler(wxCalendarCtrl::MSWOnClick)); Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(wxCalendarCtrl::MSWOnDoubleClick)); @@ -104,9 +109,8 @@ WXDWORD wxCalendarCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const { WXDWORD styleMSW = wxCalendarCtrlBase::MSWGetStyle(style, exstyle); - // right now we don't support any native styles but we should add wx styles - // corresponding to MCS_NOTODAY, MCS_NOTODAYCIRCLE and MCS_WEEKNUMBERS - // probably (TODO) + // right now we don't support all native styles but we should add wx styles + // corresponding to MCS_NOTODAY and MCS_NOTODAYCIRCLE probably (TODO) // for compatibility with the other versions, just turn off today display // unconditionally for now @@ -115,6 +119,9 @@ WXDWORD wxCalendarCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const // we also need this style for Mark() to work styleMSW |= MCS_DAYSTATE; + if ( style & wxCAL_SHOW_WEEK_NUMBERS ) + styleMSW |= MCS_WEEKNUMBERS; + return styleMSW; } @@ -170,7 +177,7 @@ wxCalendarCtrl::HitTest(const wxPoint& pos, case MCHT_CALENDARDATE: if ( date ) - wxMSWDateControls::FromSystemTime(date, hti.st); + date->SetFromMSWSysTime(hti.st); return wxCAL_HITTEST_DAY; case MCHT_CALENDARDAY: @@ -201,7 +208,7 @@ bool wxCalendarCtrl::SetDate(const wxDateTime& dt) wxCHECK_MSG( dt.IsValid(), false, "invalid date" ); SYSTEMTIME st; - wxMSWDateControls::ToSystemTime(&st, dt); + dt.GetAsMSWSysTime(&st); if ( !MonthCal_SetCurSel(GetHwnd(), &st) ) { wxLogDebug(_T("DateTime_SetSystemtime() failed")); @@ -225,8 +232,7 @@ wxDateTime wxCalendarCtrl::GetDate() const return wxDefaultDateTime; } - wxDateTime dt; - wxMSWDateControls::FromSystemTime(&dt, st); + wxDateTime dt(st); wxASSERT_MSG( dt == m_date, "mismatch between data and control" ); #endif // __WXDEBUG__ @@ -241,13 +247,13 @@ bool wxCalendarCtrl::SetDateRange(const wxDateTime& dt1, const wxDateTime& dt2) DWORD flags = 0; if ( dt1.IsValid() ) { - wxMSWDateControls::ToSystemTime(&st[0], dt1); + dt1.GetAsMSWSysTime(st + 0); flags |= GDTR_MIN; } if ( dt2.IsValid() ) { - wxMSWDateControls::ToSystemTime(&st[1], dt2); + dt2.GetAsMSWSysTime(st + 1); flags |= GDTR_MAX; } @@ -267,7 +273,7 @@ bool wxCalendarCtrl::GetDateRange(wxDateTime *dt1, wxDateTime *dt2) const if ( dt1 ) { if ( flags & GDTR_MIN ) - wxMSWDateControls::FromSystemTime(dt1, st[0]); + dt1->SetFromMSWSysTime(st[0]); else *dt1 = wxDefaultDateTime; } @@ -275,7 +281,7 @@ bool wxCalendarCtrl::GetDateRange(wxDateTime *dt1, wxDateTime *dt2) const if ( dt2 ) { if ( flags & GDTR_MAX ) - wxMSWDateControls::FromSystemTime(dt2, st[1]); + dt2->SetFromMSWSysTime(st[1]); else *dt2 = wxDefaultDateTime; } @@ -325,7 +331,7 @@ void wxCalendarCtrl::UpdateMarks() { MONTHDAYSTATE states[3]; const int nMonths = MonthCal_GetMonthRange(GetHwnd(), GMR_DAYSTATE, NULL); - wxCHECK_RET( nMonths <= WXSIZEOF(states), "unexpected months range" ); + wxCHECK_RET( nMonths <= (int)WXSIZEOF(states), "unexpected months range" ); for ( int i = 0; i < nMonths; i++ ) states[i] = m_marks; @@ -356,7 +362,7 @@ bool wxCalendarCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) // which expects GetDate() to return the new date const wxDateTime dateOld = m_date; const NMSELCHANGE * const sch = (NMSELCHANGE *)lParam; - wxMSWDateControls::FromSystemTime(&m_date, sch->stSelStart); + m_date.SetFromMSWSysTime(sch->stSelStart); // changing the year or the month results in a second dummy // MCN_SELCHANGE event on this system which doesn't really @@ -397,4 +403,13 @@ void wxCalendarCtrl::MSWOnDoubleClick(wxMouseEvent& event) event.Skip(); } +void wxCalendarCtrl::MSWOnClick(wxMouseEvent& event) +{ + // for some reason, the control doesn't get focus on its own when the user + // clicks in it + SetFocus(); + + event.Skip(); +} + #endif // wxUSE_CALENDARCTRL