#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();
}
return wxDateTime((unsigned short)wxd_dt->day, (wxDateTime::Month)wxd_dt->month, wxd_dt->year,
(unsigned short)wxd_dt->hour, (unsigned short)wxd_dt->minute, (unsigned short)wxd_dt->second);
}
static wxd_DateTime_t wx_to_wxd_datetime(const wxDateTime& wx_dt) {
wxd_DateTime_t wxd_dt;
wxd_dt.day = wx_dt.GetDay(wxDateTime::Local);
wxd_dt.month = wx_dt.GetMonth(wxDateTime::Local); wxd_dt.year = wx_dt.GetYear(wxDateTime::Local);
wxd_dt.hour = wx_dt.GetHour(wxDateTime::Local);
wxd_dt.minute = wx_dt.GetMinute(wxDateTime::Local);
wxd_dt.second = wx_dt.GetSecond(wxDateTime::Local);
return wxd_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 && date->year != 0) { 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 || date->year == 0) 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 new wxd_DateTime_t{
(short)dt.GetDay(wxDateTime::Local),
(unsigned short)(dt.GetMonth(wxDateTime::Local) + 1), dt.GetYear(wxDateTime::Local),
(short)dt.GetHour(wxDateTime::Local),
(short)dt.GetMinute(wxDateTime::Local),
(short)dt.GetSecond(wxDateTime::Local)
};
}
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 new wxd_DateTime_t{
(short)dt.GetDay(wxDateTime::Local),
(unsigned short)(dt.GetMonth(wxDateTime::Local)), dt.GetYear(wxDateTime::Local),
(short)dt.GetHour(wxDateTime::Local),
(short)dt.GetMinute(wxDateTime::Local),
(short)dt.GetSecond(wxDateTime::Local)
};
}
}