]> git.saurik.com Git - wxWidgets.git/commitdiff
added API, docs and Win32 implementation of wxDatePickerCtrl
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 15 Jan 2005 01:31:10 +0000 (01:31 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 15 Jan 2005 01:31:10 +0000 (01:31 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31366 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
build/bakefiles/files.bkl
docs/changes.txt
docs/latex/wx/calctrl.tex
docs/latex/wx/category.tex
docs/latex/wx/classes.tex
docs/latex/wx/datectrl.tex [new file with mode: 0644]
docs/latex/wx/dateevt.tex [new file with mode: 0644]
include/wx/calctrl.h
include/wx/datectrl.h [new file with mode: 0644]
include/wx/dateevt.h [new file with mode: 0644]
samples/calendar/calendar.cpp
src/generic/calctrl.cpp
src/msw/datectrl.cpp [new file with mode: 0644]

index 6618b5e17c8d3681ba3d03f4846a6dd766ccefc9..a591533a40c882bac50e7270953fa286024fb7c3 100644 (file)
@@ -2256,6 +2256,8 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 
 <set var="ADVANCED_CMN_HDR" hints="files">
     wx/calctrl.h
 
 <set var="ADVANCED_CMN_HDR" hints="files">
     wx/calctrl.h
+    wx/dateevt.h
+    wx/datectrl.h
     wx/dcbuffer.h
     wx/generic/calctrl.h
     wx/generic/grid.h
     wx/dcbuffer.h
     wx/generic/calctrl.h
     wx/generic/grid.h
@@ -2280,10 +2282,12 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 
 <set var="ADVANCED_MSW_SRC" hints="files">
     src/common/taskbarcmn.cpp
 
 <set var="ADVANCED_MSW_SRC" hints="files">
     src/common/taskbarcmn.cpp
+    src/msw/datectrl.cpp
     src/msw/sound.cpp
     src/msw/taskbar.cpp
 </set>
 <set var="ADVANCED_MSW_HDR" hints="files">
     src/msw/sound.cpp
     src/msw/taskbar.cpp
 </set>
 <set var="ADVANCED_MSW_HDR" hints="files">
+    wx/msw/datectrl.h
     wx/msw/sound.h
     wx/msw/taskbar.h
 </set>
     wx/msw/sound.h
     wx/msw/taskbar.h
 </set>
index 6e7c4d329283d04774606ba06a5cc7ae3084b4bc..241dc15e161daa6aea2c8986ed5c9c25e5913576 100644 (file)
@@ -36,6 +36,7 @@ All:
 
 All (GUI):
 
 
 All (GUI):
 
+- added wxDatePickerCtrl
 - wxSplitterWindow now supports gravity parameter (Zbigniew Zagórski)
 - recursive wxSizer::GetItem returns item of given window, sizer or nth index
 - wxLayoutConstraints now use best size, not current size, for AsIs() condition
 - wxSplitterWindow now supports gravity parameter (Zbigniew Zagórski)
 - recursive wxSizer::GetItem returns item of given window, sizer or nth index
 - wxLayoutConstraints now use best size, not current size, for AsIs() condition
index 3a08e5fbe9127764b64ac5463a8757111fe15489..a6bf325c7050c799cb3e4deecf5b62cf7ded35e7 100644 (file)
@@ -106,18 +106,21 @@ enum wxCalendarHitTestResult
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
+
 \membersection{wxCalendarCtrl::wxCalendarCtrl}\label{wxcalendarctrlwxcalendarctrldef}
 
 \func{}{wxCalendarCtrl}{\void}
 
 Default constructor, use \helpref{Create}{wxcalendarctrlcreate} after it.
 
 \membersection{wxCalendarCtrl::wxCalendarCtrl}\label{wxcalendarctrlwxcalendarctrldef}
 
 \func{}{wxCalendarCtrl}{\void}
 
 Default constructor, use \helpref{Create}{wxcalendarctrlcreate} after it.
 
+
 \membersection{wxCalendarCtrl::wxCalendarCtrl}\label{wxcalendarctrlwxcalendarctrl}
 
 \func{}{wxCalendarCtrl}{\param{wxWindow* }{parent}, \param{wxWindowID }{id}, \param{const wxDateTime\& }{date = wxDefaultDateTime}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = wxCAL\_SHOW\_HOLIDAYS}, \param{const wxString\& }{name = wxCalendarNameStr}}
 
 Does the same as \helpref{Create}{wxcalendarctrlcreate} method.
 
 \membersection{wxCalendarCtrl::wxCalendarCtrl}\label{wxcalendarctrlwxcalendarctrl}
 
 \func{}{wxCalendarCtrl}{\param{wxWindow* }{parent}, \param{wxWindowID }{id}, \param{const wxDateTime\& }{date = wxDefaultDateTime}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = wxCAL\_SHOW\_HOLIDAYS}, \param{const wxString\& }{name = wxCalendarNameStr}}
 
 Does the same as \helpref{Create}{wxcalendarctrlcreate} method.
 
+
 \membersection{wxCalendarCtrl::Create}\label{wxcalendarctrlcreate}
 
 \func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id}, \param{const wxDateTime\& }{date = wxDefaultDateTime}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = wxCAL\_SHOW\_HOLIDAYS}, \param{const wxString\& }{name = wxCalendarNameStr}}
 \membersection{wxCalendarCtrl::Create}\label{wxcalendarctrlcreate}
 
 \func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id}, \param{const wxDateTime\& }{date = wxDefaultDateTime}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = wxCAL\_SHOW\_HOLIDAYS}, \param{const wxString\& }{name = wxCalendarNameStr}}
@@ -125,24 +128,28 @@ Does the same as \helpref{Create}{wxcalendarctrlcreate} method.
 Creates the control. See \helpref{wxWindow}{wxwindowctor} for the meaning of
 the parameters and the control overview for the possible styles.
 
 Creates the control. See \helpref{wxWindow}{wxwindowctor} for the meaning of
 the parameters and the control overview for the possible styles.
 
+
 \membersection{wxCalendarCtrl::\destruct{wxCalendarCtrl}}\label{wxcalendarctrldtor}
 
 \func{}{\destruct{wxCalendarCtrl}}{\void}
 
 Destroys the control.
 
 \membersection{wxCalendarCtrl::\destruct{wxCalendarCtrl}}\label{wxcalendarctrldtor}
 
 \func{}{\destruct{wxCalendarCtrl}}{\void}
 
 Destroys the control.
 
+
 \membersection{wxCalendarCtrl::SetDate}\label{wxcalendarctrlsetdate}
 
 \func{void}{SetDate}{\param{const wxDateTime\& }{date}}
 
 Sets the current date.
 
 \membersection{wxCalendarCtrl::SetDate}\label{wxcalendarctrlsetdate}
 
 \func{void}{SetDate}{\param{const wxDateTime\& }{date}}
 
 Sets the current date.
 
+
 \membersection{wxCalendarCtrl::GetDate}\label{wxcalendarctrlgetdate}
 
 \constfunc{const wxDateTime\&}{GetDate}{\void}
 
 Gets the currently selected date.
 
 \membersection{wxCalendarCtrl::GetDate}\label{wxcalendarctrlgetdate}
 
 \constfunc{const wxDateTime\&}{GetDate}{\void}
 
 Gets the currently selected date.
 
+
 \membersection{wxCalendarCtrl::EnableYearChange}\label{wxcalendarctrlenableyearchange}
 
 \func{void}{EnableYearChange}{\param{bool }{enable = true}}
 \membersection{wxCalendarCtrl::EnableYearChange}\label{wxcalendarctrlenableyearchange}
 
 \func{void}{EnableYearChange}{\param{bool }{enable = true}}
@@ -151,6 +158,7 @@ This function should be used instead of changing {\tt wxCAL\_NO\_YEAR\_CHANGE}
 style bit directly. It allows or disallows the user to change the year
 interactively.
 
 style bit directly. It allows or disallows the user to change the year
 interactively.
 
+
 \membersection{wxCalendarCtrl::EnableMonthChange}\label{wxcalendarctrlenablemonthchange}
 
 \func{void}{EnableMonthChange}{\param{bool }{enable = true}}
 \membersection{wxCalendarCtrl::EnableMonthChange}\label{wxcalendarctrlenablemonthchange}
 
 \func{void}{EnableMonthChange}{\param{bool }{enable = true}}
