wxCAL_SEQUENTIAL_MONTH_SELECTION = 0x0010,
// show the neighbouring weeks in the previous and next month
- wxCAL_SHOW_SURROUNDING_WEEKS = 0x0020
+ wxCAL_SHOW_SURROUNDING_WEEKS = 0x0020,
+
+ // show week numbers on the left side of the calendar.
+ wxCAL_SHOW_WEEK_NUMBERS = 0x0040
};
// ----------------------------------------------------------------------------
virtual void Mark(size_t day, bool mark);
+ // implementation
+ // --------------
+ wxDateTime m_selectedDate;
+
private:
DECLARE_DYNAMIC_CLASS(wxGtkCalendarCtrl)
DECLARE_NO_COPY_CLASS(wxGtkCalendarCtrl)
@style{wxCAL_SEQUENTIAL_MONTH_SELECTION}
Use alternative, more compact, style for the month and year
selection controls. (only generic)
+ @style{wxCAL_SHOW_WEEK_NUMBERS}
+ Show week numbers on the left side of the calendar. (not in generic)
@endStyleTable
@beginEventTable{wxCalendarEvent}
@category{ctrl}
<!-- @appearance{calendarctrl.png} -->
- @nativeimpl{wxgtk}
+ @nativeimpl{wxgtk,wxmsw}
@see @ref page_samples_calendar, wxCalendarDateAttr, wxCalendarEvent,
wxDatePickerCtrl
void OnCalSeqMonth(wxCommandEvent& event);
void OnCalShowSurroundingWeeks(wxCommandEvent& event);
+ void OnCalShowWeekNumbers(wxCommandEvent& event);
void OnSetDate(wxCommandEvent& event);
void OnToday(wxCommandEvent& event);
Calendar_Cal_Month,
Calendar_Cal_SeqMonth,
Calendar_Cal_SurroundWeeks,
+ Calendar_Cal_WeekNumbers,
Calendar_Cal_SetDate,
Calendar_Cal_Today,
Calendar_Cal_BeginDST,
EVT_MENU(Calendar_Cal_SeqMonth, MyFrame::OnCalSeqMonth)
EVT_MENU(Calendar_Cal_SurroundWeeks, MyFrame::OnCalShowSurroundingWeeks)
+ EVT_MENU(Calendar_Cal_WeekNumbers, MyFrame::OnCalShowWeekNumbers)
EVT_MENU(Calendar_Cal_SetDate, MyFrame::OnSetDate)
EVT_MENU(Calendar_Cal_Today, MyFrame::OnToday)
_T("Show s&urrounding weeks\tCtrl-W"),
_T("Show the neighbouring weeks in the prev/next month"),
true);
+ menuCal->Append(Calendar_Cal_WeekNumbers,
+ _T("Show &week numbers"),
+ _T("Toggle week numbers"),
+ true);
menuCal->AppendSeparator();
menuCal->Append(Calendar_Cal_SeqMonth,
_T("Toggle month selector st&yle\tCtrl-Y"),
m_panel->ToggleCalStyle(event.IsChecked(), wxCAL_SHOW_SURROUNDING_WEEKS);
}
+void MyFrame::OnCalShowWeekNumbers(wxCommandEvent& event)
+{
+ m_panel->ToggleCalStyle(event.IsChecked(), wxCAL_SHOW_WEEK_NUMBERS);
+}
+
void MyFrame::OnSetDate(wxCommandEvent &WXUNUSED(event))
{
m_panel->SetDate(wxDateTime(24, wxDateTime::Dec, 2005, 22, 00, 00));
else
style &= ~flag;
- if ( flag == wxCAL_SEQUENTIAL_MONTH_SELECTION )
+ if ( flag == wxCAL_SEQUENTIAL_MONTH_SELECTION
+ || flag == wxCAL_SHOW_WEEK_NUMBERS)
{
// changing this style requires recreating the control
RecreateCalendar(style);
static void gtk_day_selected_callback(GtkWidget *WXUNUSED(widget),
wxGtkCalendarCtrl *cal)
{
+ wxDateTime date = cal->GetDate();
+ if (cal->m_selectedDate == date)
+ return;
+
+ cal->m_selectedDate = date;
+
cal->GenerateEvent(wxEVT_CALENDAR_SEL_CHANGED);
+ // send deprecated event
cal->GenerateEvent(wxEVT_CALENDAR_DAY_CHANGED);
}
if (style & wxCAL_NO_MONTH_CHANGE)
g_object_set (G_OBJECT (m_widget), "no-month-change", true, NULL);
+ if (style & wxCAL_SHOW_WEEK_NUMBERS)
+ g_object_set (G_OBJECT (m_widget), "show-week-numbers", true, NULL);
g_signal_connect_after(m_widget, "day-selected",
G_CALLBACK (gtk_day_selected_callback),
return true;
}
+
bool wxGtkCalendarCtrl::SetDate(const wxDateTime& date)
{
+ g_signal_handlers_block_by_func(m_widget,
+ (gpointer) gtk_day_selected_callback, this);
+
+ m_selectedDate = date;
int year = date.GetYear();
int month = date.GetMonth();
int day = date.GetDay();
gtk_calendar_select_month(GTK_CALENDAR(m_widget), month, year);
gtk_calendar_select_day(GTK_CALENDAR(m_widget), day);
+
+ g_signal_handlers_unblock_by_func( m_widget,
+ (gpointer) gtk_day_selected_callback, this);
+
return true;
}