-# This file was created automatically by SWIG.
-import calendarc
-
-from misc import *
-
-from windows import *
-
-from gdi import *
-
-from fonts import *
-
-from clip_dnd import *
-
-from controls import *
-
-from events import *
-
-from utils import *
-import wx
-
-def EVT_CALENDAR(win, id, fn):
- win.Connect(id, -1, wxEVT_CALENDAR_DOUBLECLICKED, fn)
-
-def EVT_CALENDAR_SEL_CHANGED(win, id, fn):
- win.Connect(id, -1, wxEVT_CALENDAR_SEL_CHANGED, fn)
-
-def EVT_CALENDAR_DAY(win, id, fn):
- win.Connect(id, -1, wxEVT_CALENDAR_DAY_CHANGED, fn)
-
-def EVT_CALENDAR_MONTH(win, id, fn):
- win.Connect(id, -1, wxEVT_CALENDAR_MONTH_CHANGED, fn)
-
-def EVT_CALENDAR_YEAR(win, id, fn):
- win.Connect(id, -1, wxEVT_CALENDAR_YEAR_CHANGED, fn)
-
-def EVT_CALENDAR_WEEKDAY_CLICKED(win, id, fn):
- win.Connect(id, -1, wxEVT_CALENDAR_WEEKDAY_CLICKED, fn)
-
-
-class wxCalendarDateAttrPtr :
- def __init__(self,this):
- self.this = this
- self.thisown = 0
- def SetTextColour(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_SetTextColour,(self,) + _args, _kwargs)
- return val
- def SetBackgroundColour(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_SetBackgroundColour,(self,) + _args, _kwargs)
- return val
- def SetBorderColour(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_SetBorderColour,(self,) + _args, _kwargs)
- return val
- def SetFont(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_SetFont,(self,) + _args, _kwargs)
- return val
- def SetBorder(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_SetBorder,(self,) + _args, _kwargs)
- return val
- def SetHoliday(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_SetHoliday,(self,) + _args, _kwargs)
- return val
- def HasTextColour(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_HasTextColour,(self,) + _args, _kwargs)
- return val
- def HasBackgroundColour(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_HasBackgroundColour,(self,) + _args, _kwargs)
- return val
- def HasBorderColour(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_HasBorderColour,(self,) + _args, _kwargs)
- return val
- def HasFont(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_HasFont,(self,) + _args, _kwargs)
- return val
- def HasBorder(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_HasBorder,(self,) + _args, _kwargs)
- return val
- def IsHoliday(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_IsHoliday,(self,) + _args, _kwargs)
- return val
- def GetTextColour(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_GetTextColour,(self,) + _args, _kwargs)
- if val: val = wxColourPtr(val) ; val.thisown = 1
- return val
- def GetBackgroundColour(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_GetBackgroundColour,(self,) + _args, _kwargs)
- if val: val = wxColourPtr(val) ; val.thisown = 1
- return val
- def GetBorderColour(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_GetBorderColour,(self,) + _args, _kwargs)
- if val: val = wxColourPtr(val) ; val.thisown = 1
- return val
- def GetFont(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_GetFont,(self,) + _args, _kwargs)
- if val: val = wxFontPtr(val) ; val.thisown = 1
- return val
- def GetBorder(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarDateAttr_GetBorder,(self,) + _args, _kwargs)
- return val
- def __repr__(self):
- return "<C wxCalendarDateAttr instance at %s>" % (self.this,)
-class wxCalendarDateAttr(wxCalendarDateAttrPtr):
- def __init__(self,*_args,**_kwargs):
- self.this = apply(calendarc.new_wxCalendarDateAttr,_args,_kwargs)
- self.thisown = 1
-
-
-
-def wxCalendarDateAttrBorder(*_args,**_kwargs):
- val = wxCalendarDateAttrPtr(apply(calendarc.new_wxCalendarDateAttrBorder,_args,_kwargs))
- val.thisown = 1
- return val
-
-
-class wxCalendarEventPtr(wxCommandEventPtr):
- def __init__(self,this):
- self.this = this
- self.thisown = 0
- def GetDate(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarEvent_GetDate,(self,) + _args, _kwargs)
- if val: val = wxDateTimePtr(val)
- return val
- def GetWeekDay(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarEvent_GetWeekDay,(self,) + _args, _kwargs)
- return val
- def __repr__(self):
- return "<C wxCalendarEvent instance at %s>" % (self.this,)
-class wxCalendarEvent(wxCalendarEventPtr):
- def __init__(self,*_args,**_kwargs):
- self.this = apply(calendarc.new_wxCalendarEvent,_args,_kwargs)
- self.thisown = 1
-
-
-
-
-class wxCalendarCtrlPtr(wxControlPtr):
- def __init__(self,this):
- self.this = this
- self.thisown = 0
- def Create(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_Create,(self,) + _args, _kwargs)
- return val
- def SetDate(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_SetDate,(self,) + _args, _kwargs)
- return val
- def GetDate(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetDate,(self,) + _args, _kwargs)
- if val: val = wxDateTimePtr(val)
- return val
- def SetLowerDateLimit(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_SetLowerDateLimit,(self,) + _args, _kwargs)
- return val
- def GetLowerDateLimit(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetLowerDateLimit,(self,) + _args, _kwargs)
- if val: val = wxDateTimePtr(val)
- return val
- def SetUpperDateLimit(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_SetUpperDateLimit,(self,) + _args, _kwargs)
- return val
- def GetUpperDateLimit(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetUpperDateLimit,(self,) + _args, _kwargs)
- if val: val = wxDateTimePtr(val)
- return val
- def SetDateRange(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_SetDateRange,(self,) + _args, _kwargs)
- return val
- def EnableYearChange(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_EnableYearChange,(self,) + _args, _kwargs)
- return val
- def EnableMonthChange(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_EnableMonthChange,(self,) + _args, _kwargs)
- return val
- def EnableHolidayDisplay(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_EnableHolidayDisplay,(self,) + _args, _kwargs)
- return val
- def SetHeaderColours(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_SetHeaderColours,(self,) + _args, _kwargs)
- return val
- def GetHeaderColourFg(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetHeaderColourFg,(self,) + _args, _kwargs)
- if val: val = wxColourPtr(val) ; val.thisown = 1
- return val
- def GetHeaderColourBg(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetHeaderColourBg,(self,) + _args, _kwargs)
- if val: val = wxColourPtr(val) ; val.thisown = 1
- return val
- def SetHighlightColours(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_SetHighlightColours,(self,) + _args, _kwargs)
- return val
- def GetHighlightColourFg(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetHighlightColourFg,(self,) + _args, _kwargs)
- if val: val = wxColourPtr(val) ; val.thisown = 1
- return val
- def GetHighlightColourBg(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetHighlightColourBg,(self,) + _args, _kwargs)
- if val: val = wxColourPtr(val) ; val.thisown = 1
- return val
- def SetHolidayColours(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_SetHolidayColours,(self,) + _args, _kwargs)
- return val
- def GetHolidayColourFg(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetHolidayColourFg,(self,) + _args, _kwargs)
- if val: val = wxColourPtr(val) ; val.thisown = 1
- return val
- def GetHolidayColourBg(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetHolidayColourBg,(self,) + _args, _kwargs)
- if val: val = wxColourPtr(val) ; val.thisown = 1
- return val
- def GetAttr(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_GetAttr,(self,) + _args, _kwargs)
- if val: val = wxCalendarDateAttrPtr(val)
- return val
- def SetAttr(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_SetAttr,(self,) + _args, _kwargs)
- return val
- def SetHoliday(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_SetHoliday,(self,) + _args, _kwargs)
- return val
- def ResetAttr(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_ResetAttr,(self,) + _args, _kwargs)
- return val
- def HitTest(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_HitTest,(self,) + _args, _kwargs)
- return val
- def Enable(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_Enable,(self,) + _args, _kwargs)
- return val
- def Show(self, *_args, **_kwargs):
- val = apply(calendarc.wxCalendarCtrl_Show,(self,) + _args, _kwargs)
- return val
- def __repr__(self):
- return "<C wxCalendarCtrl instance at %s>" % (self.this,)
-class wxCalendarCtrl(wxCalendarCtrlPtr):
- def __init__(self,*_args,**_kwargs):
- self.this = apply(calendarc.new_wxCalendarCtrl,_args,_kwargs)
- self.thisown = 1
+# This file was created automatically by SWIG 1.3.29.
+# Don't modify this file, modify the SWIG interface instead.
+
+"""
+Classes for an interactive Calendar control.
+"""
+
+import _calendar
+import new
+new_instancemethod = new.instancemethod
+def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
+ if (name == "thisown"): return self.this.own(value)
+ if (name == "this"):
+ if type(value).__name__ == 'PySwigObject':
+ self.__dict__[name] = value
+ return
+ method = class_type.__swig_setmethods__.get(name,None)
+ if method: return method(self,value)
+ if (not static) or hasattr(self,name):
+ self.__dict__[name] = value
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+
+def _swig_setattr(self,class_type,name,value):
+ return _swig_setattr_nondynamic(self,class_type,name,value,0)
+
+def _swig_getattr(self,class_type,name):
+ if (name == "thisown"): return self.this.own()
+ method = class_type.__swig_getmethods__.get(name,None)
+ if method: return method(self)
+ raise AttributeError,name
+
+def _swig_repr(self):
+ try: strthis = "proxy of " + self.this.__repr__()
+ except: strthis = ""
+ return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
+
+import types
+try:
+ _object = types.ObjectType
+ _newclass = 1
+except AttributeError:
+ class _object : pass
+ _newclass = 0
+del types
+
+
+def _swig_setattr_nondynamic_method(set):
+ def set_attr(self,name,value):
+ if (name == "thisown"): return self.this.own(value)
+ if hasattr(self,name) or (name == "this"):
+ set(self,name,value)
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+ return set_attr
+
+
+import _misc
+import _core
+wx = _core
+__docfilter__ = wx.__DocFilter(globals())
+CAL_SUNDAY_FIRST = _calendar.CAL_SUNDAY_FIRST
+CAL_MONDAY_FIRST = _calendar.CAL_MONDAY_FIRST
+CAL_SHOW_HOLIDAYS = _calendar.CAL_SHOW_HOLIDAYS
+CAL_NO_YEAR_CHANGE = _calendar.CAL_NO_YEAR_CHANGE
+CAL_NO_MONTH_CHANGE = _calendar.CAL_NO_MONTH_CHANGE
+CAL_SEQUENTIAL_MONTH_SELECTION = _calendar.CAL_SEQUENTIAL_MONTH_SELECTION
+CAL_SHOW_SURROUNDING_WEEKS = _calendar.CAL_SHOW_SURROUNDING_WEEKS
+CAL_HITTEST_NOWHERE = _calendar.CAL_HITTEST_NOWHERE
+CAL_HITTEST_HEADER = _calendar.CAL_HITTEST_HEADER
+CAL_HITTEST_DAY = _calendar.CAL_HITTEST_DAY
+CAL_HITTEST_INCMONTH = _calendar.CAL_HITTEST_INCMONTH
+CAL_HITTEST_DECMONTH = _calendar.CAL_HITTEST_DECMONTH
+CAL_HITTEST_SURROUNDING_WEEK = _calendar.CAL_HITTEST_SURROUNDING_WEEK
+CAL_BORDER_NONE = _calendar.CAL_BORDER_NONE
+CAL_BORDER_SQUARE = _calendar.CAL_BORDER_SQUARE
+CAL_BORDER_ROUND = _calendar.CAL_BORDER_ROUND
+class CalendarDateAttr(object):
+ """
+ A set of customization attributes for a calendar date, which can be
+ used to control the look of the Calendar object.
+ """
+ thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+ __repr__ = _swig_repr
+ def __init__(self, *args, **kwargs):
+ """
+ __init__(self, Colour colText=wxNullColour, Colour colBack=wxNullColour,
+ Colour colBorder=wxNullColour, Font font=wxNullFont,
+ int border=CAL_BORDER_NONE) -> CalendarDateAttr
+
+ Create a CalendarDateAttr.
+ """
+ _calendar.CalendarDateAttr_swiginit(self,_calendar.new_CalendarDateAttr(*args, **kwargs))
+ __swig_destroy__ = _calendar.delete_CalendarDateAttr
+ __del__ = lambda self : None;
+ def SetTextColour(*args, **kwargs):
+ """SetTextColour(self, Colour colText)"""
+ return _calendar.CalendarDateAttr_SetTextColour(*args, **kwargs)
+
+ def SetBackgroundColour(*args, **kwargs):
+ """SetBackgroundColour(self, Colour colBack)"""
+ return _calendar.CalendarDateAttr_SetBackgroundColour(*args, **kwargs)
+
+ def SetBorderColour(*args, **kwargs):
+ """SetBorderColour(self, Colour col)"""
+ return _calendar.CalendarDateAttr_SetBorderColour(*args, **kwargs)
+
+ def SetFont(*args, **kwargs):
+ """SetFont(self, Font font)"""
+ return _calendar.CalendarDateAttr_SetFont(*args, **kwargs)
+
+ def SetBorder(*args, **kwargs):
+ """SetBorder(self, int border)"""
+ return _calendar.CalendarDateAttr_SetBorder(*args, **kwargs)
+
+ def SetHoliday(*args, **kwargs):
+ """SetHoliday(self, bool holiday)"""
+ return _calendar.CalendarDateAttr_SetHoliday(*args, **kwargs)
+
+ def HasTextColour(*args, **kwargs):
+ """HasTextColour(self) -> bool"""
+ return _calendar.CalendarDateAttr_HasTextColour(*args, **kwargs)
+
+ def HasBackgroundColour(*args, **kwargs):
+ """HasBackgroundColour(self) -> bool"""
+ return _calendar.CalendarDateAttr_HasBackgroundColour(*args, **kwargs)
+
+ def HasBorderColour(*args, **kwargs):
+ """HasBorderColour(self) -> bool"""
+ return _calendar.CalendarDateAttr_HasBorderColour(*args, **kwargs)
+
+ def HasFont(*args, **kwargs):
+ """HasFont(self) -> bool"""
+ return _calendar.CalendarDateAttr_HasFont(*args, **kwargs)
+
+ def HasBorder(*args, **kwargs):
+ """HasBorder(self) -> bool"""
+ return _calendar.CalendarDateAttr_HasBorder(*args, **kwargs)
+
+ def IsHoliday(*args, **kwargs):
+ """IsHoliday(self) -> bool"""
+ return _calendar.CalendarDateAttr_IsHoliday(*args, **kwargs)
+
+ def GetTextColour(*args, **kwargs):
+ """GetTextColour(self) -> Colour"""
+ return _calendar.CalendarDateAttr_GetTextColour(*args, **kwargs)
+
+ def GetBackgroundColour(*args, **kwargs):
+ """GetBackgroundColour(self) -> Colour"""
+ return _calendar.CalendarDateAttr_GetBackgroundColour(*args, **kwargs)
+
+ def GetBorderColour(*args, **kwargs):
+ """GetBorderColour(self) -> Colour"""
+ return _calendar.CalendarDateAttr_GetBorderColour(*args, **kwargs)
+
+ def GetFont(*args, **kwargs):
+ """GetFont(self) -> Font"""
+ return _calendar.CalendarDateAttr_GetFont(*args, **kwargs)
+
+ def GetBorder(*args, **kwargs):
+ """GetBorder(self) -> int"""
+ return _calendar.CalendarDateAttr_GetBorder(*args, **kwargs)
+
+ BackgroundColour = property(GetBackgroundColour,SetBackgroundColour,doc="See `GetBackgroundColour` and `SetBackgroundColour`")
+ Border = property(GetBorder,SetBorder,doc="See `GetBorder` and `SetBorder`")
+ BorderColour = property(GetBorderColour,SetBorderColour,doc="See `GetBorderColour` and `SetBorderColour`")
+ Font = property(GetFont,SetFont,doc="See `GetFont` and `SetFont`")
+ TextColour = property(GetTextColour,SetTextColour,doc="See `GetTextColour` and `SetTextColour`")
+_calendar.CalendarDateAttr_swigregister(CalendarDateAttr)
+
+class CalendarEvent(_core.DateEvent):
+ """Proxy of C++ CalendarEvent class"""
+ thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+ __repr__ = _swig_repr
+ def __init__(self, *args, **kwargs):
+ """__init__(self, CalendarCtrl cal, EventType type) -> CalendarEvent"""
+ _calendar.CalendarEvent_swiginit(self,_calendar.new_CalendarEvent(*args, **kwargs))
+ def SetWeekDay(*args, **kwargs):
+ """SetWeekDay(self, int wd)"""
+ return _calendar.CalendarEvent_SetWeekDay(*args, **kwargs)
+
+ def GetWeekDay(*args, **kwargs):
+ """GetWeekDay(self) -> int"""
+ return _calendar.CalendarEvent_GetWeekDay(*args, **kwargs)
+
+ def PySetDate(self, date):
+ """takes datetime.datetime or datetime.date object"""
+ self.SetDate(_pydate2wxdate(date))
+
+ def PyGetDate(self):
+ """returns datetime.date object"""
+ return _wxdate2pydate(self.GetDate())
+
+ WeekDay = property(GetWeekDay,SetWeekDay,doc="See `GetWeekDay` and `SetWeekDay`")
+_calendar.CalendarEvent_swigregister(CalendarEvent)
+
+wxEVT_CALENDAR_DOUBLECLICKED = _calendar.wxEVT_CALENDAR_DOUBLECLICKED
+wxEVT_CALENDAR_SEL_CHANGED = _calendar.wxEVT_CALENDAR_SEL_CHANGED
+wxEVT_CALENDAR_DAY_CHANGED = _calendar.wxEVT_CALENDAR_DAY_CHANGED
+wxEVT_CALENDAR_MONTH_CHANGED = _calendar.wxEVT_CALENDAR_MONTH_CHANGED
+wxEVT_CALENDAR_YEAR_CHANGED = _calendar.wxEVT_CALENDAR_YEAR_CHANGED
+wxEVT_CALENDAR_WEEKDAY_CLICKED = _calendar.wxEVT_CALENDAR_WEEKDAY_CLICKED
+EVT_CALENDAR = wx.PyEventBinder( wxEVT_CALENDAR_DOUBLECLICKED, 1)
+EVT_CALENDAR_SEL_CHANGED = wx.PyEventBinder( wxEVT_CALENDAR_SEL_CHANGED, 1)
+EVT_CALENDAR_DAY = wx.PyEventBinder( wxEVT_CALENDAR_DAY_CHANGED, 1)
+EVT_CALENDAR_MONTH = wx.PyEventBinder( wxEVT_CALENDAR_MONTH_CHANGED, 1)
+EVT_CALENDAR_YEAR = wx.PyEventBinder( wxEVT_CALENDAR_YEAR_CHANGED, 1)
+EVT_CALENDAR_WEEKDAY_CLICKED = wx.PyEventBinder( wxEVT_CALENDAR_WEEKDAY_CLICKED, 1)
+
+class CalendarCtrl(_core.Control):
+ """
+ The calendar control allows the user to pick a date interactively.
+
+ The CalendarCtrl displays a window containing several parts: the
+ control to pick the month and the year at the top (either or both of
+ them may be disabled) and a month area below them which shows all the
+ days in the month. The user can move the current selection using the
+ keyboard and select the date (generating EVT_CALENDAR event) by
+ pressing <Return> or double clicking it.
+
+ It has advanced possibilities for the customization of its
+ display. All global settings (such as colours and fonts used) can, of
+ course, be changed. But also, the display style for each day in the
+ month can be set independently using CalendarDateAttr class.
+
+ An item without custom attributes is drawn with the default colours
+ and font and without border, but setting custom attributes with
+ `SetAttr` allows to modify its appearance. Just create a custom
+ 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
+ recognized as one by `wx.DateTime`) by using the SetHoliday method.
+
+ 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
+ EVT_CALENDAR_MONTH event handler.
+ """
+ thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+ __repr__ = _swig_repr
+ def __init__(self, *args, **kwargs):
+ """
+ __init__(self, Window parent, int id=-1, DateTime date=DefaultDateTime,
+ Point pos=DefaultPosition, Size size=DefaultSize,
+ long style=wxCAL_SHOW_HOLIDAYS|wxWANTS_CHARS,
+ String name=CalendarNameStr) -> CalendarCtrl
+
+ Create and show a calendar control.
+ """
+ _calendar.CalendarCtrl_swiginit(self,_calendar.new_CalendarCtrl(*args, **kwargs))