///////////////////////////////////////////////////////////////////////////////
-// Name: generic/calctrlg.h
+// Name: wx/generic/calctrlg.h
// Purpose: generic implementation of date-picker control
// Author: Vadim Zeitlin
// Modified by:
class WXDLLIMPEXP_FWD_CORE wxComboBox;
class WXDLLIMPEXP_FWD_CORE wxStaticText;
class WXDLLIMPEXP_FWD_CORE wxSpinCtrl;
+class WXDLLIMPEXP_FWD_CORE wxSpinEvent;
// ----------------------------------------------------------------------------
// wxGenericCalendarCtrl
// set/get the range in which selection can occur
// ---------------------------------------------
- // all functions in this section are for generic version only
+ virtual bool SetDateRange(const wxDateTime& lowerdate = wxDefaultDateTime,
+ const wxDateTime& upperdate = wxDefaultDateTime);
+
+ virtual bool GetDateRange(wxDateTime *lowerdate, wxDateTime *upperdate) const;
+
+ // these functions are for generic version only, don't use them but use the
+ // Set/GetDateRange() above instead
bool SetLowerDateLimit(const wxDateTime& date = wxDefaultDateTime);
const wxDateTime& GetLowerDateLimit() const { return m_lowdate; }
bool SetUpperDateLimit(const wxDateTime& date = wxDefaultDateTime);
const wxDateTime& GetUpperDateLimit() const { return m_highdate; }
- bool SetDateRange(const wxDateTime& lowerdate = wxDefaultDateTime,
- const wxDateTime& upperdate = wxDefaultDateTime);
-
// calendar mode
// -------------
// corresponds to wxCAL_NO_YEAR_CHANGE bit, deprecated, generic only
void EnableYearChange(bool enable = true);
- // corresponds to wxCAL_SHOW_HOLIDAYS bit, generic only
- virtual void EnableHolidayDisplay(bool display = true);
-
// customization
// -------------
virtual wxCalendarDateAttr *GetAttr(size_t day) const
{
- wxCHECK_MSG( day > 0 && day < 32, NULL, _T("invalid day") );
+ wxCHECK_MSG( day > 0 && day < 32, NULL, wxT("invalid day") );
return m_attrs[day - 1];
}
virtual void SetAttr(size_t day, wxCalendarDateAttr *attr)
{
- wxCHECK_RET( day > 0 && day < 32, _T("invalid day") );
+ wxCHECK_RET( day > 0 && day < 32, wxT("invalid day") );
delete m_attrs[day - 1];
m_attrs[day - 1] = attr;
protected:
// override some base class virtuals
virtual wxSize DoGetBestSize() const;
- virtual void DoGetPosition(int *x, int *y) const;
- virtual void DoGetSize(int *width, int *height) const;
- virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags);
virtual void DoMoveWindow(int x, int y, int width, int height);
+ virtual void DoGetSize(int *width, int *height) const;
private:
// common part of all ctors
void OnDClick(wxMouseEvent& event);
void OnChar(wxKeyEvent& event);
void OnMonthChange(wxCommandEvent& event);
- void OnYearChange(wxCommandEvent& event);
+
+ void HandleYearChange(wxCommandEvent& event);
+ void OnYearChange(wxSpinEvent& event);
void OnYearTextChange(wxCommandEvent& event);
// (re)calc m_widthCol and m_heightRow
// get the date from which we start drawing days
wxDateTime GetStartDate() const;
+ // get the first/last days of the week corresponding to the current style
+ wxDateTime::WeekDay GetWeekStart() const
+ {
+ return HasFlag(wxCAL_MONDAY_FIRST) ? wxDateTime::Mon
+ : wxDateTime::Sun;
+ }
+
+ wxDateTime::WeekDay GetWeekEnd() const
+ {
+ return HasFlag(wxCAL_MONDAY_FIRST) ? wxDateTime::Sun
+ : wxDateTime::Sat;
+ }
+
+
// is this date shown?
bool IsDateShown(const wxDateTime& date) const;
- // is this date in the given range?
+ // is this date in the currently allowed range?
bool IsDateInRange(const wxDateTime& date) const;
- // range helpers
- bool ChangeYear(wxDateTime* target) const;
- bool ChangeMonth(wxDateTime* target) const;
+ // adjust the date to the currently allowed range, return true if it was
+ // changed
+ bool AdjustDateToRange(wxDateTime *date) const;
// redraw the given date
void RefreshDate(const wxDateTime& date);
// change the date inside the same month/year
void ChangeDay(const wxDateTime& date);
- // set the attributes for the holidays if needed
- void SetHolidayAttrs();
-
- // reset all holidays
- void ResetHolidayAttrs();
-
// deprecated
bool AllowYearChange() const
{
wxControl *GetYearControl() const;
private:
+ virtual void ResetHolidayAttrs();
+ virtual void RefreshHolidays() { Refresh(); }
+
// OnPaint helper-methods
// Highlight the [fromdate : todate] range using pen and brush
// typed in by the user
void SetUserChangedYear() { m_userChangedYear = true; }
+
// the subcontrols
wxStaticText *m_staticMonth;
wxComboBox *m_comboMonth;
m_colHeaderFg,
m_colHeaderBg,
m_colBackground,
- m_colSorrounding;
+ m_colSurrounding;
// the attributes for each of the month days
wxCalendarDateAttr *m_attrs[31];
// the width and height of one column/row in the calendar
wxCoord m_widthCol,
m_heightRow,
- m_rowOffset;
+ m_rowOffset,
+ m_calendarWeekWidth;
wxRect m_leftArrowRect,
m_rightArrowRect;
DECLARE_DYNAMIC_CLASS(wxGenericCalendarCtrl)
DECLARE_EVENT_TABLE()
- DECLARE_NO_COPY_CLASS(wxGenericCalendarCtrl)
+ wxDECLARE_NO_COPY_CLASS(wxGenericCalendarCtrl);
};
#endif // _WX_GENERIC_CALCTRLG_H