@@ -160,6 +168,7 @@ This function should be used instead of changing
 change the month interactively. Note that if the month can not be changed, the
 year can not be changed neither.
 
 change the month interactively. Note that if the month can not be changed, the
 year can not be changed neither.
 
+
 \membersection{wxCalendarCtrl::EnableHolidayDisplay}\label{wxcalendarctrlenableholidaydisplay}
 
 \func{void}{EnableHolidayDisplay}{\param{bool }{display = true}}
 \membersection{wxCalendarCtrl::EnableHolidayDisplay}\label{wxcalendarctrlenableholidaydisplay}
 
 \func{void}{EnableHolidayDisplay}{\param{bool }{display = true}}
@@ -168,12 +177,14 @@ This function should be used instead of changing {\tt wxCAL\_SHOW\_HOLIDAYS}
 style bit directly. It enables or disables the special highlighting of the
 holidays.
 
 style bit directly. It enables or disables the special highlighting of the
 holidays.
 
+
 \membersection{wxCalendarCtrl::SetHeaderColours}\label{wxcalendarctrlsetheadercolours}
 
 \func{void}{SetHeaderColours}{\param{const wxColour\& }{colFg}, \param{const wxColour\& }{colBg}}
 
 Set the colours used for painting the weekdays at the top of the control.
 
 \membersection{wxCalendarCtrl::SetHeaderColours}\label{wxcalendarctrlsetheadercolours}
 
 \func{void}{SetHeaderColours}{\param{const wxColour\& }{colFg}, \param{const wxColour\& }{colBg}}
 
 Set the colours used for painting the weekdays at the top of the control.
 
+
 \membersection{wxCalendarCtrl::GetHeaderColourFg}\label{wxcalendarctrlgetheadercolourfg}
 
 \constfunc{const wxColour\&}{GetHeaderColourFg}{\void}
 \membersection{wxCalendarCtrl::GetHeaderColourFg}\label{wxcalendarctrlgetheadercolourfg}
 
 \constfunc{const wxColour\&}{GetHeaderColourFg}{\void}
@@ -184,6 +195,7 @@ Gets the foreground colour of the header part of the calendar window.
 
 \helpref{SetHeaderColours}{wxcalendarctrlsetheadercolours}
 
 
 \helpref{SetHeaderColours}{wxcalendarctrlsetheadercolours}
 
+
 \membersection{wxCalendarCtrl::GetHeaderColourBg}\label{wxcalendarctrlgetheadercolourbg}
 
 \constfunc{const wxColour\&}{GetHeaderColourBg}{\void}
 \membersection{wxCalendarCtrl::GetHeaderColourBg}\label{wxcalendarctrlgetheadercolourbg}
 
 \constfunc{const wxColour\&}{GetHeaderColourBg}{\void}
@@ -194,12 +206,14 @@ Gets the background colour of the header part of the calendar window.
 
 \helpref{SetHeaderColours}{wxcalendarctrlsetheadercolours}
 
 
 \helpref{SetHeaderColours}{wxcalendarctrlsetheadercolours}
 
+
 \membersection{wxCalendarCtrl::SetHighlightColours}\label{wxcalendarctrlsethighlightcolours}
 
 \func{void}{SetHighlightColours}{\param{const wxColour\& }{colFg}, \param{const wxColour\& }{colBg}}
 
 Set the colours to be used for highlighting the currently selected date.
 
 \membersection{wxCalendarCtrl::SetHighlightColours}\label{wxcalendarctrlsethighlightcolours}
 
 \func{void}{SetHighlightColours}{\param{const wxColour\& }{colFg}, \param{const wxColour\& }{colBg}}
 
 Set the colours to be used for highlighting the currently selected date.
 
+
 \membersection{wxCalendarCtrl::GetHighlightColourFg}\label{wxcalendarctrlgethighlightcolourfg}
 
 \constfunc{const wxColour\&}{GetHighlightColourFg}{\void}
 \membersection{wxCalendarCtrl::GetHighlightColourFg}\label{wxcalendarctrlgethighlightcolourfg}
 
 \constfunc{const wxColour\&}{GetHighlightColourFg}{\void}
@@ -210,6 +224,7 @@ Gets the foreground highlight colour.
 
 \helpref{SetHighlightColours}{wxcalendarctrlsethighlightcolours}
 
 
 \helpref{SetHighlightColours}{wxcalendarctrlsethighlightcolours}
 
+
 \membersection{wxCalendarCtrl::GetHighlightColourBg}\label{wxcalendarctrlgethighlightcolourbg}
 
 \constfunc{const wxColour\&}{GetHighlightColourBg}{\void}
 \membersection{wxCalendarCtrl::GetHighlightColourBg}\label{wxcalendarctrlgethighlightcolourbg}
 
 \constfunc{const wxColour\&}{GetHighlightColourBg}{\void}
@@ -220,6 +235,7 @@ Gets the background highlight colour.
 
 \helpref{SetHighlightColours}{wxcalendarctrlsethighlightcolours}
 
 
 \helpref{SetHighlightColours}{wxcalendarctrlsethighlightcolours}
 
+
 \membersection{wxCalendarCtrl::SetHolidayColours}\label{wxcalendarctrlsetholidaycolours}
 
 \func{void}{SetHolidayColours}{\param{const wxColour\& }{colFg}, \param{const wxColour\& }{colBg}}
 \membersection{wxCalendarCtrl::SetHolidayColours}\label{wxcalendarctrlsetholidaycolours}
 
 \func{void}{SetHolidayColours}{\param{const wxColour\& }{colFg}, \param{const wxColour\& }{colBg}}
@@ -227,6 +243,7 @@ Gets the background highlight colour.
 Sets the colours to be used for the holidays highlighting (only used if the
 window style includes {\tt wxCAL\_SHOW\_HOLIDAYS} flag).
 
 Sets the colours to be used for the holidays highlighting (only used if the
 window style includes {\tt wxCAL\_SHOW\_HOLIDAYS} flag).
 
+
 \membersection{wxCalendarCtrl::GetHolidayColourFg}\label{wxcalendarctrlgetholidaycolourfg}
 
 \constfunc{const wxColour\&}{GetHolidayColourFg}{\void}
 \membersection{wxCalendarCtrl::GetHolidayColourFg}\label{wxcalendarctrlgetholidaycolourfg}
 
 \constfunc{const wxColour\&}{GetHolidayColourFg}{\void}
@@ -237,6 +254,7 @@ Return the foreground colour currently used for holiday highlighting.
 
 \helpref{SetHolidayColours}{wxcalendarctrlsetholidaycolours}
 
 
 \helpref{SetHolidayColours}{wxcalendarctrlsetholidaycolours}
 
+
 \membersection{wxCalendarCtrl::GetHolidayColourBg}\label{wxcalendarctrlgetholidaycolourbg}
 
 \constfunc{const wxColour\&}{GetHolidayColourBg}{\void}
 \membersection{wxCalendarCtrl::GetHolidayColourBg}\label{wxcalendarctrlgetholidaycolourbg}
 
 \constfunc{const wxColour\&}{GetHolidayColourBg}{\void}
@@ -247,6 +265,7 @@ Return the background colour currently used for holiday highlighting.
 
 \helpref{SetHolidayColours}{wxcalendarctrlsetholidaycolours}
 
 
 \helpref{SetHolidayColours}{wxcalendarctrlsetholidaycolours}
 
+
 \membersection{wxCalendarCtrl::GetAttr}\label{wxcalendarctrlgetattr}
 
 \constfunc{wxCalendarDateAttr *}{GetAttr}{\param{size\_t }{day}}
 \membersection{wxCalendarCtrl::GetAttr}\label{wxcalendarctrlgetattr}
 
 \constfunc{wxCalendarDateAttr *}{GetAttr}{\param{size\_t }{day}}
@@ -255,6 +274,7 @@ Returns the attribute for the given date (should be in the range $1\ldots31$).
 
 The returned pointer may be {\tt NULL}.
 
 
 The returned pointer may be {\tt NULL}.
 
