| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/generic/calctrlg.h
 
- // Purpose:     generic implementation of date-picker control
 
- // Author:      Vadim Zeitlin
 
- // Modified by:
 
- // Created:     29.12.99
 
- // Copyright:   (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_GENERIC_CALCTRLG_H
 
- #define _WX_GENERIC_CALCTRLG_H
 
- #include "wx/control.h"         // the base class
 
- #include "wx/dcclient.h"        // for wxPaintDC
 
- class WXDLLIMPEXP_FWD_CORE wxComboBox;
 
- class WXDLLIMPEXP_FWD_CORE wxStaticText;
 
- class WXDLLIMPEXP_FWD_CORE wxSpinCtrl;
 
- class WXDLLIMPEXP_FWD_CORE wxSpinEvent;
 
- // ----------------------------------------------------------------------------
 
- // wxGenericCalendarCtrl
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_ADV wxGenericCalendarCtrl : public wxCalendarCtrlBase
 
- {
 
- public:
 
-     // construction
 
-     wxGenericCalendarCtrl() { Init(); }
 
-     wxGenericCalendarCtrl(wxWindow *parent,
 
-                           wxWindowID id,
 
-                           const wxDateTime& date = wxDefaultDateTime,
 
-                           const wxPoint& pos = wxDefaultPosition,
 
-                           const wxSize& size = wxDefaultSize,
 
-                           long style = wxCAL_SHOW_HOLIDAYS,
 
-                           const wxString& name = wxCalendarNameStr);
 
-     bool Create(wxWindow *parent,
 
-                 wxWindowID id,
 
-                 const wxDateTime& date = wxDefaultDateTime,
 
-                 const wxPoint& pos = wxDefaultPosition,
 
-                 const wxSize& size = wxDefaultSize,
 
-                 long style = wxCAL_SHOW_HOLIDAYS,
 
-                 const wxString& name = wxCalendarNameStr);
 
-     virtual ~wxGenericCalendarCtrl();
 
-     virtual bool Destroy();
 
-     // set/get the current date
 
-     // ------------------------
 
-     virtual bool SetDate(const wxDateTime& date);
 
-     virtual wxDateTime GetDate() const { return m_date; }
 
-     // set/get the range in which selection can occur
 
-     // ---------------------------------------------
 
-     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; }
 
-     // calendar mode
 
-     // -------------
 
-     // some calendar styles can't be changed after the control creation by
 
-     // just using SetWindowStyle() and Refresh() and the functions below
 
-     // should be used instead for them
 
-     // corresponds to wxCAL_NO_MONTH_CHANGE bit
 
-     virtual bool EnableMonthChange(bool enable = true);
 
-     // corresponds to wxCAL_NO_YEAR_CHANGE bit, deprecated, generic only
 
-     void EnableYearChange(bool enable = true);
 
-     // customization
 
-     // -------------
 
-     virtual void Mark(size_t day, bool mark);
 
-     // all other functions in this section are for generic version only
 
-     // header colours are used for painting the weekdays at the top
 
-     virtual void SetHeaderColours(const wxColour& colFg, const wxColour& colBg)
 
-     {
 
-         m_colHeaderFg = colFg;
 
-         m_colHeaderBg = colBg;
 
-     }
 
-     virtual const wxColour& GetHeaderColourFg() const { return m_colHeaderFg; }
 
-     virtual const wxColour& GetHeaderColourBg() const { return m_colHeaderBg; }
 
-     // highlight colour is used for the currently selected date
 
-     virtual void SetHighlightColours(const wxColour& colFg, const wxColour& colBg)
 
-     {
 
-         m_colHighlightFg = colFg;
 
-         m_colHighlightBg = colBg;
 
-     }
 
-     virtual const wxColour& GetHighlightColourFg() const { return m_colHighlightFg; }
 
-     virtual const wxColour& GetHighlightColourBg() const { return m_colHighlightBg; }
 
-     // holiday colour is used for the holidays (if style & wxCAL_SHOW_HOLIDAYS)
 
-     virtual void SetHolidayColours(const wxColour& colFg, const wxColour& colBg)
 
-     {
 
-         m_colHolidayFg = colFg;
 
-         m_colHolidayBg = colBg;
 
-     }
 
-     virtual const wxColour& GetHolidayColourFg() const { return m_colHolidayFg; }
 
-     virtual const wxColour& GetHolidayColourBg() const { return m_colHolidayBg; }
 
-     virtual wxCalendarDateAttr *GetAttr(size_t day) const
 
-     {
 
-         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, wxT("invalid day") );
 
