#include <wx/wxprec.h>
#include <wx/wx.h>
#include "../../include/wxdragon.h"
#include "../../include/core/wxd_timer.h"
#include <wx/timer.h>
extern "C" {
WXD_EXPORTED wxd_Timer_t*
wxd_Timer_Create(wxd_EvtHandler_t* owner)
{
wxEvtHandler* wx_owner = reinterpret_cast<wxEvtHandler*>(owner);
if (!wx_owner) {
return nullptr;
}
wxTimer* timer = new wxTimer(wx_owner);
return reinterpret_cast<wxd_Timer_t*>(timer);
}
WXD_EXPORTED void
wxd_Timer_Destroy(wxd_Timer_t* self)
{
if (!self)
return;
wxTimer* timer = reinterpret_cast<wxTimer*>(self);
if (timer->IsRunning()) {
timer->Stop();
}
delete timer;
}
WXD_EXPORTED bool
wxd_Timer_Start(wxd_Timer_t* self, int milliseconds, bool oneShot)
{
if (!self)
return false;
wxTimer* timer = reinterpret_cast<wxTimer*>(self);
return timer->Start(milliseconds, oneShot);
}
WXD_EXPORTED void
wxd_Timer_Stop(wxd_Timer_t* self)
{
if (!self)
return;
wxTimer* timer = reinterpret_cast<wxTimer*>(self);
timer->Stop();
}
WXD_EXPORTED bool
wxd_Timer_IsRunning(wxd_Timer_t* self)
{
if (!self)
return false;
wxTimer* timer = reinterpret_cast<wxTimer*>(self);
return timer->IsRunning();
}
WXD_EXPORTED int
wxd_Timer_GetInterval(wxd_Timer_t* self)
{
if (!self)
return 0;
wxTimer* timer = reinterpret_cast<wxTimer*>(self);
return timer->GetInterval();
}
WXD_EXPORTED void
wxd_Timer_SetInterval(wxd_Timer_t* self, int milliseconds)
{
if (!self)
return;
wxTimer* timer = reinterpret_cast<wxTimer*>(self);
bool wasRunning = timer->IsRunning();
bool oneShot = timer->IsOneShot();
if (wasRunning) {
timer->Stop();
timer->Start(milliseconds, oneShot);
}
}
}