+
 \membersection{wxCalendarCtrl::SetAttr}\label{wxcalendarctrlsetattr}
 
 \func{void}{SetAttr}{\param{size\_t }{day}, \param{wxCalendarDateAttr* }{attr}}
 \membersection{wxCalendarCtrl::SetAttr}\label{wxcalendarctrlsetattr}
 
 \func{void}{SetAttr}{\param{size\_t }{day}, \param{wxCalendarDateAttr* }{attr}}
@@ -263,12 +283,14 @@ Associates the attribute with the specified date (in the range $1\ldots31$).
 
 If the pointer is {\tt NULL}, the items attribute is cleared.
 
 
 If the pointer is {\tt NULL}, the items attribute is cleared.
 
+
 \membersection{wxCalendarCtrl::SetHoliday}\label{wxcalendarctrlsetholiday}
 
 \func{void}{SetHoliday}{\param{size\_t }{day}}
 
 Marks the specified day as being a holiday in the current month.
 
 \membersection{wxCalendarCtrl::SetHoliday}\label{wxcalendarctrlsetholiday}
 
 \func{void}{SetHoliday}{\param{size\_t }{day}}
 
 Marks the specified day as being a holiday in the current month.
 
+
 \membersection{wxCalendarCtrl::ResetAttr}\label{wxcalendarctrlresetattr}
 
 \func{void}{ResetAttr}{\param{size\_t }{day}}
 \membersection{wxCalendarCtrl::ResetAttr}\label{wxcalendarctrlresetattr}
 
 \func{void}{ResetAttr}{\param{size\_t }{day}}
@@ -276,6 +298,7 @@ Marks the specified day as being a holiday in the current month.
 Clears any attributes associated with the given day (in the range
 $1\ldots31$).
 
 Clears any attributes associated with the given day (in the range
 $1\ldots31$).
 
+
 \membersection{wxCalendarCtrl::HitTest}\label{wxcalendarctrlhittest}
 
 \func{wxCalendarHitTestResult}{HitTest}{\param{const wxPoint\& }{pos}, \param{wxDateTime* }{date = NULL}, \param{wxDateTime::WeekDay* }{wd = NULL}}
 \membersection{wxCalendarCtrl::HitTest}\label{wxcalendarctrlhittest}
 
 \func{wxCalendarHitTestResult}{HitTest}{\param{const wxPoint\& }{pos}, \param{wxDateTime* }{date = NULL}, \param{wxDateTime::WeekDay* }{wd = NULL}}
@@ -312,6 +335,7 @@ enum wxCalendarDateBorder
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
+
 \membersection{wxCalendarDateAttr::wxCalendarDateAttr}\label{wxcalendardateattrwxcalendardateattr}
 
 \func{}{wxCalendarDateAttr}{\void}
 \membersection{wxCalendarDateAttr::wxCalendarDateAttr}\label{wxcalendardateattrwxcalendardateattr}
 
 \func{}{wxCalendarDateAttr}{\void}
@@ -322,72 +346,84 @@ enum wxCalendarDateBorder
 
 The constructors.
 
 
 The constructors.
 
+
 \membersection{wxCalendarDateAttr::SetTextColour}\label{wxcalendardateattrsettextcolour}
 
 \func{void}{SetTextColour}{\param{const wxColour\& }{colText}}
 
 Sets the text (foreground) colour to use.
 
 \membersection{wxCalendarDateAttr::SetTextColour}\label{wxcalendardateattrsettextcolour}
 
 \func{void}{SetTextColour}{\param{const wxColour\& }{colText}}
 
 Sets the text (foreground) colour to use.
 
+
 \membersection{wxCalendarDateAttr::SetBackgroundColour}\label{wxcalendardateattrsetbackgroundcolour}
 
 \func{void}{SetBackgroundColour}{\param{const wxColour\& }{colBack}}
 
 Sets the text background colour to use.
 
 \membersection{wxCalendarDateAttr::SetBackgroundColour}\label{wxcalendardateattrsetbackgroundcolour}
 
 \func{void}{SetBackgroundColour}{\param{const wxColour\& }{colBack}}
 
 Sets the text background colour to use.
 
+
 \membersection{wxCalendarDateAttr::SetBorderColour}\label{wxcalendardateattrsetbordercolour}
 
 \func{void}{SetBorderColour}{\param{const wxColour\& }{col}}
 
 Sets the border colour to use.
 
 \membersection{wxCalendarDateAttr::SetBorderColour}\label{wxcalendardateattrsetbordercolour}
 
 \func{void}{SetBorderColour}{\param{const wxColour\& }{col}}
 
 Sets the border colour to use.
 
+
 \membersection{wxCalendarDateAttr::SetFont}\label{wxcalendardateattrsetfont}
 
 \func{void}{SetFont}{\param{const wxFont\& }{font}}
 
 Sets the font to use.
 
 \membersection{wxCalendarDateAttr::SetFont}\label{wxcalendardateattrsetfont}
 
 \func{void}{SetFont}{\param{const wxFont\& }{font}}
 
 Sets the font to use.
 
+
 \membersection{wxCalendarDateAttr::SetBorder}\label{wxcalendardateattrsetborder}
 
 \func{void}{SetBorder}{\param{wxCalendarDateBorder }{border}}
 
 Sets the \helpref{border kind}{wxcalendardateattr}
 
 \membersection{wxCalendarDateAttr::SetBorder}\label{wxcalendardateattrsetborder}
 
 \func{void}{SetBorder}{\param{wxCalendarDateBorder }{border}}
 
 Sets the \helpref{border kind}{wxcalendardateattr}
 
+
 \membersection{wxCalendarDateAttr::SetHoliday}\label{wxcalendardateattrsetholiday}
 
 \func{void}{SetHoliday}{\param{bool }{holiday}}
 
 Display the date with this attribute as a holiday.
 
 \membersection{wxCalendarDateAttr::SetHoliday}\label{wxcalendardateattrsetholiday}
 
 \func{void}{SetHoliday}{\param{bool }{holiday}}
 
 Display the date with this attribute as a holiday.
 
+
 \membersection{wxCalendarDateAttr::HasTextColour}\label{wxcalendardateattrhastextcolour}
 
 \constfunc{bool}{HasTextColour}{\void}
 
 Returns {\tt true} if this item has a non default text foreground colour.
 
 \membersection{wxCalendarDateAttr::HasTextColour}\label{wxcalendardateattrhastextcolour}
 
 \constfunc{bool}{HasTextColour}{\void}
 
 Returns {\tt true} if this item has a non default text foreground colour.
 
+
 \membersection{wxCalendarDateAttr::HasBackgroundColour}\label{wxcalendardateattrhasbackgroundcolour}
 
 \constfunc{bool}{HasBackgroundColour}{\void}
 
 Returns {\tt true} if this attribute specifies a non default text background colour.
 
 \membersection{wxCalendarDateAttr::HasBackgroundColour}\label{wxcalendardateattrhasbackgroundcolour}
 
 \constfunc{bool}{HasBackgroundColour}{\void}
 
 Returns {\tt true} if this attribute specifies a non default text background colour.
 
+
 \membersection{wxCalendarDateAttr::HasBorderColour}\label{wxcalendardateattrhasbordercolour}
 
 \constfunc{bool}{HasBorderColour}{\void}
 
 Returns {\tt true} if this attribute specifies a non default border colour.
 
 \membersection{wxCalendarDateAttr::HasBorderColour}\label{wxcalendardateattrhasbordercolour}
 
 \constfunc{bool}{HasBorderColour}{\void}
 
 Returns {\tt true} if this attribute specifies a non default border colour.
 
+
 \membersection{wxCalendarDateAttr::HasFont}\label{wxcalendardateattrhasfont}
 
 \constfunc{bool}{HasFont}{\void}
 
 Returns {\tt true} if this attribute specifies a non default font.
 
 \membersection{wxCalendarDateAttr::HasFont}\label{wxcalendardateattrhasfont}
 
 \constfunc{bool}{HasFont}{\void}
 
 Returns {\tt true} if this attribute specifies a non default font.
 
