#include <wx/wxprec.h>
#include <wx/wx.h>
#include "wxdragon.h"
#include <wx/calctrl.h>
#include <wx/datetime.h>
static wxDateTime
wxd_to_wx_datetime(const wxd_DateTime_t* wxd_dt)
{
if (!wxd_dt) {
return wxDateTime::Today();
}
const wxDateTime* dt = reinterpret_cast<const wxDateTime*>(wxd_dt);
return *dt;
}
extern "C" {
WXD_EXPORTED wxd_CalendarCtrl_t*
wxd_CalendarCtrl_Create(
wxd_Window_t* parent, wxd_Id id,
const wxd_DateTime_t* date, wxd_Point pos, wxd_Size size, wxd_Style_t style)
{
if (!parent)
return NULL; wxWindow* wx_parent = (wxWindow*)parent;
wxDateTime initialDate;
if (date) {
initialDate = wxd_to_wx_datetime(date);
}
else {
initialDate = wxDateTime::Today(); }
wxCalendarCtrl* ctrl = new wxCalendarCtrl(
wx_parent, id, initialDate, wxPoint(pos.x, pos.y), wxSize(size.width, size.height), style
);
return (wxd_CalendarCtrl_t*)ctrl;
}
WXD_EXPORTED bool
wxd_CalendarCtrl_SetDate(wxd_CalendarCtrl_t* self, const wxd_DateTime_t* date)
{
if (!self || !date)
return false; wxCalendarCtrl* ctrl = (wxCalendarCtrl*)self;
return ctrl->SetDate(wxd_to_wx_datetime(date));
}
WXD_EXPORTED wxd_DateTime_t*
wxd_CalendarCtrl_GetDate(wxd_CalendarCtrl_t* self)
{
if (!self) {
return nullptr;
}
wxCalendarCtrl* ctrl = (wxCalendarCtrl*)self;
const wxDateTime& dt = ctrl->GetDate();
if (!dt.IsValid()) {
return nullptr;
}
return reinterpret_cast<wxd_DateTime_t*>(new (std::nothrow) wxDateTime(dt));
}
WXD_EXPORTED wxd_DateTime_t*
wxd_CalendarEvent_GetDate(wxd_Event_t* event)
{
if (!event)
return nullptr;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
if (!wx_event->IsKindOf(wxCLASSINFO(wxCalendarEvent)))
return nullptr;
wxCalendarEvent* cal_event = static_cast<wxCalendarEvent*>(wx_event);
const wxDateTime& dt = cal_event->GetDate();
if (!dt.IsValid())
return nullptr;
return reinterpret_cast<wxd_DateTime_t*>(new (std::nothrow) wxDateTime(dt));
}
}