Added wx.DatePickerCtrl
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32127 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
49
wxPython/demo/DatePickerCtrl.py
Normal file
49
wxPython/demo/DatePickerCtrl.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
|
||||||
|
import wx
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
class TestPanel(wx.Panel):
|
||||||
|
def __init__(self, parent, log):
|
||||||
|
self.log = log
|
||||||
|
wx.Panel.__init__(self, parent, -1)
|
||||||
|
|
||||||
|
dpc = wx.DatePickerCtrl(self, size=(120,-1),
|
||||||
|
style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
|
||||||
|
|
||||||
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
sizer.Add(dpc, 0, wx.ALL, 50)
|
||||||
|
|
||||||
|
self.SetSizer(sizer)
|
||||||
|
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
def runTest(frame, nb, log):
|
||||||
|
win = TestPanel(nb, log)
|
||||||
|
return win
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
overview = """<html><body>
|
||||||
|
<h2><center>wx.DatePickerCtrl</center></h2>
|
||||||
|
|
||||||
|
This control allows the user to select a date. Unlike
|
||||||
|
wx.calendar.CalendarCtrl, which is a relatively big control,
|
||||||
|
wx.DatePickerCtrl is implemented as a small window showing the
|
||||||
|
currently selected date. The control can be edited using the keyboard,
|
||||||
|
and can also display a popup window for more user-friendly date
|
||||||
|
selection, depending on the styles used and the platform.
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import sys,os
|
||||||
|
import run
|
||||||
|
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
|
||||||
|
|
@@ -71,12 +71,13 @@ class TestDialog(wx.Dialog):
|
|||||||
|
|
||||||
btn = wx.Button(self, wx.ID_OK)
|
btn = wx.Button(self, wx.ID_OK)
|
||||||
btn.SetHelpText("The OK button completes the dialog")
|
btn.SetHelpText("The OK button completes the dialog")
|
||||||
|
btn.SetDefault()
|
||||||
btnsizer.AddButton(btn)
|
btnsizer.AddButton(btn)
|
||||||
|
|
||||||
btn = wx.Button(self, wx.ID_CANCEL)
|
btn = wx.Button(self, wx.ID_CANCEL)
|
||||||
btn.SetHelpText("The Cancel button cnacels the dialog. (Cool, huh?)")
|
btn.SetHelpText("The Cancel button cnacels the dialog. (Cool, huh?)")
|
||||||
btnsizer.AddButton(btn)
|
btnsizer.AddButton(btn)
|
||||||
btnsizer.Finalise()
|
btnsizer.Realize()
|
||||||
|
|
||||||
sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
|
sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
|
||||||
|
|
||||||
|
@@ -17,7 +17,7 @@ consecutive (there may be intervening controls). Without this fix, an
|
|||||||
out-of-sync assert is generated when clicking on a radio button and
|
out-of-sync assert is generated when clicking on a radio button and
|
||||||
then calling GetValue().
|
then calling GetValue().
|
||||||
|
|
||||||
XRC:
|
Some XRC changes:
|
||||||
- Added 'icon' property to wxFrame and wxDialog
|
- Added 'icon' property to wxFrame and wxDialog
|
||||||
- No longer ignores menu bitmaps on non-MSW platforms
|
- No longer ignores menu bitmaps on non-MSW platforms
|
||||||
- Notebook page bitmaps are now supported
|
- Notebook page bitmaps are now supported
|
||||||
@@ -33,7 +33,7 @@ wx.GetPasswordFromUser dialog function.
|
|||||||
OGL patch from Shane Holloway:
|
OGL patch from Shane Holloway:
|
||||||
|
|
||||||
Two simple problems found in the new python ogl code. First is
|
Two simple problems found in the new python ogl code. First is
|
||||||
the patch for _canvas.py. Essentially:
|
the patch for _canvas.py. Essentially::
|
||||||
|
|
||||||
dx = abs(dc.LogicalToDeviceX(x - self._firstDragX))
|
dx = abs(dc.LogicalToDeviceX(x - self._firstDragX))
|
||||||
dy = abs(dc.LogicalToDeviceY(y - self._firstDragY))
|
dy = abs(dc.LogicalToDeviceY(y - self._firstDragY))
|
||||||
@@ -112,7 +112,7 @@ original patch were changed/removed, so we are still not free of
|
|||||||
patches. A new patch for SWIG is located in the wxPython/SWIG
|
patches. A new patch for SWIG is located in the wxPython/SWIG
|
||||||
directory of the wxPython source tree. SWIG 1.3.24 plus this patch
|
directory of the wxPython source tree. SWIG 1.3.24 plus this patch
|
||||||
should be used by anyone who is making custom modifications to
|
should be used by anyone who is making custom modifications to
|
||||||
wxPython's *.i files, or building their own extension modules or
|
wxPython's .i files, or building their own extension modules or
|
||||||
etc. that need to interact with the wxPython swigged types. For the
|
etc. that need to interact with the wxPython swigged types. For the
|
||||||
morbidly curious, here are a few more details:
|
morbidly curious, here are a few more details:
|
||||||
|
|
||||||
@@ -170,7 +170,7 @@ and GTK+'s context menu code.
|
|||||||
wxGTK: Applied patch #1100327 for correct feedback from DND actions
|
wxGTK: Applied patch #1100327 for correct feedback from DND actions
|
||||||
(not all actions are allowed).
|
(not all actions are allowed).
|
||||||
|
|
||||||
Fixed memory leak in wxGRID::UpdateAttr[Rows][Or][Cols] (patch 1104355)
|
Fixed memory leak in wxGrid::UpdateAttr[Rows][Or][Cols] (patch 1104355)
|
||||||
|
|
||||||
For efficiency reasons, text controls no longer set the string for
|
For efficiency reasons, text controls no longer set the string for
|
||||||
each text updated event, but rather query for the string value only
|
each text updated event, but rather query for the string value only
|
||||||
@@ -183,9 +183,6 @@ Several patches applied, such as #1111174, #1110252 and others, that
|
|||||||
make the generic wx.TreeCtrl (used on wxGTK and wxMac) be more
|
make the generic wx.TreeCtrl (used on wxGTK and wxMac) be more
|
||||||
conistent with the wxMSW native wx.TreeCtrl.
|
conistent with the wxMSW native wx.TreeCtrl.
|
||||||
|
|
||||||
wxMac: wx.DC implemented using CoreGraphics
|
|
||||||
??? NEED MORE DETAILS HERE ???
|
|
||||||
|
|
||||||
XRCed:
|
XRCed:
|
||||||
* Edit->Locate command (Ctrl-L) for quick selection of items.
|
* Edit->Locate command (Ctrl-L) for quick selection of items.
|
||||||
Works with event-handling controls (buttons, text fields) but
|
Works with event-handling controls (buttons, text fields) but
|
||||||
@@ -198,17 +195,31 @@ wxMac: Fixed a long-standing issue where wxSlider controls with a
|
|||||||
hardcoded size would misplace their labels behind the slider control.
|
hardcoded size would misplace their labels behind the slider control.
|
||||||
|
|
||||||
wx.HtmlListBox fixed so calling RefreshLine(s) will cause the data for
|
wx.HtmlListBox fixed so calling RefreshLine(s) will cause the data for
|
||||||
that line to be refetched from the derived class.
|
that line to be refetched from the overridden methods in the derived
|
||||||
|
class.
|
||||||
|
|
||||||
The default DoGetBestSize now includes the difference (if any) between
|
The default DoGetBestSize now includes the difference (if any) between
|
||||||
the client size and total size of the window. Code that sets the
|
the client size and total size of the window, (such as the size of
|
||||||
client size using the best size, or that added extra space to sizers
|
borders.) Code that sets the client size using the best size, or that
|
||||||
to compensate for this bug may need to be changed.
|
added extra space to sizers to compensate for this bug may need to be
|
||||||
|
changed.
|
||||||
|
|
||||||
Can suppress themed notebook page with wxNB_NOPAGETHEME or
|
Can suppress themed notebook pages with the wxNB_NOPAGETHEME style or
|
||||||
setting system option msw.notebook.themed-background to 0
|
setting system option msw.notebook.themed-background to 0.
|
||||||
|
|
||||||
|
wxSyledTextCtrl updated to use Scintilla 1.62.
|
||||||
|
|
||||||
|
Can now set the msw.window.no-clip-children system option to 1 to
|
||||||
|
eliminate weird refresh behaviour (delays between a window being
|
||||||
|
erased and repainted, giving a ghostly gradual-redraw effect). May be
|
||||||
|
a temporary 'fix' until properly fixed before 2.6.
|
||||||
|
|
||||||
|
wxMac: CoreGraphics [[WRITE MORE HERE]]
|
||||||
|
|
||||||
|
wxMac: Toolbar is now more native looking with borderless toolbar
|
||||||
|
buttons.
|
||||||
|
|
||||||
|
Added wx.DatePickerCtrl.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -264,6 +264,7 @@ swig_sources = run_swig(['controls.i'], 'src', GENDIR, PKGDIR,
|
|||||||
'src/_pycontrol.i',
|
'src/_pycontrol.i',
|
||||||
'src/_cshelp.i',
|
'src/_cshelp.i',
|
||||||
'src/_dragimg.i',
|
'src/_dragimg.i',
|
||||||
|
'src/_datectrl.i',
|
||||||
],
|
],
|
||||||
True)
|
True)
|
||||||
ext = Extension('_controls_', swig_sources,
|
ext = Extension('_controls_', swig_sources,
|
||||||
|
179
wxPython/src/_datectrl.i
Normal file
179
wxPython/src/_datectrl.i
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: _datectrl.i
|
||||||
|
// Purpose: SWIG interface defs for wxwxDatePickerCtrl
|
||||||
|
//
|
||||||
|
// Author: Robin Dunn
|
||||||
|
//
|
||||||
|
// Created: 15-Feb-2005
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 2005 by Total Control Software
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Not a %module
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
MAKE_CONST_WXSTRING(DatePickerCtrlNameStr);
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
%newgroup
|
||||||
|
|
||||||
|
DocStr(wxDatePickerCtrl,
|
||||||
|
"This control allows the user to select a date. Unlike
|
||||||
|
`wx.calendar.CalendarCtrl`, which is a relatively big control,
|
||||||
|
`wx.DatePickerCtrl` is implemented as a small window showing the
|
||||||
|
currently selected date. The control can be edited using the keyboard,
|
||||||
|
and can also display a popup window for more user-friendly date
|
||||||
|
selection, depending on the styles used and the platform.", "
|
||||||
|
|
||||||
|
Styles
|
||||||
|
------
|
||||||
|
================= ======================================================
|
||||||
|
wx.DP_SPIN Creates a control without month calendar drop down but
|
||||||
|
with spin control-like arrows to change individual
|
||||||
|
date components. This style is not supported by the
|
||||||
|
generic version.
|
||||||
|
|
||||||
|
wx.DP_DROPDOWN Creates a control with a month calendar drop down
|
||||||
|
part from which the user can select a date.
|
||||||
|
|
||||||
|
wx.DP_DEFAULT Creates a control with default style which is the
|
||||||
|
best supported for the current platform
|
||||||
|
(currently wx.DP_SPIN under Windows and
|
||||||
|
wx.DP_DROPDOWN elsewhere).
|
||||||
|
|
||||||
|
wx.DP_ALLOWNONE With this style, the control allows the user to not
|
||||||
|
enter any valid date at all. Without it -- which
|
||||||
|
is by default -- the control always has some
|
||||||
|
valid date.
|
||||||
|
|
||||||
|
wx.DP_SHOWCENTURY Forces display of the century in the default
|
||||||
|
date format. Without this flas the century
|
||||||
|
could be displayed or not depending on the
|
||||||
|
default date representation in the system.
|
||||||
|
================= ======================================================
|
||||||
|
|
||||||
|
Events
|
||||||
|
------
|
||||||
|
|
||||||
|
================= ======================================================
|
||||||
|
EVT_DATE_CHANGED This event fires when the user changes the current
|
||||||
|
selection in the control.
|
||||||
|
================= ======================================================
|
||||||
|
|
||||||
|
:see: `wx.calendar.CalendarCtrl`, `wx.DateEvent`
|
||||||
|
");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
wxDP_DEFAULT = 0,
|
||||||
|
wxDP_SPIN = 1,
|
||||||
|
wxDP_DROPDOWN = 2,
|
||||||
|
wxDP_SHOWCENTURY = 4,
|
||||||
|
wxDP_ALLOWNONE = 8
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
MustHaveApp(wxDatePickerCtrl);
|
||||||
|
|
||||||
|
class wxDatePickerCtrl : public wxControl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
%pythonAppend wxDatePickerCtrl "self._setOORInfo(self)";
|
||||||
|
%pythonAppend wxDatePickerCtrl() "";
|
||||||
|
|
||||||
|
DocCtorStr(
|
||||||
|
wxDatePickerCtrl(wxWindow *parent,
|
||||||
|
wxWindowID id=-1,
|
||||||
|
const wxDateTime& dt = wxDefaultDateTime,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDP_DEFAULT | wxDP_SHOWCENTURY,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxPyDatePickerCtrlNameStr),
|
||||||
|
"Create a new DatePickerCtrl.", "");
|
||||||
|
|
||||||
|
|
||||||
|
DocCtorStrName(
|
||||||
|
wxDatePickerCtrl(),
|
||||||
|
"Precreate a DatePickerCtrl for use in 2-phase creation.", "",
|
||||||
|
PreDatePickerCtrl);
|
||||||
|
|
||||||
|
|
||||||
|
DocDeclStr(
|
||||||
|
bool , Create(wxWindow *parent,
|
||||||
|
wxWindowID id=-1,
|
||||||
|
const wxDateTime& dt = wxDefaultDateTime,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDP_DEFAULT | wxDP_SHOWCENTURY,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxPyDatePickerCtrlNameStr),
|
||||||
|
"Create the GUI parts of the DatePickerCtrl, for use in 2-phase
|
||||||
|
creation.", "");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DocDeclStr(
|
||||||
|
virtual void , SetValue(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.", "");
|
||||||
|
|
||||||
|
DocDeclStr(
|
||||||
|
virtual wxDateTime , GetValue() const,
|
||||||
|
"Returns the currently selected date. If there is no selection or the
|
||||||
|
selection is outside of the current range, an invalid `wx.DateTime`
|
||||||
|
object is returned.", "");
|
||||||
|
|
||||||
|
|
||||||
|
DocDeclStr(
|
||||||
|
virtual void , SetRange(const wxDateTime& dt1, const wxDateTime& dt2),
|
||||||
|
"Sets the valid range for the date selection. If dt1 is valid, it
|
||||||
|
becomes the earliest date (inclusive) accepted by the control. If dt2
|
||||||
|
is valid, it becomes the latest possible date.
|
||||||
|
|
||||||
|
If the current value of the control is outside of the newly set range
|
||||||
|
bounds, the behaviour is undefined.", "");
|
||||||
|
|
||||||
|
// virtual bool GetRange(wxDateTime *dt1, wxDateTime *dt2) const;
|
||||||
|
|
||||||
|
%extend {
|
||||||
|
DocStr(
|
||||||
|
GetLowerLimit,
|
||||||
|
"Get the lower limit of the valid range for the date selection, if any.
|
||||||
|
If there is no range or there is no lower limit, then the
|
||||||
|
`wx.DateTime` value returned will be invalid.", "");
|
||||||
|
wxDateTime GetLowerLimit() {
|
||||||
|
wxDateTime rv;
|
||||||
|
self->GetRange(&rv, NULL);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DocStr(
|
||||||
|
GetUpperLimit,
|
||||||
|
"Get the upper limit of the valid range for the date selection, if any.
|
||||||
|
If there is no range or there is no upper limit, then the
|
||||||
|
`wx.DateTime` value returned will be invalid.", "");
|
||||||
|
wxDateTime GetUpperLimit() {
|
||||||
|
wxDateTime rv;
|
||||||
|
self->GetRange(NULL, &rv);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@@ -1273,4 +1273,22 @@ public:
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
class wxDateEvent : public wxCommandEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxDateEvent(wxWindow *win, const wxDateTime& dt, wxEventType type);
|
||||||
|
|
||||||
|
const wxDateTime& GetDate() const;
|
||||||
|
void SetDate(const wxDateTime &date);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
%constant wxEventType wxEVT_DATE_CHANGED;
|
||||||
|
|
||||||
|
%pythoncode {
|
||||||
|
EVT_DATE_CHANGED = wx.PyEventBinder( wxEVT_DATE_CHANGED, 1 )
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
@@ -109,13 +109,11 @@ public:
|
|||||||
|
|
||||||
class wxCalendarCtrl;
|
class wxCalendarCtrl;
|
||||||
|
|
||||||
class wxCalendarEvent : public wxCommandEvent
|
class wxCalendarEvent : public wxDateEvent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type);
|
wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type);
|
||||||
|
|
||||||
const wxDateTime GetDate() const;
|
|
||||||
void SetDate(const wxDateTime &date);
|
|
||||||
void SetWeekDay(const wxDateTime::WeekDay wd);
|
void SetWeekDay(const wxDateTime::WeekDay wd);
|
||||||
wxDateTime::WeekDay GetWeekDay() const;
|
wxDateTime::WeekDay GetWeekDay() const;
|
||||||
|
|
||||||
@@ -174,7 +172,7 @@ and font and without border, but setting custom attributes with
|
|||||||
SetAttr allows to modify its appearance. Just create a custom
|
SetAttr allows to modify its appearance. Just create a custom
|
||||||
attribute object and set it for the day you want to be displayed
|
attribute object and set it for the day you want to be displayed
|
||||||
specially A day may be marked as being a holiday, (even if it is not
|
specially A day may be marked as being a holiday, (even if it is not
|
||||||
recognized as one by wx.DateTime) by using the SetHoliday method.
|
recognized as one by `wx.DateTime`) by using the SetHoliday method.
|
||||||
|
|
||||||
As the attributes are specified for each day, they may change when the
|
As the attributes are specified for each day, they may change when the
|
||||||
month is changed, so you will often want to update them in an
|
month is changed, so you will often want to update them in an
|
||||||
|
Reference in New Issue
Block a user