+
 \membersection{wxCalendarDateAttr::HasBorder}\label{wxcalendardateattrhasborder}
 
 \constfunc{bool}{HasBorder}{\void}
 
 Returns {\tt true} if this attribute specifies a non default (i.e. any) border.
 
 \membersection{wxCalendarDateAttr::HasBorder}\label{wxcalendardateattrhasborder}
 
 \constfunc{bool}{HasBorder}{\void}
 
 Returns {\tt true} if this attribute specifies a non default (i.e. any) border.
 
+
 \membersection{wxCalendarDateAttr::IsHoliday}\label{wxcalendardateattrisholiday}
 
 \constfunc{bool}{IsHoliday}{\void}
 \membersection{wxCalendarDateAttr::IsHoliday}\label{wxcalendardateattrisholiday}
 
 \constfunc{bool}{IsHoliday}{\void}
@@ -395,53 +431,66 @@ Returns {\tt true} if this attribute specifies a non default (i.e. any) border.
 Returns {\tt true} if this attribute specifies that this item should be
 displayed as a holiday.
 
 Returns {\tt true} if this attribute specifies that this item should be
 displayed as a holiday.
 
+
 \membersection{wxCalendarDateAttr::GetTextColour}\label{wxcalendardateattrgettextcolour}
 
 \constfunc{const wxColour\&}{GetTextColour}{\void}
 
 Returns the text colour to use for the item with this attribute.
 
 \membersection{wxCalendarDateAttr::GetTextColour}\label{wxcalendardateattrgettextcolour}
 
 \constfunc{const wxColour\&}{GetTextColour}{\void}
 
 Returns the text colour to use for the item with this attribute.
 
+
 \membersection{wxCalendarDateAttr::GetBackgroundColour}\label{wxcalendardateattrgetbackgroundcolour}
 
 \constfunc{const wxColour\&}{GetBackgroundColour}{\void}
 
 Returns the background colour to use for the item with this attribute.
 
 \membersection{wxCalendarDateAttr::GetBackgroundColour}\label{wxcalendardateattrgetbackgroundcolour}
 
 \constfunc{const wxColour\&}{GetBackgroundColour}{\void}
 
 Returns the background colour to use for the item with this attribute.
 
+
 \membersection{wxCalendarDateAttr::GetBorderColour}\label{wxcalendardateattrgetbordercolour}
 
 \constfunc{const wxColour\&}{GetBorderColour}{\void}
 
 Returns the border colour to use for the item with this attribute.
 
 \membersection{wxCalendarDateAttr::GetBorderColour}\label{wxcalendardateattrgetbordercolour}
 
 \constfunc{const wxColour\&}{GetBorderColour}{\void}
 
 Returns the border colour to use for the item with this attribute.
 
+
 \membersection{wxCalendarDateAttr::GetFont}\label{wxcalendardateattrgetfont}
 
 \constfunc{const wxFont\&}{GetFont}{\void}
 
 Returns the font to use for the item with this attribute.
 
 \membersection{wxCalendarDateAttr::GetFont}\label{wxcalendardateattrgetfont}
 
 \constfunc{const wxFont\&}{GetFont}{\void}
 
 Returns the font to use for the item with this attribute.
 
+
 \membersection{wxCalendarDateAttr::GetBorder}\label{wxcalendardateattrgetborder}
 
 \constfunc{wxCalendarDateBorder}{GetBorder}{\void}
 
 Returns the \helpref{border}{wxcalendardateattr} to use for the item with this attribute.
 
 \membersection{wxCalendarDateAttr::GetBorder}\label{wxcalendardateattrgetborder}
 
 \constfunc{wxCalendarDateBorder}{GetBorder}{\void}
 
 Returns the \helpref{border}{wxcalendardateattr} to use for the item with this attribute.
 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 \section{\class{wxCalendarEvent}}\label{wxcalendarevent}
 
 The wxCalendarEvent class is used together with 
 \helpref{wxCalendarCtrl}{wxcalendarctrl}.
 
 \section{\class{wxCalendarEvent}}\label{wxcalendarevent}
 
 The wxCalendarEvent class is used together with 
 \helpref{wxCalendarCtrl}{wxcalendarctrl}.
 
+\wxheading{Derived from}
+
+\helpref{wxDateEvent}{wxdateevent}\\
+\helpref{wxCommandEvent}{wxcommandevent}\\
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Include files}
+
+<wx/calctrl.h>
+
 \wxheading{See also}
 
 \helpref{wxCalendarCtrl}{wxcalendarctrl}
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
 \wxheading{See also}
 
 \helpref{wxCalendarCtrl}{wxcalendarctrl}
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
-\membersection{wxCalendarEvent::GetDate}\label{wxcalendareventgetdate}
-
-\constfunc{const wxDateTime\&}{GetDate}{\void}
-
-Returns the date. This function may be called for all event types except 
-{\tt EVT\_CALENDAR\_WEEKDAY\_CLICKED} one for which it doesn't make sense.
 
 \membersection{wxCalendarEvent::GetWeekDay}\label{wxcalendareventgetweekday}
 
 
 \membersection{wxCalendarEvent::GetWeekDay}\label{wxcalendareventgetweekday}
 
@@ -451,15 +500,11 @@ Returns the week day on which the user clicked in
 {\tt EVT\_CALENDAR\_WEEKDAY\_CLICKED} handler. It doesn't make sense to call
 this function in other handlers.
 
 {\tt EVT\_CALENDAR\_WEEKDAY\_CLICKED} handler. It doesn't make sense to call
 this function in other handlers.
 
-\membersection{wxCalendarEvent::SetDate}\label{wxcalendareventsetdate}
-
-\func{void}{SetDate}{\param{const wxDateTime\&}{ date}}
-
-Sets the date.
 
 \membersection{wxCalendarEvent::SetWeekDay}\label{wxcalendareventsetweekday}
 
 \func{void}{SetWeekDay}{\param{wxDateTime::WeekDay}{ day}}
 
 
 \membersection{wxCalendarEvent::SetWeekDay}\label{wxcalendareventsetweekday}
 
 \func{void}{SetWeekDay}{\param{wxDateTime::WeekDay}{ day}}
 
-Sets the week day.
+Sets the week day carried by the event, normally only used by the library
+internally.
 
 
index c315f37cc6b2a7eb0717d821a588759ec081a7e9..35726f143fc963653ec04a4c0d436fddf097883e 100644 (file)
@@ -87,11 +87,12 @@ that are not static can have \helpref{validators}{wxvalidator} associated with t
 \twocolitem{\helpref{wxButton}{wxbutton}}{Push button control, displaying text}
 \twocolitem{\helpref{wxBitmapButton}{wxbitmapbutton}}{Push button control, displaying a bitmap}
 \twocolitem{\helpref{wxToggleButton}{wxtogglebutton}}{A button which stays pressed when clicked by user.}
 \twocolitem{\helpref{wxButton}{wxbutton}}{Push button control, displaying text}
 \twocolitem{\helpref{wxBitmapButton}{wxbitmapbutton}}{Push button control, displaying a bitmap}
 \twocolitem{\helpref{wxToggleButton}{wxtogglebutton}}{A button which stays pressed when clicked by user.}
-\twocolitem{\helpref{wxCalendarCtrl}{wxcalendarctrl}}{Date picker control}
+\twocolitem{\helpref{wxCalendarCtrl}{wxcalendarctrl}}{Control showing an entire calendar month}
 \twocolitem{\helpref{wxCheckBox}{wxcheckbox}}{Checkbox control}
 \twocolitem{\helpref{wxCheckListBox}{wxchecklistbox}}{A listbox with a checkbox to the left of each item}
 \twocolitem{\helpref{wxChoice}{wxchoice}}{Choice control (a combobox without the editable area)}
 \twocolitem{\helpref{wxComboBox}{wxcombobox}}{A choice with an editable area}
 \twocolitem{\helpref{wxCheckBox}{wxcheckbox}}{Checkbox control}
 \twocolitem{\helpref{wxCheckListBox}{wxchecklistbox}}{A listbox with a checkbox to the left of each item}
 \twocolitem{\helpref{wxChoice}{wxchoice}}{Choice control (a combobox without the editable area)}
 \twocolitem{\helpref{wxComboBox}{wxcombobox}}{A choice with an editable area}
