Applied patch [ 650511 ] wxCalendarCtrl - year does not change

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20828 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart 2003-06-01 16:46:49 +00:00
parent 920b9675d9
commit 605dfd9173
3 changed files with 47 additions and 7 deletions

View File

@ -256,6 +256,10 @@ private:
// if the date isn't visible (-1, -1) is put in (day, week) and false is returned
bool GetDateCoord(const wxDateTime& date, int *day, int *week) const;
// Set the flag for SetDate(): otherwise it would overwrite the year
// typed in by the user
void SetUserChangedYear() { m_userChangedYear = TRUE; }
// the subcontrols
wxStaticText *m_staticMonth;
wxComboBox *m_comboMonth;

View File

@ -78,6 +78,9 @@ public:
void HighlightSpecial(bool on);
void SetDate();
void Today();
private:
wxCalendarCtrl *m_calendar;
wxStaticText *m_date;
@ -106,6 +109,9 @@ public:
void OnCalSeqMonth(wxCommandEvent& event);
void OnCalShowSurroundingWeeks(wxCommandEvent& event);
void OnSetDate(wxCommandEvent& event);
void OnToday(wxCommandEvent& event);
void OnAllowYearUpdate(wxUpdateUIEvent& event);
private:
@ -132,6 +138,8 @@ enum
Calendar_Cal_Year,
Calendar_Cal_SeqMonth,
Calendar_Cal_SurroundWeeks,
Calendar_Cal_SetDate,
Calendar_Cal_Today,
Calendar_CalCtrl = 1000
};
@ -156,6 +164,10 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(Calendar_Cal_SeqMonth, MyFrame::OnCalSeqMonth)
EVT_MENU(Calendar_Cal_SurroundWeeks, MyFrame::OnCalShowSurroundingWeeks)
EVT_MENU(Calendar_Cal_SetDate, MyFrame::OnSetDate)
EVT_MENU(Calendar_Cal_Today, MyFrame::OnToday)
EVT_UPDATE_UI(Calendar_Cal_Year, MyFrame::OnAllowYearUpdate)
END_EVENT_TABLE()
@ -238,6 +250,9 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
menuCal->Append(Calendar_Cal_Year, _T("&Year can be changed\tCtrl-Y"),
_T("Allow changing the year in the calendar"),
TRUE);
menuCal->AppendSeparator();
menuCal->Append(Calendar_Cal_SetDate, "SetDate()", "Set date to 2005-12-24.");
menuCal->Append(Calendar_Cal_Today, "Today()", "Set the current date.");
// now append the freshly created menu to the menu bar...
wxMenuBar *menuBar = new wxMenuBar;
@ -325,6 +340,16 @@ void MyFrame::OnAllowYearUpdate(wxUpdateUIEvent& event)
event.Enable( GetMenuBar()->IsChecked(Calendar_Cal_Month));
}
void MyFrame::OnSetDate(wxCommandEvent &event)
{
m_panel->SetDate();
}
void MyFrame::OnToday(wxCommandEvent &event)
{
m_panel->Today();
}
// ----------------------------------------------------------------------------
// MyPanel
// ----------------------------------------------------------------------------
@ -428,3 +453,14 @@ void MyPanel::HighlightSpecial(bool on)
m_calendar->Refresh();
}
void MyPanel::SetDate()
{
wxDateTime date(24, wxDateTime::Dec, 2005, 23, 59, 59);
m_calendar->SetDate(date);
}
void MyPanel::Today()
{
m_calendar->SetDate(wxDateTime::Today());
}

View File

@ -68,7 +68,11 @@ class wxYearSpinCtrl : public wxSpinCtrl
public:
wxYearSpinCtrl(wxCalendarCtrl *cal);
void OnYearTextChange(wxCommandEvent& event) { m_cal->OnYearChange(event); }
void OnYearTextChange(wxCommandEvent& event)
{
m_cal->SetUserChangedYear();
m_cal->OnYearChange(event);
}
void OnYearChange(wxSpinEvent& event) { m_cal->OnYearChange(event); }
private:
@ -449,8 +453,6 @@ bool wxCalendarCtrl::SetDate(const wxDateTime& date)
{
if ( !m_userChangedYear )
m_spinYear->SetValue(m_date.Format(_T("%Y")));
else // don't overwrite what the user typed in
m_userChangedYear = FALSE;
}
}
@ -468,6 +470,8 @@ bool wxCalendarCtrl::SetDate(const wxDateTime& date)
}
}
m_userChangedYear = FALSE;
return retval;
}
@ -1569,10 +1573,6 @@ void wxCalendarCtrl::OnYearChange(wxCommandEvent& event)
return;
}
// set the flag for SetDate(): otherwise it would overwrite the year
// typed in by the user
m_userChangedYear = TRUE;
wxDateTime::Tm tm = m_date.GetTm();
if ( tm.mday > wxDateTime::GetNumberOfDays(tm.mon, year) )