-         delete m_attrs[day - 1];
 
-         m_attrs[day - 1] = attr;
 
-     }
 
-     virtual void ResetAttr(size_t day) { SetAttr(day, NULL); }
 
-     virtual void SetHoliday(size_t day);
 
-     virtual wxCalendarHitTestResult HitTest(const wxPoint& pos,
 
-                                             wxDateTime *date = NULL,
 
-                                             wxDateTime::WeekDay *wd = NULL);
 
-     // implementation only from now on
 
-     // -------------------------------
 
-     // forward these functions to all subcontrols
 
-     virtual bool Enable(bool enable = true);
 
-     virtual bool Show(bool show = true);
 
-     virtual void SetWindowStyleFlag(long style);
 
-     virtual wxVisualAttributes GetDefaultAttributes() const
 
-         { return GetClassDefaultAttributes(GetWindowVariant()); }
 
-     static wxVisualAttributes
 
-     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
 
-     void OnSysColourChanged(wxSysColourChangedEvent& event);
 
- protected:
 
-     // override some base class virtuals
 
-     virtual wxSize DoGetBestSize() const;
 
-     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 Init();
 
-     // startup colours and reinitialization after colour changes in system
 
-     void InitColours();
 
-     // event handlers
 
-     void OnPaint(wxPaintEvent& event);
 
-     void OnClick(wxMouseEvent& event);
 
-     void OnDClick(wxMouseEvent& event);
 
-     void OnChar(wxKeyEvent& event);
 
-     void OnMonthChange(wxCommandEvent& event);
 
-     void HandleYearChange(wxCommandEvent& event);
 
-     void OnYearChange(wxSpinEvent& event);
 
-     void OnYearTextChange(wxCommandEvent& event);
 
-     // (re)calc m_widthCol and m_heightRow
 
-     void RecalcGeometry();
 
-     // set the date and send the notification
 
-     void SetDateAndNotify(const wxDateTime& date);
 
-     // get the week (row, in range 1..6) for the given date
 
-     size_t GetWeek(const wxDateTime& date) const;
 
-     // 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 currently allowed range?
 
-     bool IsDateInRange(const wxDateTime& date) 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);
 
-     // deprecated
 
-     bool AllowYearChange() const
 
-     {
 
-         return !(GetWindowStyle() & wxCAL_NO_YEAR_CHANGE);
 
-     }
 
-     // show the correct controls
 
-     void ShowCurrentControls();
 
-     // create the month combo and year spin controls
 
-     void CreateMonthComboBox();
 
-     void CreateYearSpinCtrl();
 
- public:
 
-     // get the currently shown control for month/year
 
-     wxControl *GetMonthControl() const;
 
-     wxControl *GetYearControl() const;
 
- private:
 
-     virtual void ResetHolidayAttrs();
 
-     virtual void RefreshHolidays() { Refresh(); }
 
-     // OnPaint helper-methods
 
-     // Highlight the [fromdate : todate] range using pen and brush
 
-     void HighlightRange(wxPaintDC* dc, const wxDateTime& fromdate, const wxDateTime& todate, const wxPen* pen, const wxBrush* brush);
 
-     // Get the "coordinates" for the date relative to the month currently displayed.
 
-     // using (day, week): upper left coord is (1, 1), lower right coord is (7, 6)
 
-     // 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;
 
-     wxStaticText *m_staticYear;
 
-     wxSpinCtrl *m_spinYear;
 
-     // the current selection
 
-     wxDateTime m_date;
 
-     // the date-range
 
-     wxDateTime m_lowdate;
 
-     wxDateTime m_highdate;
 
-     // default attributes
 
-     wxColour m_colHighlightFg,
 
-              m_colHighlightBg,
 
-              m_colHolidayFg,
 
-              m_colHolidayBg,
 
-              m_colHeaderFg,
 
-              m_colHeaderBg,
 
-              m_colBackground,
 
-              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_calendarWeekWidth;
 
-     wxRect m_leftArrowRect,
 
-            m_rightArrowRect;
 
-     // the week day names
 
-     wxString m_weekdays[7];
 
-     // true if SetDate() is being called as the result of changing the year in
 
-     // the year control
 
-     bool m_userChangedYear;
 
-     DECLARE_DYNAMIC_CLASS(wxGenericCalendarCtrl)
 
-     DECLARE_EVENT_TABLE()
 
-     wxDECLARE_NO_COPY_CLASS(wxGenericCalendarCtrl);
 
- };
 
- #endif // _WX_GENERIC_CALCTRLG_H
 
 
  |