+\twocolitem{\helpref{wxDatePickerCtrl}{wxdatepickerctrl}}{Small date picker control}
 \twocolitem{\helpref{wxGauge}{wxgauge}}{A control to represent a varying quantity, such as time remaining}
 \twocolitem{\helpref{wxGenericDirCtrl}{wxgenericdirctrl}}{A control for displaying a directory tree}
 \twocolitem{\helpref{wxHtmlListBox}{wxhtmllistbox}}{A listbox showing HTML content}
 \twocolitem{\helpref{wxGauge}{wxgauge}}{A control to represent a varying quantity, such as time remaining}
 \twocolitem{\helpref{wxGenericDirCtrl}{wxgenericdirctrl}}{A control for displaying a directory tree}
 \twocolitem{\helpref{wxHtmlListBox}{wxhtmllistbox}}{A listbox showing HTML content}
index 4a7d62a1b986a97bb1e718bacbbf023762aefef8..cb909c6d5e9d5494b67c39a2c3bb8dde9bd2c0be 100644 (file)
@@ -63,6 +63,8 @@
 \input dobjcomp.tex
 \input dobjsmpl.tex
 \input datostrm.tex
 \input dobjcomp.tex
 \input dobjsmpl.tex
 \input datostrm.tex
+\input dateevt.tex
+\input datectrl.tex
 \input datespan.tex
 \input datetime.tex
 \input db.tex
 \input datespan.tex
 \input datetime.tex
 \input db.tex
diff --git a/docs/latex/wx/datectrl.tex b/docs/latex/wx/datectrl.tex
new file mode 100644 (file)
index 0000000..e3eaec6
--- /dev/null
@@ -0,0 +1,154 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Name:        datectrl.tex
+%% Purpose:     wxDatePickerCtrl documentation
+%% Author:      Vadim Zeitlin
+%% Created:     2005-01-15
+%% RCS-ID:      $Id$
+%% Copyright:   (c) 2005 Vadim Zeitlin
+%% License:     wxWidgets license
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{\class{wxDatePickerCtrl}}\label{wxdatepickerctrl}
+
+This control allows the user to select a date. Unlike
+\helpref{wxCalendarCtrl}{wxcalendarctrl}, which is a relatively big control,
+it is implemented as a small window showing the currently selected date and
+allowing to edit it directly using the keyboard and may also display a popup
+window for more user-friendly date selection, depending on the styles used and
+the platform.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Include files}
+
+<wx/dateevt.h>
+
+\wxheading{Event handling}
+
+\twocolwidtha{7cm}%
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_DATE\_CHANGED(id, func)}}{This event fires when the user
+changes the current selection in the control.}
+\end{twocollist}
+
+\wxheading{See also}
+
+\helpref{wxCalendarCtrl}{wxcalendarctrl},\\
+\helpref{wxDateEvent}{wxdateevent}
+
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDatePickerCtrl::wxDatePickerCtrl}\label{wxdatepickerctrlctor}
+
+\func{}{wxDatePickerCtrl}{\param{wxWindow *}{parent},\rtfsp
+\param{wxWindowID}{ id},\rtfsp
+\param{const wxDateTime\& }{dt = wxDefaultDateTime},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{long}{ style = 0},\rtfsp
+\param{const wxValidator\& }{validator = wxDefaultValidator},
+\param{const wxString\& }{name = ``datectrl"}}
+
+Initializes the object and calls \helpref{Create}{wxdatepickerctrcreate} with
+all the parameters.
+
+
+\membersection{wxDatePickerCtrl::Create}\label{wxdatepickerctrlcreate}
+
+\func{bool}{Create}{\param{wxWindow *}{parent},\rtfsp
+\param{wxWindowID}{ id},\rtfsp
+\param{const wxDateTime\& }{dt = wxDefaultDateTime},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{long}{ style = 0},\rtfsp
+\param{const wxValidator\& }{validator = wxDefaultValidator},
+\param{const wxString\& }{name = ``datectrl"}}
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window, must not be non-\texttt{NULL}.}
+
+\docparam{id}{The identifier for the control.}
+
+\docparam{dt}{The initial value of the control, if an invalid date (such as the
+default value) is used, the control is set to today.}
+
+\docparam{pos}{Initial position.}
+
+\docparam{size}{Initial size. If left at default value, the control chooses its
+own best size by using the height approximately equal to a text control and
+width large enough to show the date string fully.}
+
+\docparam{style}{The window style, should be left at $0$ as there are no
+special styles for this control in this version.}
+
+\docparam{validator}{Validator which can be used for additional date checks.}
+
+\docparam{name}{Control name.}
+
+\wxheading{Return value}
+
+\true if the control was successfully created or \false if creation failed.
+
+
+\membersection{wxDatePickerCtrl::GetRange}\label{wxdatepickerctrlgetrange}
+
+\constfunc{bool}{GetRange}{\param{wxDateTime *}{dt1}, \param{wxDateTime }{*dt2}}
+
+If the control had been previously limited to a range of dates using 
+\helpref{SetRange()}{wxdatepickerctrlsetrange}, returns the lower and upper
+bounds of this range. If no range is set (or only one of the bounds is set),
+the \arg{dt1} and/or \arg{dt2} are set to be invalid.
+
+\wxheading{Parameters}
+
+\docparam{dt1}{Pointer to the object which receives the lower range limit or
+becomes invalid if it is not set. May be \texttt{NULLL} if the caller is not
+interested in lower limit}
+
+\docparam{dt2}{Same as above but for the upper limit}
+
+\wxheading{Return value}
+
+\false if no range limits are currently set, \true if at least one bound is
+set.
+
+
+\membersection{wxDatePickerCtrl::GetValue}\label{wxdatepickerctrlgetvalue}
+
+\constfunc{wxDateTime}{GetValue}{\void}
+
+Returns the currently selected. If there is no selection or the selection is
+outside of the current range, an invalid object is returned.
+
+
+\membersection{wxDatePickerCtrl::SetRange}\label{wxdatepickerctrlsetrange}
+
+\func{void}{SetRange}{\param{const wxDateTime\&}{ dt1}, \param{const wxDateTime\&}{ dt2}}
+
+Sets the valid range for the date selection. If \arg{dt1} is valid, it becomes
+the earliest date (inclusive) accepted by the control. If \arg{dt2} is valid,
+it becomes the latest possible date.
+
+\wxheading{Remarks}
+
+If the current value of the control is outside of the newly set range bounds,
+the behaviour is undefined.
+
+
+\membersection{wxDatePickerCtrl::SetValue}\label{wxdatepickerctrlsetvalue}
+
+\func{void}{SetValue}{\param{const wxDateTime\&}{ dt}}
+
+Changes the current value of the control. The date should be valid and included
+in the currently selected range, if any.
+
+Calling this method does not result in a date change event.
+
+
diff --git a/docs/latex/wx/dateevt.tex b/docs/latex/wx/dateevt.tex
new file mode 100644 (file)
index 0000000..b3af3bc
--- /dev/null
@@ -0,0 +1,44 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Name:        dateevt.tex
+%% Purpose:     wxDateEvent documentation
+%% Author:      Vadim Zeitlin
+%% Created:     2005-01-15
+%% RCS-ID:      $Id$
+%% Copyright:   (c) 2005 Vadim Zeitlin
+%% License:     wxWidgets license
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{\class{wxDateEvent}}\label{wxdateevent}
+
+This event class carries information about a date change and is used together
+with \helpref{wxDatePickerCtrl}{wxdatepickerctrl} and serves as a base class
+for \helpref{wxCalendarEvent}{wxCalendarEvent}.
+
+\wxheading{Derived from}
+
+\helpref{wxCommandEvent}{wxcommandevent}\\
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Include files}
+
+<wx/dateevt.h>
+
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDateEvent::GetDate}\label{wxdateeventgetdate}
+
+\constfunc{const wxDateTime\&}{GetDate}{\void}
+
+Returns the date.
+
+
+\membersection{wxDateEvent::SetDate}\label{wxdateeventsetdate}
+
+\func{void}{SetDate}{\param{const wxDateTime\&}{ date}}
+
+Sets the date carried by the event, normally only used by the library
+internally.
+
+
index d96eb26df8ee2a7cd6db96509118dd613458ed5d..393311c39f8f3d7ed0be2c63de1f97b95d1ffa5f 100644 (file)
@@ -23,7 +23,7 @@
 
 #if wxUSE_CALENDARCTRL
 
 
 #if wxUSE_CALENDARCTRL
 
-#include "wx/datetime.h"
+#include "wx/dateevt.h"
 #include "wx/colour.h"
 #include "wx/font.h"
 
 #include "wx/colour.h"
 #include "wx/font.h"
 
@@ -161,23 +161,23 @@ private:
 
 class WXDLLIMPEXP_ADV wxCalendarCtrl;
 
 
 class WXDLLIMPEXP_ADV wxCalendarCtrl;
 
-class WXDLLIMPEXP_ADV wxCalendarEvent : public wxCommandEvent
+class WXDLLIMPEXP_ADV wxCalendarEvent : public wxDateEvent
 {
 friend class wxCalendarCtrl;
 public:
     wxCalendarEvent() { Init(); }
     wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type);
 
 {
 friend class wxCalendarCtrl;
 public:
     wxCalendarEvent() { Init(); }
     wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type);
 
-    const wxDateTime& GetDate() const { return m_date; }
-    void SetDate(const wxDateTime &date) { m_date = date; }
     void SetWeekDay(const wxDateTime::WeekDay wd) { m_wday = wd; }
     wxDateTime::WeekDay GetWeekDay() const { return m_wday; }
 
 protected:
     void SetWeekDay(const wxDateTime::WeekDay wd) { m_wday = wd; }
     wxDateTime::WeekDay GetWeekDay() const { return m_wday; }
 
 protected:
-    void Init();
+    void Init()
+    {
+        m_wday = wxDateTime::Inv_WeekDay;
+    }
 
 private:
 
 private:
-    wxDateTime m_date;
     wxDateTime::WeekDay m_wday;
 
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxCalendarEvent)
     wxDateTime::WeekDay m_wday;
 
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxCalendarEvent)
@@ -190,6 +190,14 @@ private:
 // so far we only have a generic version, so keep it simple
 #include "wx/generic/calctrl.h"
 
 // so far we only have a generic version, so keep it simple
 #include "wx/generic/calctrl.h"
 
+
+// now we can define the inline ctor using wxCalendarCtrl
+inline
+wxCalendarEvent::wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type)
+               : wxDateEvent(cal, cal->GetDate(), type)
+{
+}
+
 // ----------------------------------------------------------------------------
 // calendar event types and macros for handling them
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // calendar event types and macros for handling them
 // ----------------------------------------------------------------------------
diff --git a/include/wx/datectrl.h b/include/wx/datectrl.h
new file mode 100644 (file)
index 0000000..a6adde5
--- /dev/null
@@ -0,0 +1,59 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        wx/datectrl.h
+// Purpose:     implements wxDatePickerCtrl
+// Author:      Vadim Zeitlin
+// Modified by:
+// Created:     2005-01-09
+// RCS-ID:      $Id$
+// Copyright:   (c) 2005 Vadim Zeitlin <vadim@wxwindows.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_DATECTRL_H_
+#define _WX_DATECTRL_H_
+
+#include "wx/control.h"         // the base class
+#include "wx/datetime.h"
+
+#define wxDatePickerCtrlNameStr _T("datectrl")
+
+// ----------------------------------------------------------------------------
+// wxDatePickerCtrl: allow the user to enter the date
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxDatePickerCtrlBase : public wxControl
+{
+public:
+    /*
+       The derived classes should implement ctor and Create() method with the
+       following signature:
+
+        bool Create(wxWindow *parent,
+                    wxWindowID id,
+                    const wxDateTime& dt = wxDefaultDateTime,
+                    const wxPoint& pos = wxDefaultPosition,
+                    const wxSize& size = wxDefaultSize,
+                    long style = 0,
+                    const wxValidator& validator = wxDefaultValidator,
+                    const wxString& name = wxDatePickerCtrlNameStr);
+     */
+
+    // set/get the date
+    virtual void SetValue(const wxDateTime& dt) = 0;
+    virtual wxDateTime GetValue() const = 0;
+
+    // set/get the allowed valid range for the dates, if either/both of them
+    // are invalid, there is no corresponding limit and if neither is set
+    // GetRange() returns false
+    virtual void SetRange(const wxDateTime& dt1, const wxDateTime& dt2) = 0;
+    virtual bool GetRange(wxDateTime *dt1, wxDateTime *dt2) const = 0;
+};
+
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+    #include "wx/msw/datectrl.h"
+#else
+    // TODO: #include "wx/generic/datectrl.h"
+#endif
+
+#endif // _WX_DATECTRL_H_
+
diff --git a/include/wx/dateevt.h b/include/wx/dateevt.h
new file mode 100644 (file)
index 0000000..a4403b5
--- /dev/null
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        wx/dateevt.h
+// Purpose:     declares wxDateEvent class
+// Author:      Vadim Zeitlin
+// Modified by:
+// Created:     2005-01-10
+// RCS-ID:      $Id$
+// Copyright:   (c) 2005 Vadim Zeitlin <vadim@wxwindows.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_DATEEVT_H_
+#define _WX_DATEEVT_H_
+
+#include "wx/event.h"
+#include "wx/datetime.h"
+
+// ----------------------------------------------------------------------------
+// wxDateEvent: used by wxCalendarCtrl and wxDatePickerCtrl
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxDateEvent : public wxCommandEvent
+{
+public:
+    wxDateEvent() { }
+    wxDateEvent(wxWindow *win, const wxDateTime& dt, wxEventType type)
+        : wxCommandEvent(type, win->GetId()),
+          m_date(dt)
+    {
+        SetEventObject(win);
+    }
+
+    const wxDateTime& GetDate() const { return m_date; }
+    void SetDate(const wxDateTime &date) { m_date = date; }
+
+private:
+    wxDateTime m_date;
+
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDateEvent)
+};
+
+// ----------------------------------------------------------------------------
+// event types and macros for handling them
+// ----------------------------------------------------------------------------
+
+BEGIN_DECLARE_EVENT_TYPES()
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_DATE_CHANGED, 1101)
+END_DECLARE_EVENT_TYPES()
+
+typedef void (wxEvtHandler::*wxDateEventFunction)(wxDateEvent&);
+
+#define EVT_DATE_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_DATE_CHANGED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)  wxStaticCastEvent( wxDateEventFunction, & fn ), (wxObject *) NULL),
+
+#ifdef _WX_DEFINE_DATE_EVENTS_
+    DEFINE_EVENT_TYPE(wxEVT_DATE_CHANGED)
+
+    IMPLEMENT_DYNAMIC_CLASS(wxDateEvent, wxCommandEvent)
+#endif
+
+#endif // _WX_DATEEVT_H_
+
index 6bd3311525de68b2223845fe2709a18ad52c5bc3..feca04fb439377420d6d5b9deb8449a86362ada3 100644 (file)
 #endif
 
 #include "wx/sizer.h"
 #endif
 
 #include "wx/sizer.h"
+#include "wx/textctrl.h"
+
 #include "wx/calctrl.h"
 #include "wx/calctrl.h"
+#include "wx/datectrl.h"
+
+#define wxUSE_DATEPICKERCTRL 1
 
 // ----------------------------------------------------------------------------
 // private classes
 
 // ----------------------------------------------------------------------------
 // private classes
@@ -100,6 +105,10 @@ public:
     void OnQuit(wxCommandEvent& event);
     void OnAbout(wxCommandEvent& event);
 
     void OnQuit(wxCommandEvent& event);
     void OnAbout(wxCommandEvent& event);
 
+#if wxUSE_DATEPICKERCTRL
+    void OnAskDate(wxCommandEvent& event);
+#endif // wxUSE_DATEPICKERCTRL
+
     void OnCalMonday(wxCommandEvent& event);
     void OnCalHolidays(wxCommandEvent& event);
     void OnCalSpecial(wxCommandEvent& event);
     void OnCalMonday(wxCommandEvent& event);
     void OnCalHolidays(wxCommandEvent& event);
     void OnCalSpecial(wxCommandEvent& event);
@@ -122,6 +131,29 @@ private:
     DECLARE_EVENT_TABLE()
 };
 
     DECLARE_EVENT_TABLE()
 };
 
+#if wxUSE_DATEPICKERCTRL
+
+// Define a simple modal dialog which asks the user for a date
+class MyDialog : public wxDialog
+{
+public:
+    MyDialog(wxWindow *parent, const wxDateTime& dt);
+
+    wxDateTime GetDate() const { return m_datePicker->GetValue(); }
+
+private:
+    void OnDateChange(wxDateEvent& event);
+
+
+    wxDatePickerCtrl *m_datePicker;
+    wxTextCtrl *m_text;
+
+
+    DECLARE_EVENT_TABLE()
+};
+
+#endif // wxUSE_DATEPICKERCTRL
+
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
@@ -130,8 +162,11 @@ private:
 enum
 {
     // menu items
 enum
 {
     // menu items
-    Calendar_File_About = 100,
-    Calendar_File_Quit,
+    Calendar_File_About = wxID_ABOUT,
+    Calendar_File_Quit = wxID_EXIT,
+#if wxUSE_DATEPICKERCTRL
+    Calendar_File_AskDate = 100,
+#endif // wxUSE_DATEPICKERCTRL
     Calendar_Cal_Monday = 200,
     Calendar_Cal_Holidays,
     Calendar_Cal_Special,
     Calendar_Cal_Monday = 200,
     Calendar_Cal_Holidays,
     Calendar_Cal_Special,
@@ -155,6 +190,10 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(Calendar_File_Quit,  MyFrame::OnQuit)
     EVT_MENU(Calendar_File_About, MyFrame::OnAbout)
 
     EVT_MENU(Calendar_File_Quit,  MyFrame::OnQuit)
     EVT_MENU(Calendar_File_About, MyFrame::OnAbout)
 
+#if wxUSE_DATEPICKERCTRL
+    EVT_MENU(Calendar_File_AskDate, MyFrame::OnAskDate)
+#endif // wxUSE_DATEPICKERCTRL
+
     EVT_MENU(Calendar_Cal_Monday, MyFrame::OnCalMonday)
     EVT_MENU(Calendar_Cal_Holidays, MyFrame::OnCalHolidays)
     EVT_MENU(Calendar_Cal_Special, MyFrame::OnCalSpecial)
     EVT_MENU(Calendar_Cal_Monday, MyFrame::OnCalMonday)
     EVT_MENU(Calendar_Cal_Holidays, MyFrame::OnCalHolidays)
     EVT_MENU(Calendar_Cal_Special, MyFrame::OnCalSpecial)
@@ -180,6 +219,14 @@ BEGIN_EVENT_TABLE(MyPanel, wxPanel)
     EVT_CALENDAR_WEEKDAY_CLICKED(Calendar_CalCtrl, MyPanel::OnCalendarWeekDayClick)
 END_EVENT_TABLE()
 
     EVT_CALENDAR_WEEKDAY_CLICKED(Calendar_CalCtrl, MyPanel::OnCalendarWeekDayClick)
 END_EVENT_TABLE()
 
+#if wxUSE_DATEPICKERCTRL
+
+BEGIN_EVENT_TABLE(MyDialog, wxDialog)
+    EVT_DATE_CHANGED(wxID_ANY, MyDialog::OnDateChange)
+END_EVENT_TABLE()
+
+#endif // wxUSE_DATEPICKERCTRL
+
 // Create a new application object: this macro will allow wxWidgets to create
 // the application object during program execution (it's better than using a
 // static object for many reasons) and also declares the accessor function
 // Create a new application object: this macro will allow wxWidgets to create
 // the application object during program execution (it's better than using a
 // static object for many reasons) and also declares the accessor function
@@ -221,6 +268,11 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     // create a menu bar
     wxMenu *menuFile = new wxMenu;
 
     // create a menu bar
     wxMenu *menuFile = new wxMenu;
 
+#if wxUSE_DATEPICKERCTRL
+    menuFile->Append(Calendar_File_AskDate, _T("&Choose date...\tCtrl-D"), _T("Show dialog with wxDatePickerCtrl"));
+    menuFile->AppendSeparator();
+#endif // wxUSE_DATEPICKERCTRL
+
     menuFile->Append(Calendar_File_About, _T("&About...\tCtrl-A"), _T("Show about dialog"));
     menuFile->AppendSeparator();
     menuFile->Append(Calendar_File_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
     menuFile->Append(Calendar_File_About, _T("&About...\tCtrl-A"), _T("Show about dialog"));
     menuFile->AppendSeparator();
     menuFile->Append(Calendar_File_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
@@ -351,6 +403,30 @@ void MyFrame::OnToday(wxCommandEvent &WXUNUSED(event))
     m_panel->Today();
 }
 
     m_panel->Today();
 }
 
+#if wxUSE_DATEPICKERCTRL
+
+void MyFrame::OnAskDate(wxCommandEvent& WXUNUSED(event))
+{
+    MyDialog dlg(this, m_panel->GetCal()->GetDate());
+    if ( dlg.ShowModal() == wxID_OK )
+    {
+        const wxDateTime dt = dlg.GetDate(),
+                         today = wxDateTime::Today();
+
+        if ( dt.GetDay() == today.GetDay() &&
+                dt.GetMonth() == today.GetMonth() )
+        {
+            wxMessageBox(_T("Happy birthday!"), _T("Calendar Sample"));
+        }
+
+        m_panel->GetCal()->SetDate(dt);
+
+        wxLogStatus(_T("Changed the date to your birthday"));
+    }
+}
+
+#endif // wxUSE_DATEPICKERCTRL
+
 // ----------------------------------------------------------------------------
 // MyPanel
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // MyPanel
 // ----------------------------------------------------------------------------
@@ -455,3 +531,53 @@ void MyPanel::Today()
 {
     m_calendar->SetDate(wxDateTime::Today());
 }
 {
     m_calendar->SetDate(wxDateTime::Today());
 }
+
+// ----------------------------------------------------------------------------
+// MyDialog
+// ----------------------------------------------------------------------------
+
+#if wxUSE_DATEPICKERCTRL
+
+MyDialog::MyDialog(wxWindow *parent, const wxDateTime& dt)
+        : wxDialog(parent, -1, wxString(_T("Calendar: Choose a date")))
+{
+    wxStdDialogButtonSizer *sizerBtns = new wxStdDialogButtonSizer;
+    sizerBtns->AddButton(new wxButton(this, wxID_OK));
+    sizerBtns->AddButton(new wxButton(this, wxID_CANCEL));
+    sizerBtns->Finalise();
+
+    wxSizer *sizerText = new wxBoxSizer(wxHORIZONTAL);
+    sizerText->Add(new wxStaticText(this, -1, _T("Date in ISO format: ")),
+                    wxSizerFlags().Border());
+    m_text = new wxTextCtrl(this, -1);
+    sizerText->Add(m_text, wxSizerFlags().Expand().Border());
+
+    wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
+    sizerTop->Add(new wxStaticText
+                      (
+                        this, -1,
+                        _T("Enter your birthday date (not before 20th century):")
+                      ),
+                    wxSizerFlags().Border());
+
+    m_datePicker = new wxDatePickerCtrl(this, -1, dt);
+    m_datePicker->SetRange(wxDateTime(1, wxDateTime::Jan, 1900),
+                            wxDefaultDateTime);
+    sizerTop->Add(m_datePicker, wxSizerFlags().Expand().Border());
+
+    sizerTop->AddStretchSpacer(1);
+    sizerTop->Add(sizerText);
+
+    sizerTop->Add(sizerBtns, wxSizerFlags().Centre().Border());
+
+    SetSizerAndFit(sizerTop);
+    Layout();
+}
+
+void MyDialog::OnDateChange(wxDateEvent& event)
+{
+    m_text->SetValue(event.GetDate().FormatISODate());
+}
+
+#endif // wxUSE_DATEPICKERCTRL
+
index c6616b237c6c813bf52c4bbf811f72a56e7e9b5f..ef716d85b2f1a3c0b3f79d8cc4075ee45b855c4c 100644 (file)
@@ -42,6 +42,7 @@
 
 #include "wx/spinctrl.h"
 
 
 #include "wx/spinctrl.h"
 
+#define _WX_DEFINE_DATE_EVENTS_
 #include "wx/calctrl.h"
 
 #define DEBUG_PAINT 0
 #include "wx/calctrl.h"
 
 #define DEBUG_PAINT 0
@@ -162,7 +163,7 @@ wxCONSTRUCTOR_6( wxCalendarCtrl , wxWindow* , Parent , wxWindowID , Id , wxDateT
 #else
 IMPLEMENT_DYNAMIC_CLASS(wxCalendarCtrl, wxControl)
 #endif
 #else
 IMPLEMENT_DYNAMIC_CLASS(wxCalendarCtrl, wxControl)
 #endif
-IMPLEMENT_DYNAMIC_CLASS(wxCalendarEvent, wxCommandEvent)
+IMPLEMENT_DYNAMIC_CLASS(wxCalendarEvent, wxDateEvent)
 
 // ----------------------------------------------------------------------------
 // events
 
 // ----------------------------------------------------------------------------
 // events
@@ -1820,22 +1821,5 @@ wxCalendarCtrl::GetClassDefaultAttributes(wxWindowVariant variant)
     return wxListBox::GetClassDefaultAttributes(variant);
 }
 
     return wxListBox::GetClassDefaultAttributes(variant);
 }
 
-
-// ----------------------------------------------------------------------------
-// wxCalendarEvent
-// ----------------------------------------------------------------------------
-
-void wxCalendarEvent::Init()
-{
-    m_wday = wxDateTime::Inv_WeekDay;
-}
-
-wxCalendarEvent::wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type)
-               : wxCommandEvent(type, cal->GetId())
-{
-    m_date = cal->GetDate();
-    SetEventObject(cal);
-}
-
 #endif // wxUSE_CALENDARCTRL
 
 #endif // wxUSE_CALENDARCTRL
 
diff --git a/src/msw/datectrl.cpp b/src/msw/datectrl.cpp
new file mode 100644 (file)
index 0000000..4c45cc3
--- /dev/null
@@ -0,0 +1,224 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        msw/datectrl.cpp
+// Purpose:     wxDatePickerCtrl implementation
+// Author:      Vadim Zeitlin
+// Modified by:
+// Created:     2005-01-09
+// RCS-ID:      $Id$
+// Copyright:   (c) 2005 Vadim Zeitlin <vadim@wxwindows.org>
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+#endif
+
+#include "wx/datectrl.h"
+
+#define _WX_DEFINE_DATE_EVENTS_
+#include "wx/dateevt.h"
+
+#include "wx/msw/wrapwin.h"
+#include "wx/msw/wrapcctl.h"
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// helpers for wxDateTime <-> SYSTEMTIME conversion
+// ----------------------------------------------------------------------------
+
+static inline void wxFromSystemTime(wxDateTime *dt, const SYSTEMTIME& st)
+{
+    dt->Set(st.wDay,
+            wx_static_cast(wxDateTime::Month, wxDateTime::Jan + st.wMonth - 1),
+            st.wYear,
+            0, 0, 0);
+}
+
+static inline void wxToSystemTime(SYSTEMTIME *st, const wxDateTime& dt)
+{
+    const wxDateTime::Tm tm(dt.GetTm());
+
+    st->wYear = tm.year;
+    st->wMonth = tm.mon - wxDateTime::Jan + 1;
+    st->wDay = tm.mday;
+
+    st->wDayOfWeek =
+    st->wHour =
+    st->wMinute =
+    st->wSecond =
+    st->wMilliseconds = 0;
+}
+
+// ----------------------------------------------------------------------------
+// wxDatePickerCtrl creation
+// ----------------------------------------------------------------------------
+
+bool
+wxDatePickerCtrl::Create(wxWindow *parent,
+                         wxWindowID id,
+                         const wxDateTime& dt,
+                         const wxPoint& pos,
+                         const wxSize& size,
+                         long style,
+                         const wxValidator& validator,
+                         const wxString& name)
+{
+    // initialize the base class
+    if ( !CreateControl(parent, id, pos, size, style, validator, name) )
+        return false;
+
+    // create the native control
+    if ( !MSWCreateControl(DATETIMEPICK_CLASS, _T(""), pos, size) )
+        return false;
+
+    if ( dt.IsValid() )
+        SetValue(dt);
+
+    return true;
+}
+
+WXDWORD wxDatePickerCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
+{
+    WXDWORD styleMSW = wxDatePickerCtrlBase::MSWGetStyle(style, exstyle);
+
+    // for now this is unconditional, but we should support drop down control
+    // style as well later
+    styleMSW |= DTS_UPDOWN | DTS_SHORTDATEFORMAT;
+
+    return styleMSW;
+}
+
+// TODO: handle WM_WININICHANGE
+
+// ----------------------------------------------------------------------------
+// wxDatePickerCtrl geometry
+// ----------------------------------------------------------------------------
+
+wxSize wxDatePickerCtrl::DoGetBestSize() const
+{
+    const int y = GetCharHeight();
+
+    return wxSize(DEFAULT_ITEM_WIDTH, EDIT_HEIGHT_FROM_CHAR_HEIGHT(y));
+}
+
+// ----------------------------------------------------------------------------
+// wxDatePickerCtrl operations
+// ----------------------------------------------------------------------------
+
+void wxDatePickerCtrl::SetValue(const wxDateTime& dt)
+{
+    // as we don't support DTS_SHOWNONE style so far, we don't allow setting
+    // the control to an invalid date, but this restriction may be lifted in
+    // the future
+    wxCHECK_RET( dt.IsValid(), _T("invalid date") );
+
+    SYSTEMTIME st;
+    wxToSystemTime(&st, dt);
+    if ( !DateTime_SetSystemtime(GetHwnd(), GDT_VALID, &st) )
+    {
+        wxLogDebug(_T("DateTime_SetSystemtime() failed"));
+    }
+}
+
+wxDateTime wxDatePickerCtrl::GetValue() const
+{
+    wxDateTime dt;
+    SYSTEMTIME st;
+    if ( DateTime_GetSystemtime(GetHwnd(), &st) == GDT_VALID )
+    {
+        wxFromSystemTime(&dt, st);
+    }
+
+    return dt;
+}
+
+void wxDatePickerCtrl::SetRange(const wxDateTime& dt1, const wxDateTime& dt2)
+{
+    SYSTEMTIME st[2];
+
+    DWORD flags = 0;
+    if ( dt1.IsValid() )
+    {
+        wxToSystemTime(&st[0], dt1);
+        flags |= GDTR_MIN;
+    }
+
+    if ( dt2.IsValid() )
+    {
+        wxToSystemTime(&st[1], dt2);
+        flags |= GDTR_MAX;
+    }
+
+    if ( !DateTime_SetRange(GetHwnd(), flags, st) )
+    {
+        wxLogDebug(_T("DateTime_SetRange() failed"));
+    }
+}
+
+bool wxDatePickerCtrl::GetRange(wxDateTime *dt1, wxDateTime *dt2) const
+{
+    SYSTEMTIME st[2];
+
+    DWORD flags = DateTime_GetRange(GetHwnd(), st);
+    if ( dt1 )
+    {
+        if ( flags & GDTR_MIN )
+            wxFromSystemTime(dt1, st[0]);
+        else
+            *dt1 = wxDefaultDateTime;
+    }
+
+    if ( dt2 )
+    {
+        if ( flags & GDTR_MAX )
+            wxFromSystemTime(dt2, st[1]);
+        else
+            *dt2 = wxDefaultDateTime;
+    }
+
+    return flags != 0;
+}
+
+// ----------------------------------------------------------------------------
+// wxDatePickerCtrl events
+// ----------------------------------------------------------------------------
+
+bool
+wxDatePickerCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
+{
+    NMHDR* hdr = (NMHDR *)lParam;
+    switch ( hdr->code )
+    {
+        case DTN_DATETIMECHANGE:
+            NMDATETIMECHANGE *dtch = (NMDATETIMECHANGE *)hdr;
+            wxDateTime dt;
+            if ( dtch->dwFlags == GDT_VALID )
+                wxFromSystemTime(&dt, dtch->st);
+
+            wxDateEvent event(this, dt, wxEVT_DATE_CHANGED);
+            if ( GetEventHandler()->ProcessEvent(event) )
+            {
+                *result = 0;
+                return true;
+            }
+    }
+
+    return wxDatePickerCtrlBase::MSWOnNotify(idCtrl, lParam, result);
+}
+