#include <wx/wxprec.h>
#include <wx/wx.h>
#include "../include/wxdragon.h"
#include <unordered_map>
#include <vector>
#include <memory>
#include <tuple>
#include <inttypes.h>
#include <wx/event.h>
#include <wx/app.h>
#include <wx/window.h>
#include <wx/tglbtn.h>
#include <wx/treectrl.h>
#include <wx/treelist.h>
#include <wx/slider.h>
#include <wx/spinctrl.h>
#include <wx/spinbutt.h>
#include <wx/notebook.h>
#include <wx/splitter.h>
#include <wx/listctrl.h>
#include <wx/clrpicker.h>
#include <wx/dateevt.h>
#include <wx/treebook.h>
#include <wx/srchctrl.h>
#include <wx/hyperlink.h>
#include <wx/calctrl.h>
#include <wx/filepicker.h>
#include <wx/fontpicker.h>
#include <wx/notifmsg.h>
#include <wx/dnd.h>
#include <wx/menu.h>
#include <wx/taskbar.h>
#include <wx/timectrl.h>
#if wxdUSE_MEDIACTRL
#include <wx/mediactrl.h>
#endif
#if wxdUSE_WEBVIEW
#include <wx/webview.h>
#endif
#include <wx/dataview.h>
#include <wx/grid.h>
#if wxdUSE_STC
#include <wx/stc/stc.h>
#endif
#include "../src/wxd_utils.h"
#if wxdUSE_AUI
#include <wx/aui/framemanager.h>
#endif
#include <wx/dynarray.h>
#include <wx/log.h>
#include <wx/utils.h>
#include <wx/rearrangectrl.h>
#include <wx/collpane.h>
#if wxdUSE_RICHTEXT
#include <wx/richtext/richtextctrl.h>
#endif
static inline std::string
wx_cls(const wxEvtHandler* h)
{
if (!h)
return std::string("<null>");
const wxChar* w = h->GetClassInfo() ? h->GetClassInfo()->GetClassName() : wxS("<null>");
wxString ws(w);
wxCharBuffer buf = ws.ToUTF8();
if (!buf.data())
return std::string("<conv-failed>");
return std::string(buf.data());
}
struct PairHash {
template <class T1, class T2>
std::size_t
operator()(const std::pair<T1, T2>& p) const
{
auto hash1 = std::hash<T1>{}(p.first);
auto hash2 = std::hash<T2>{}(p.second);
return hash1 ^ (hash2 << 1);
}
};
struct RustClosureInfo {
void* closure_ptr = nullptr;
wxd_ClosureCallback rust_trampoline = nullptr; size_t token = 0; };
class WxdEventHandler;
static wxEventType
get_wx_event_type_for_c_enum(WXDEventTypeCEnum c_enum_val);
static bool
IsVetableEventType(wxEventType eventType)
{
if (eventType == wxEVT_CLOSE_WINDOW || eventType == wxEVT_END_SESSION ||
eventType == wxEVT_QUERY_END_SESSION) {
return true;
}
if (eventType == wxEVT_TREE_BEGIN_LABEL_EDIT || eventType == wxEVT_TREE_END_LABEL_EDIT ||
eventType == wxEVT_TREE_SEL_CHANGING || eventType == wxEVT_TREE_ITEM_COLLAPSING ||
eventType == wxEVT_TREE_ITEM_EXPANDING || eventType == wxEVT_TREE_BEGIN_DRAG ||
eventType == wxEVT_TREE_BEGIN_RDRAG || eventType == wxEVT_TREE_END_DRAG) {
return true;
}
if (eventType == wxEVT_LIST_BEGIN_LABEL_EDIT || eventType == wxEVT_LIST_END_LABEL_EDIT ||
eventType == wxEVT_LIST_DELETE_ITEM || eventType == wxEVT_LIST_BEGIN_DRAG ||
eventType == wxEVT_LIST_BEGIN_RDRAG) {
return true;
}
if (eventType == wxEVT_NOTEBOOK_PAGE_CHANGING || eventType == wxEVT_TREEBOOK_PAGE_CHANGING) {
return true;
}
if (eventType == wxEVT_DATAVIEW_ITEM_EDITING_STARTED ||
eventType == wxEVT_DATAVIEW_ITEM_COLLAPSING || eventType == wxEVT_DATAVIEW_ITEM_EXPANDING) {
return true;
}
if (eventType == wxEVT_SPLITTER_SASH_POS_CHANGING) {
return true;
}
#if wxdUSE_AUI
if (eventType == wxEVT_AUI_PANE_CLOSE) {
return true;
}
#endif
return false;
}
static bool
IsEventVetoed(wxEvent& event)
{
wxCloseEvent* closeEvent = wxDynamicCast(&event, wxCloseEvent);
if (closeEvent) {
return closeEvent->GetVeto();
}
wxNotifyEvent* notifyEvent = wxDynamicCast(&event, wxNotifyEvent);
if (notifyEvent) {
return !notifyEvent->IsAllowed(); }
return false; }
class WxdHandlerClientData : public wxClientData {
public:
WxdEventHandler* handler;
WxdHandlerClientData(WxdEventHandler* h) : handler(h)
{
WXD_LOG_TRACEF("WxdHandlerClientData created for handler %p", handler);
}
virtual ~WxdHandlerClientData();
bool
UnbindClosure(size_t token);
};
class WxdEventHandler : public wxEvtHandler {
public:
std::unordered_map<std::pair<wxEventType, wxd_Id>, std::vector<RustClosureInfo>, PairHash>
closureMap;
std::unordered_map<size_t, std::tuple<wxEventType, wxd_Id, void*>> tokenMap;
std::unordered_map<std::pair<wxEventType, wxd_Id>, bool, PairHash> wx_bindings_made;
wxEvtHandler* ownerHandler = nullptr;
WxdEventHandler(wxEvtHandler* owner) : ownerHandler(owner)
{
WXD_LOG_TRACEF("WxdEventHandler 0x%" PRIxPTR " created for wxEvtHandler 0x%p cls=%s",
(uintptr_t)this, ownerHandler, wx_cls(ownerHandler).c_str());
}
~WxdEventHandler();
void
BindClosure(wxEventType wx_event_type, wxd_Id actual_id, void* rust_trampoline_fn,
void* rust_closure_ptr, size_t token);
bool
UnbindClosure(size_t token);
size_t
UnbindAll();
void
DispatchEvent(wxEvent& event);
void
DispatchCloseEvent(wxCloseEvent& event);
};
WxdHandlerClientData::~WxdHandlerClientData()
{
WXD_LOG_TRACEF("WxdHandlerClientData destroying for handler %p", handler);
delete handler;
}
bool
WxdHandlerClientData::UnbindClosure(size_t token)
{
if (handler) {
return handler->UnbindClosure(token);
}
return false;
}
WxdEventHandler::~WxdEventHandler()
{
WXD_LOG_TRACEF("WxdEventHandler 0x%" PRIxPTR " destroying. cls=%s", (uintptr_t)this,
wx_cls(ownerHandler).c_str());
for (auto const& [key, closure_vector] : closureMap) {
for (auto const& info : closure_vector) {
if (info.closure_ptr) {
drop_rust_event_closure_box(info.closure_ptr);
}
}
}
closureMap.clear();
wx_bindings_made.clear();
}
bool
WxdEventHandler::UnbindClosure(size_t token)
{
auto token_it = this->tokenMap.find(token);
if (token_it == this->tokenMap.end()) {
return false; }
wxEventType event_type = std::get<0>(token_it->second);
wxd_Id widget_id = std::get<1>(token_it->second);
void* closure_ptr = std::get<2>(token_it->second);
std::pair<wxEventType, wxd_Id> map_key = { event_type, widget_id };
auto closure_it = this->closureMap.find(map_key);
if (closure_it == this->closureMap.end()) {
this->tokenMap.erase(token_it); return false;
}
auto& closure_vec = closure_it->second;
bool found = false;
for (auto vec_it = closure_vec.begin(); vec_it != closure_vec.end(); ++vec_it) {
if (vec_it->token == token) {
if (vec_it->closure_ptr) {
drop_rust_event_closure_box(vec_it->closure_ptr);
}
closure_vec.erase(vec_it);
found = true;
break;
}
}
if (!found) {
return false;
}
this->tokenMap.erase(token_it);
if (closure_vec.empty()) {
this->closureMap.erase(closure_it);
this->wx_bindings_made.erase(map_key);
if (IsVetableEventType(event_type)) {
wxEventFunction event_func;
if (event_type == wxEVT_CLOSE_WINDOW) {
event_func = wxCloseEventHandler(WxdEventHandler::DispatchCloseEvent);
}
else {
event_func = wxEventHandler(WxdEventHandler::DispatchEvent);
}
this->ownerHandler->Disconnect(event_type, event_func, nullptr, this);
}
else {
this->ownerHandler->Unbind(event_type, &WxdEventHandler::DispatchEvent, this, widget_id,
widget_id);
}
}
return true;
}
size_t
WxdEventHandler::UnbindAll()
{
std::vector<size_t> tokens;
tokens.reserve(this->tokenMap.size());
for (const auto& kv : this->tokenMap) {
tokens.push_back(kv.first);
}
size_t removed = 0;
for (size_t t : tokens) {
if (this->UnbindClosure(t)) {
++removed;
}
}
return removed;
}
void
WxdEventHandler::DispatchEvent(wxEvent& event)
{
wxEventType eventType = event.GetEventType();
wxd_Id id = event.GetId();
#ifdef __WXGTK__
const bool keep_dispatching_after_consume = eventType == wxEVT_TASKBAR_LEFT_DOWN;
#else
const bool keep_dispatching_after_consume = false;
#endif
std::pair<wxEventType, wxd_Id> key_specific_id = { eventType, id };
std::pair<wxEventType, wxd_Id> key_any_id = { eventType, wxID_ANY };
const bool specific_key_is_any = key_specific_id == key_any_id;
bool event_consumed = false;
auto it_specific = closureMap.find(key_specific_id);
if (it_specific != closureMap.end()) {
for (auto const& info : it_specific->second) {
if (info.closure_ptr && info.rust_trampoline) {
event.Skip(true);
info.rust_trampoline(info.closure_ptr, reinterpret_cast<wxd_Event_t*>(&event));
if (!event.GetSkipped()) {
event_consumed = true;
if (!keep_dispatching_after_consume) {
break; }
}
}
}
}
if (!event_consumed && !specific_key_is_any) {
auto it_any = closureMap.find(key_any_id);
if (it_any != closureMap.end()) {
for (auto const& info : it_any->second) {
if (info.closure_ptr && info.rust_trampoline) {
event.Skip(true);
info.rust_trampoline(info.closure_ptr, reinterpret_cast<wxd_Event_t*>(&event));
if (!event.GetSkipped()) {
event_consumed = true;
if (!keep_dispatching_after_consume) {
break; }
}
}
}
}
}
if (event_consumed) {
event.Skip(false);
}
else {
if (eventType == wxEVT_DESTROY) {
event.Skip(false);
}
else if (IsEventVetoed(event)) {
event.Skip(false);
}
else {
event.Skip(true);
}
}
if (eventType == wxEVT_DESTROY) {
(void)this->UnbindAll();
}
}
void
WxdEventHandler::DispatchCloseEvent(wxCloseEvent& event)
{
DispatchEvent(event);
if (event.GetVeto()) {
return;
}
}
WxdEventHandler*
GetOrCreateEventHandler(wxEvtHandler* handler)
{
if (!handler)
return nullptr;
WxdHandlerClientData* clientData =
static_cast<WxdHandlerClientData*>(handler->GetClientObject());
WxdEventHandler* customHandler = nullptr;
if (!clientData) {
customHandler = new WxdEventHandler(handler);
clientData = new WxdHandlerClientData(customHandler);
handler->SetClientObject(clientData);
WXD_LOG_TRACEF(
"GetOrCreateEventHandler: created clientData %p with handler %p for wxEvtHandler %p",
clientData, customHandler, handler);
}
else {
customHandler = clientData->handler;
if (customHandler) {
customHandler->ownerHandler = handler; }
WXD_LOG_TRACEF(
"GetOrCreateEventHandler: reused existing clientData %p with handler %p for wxEvtHandler %p",
clientData, customHandler, handler);
}
return customHandler;
}
class CxxClosureVoid {
public:
typedef void (*RustTrampolineFn)(void* closure_data, void* event_ptr);
RustTrampolineFn fn_ptr; void* param_ptr; bool owned_by_wx;
CxxClosureVoid(void* fn, void* param)
: fn_ptr(reinterpret_cast<RustTrampolineFn>(fn)), param_ptr(param),
owned_by_wx(false) {
}
CxxClosureVoid(const CxxClosureVoid& other)
: fn_ptr(other.fn_ptr), param_ptr(other.param_ptr),
owned_by_wx(
other.owned_by_wx) {
}
~CxxClosureVoid()
{
if (owned_by_wx) {
return; }
if (param_ptr) {
drop_rust_event_closure_box(param_ptr);
param_ptr = nullptr; }
}
void
operator()(wxEvent& event)
{
if (fn_ptr && param_ptr) {
fn_ptr(param_ptr, reinterpret_cast<void*>(&event));
}
else {
WXD_LOG_WARN("CxxClosureVoid operator() called but fn_ptr or param_ptr is null!");
event.Skip();
}
}
};
void
WxdEventHandler::BindClosure(wxEventType wx_event_type, wxd_Id actual_id, void* rust_trampoline_fn,
void* rust_closure_ptr, size_t token)
{
std::pair<wxEventType, wxd_Id> map_key = { wx_event_type, actual_id };
RustClosureInfo new_info = { rust_closure_ptr,
reinterpret_cast<wxd_ClosureCallback>(rust_trampoline_fn), token };
if (!this->wx_bindings_made[map_key]) {
if (IsVetableEventType(wx_event_type)) {
wxEventFunction event_func;
if (wx_event_type == wxEVT_CLOSE_WINDOW) {
event_func = wxCloseEventHandler(WxdEventHandler::DispatchCloseEvent);
}
else {
event_func = wxEventHandler(WxdEventHandler::DispatchEvent);
}
this->ownerHandler->Connect(wx_event_type, event_func, nullptr, this);
}
else {
this->ownerHandler->Bind(wx_event_type, &WxdEventHandler::DispatchEvent, this,
actual_id, actual_id);
}
this->wx_bindings_made[map_key] = true;
}
this->closureMap[map_key].push_back(new_info);
this->tokenMap[token] = std::make_tuple(wx_event_type, actual_id, rust_closure_ptr);
}
extern "C" void
wxd_EvtHandler_Bind(wxd_EvtHandler_t* handler, WXDEventTypeCEnum eventTypeC,
void* rust_trampoline_fn, void* rust_closure_ptr, size_t token)
{
wxEvtHandler* wx_handler = reinterpret_cast<wxEvtHandler*>(handler);
if (!wx_handler) {
WXD_LOG_WARN("wxd_EvtHandler_Bind: null handler");
if (rust_closure_ptr) {
drop_rust_event_closure_box(rust_closure_ptr);
}
return;
}
if (!rust_trampoline_fn || !rust_closure_ptr) {
WXD_LOG_WARNF("wxd_EvtHandler_Bind: null trampoline (%p) or closure (%p)",
rust_trampoline_fn, rust_closure_ptr);
if (rust_closure_ptr) {
drop_rust_event_closure_box(rust_closure_ptr);
}
return;
}
WxdEventHandler* customHandler = GetOrCreateEventHandler(wx_handler);
if (!customHandler) {
WXD_LOG_WARN("wxd_EvtHandler_Bind: Failed to create custom handler");
if (rust_closure_ptr) {
drop_rust_event_closure_box(rust_closure_ptr);
}
return;
}
wxEventType wx_event_type = get_wx_event_type_for_c_enum(eventTypeC);
if (wx_event_type == wxEVT_NULL) {
WXD_LOG_WARNF("wxd_EvtHandler_Bind: unsupported event type %d", (int)eventTypeC);
if (rust_closure_ptr) {
drop_rust_event_closure_box(rust_closure_ptr);
}
return;
}
customHandler->BindClosure(wx_event_type, wxID_ANY, rust_trampoline_fn, rust_closure_ptr,
token);
}
extern "C" void
wxd_EvtHandler_BindWithId(wxd_EvtHandler_t* handler, WXDEventTypeCEnum eventTypeC, int id,
void* rust_trampoline_fn, void* rust_closure_ptr, size_t token)
{
wxEvtHandler* wx_handler = reinterpret_cast<wxEvtHandler*>(handler);
if (!wx_handler) {
WXD_LOG_WARN("wxd_EvtHandler_BindWithId: null handler");
if (rust_closure_ptr) {
drop_rust_event_closure_box(rust_closure_ptr);
}
return;
}
if (!rust_trampoline_fn || !rust_closure_ptr) {
WXD_LOG_WARNF("wxd_EvtHandler_BindWithId: null trampoline (%p) or closure (%p)",
rust_trampoline_fn, rust_closure_ptr);
if (rust_closure_ptr) {
drop_rust_event_closure_box(rust_closure_ptr);
}
return;
}
WxdEventHandler* customHandler = GetOrCreateEventHandler(wx_handler);
if (!customHandler) {
WXD_LOG_WARN("wxd_EvtHandler_BindWithId: Failed to create custom handler");
if (rust_closure_ptr) {
drop_rust_event_closure_box(rust_closure_ptr);
}
return;
}
wxEventType wx_event_type = get_wx_event_type_for_c_enum(eventTypeC);
if (wx_event_type == wxEVT_NULL) {
WXD_LOG_WARNF("wxd_EvtHandler_BindWithId: unsupported event type %d", (int)eventTypeC);
if (rust_closure_ptr) {
drop_rust_event_closure_box(rust_closure_ptr);
}
return;
}
customHandler->BindClosure(wx_event_type, id, rust_trampoline_fn, rust_closure_ptr, token);
}
extern "C" bool
wxd_EvtHandler_Unbind(wxd_EvtHandler_t* handler, size_t token)
{
wxEvtHandler* wx_handler = reinterpret_cast<wxEvtHandler*>(handler);
if (!wx_handler) {
return false;
}
WxdHandlerClientData* clientData =
static_cast<WxdHandlerClientData*>(wx_handler->GetClientObject());
if (!clientData || !clientData->handler) {
return false; }
return clientData->UnbindClosure(token);
}
extern "C" size_t
wxd_EvtHandler_UnbindAll(wxd_EvtHandler_t* handler)
{
wxEvtHandler* wx_handler = reinterpret_cast<wxEvtHandler*>(handler);
if (!wx_handler) {
return 0;
}
WxdHandlerClientData* clientData =
static_cast<WxdHandlerClientData*>(wx_handler->GetClientObject());
if (!clientData || !clientData->handler) {
return 0; }
return clientData->handler->UnbindAll();
}
wxd_Id
wxd_Event_GetId(wxd_Event_t* event)
{
if (!event)
return wxID_ANY;
return ((wxEvent*)event)->GetId();
}
wxd_Window_t*
wxd_Event_GetEventObject(wxd_Event_t* event)
{
if (!event)
return nullptr;
wxObject* obj = ((wxEvent*)event)->GetEventObject();
wxWindow* win = wxDynamicCast(obj, wxWindow);
return reinterpret_cast<wxd_Window_t*>(win);
}
extern "C" void
wxd_Event_Skip(wxd_Event_t* event, bool skip)
{
if (!event)
return;
((wxEvent*)event)->Skip(skip);
}
WXD_EXPORTED int
wxd_CommandEvent_GetString(const wxd_Event_t* event, char* buffer, size_t buffer_len)
{
if (!event)
return -1;
wxCommandEvent* cmdEvent = wxDynamicCast((wxEvent*)event, wxCommandEvent);
if (!cmdEvent)
return -1; wxString str = cmdEvent->GetString();
return (int)wxd_cpp_utils::copy_wxstring_to_buffer(str, buffer, buffer_len);
}
WXD_EXPORTED bool
wxd_CommandEvent_IsChecked(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* baseEvent = static_cast<wxEvent*>(static_cast<void*>(event)); wxCommandEvent* cmdEvent = dynamic_cast<wxCommandEvent*>(baseEvent);
if (!cmdEvent)
return false;
return cmdEvent->IsChecked();
}
WXD_EXPORTED wxd_Point
wxd_MouseEvent_GetPosition(wxd_Event_t* event)
{
wxd_Point defaultPos = { -1, -1 };
if (!event)
return defaultPos;
wxEvent* baseEvent = static_cast<wxEvent*>(static_cast<void*>(event)); wxMouseEvent* mouseEvent = dynamic_cast<wxMouseEvent*>(baseEvent);
if (!mouseEvent)
return defaultPos;
wxPoint wxPos = mouseEvent->GetPosition();
wxd_Point pos = { wxPos.x, wxPos.y };
return pos;
}
WXD_EXPORTED int
wxd_KeyEvent_GetKeyCode(wxd_Event_t* event)
{
if (!event)
return 0;
wxEvent* baseEvent = static_cast<wxEvent*>(static_cast<void*>(event)); wxKeyEvent* keyEvent = dynamic_cast<wxKeyEvent*>(baseEvent);
if (!keyEvent)
return 0;
return keyEvent->GetKeyCode();
}
WXD_EXPORTED int
wxd_KeyEvent_GetUnicodeKey(wxd_Event_t* event)
{
if (!event)
return 0;
wxEvent* baseEvent = static_cast<wxEvent*>(static_cast<void*>(event)); wxKeyEvent* keyEvent = dynamic_cast<wxKeyEvent*>(baseEvent);
if (!keyEvent)
return 0;
return keyEvent->GetUnicodeKey();
}
WXD_EXPORTED int
wxd_CommandEvent_GetInt(wxd_Event_t* event)
{
if (!event)
return 0;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxCommandEvent* command_event = wxDynamicCast(wx_event, wxCommandEvent);
if (!command_event)
return 0;
return command_event->GetInt();
}
WXD_EXPORTED int
wxd_ScrollEvent_GetPosition(wxd_Event_t* event)
{
if (!event)
return -1;
wxScrollEvent* scrollEvent = wxDynamicCast((wxEvent*)event, wxScrollEvent);
if (!scrollEvent) {
wxScrollWinEvent* scrollWinEvent = wxDynamicCast((wxEvent*)event, wxScrollWinEvent);
if (!scrollWinEvent)
return -1;
return scrollWinEvent->GetPosition();
}
return scrollEvent->GetPosition();
}
WXD_EXPORTED int
wxd_ScrollEvent_GetOrientation(wxd_Event_t* event)
{
if (!event)
return -1;
wxScrollEvent* scrollEvent = wxDynamicCast((wxEvent*)event, wxScrollEvent);
if (!scrollEvent) {
wxScrollWinEvent* scrollWinEvent = wxDynamicCast((wxEvent*)event, wxScrollWinEvent);
if (!scrollWinEvent)
return -1;
return scrollWinEvent->GetOrientation();
}
return scrollEvent->GetOrientation();
}
static wxEventType
get_wx_event_type_for_c_enum(WXDEventTypeCEnum c_enum_val);
static WXDEventTypeCEnum
get_c_enum_for_wx_event_type(wxEventType wx_event_type)
{
if (wx_event_type == wxEVT_CONTEXT_MENU) {
return WXD_EVENT_TYPE_CONTEXT_MENU;
}
if (wx_event_type == wxEVT_MENU_OPEN) {
return WXD_EVENT_TYPE_MENU_OPEN;
}
if (wx_event_type == wxEVT_MENU_CLOSE) {
return WXD_EVENT_TYPE_MENU_CLOSE;
}
if (wx_event_type == wxEVT_MENU_HIGHLIGHT) {
return WXD_EVENT_TYPE_MENU_HIGHLIGHT;
}
if (wx_event_type == wxEVT_MENU) {
return WXD_EVENT_TYPE_MENU;
}
for (int i = WXD_EVENT_TYPE_NULL; i < WXD_EVENT_TYPE_MAX; i++) {
WXDEventTypeCEnum c_enum = static_cast<WXDEventTypeCEnum>(i);
wxEventType wx_type = get_wx_event_type_for_c_enum(c_enum);
if (wx_type == wx_event_type) {
return c_enum;
}
}
return WXD_EVENT_TYPE_NULL;
}
WXDEventTypeCEnum
wxd_Event_GetEventType(wxd_Event_t* event)
{
if (!event) {
return WXD_EVENT_TYPE_NULL;
}
wxEvent* wx_event = (wxEvent*)event;
wxEventType eventType = wx_event->GetEventType();
wxContextMenuEvent* ctx_event = wxDynamicCast(wx_event, wxContextMenuEvent);
if (ctx_event) {
return WXD_EVENT_TYPE_CONTEXT_MENU;
}
wxMenuEvent* menu_event = wxDynamicCast(wx_event, wxMenuEvent);
if (menu_event) {
if (eventType == wxEVT_MENU_OPEN)
return WXD_EVENT_TYPE_MENU_OPEN;
if (eventType == wxEVT_MENU_CLOSE)
return WXD_EVENT_TYPE_MENU_CLOSE;
if (eventType == wxEVT_MENU_HIGHLIGHT)
return WXD_EVENT_TYPE_MENU_HIGHLIGHT;
if (eventType == wxEVT_MENU)
return WXD_EVENT_TYPE_MENU;
}
WXDEventTypeCEnum c_enum_val = get_c_enum_for_wx_event_type(eventType);
return c_enum_val;
}
static wxEventType
get_wx_event_type_for_c_enum(WXDEventTypeCEnum c_enum_val)
{
switch (c_enum_val) {
case WXD_EVENT_TYPE_COMMAND_BUTTON_CLICKED:
return wxEVT_BUTTON;
case WXD_EVENT_TYPE_CLOSE_WINDOW:
return wxEVT_CLOSE_WINDOW;
case WXD_EVENT_TYPE_CHECKBOX:
return wxEVT_CHECKBOX;
case WXD_EVENT_TYPE_TEXT:
return wxEVT_TEXT;
case WXD_EVENT_TYPE_TEXT_ENTER:
return wxEVT_TEXT_ENTER;
case WXD_EVENT_TYPE_SIZE:
return wxEVT_SIZE;
case WXD_EVENT_TYPE_MENU:
return wxEVT_MENU;
case WXD_EVENT_TYPE_LEFT_DOWN:
return wxEVT_LEFT_DOWN;
case WXD_EVENT_TYPE_LEFT_UP:
return wxEVT_LEFT_UP;
case WXD_EVENT_TYPE_RIGHT_DOWN:
return wxEVT_RIGHT_DOWN;
case WXD_EVENT_TYPE_RIGHT_UP:
return wxEVT_RIGHT_UP;
case WXD_EVENT_TYPE_MIDDLE_DOWN:
return wxEVT_MIDDLE_DOWN;
case WXD_EVENT_TYPE_MIDDLE_UP:
return wxEVT_MIDDLE_UP;
case WXD_EVENT_TYPE_MOTION:
return wxEVT_MOTION;
case WXD_EVENT_TYPE_MOUSEWHEEL:
return wxEVT_MOUSEWHEEL;
case WXD_EVENT_TYPE_TASKBAR_CLICK:
#ifdef wxEVT_TASKBAR_CLICK
return wxEVT_TASKBAR_CLICK;
#else
return wxEVT_NULL;
#endif
case WXD_EVENT_TYPE_ENTER_WINDOW:
return wxEVT_ENTER_WINDOW;
case WXD_EVENT_TYPE_LEAVE_WINDOW:
return wxEVT_LEAVE_WINDOW;
case WXD_EVENT_TYPE_KEY_DOWN:
return wxEVT_KEY_DOWN;
case WXD_EVENT_TYPE_KEY_UP:
return wxEVT_KEY_UP;
case WXD_EVENT_TYPE_CHAR:
return wxEVT_CHAR;
case WXD_EVENT_TYPE_COMMAND_RADIOBUTTON_SELECTED:
return wxEVT_RADIOBUTTON;
case WXD_EVENT_TYPE_COMMAND_RADIOBOX_SELECTED:
return wxEVT_RADIOBOX;
case WXD_EVENT_TYPE_COMMAND_LISTBOX_SELECTED:
return wxEVT_LISTBOX;
case WXD_EVENT_TYPE_COMMAND_CHOICE_SELECTED:
return wxEVT_CHOICE;
case WXD_EVENT_TYPE_COMMAND_COMBOBOX_SELECTED:
return wxEVT_COMBOBOX;
case WXD_EVENT_TYPE_COMMAND_CHECKLISTBOX_SELECTED:
return wxEVT_CHECKLISTBOX;
case WXD_EVENT_TYPE_COMMAND_TOGGLEBUTTON_CLICKED:
return wxEVT_TOGGLEBUTTON;
case WXD_EVENT_TYPE_TREE_BEGIN_LABEL_EDIT:
return wxEVT_TREE_BEGIN_LABEL_EDIT;
case WXD_EVENT_TYPE_TREE_END_LABEL_EDIT:
return wxEVT_TREE_END_LABEL_EDIT;
case WXD_EVENT_TYPE_TREE_SEL_CHANGED:
return wxEVT_TREE_SEL_CHANGED;
case WXD_EVENT_TYPE_TREE_ITEM_ACTIVATED:
return wxEVT_TREE_ITEM_ACTIVATED;
case WXD_EVENT_TYPE_TREELIST_SELECTION_CHANGED:
return wxEVT_TREELIST_SELECTION_CHANGED;
case WXD_EVENT_TYPE_TREELIST_ITEM_CHECKED:
return wxEVT_TREELIST_ITEM_CHECKED;
case WXD_EVENT_TYPE_TREELIST_ITEM_ACTIVATED:
return wxEVT_TREELIST_ITEM_ACTIVATED;
case WXD_EVENT_TYPE_TREELIST_COLUMN_SORTED:
return wxEVT_TREELIST_COLUMN_SORTED;
case WXD_EVENT_TYPE_TREELIST_ITEM_EXPANDING:
return wxEVT_TREELIST_ITEM_EXPANDING;
case WXD_EVENT_TYPE_TREELIST_ITEM_EXPANDED:
return wxEVT_TREELIST_ITEM_EXPANDED;
case WXD_EVENT_TYPE_SLIDER:
return wxEVT_SLIDER;
case WXD_EVENT_TYPE_SPINCTRL:
return wxEVT_SPINCTRL;
case WXD_EVENT_TYPE_SPIN_UP:
return wxEVT_SPIN_UP;
case WXD_EVENT_TYPE_SPIN_DOWN:
return wxEVT_SPIN_DOWN;
case WXD_EVENT_TYPE_SPIN:
return wxEVT_SPIN;
case WXD_EVENT_TYPE_SPINCTRLDOUBLE:
return wxEVT_SPINCTRLDOUBLE;
case WXD_EVENT_TYPE_NOTEBOOK_PAGE_CHANGED:
return wxEVT_NOTEBOOK_PAGE_CHANGED;
case WXD_EVENT_TYPE_SPLITTER_SASH_POS_CHANGED:
return wxEVT_SPLITTER_SASH_POS_CHANGED;
case WXD_EVENT_TYPE_SPLITTER_SASH_POS_CHANGING:
return wxEVT_SPLITTER_SASH_POS_CHANGING;
case WXD_EVENT_TYPE_SPLITTER_DOUBLECLICKED:
return wxEVT_SPLITTER_DOUBLECLICKED;
case WXD_EVENT_TYPE_SPLITTER_UNSPLIT:
return wxEVT_SPLITTER_UNSPLIT;
case WXD_EVENT_TYPE_LIST_ITEM_SELECTED:
return wxEVT_LIST_ITEM_SELECTED;
case WXD_EVENT_TYPE_LIST_ITEM_ACTIVATED:
return wxEVT_LIST_ITEM_ACTIVATED;
case WXD_EVENT_TYPE_LIST_COL_CLICK:
return wxEVT_LIST_COL_CLICK;
case WXD_EVENT_TYPE_LIST_BEGIN_LABEL_EDIT:
return wxEVT_LIST_BEGIN_LABEL_EDIT;
case WXD_EVENT_TYPE_LIST_END_LABEL_EDIT:
return wxEVT_LIST_END_LABEL_EDIT;
case WXD_EVENT_TYPE_COMMAND_LISTBOX_DOUBLECLICKED:
return wxEVT_LISTBOX_DCLICK;
case WXD_EVENT_TYPE_COLOURPICKER_CHANGED:
return wxEVT_COLOURPICKER_CHANGED;
case WXD_EVENT_TYPE_DATE_CHANGED:
return wxEVT_DATE_CHANGED;
case WXD_EVENT_TYPE_TIME_CHANGED:
return wxEVT_TIME_CHANGED;
case WXD_EVENT_TYPE_FILEPICKER_CHANGED:
return wxEVT_FILEPICKER_CHANGED;
case WXD_EVENT_TYPE_DIRPICKER_CHANGED:
return wxEVT_DIRPICKER_CHANGED;
case WXD_EVENT_TYPE_FONTPICKER_CHANGED:
return wxEVT_FONTPICKER_CHANGED;
case WXD_EVENT_TYPE_TREEBOOK_PAGE_CHANGED:
return wxEVT_TREEBOOK_PAGE_CHANGED;
case WXD_EVENT_TYPE_TREEBOOK_PAGE_CHANGING:
return wxEVT_TREEBOOK_PAGE_CHANGING;
case WXD_EVENT_TYPE_TREEBOOK_NODE_EXPANDED:
return wxEVT_TREEBOOK_NODE_EXPANDED;
case WXD_EVENT_TYPE_TREEBOOK_NODE_COLLAPSED:
return wxEVT_TREEBOOK_NODE_COLLAPSED;
case WXD_EVENT_TYPE_COMMAND_SEARCHCTRL_SEARCH_BTN:
return wxEVT_SEARCHCTRL_SEARCH_BTN;
case WXD_EVENT_TYPE_COMMAND_SEARCHCTRL_CANCEL_BTN:
return wxEVT_SEARCHCTRL_CANCEL_BTN;
case WXD_EVENT_TYPE_COMMAND_HYPERLINK:
return wxEVT_HYPERLINK;
case WXD_EVENT_TYPE_CALENDAR_SEL_CHANGED:
return wxEVT_CALENDAR_SEL_CHANGED;
case WXD_EVENT_TYPE_CALENDAR_DOUBLECLICKED:
return wxEVT_CALENDAR_DOUBLECLICKED;
case WXD_EVENT_TYPE_CALENDAR_MONTH_CHANGED:
return wxEVT_CALENDAR_MONTH_CHANGED;
case WXD_EVENT_TYPE_CALENDAR_YEAR_CHANGED:
return wxEVT_CALENDAR_YEAR_CHANGED;
case WXD_EVENT_TYPE_CALENDAR_WEEKDAY_CLICKED:
return wxEVT_CALENDAR_WEEKDAY_CLICKED;
case WXD_EVENT_TYPE_SCROLL_TOP:
return wxEVT_SCROLL_TOP;
case WXD_EVENT_TYPE_SCROLL_BOTTOM:
return wxEVT_SCROLL_BOTTOM;
case WXD_EVENT_TYPE_SCROLL_LINEUP:
return wxEVT_SCROLL_LINEUP;
case WXD_EVENT_TYPE_SCROLL_LINEDOWN:
return wxEVT_SCROLL_LINEDOWN;
case WXD_EVENT_TYPE_SCROLL_PAGEUP:
return wxEVT_SCROLL_PAGEUP;
case WXD_EVENT_TYPE_SCROLL_PAGEDOWN:
return wxEVT_SCROLL_PAGEDOWN;
case WXD_EVENT_TYPE_SCROLL_THUMBTRACK:
return wxEVT_SCROLL_THUMBTRACK;
case WXD_EVENT_TYPE_SCROLL_THUMBRELEASE:
return wxEVT_SCROLL_THUMBRELEASE;
case WXD_EVENT_TYPE_SCROLL_CHANGED:
return wxEVT_SCROLL_CHANGED;
case WXD_EVENT_TYPE_DESTROY:
return wxEVT_DESTROY;
case WXD_EVENT_TYPE_MOVE:
return wxEVT_MOVE;
case WXD_EVENT_TYPE_ERASE:
return wxEVT_ERASE_BACKGROUND;
case WXD_EVENT_TYPE_SET_FOCUS:
return wxEVT_SET_FOCUS;
case WXD_EVENT_TYPE_KILL_FOCUS:
return wxEVT_KILL_FOCUS;
case WXD_EVENT_TYPE_ACTIVATE:
return wxEVT_ACTIVATE;
case WXD_EVENT_TYPE_PAINT:
return wxEVT_PAINT;
case WXD_EVENT_TYPE_NOTIFICATION_MESSAGE_CLICK:
return wxEVT_NOTIFICATION_MESSAGE_CLICK;
case WXD_EVENT_TYPE_NOTIFICATION_MESSAGE_DISMISSED:
return wxEVT_NOTIFICATION_MESSAGE_DISMISSED;
case WXD_EVENT_TYPE_NOTIFICATION_MESSAGE_ACTION:
return wxEVT_NOTIFICATION_MESSAGE_ACTION;
case WXD_EVENT_TYPE_IDLE:
return wxEVT_IDLE;
case WXD_EVENT_TYPE_DROP_FILES:
return wxEVT_DROP_FILES;
case WXD_EVENT_TYPE_LIST_BEGIN_DRAG:
return wxEVT_LIST_BEGIN_DRAG;
case WXD_EVENT_TYPE_LIST_BEGIN_RDRAG:
return wxEVT_LIST_BEGIN_RDRAG;
case WXD_EVENT_TYPE_LIST_DELETE_ITEM:
return wxEVT_LIST_DELETE_ITEM;
case WXD_EVENT_TYPE_LIST_DELETE_ALL_ITEMS:
return wxEVT_LIST_DELETE_ALL_ITEMS;
case WXD_EVENT_TYPE_LIST_ITEM_DESELECTED:
return wxEVT_LIST_ITEM_DESELECTED;
case WXD_EVENT_TYPE_LIST_ITEM_FOCUSED:
return wxEVT_LIST_ITEM_FOCUSED;
case WXD_EVENT_TYPE_LIST_ITEM_MIDDLE_CLICK:
return wxEVT_LIST_ITEM_MIDDLE_CLICK;
case WXD_EVENT_TYPE_LIST_ITEM_RIGHT_CLICK:
return wxEVT_LIST_ITEM_RIGHT_CLICK;
case WXD_EVENT_TYPE_LIST_KEY_DOWN:
return wxEVT_LIST_KEY_DOWN;
case WXD_EVENT_TYPE_LIST_INSERT_ITEM:
return wxEVT_LIST_INSERT_ITEM;
case WXD_EVENT_TYPE_LIST_COL_RIGHT_CLICK:
return wxEVT_LIST_COL_RIGHT_CLICK;
case WXD_EVENT_TYPE_LIST_COL_BEGIN_DRAG:
return wxEVT_LIST_COL_BEGIN_DRAG;
#if wxdUSE_MEDIACTRL
case WXD_EVENT_TYPE_MEDIA_LOADED:
return wxEVT_MEDIA_LOADED;
case WXD_EVENT_TYPE_MEDIA_STOP:
return wxEVT_MEDIA_STOP;
case WXD_EVENT_TYPE_MEDIA_FINISHED:
return wxEVT_MEDIA_FINISHED;
case WXD_EVENT_TYPE_MEDIA_STATECHANGED:
return wxEVT_MEDIA_STATECHANGED;
case WXD_EVENT_TYPE_MEDIA_PLAY:
return wxEVT_MEDIA_PLAY;
case WXD_EVENT_TYPE_MEDIA_PAUSE:
return wxEVT_MEDIA_PAUSE;
#endif
case WXD_EVENT_TYPE_DATAVIEW_SELECTION_CHANGED:
return wxEVT_DATAVIEW_SELECTION_CHANGED;
case WXD_EVENT_TYPE_DATAVIEW_ITEM_ACTIVATED:
return wxEVT_DATAVIEW_ITEM_ACTIVATED;
case WXD_EVENT_TYPE_DATAVIEW_ITEM_EDITING_STARTED:
return wxEVT_DATAVIEW_ITEM_EDITING_STARTED;
case WXD_EVENT_TYPE_DATAVIEW_ITEM_EDITING_DONE:
return wxEVT_DATAVIEW_ITEM_EDITING_DONE;
case WXD_EVENT_TYPE_DATAVIEW_ITEM_COLLAPSING:
return wxEVT_DATAVIEW_ITEM_COLLAPSING;
case WXD_EVENT_TYPE_DATAVIEW_ITEM_COLLAPSED:
return wxEVT_DATAVIEW_ITEM_COLLAPSED;
case WXD_EVENT_TYPE_DATAVIEW_ITEM_EXPANDING:
return wxEVT_DATAVIEW_ITEM_EXPANDING;
case WXD_EVENT_TYPE_DATAVIEW_ITEM_EXPANDED:
return wxEVT_DATAVIEW_ITEM_EXPANDED;
case WXD_EVENT_TYPE_DATAVIEW_COLUMN_HEADER_CLICK:
return wxEVT_DATAVIEW_COLUMN_HEADER_CLICK;
case WXD_EVENT_TYPE_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK:
return wxEVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK;
case WXD_EVENT_TYPE_DATAVIEW_COLUMN_SORTED:
return wxEVT_DATAVIEW_COLUMN_SORTED;
case WXD_EVENT_TYPE_DATAVIEW_COLUMN_REORDERED:
return wxEVT_DATAVIEW_COLUMN_REORDERED;
case WXD_EVENT_TYPE_DATAVIEW_ITEM_CONTEXT_MENU:
return wxEVT_DATAVIEW_ITEM_CONTEXT_MENU;
case WXD_EVENT_TYPE_TREE_SEL_CHANGING:
return wxEVT_TREE_SEL_CHANGING;
case WXD_EVENT_TYPE_TREE_ITEM_COLLAPSING:
return wxEVT_TREE_ITEM_COLLAPSING;
case WXD_EVENT_TYPE_TREE_ITEM_COLLAPSED:
return wxEVT_TREE_ITEM_COLLAPSED;
case WXD_EVENT_TYPE_TREE_ITEM_EXPANDING:
return wxEVT_TREE_ITEM_EXPANDING;
case WXD_EVENT_TYPE_TREE_ITEM_EXPANDED:
return wxEVT_TREE_ITEM_EXPANDED;
case WXD_EVENT_TYPE_TREE_ITEM_RIGHT_CLICK:
return wxEVT_TREE_ITEM_RIGHT_CLICK;
case WXD_EVENT_TYPE_TREE_ITEM_MIDDLE_CLICK:
return wxEVT_TREE_ITEM_MIDDLE_CLICK;
case WXD_EVENT_TYPE_TREE_KEY_DOWN:
return wxEVT_TREE_KEY_DOWN;
case WXD_EVENT_TYPE_TREE_DELETE_ITEM:
return wxEVT_TREE_DELETE_ITEM;
case WXD_EVENT_TYPE_TREE_ITEM_MENU:
return wxEVT_TREE_ITEM_MENU;
case WXD_EVENT_TYPE_TREE_BEGIN_DRAG:
return wxEVT_TREE_BEGIN_DRAG;
case WXD_EVENT_TYPE_TREE_BEGIN_RDRAG:
return wxEVT_TREE_BEGIN_RDRAG;
case WXD_EVENT_TYPE_TREE_END_DRAG:
return wxEVT_TREE_END_DRAG;
case WXD_EVENT_TYPE_TREE_STATE_IMAGE_CLICK:
return wxEVT_TREE_STATE_IMAGE_CLICK;
case WXD_EVENT_TYPE_TREE_ITEM_GETTOOLTIP:
return wxEVT_TREE_ITEM_GETTOOLTIP;
case WXD_EVENT_TYPE_TOOL_ENTER:
return wxEVT_TOOL_ENTER;
case WXD_EVENT_TYPE_TIMER:
return wxEVT_TIMER;
case WXD_EVENT_TYPE_ANY:
return wxEVT_ANY;
#if wxdUSE_AUI
case WXD_EVENT_TYPE_AUI_PANE_BUTTON:
return wxEVT_AUI_PANE_BUTTON;
case WXD_EVENT_TYPE_AUI_PANE_CLOSE:
return wxEVT_AUI_PANE_CLOSE;
case WXD_EVENT_TYPE_AUI_PANE_MAXIMIZE:
return wxEVT_AUI_PANE_MAXIMIZE;
case WXD_EVENT_TYPE_AUI_PANE_RESTORE:
return wxEVT_AUI_PANE_RESTORE;
case WXD_EVENT_TYPE_AUI_PANE_ACTIVATED:
return wxEVT_AUI_PANE_ACTIVATED;
case WXD_EVENT_TYPE_AUI_RENDER:
return wxEVT_AUI_RENDER;
#endif
case WXD_EVENT_TYPE_COMMAND_REARRANGE_LIST:
return wxEVT_COMMAND_LISTBOX_SELECTED;
case WXD_EVENT_TYPE_COLLAPSIBLEPANE_CHANGED:
return wxEVT_COLLAPSIBLEPANE_CHANGED;
#if wxdUSE_STC
case WXD_EVENT_TYPE_STC_CHANGE:
return wxEVT_STC_CHANGE;
case WXD_EVENT_TYPE_STC_STYLENEEDED:
return wxEVT_STC_STYLENEEDED;
case WXD_EVENT_TYPE_STC_CHARADDED:
return wxEVT_STC_CHARADDED;
case WXD_EVENT_TYPE_STC_SAVEPOINTREACHED:
return wxEVT_STC_SAVEPOINTREACHED;
case WXD_EVENT_TYPE_STC_SAVEPOINTLEFT:
return wxEVT_STC_SAVEPOINTLEFT;
case WXD_EVENT_TYPE_STC_ROMODIFYATTEMPT:
return wxEVT_STC_ROMODIFYATTEMPT;
case WXD_EVENT_TYPE_STC_DOUBLECLICK:
return wxEVT_STC_DOUBLECLICK;
case WXD_EVENT_TYPE_STC_UPDATEUI:
return wxEVT_STC_UPDATEUI;
case WXD_EVENT_TYPE_STC_MODIFIED:
return wxEVT_STC_MODIFIED;
case WXD_EVENT_TYPE_STC_MACRORECORD:
return wxEVT_STC_MACRORECORD;
case WXD_EVENT_TYPE_STC_MARGINCLICK:
return wxEVT_STC_MARGINCLICK;
case WXD_EVENT_TYPE_STC_NEEDSHOWN:
return wxEVT_STC_NEEDSHOWN;
case WXD_EVENT_TYPE_STC_PAINTED:
return wxEVT_STC_PAINTED;
case WXD_EVENT_TYPE_STC_USERLISTSELECTION:
return wxEVT_STC_USERLISTSELECTION;
case WXD_EVENT_TYPE_STC_DWELLSTART:
return wxEVT_STC_DWELLSTART;
case WXD_EVENT_TYPE_STC_DWELLEND:
return wxEVT_STC_DWELLEND;
case WXD_EVENT_TYPE_STC_START_DRAG:
return wxEVT_STC_START_DRAG;
case WXD_EVENT_TYPE_STC_DRAG_OVER:
return wxEVT_STC_DRAG_OVER;
case WXD_EVENT_TYPE_STC_DO_DROP:
return wxEVT_STC_DO_DROP;
case WXD_EVENT_TYPE_STC_ZOOM:
return wxEVT_STC_ZOOM;
case WXD_EVENT_TYPE_STC_HOTSPOT_CLICK:
return wxEVT_STC_HOTSPOT_CLICK;
case WXD_EVENT_TYPE_STC_HOTSPOT_DCLICK:
return wxEVT_STC_HOTSPOT_DCLICK;
case WXD_EVENT_TYPE_STC_CALLTIP_CLICK:
return wxEVT_STC_CALLTIP_CLICK;
case WXD_EVENT_TYPE_STC_AUTOCOMP_SELECTION:
return wxEVT_STC_AUTOCOMP_SELECTION;
case WXD_EVENT_TYPE_STC_INDICATOR_CLICK:
return wxEVT_STC_INDICATOR_CLICK;
case WXD_EVENT_TYPE_STC_INDICATOR_RELEASE:
return wxEVT_STC_INDICATOR_RELEASE;
case WXD_EVENT_TYPE_STC_AUTOCOMP_CANCELLED:
return wxEVT_STC_AUTOCOMP_CANCELLED;
case WXD_EVENT_TYPE_STC_AUTOCOMP_CHAR_DELETED:
return wxEVT_STC_AUTOCOMP_CHAR_DELETED;
#endif
#if wxdUSE_RICHTEXT
case WXD_EVENT_TYPE_RICHTEXT_LEFT_CLICK:
return wxEVT_RICHTEXT_LEFT_CLICK;
case WXD_EVENT_TYPE_RICHTEXT_RIGHT_CLICK:
return wxEVT_RICHTEXT_RIGHT_CLICK;
case WXD_EVENT_TYPE_RICHTEXT_MIDDLE_CLICK:
return wxEVT_RICHTEXT_MIDDLE_CLICK;
case WXD_EVENT_TYPE_RICHTEXT_LEFT_DCLICK:
return wxEVT_RICHTEXT_LEFT_DCLICK;
case WXD_EVENT_TYPE_RICHTEXT_RETURN:
return wxEVT_RICHTEXT_RETURN;
case WXD_EVENT_TYPE_RICHTEXT_CHARACTER:
return wxEVT_RICHTEXT_CHARACTER;
case WXD_EVENT_TYPE_RICHTEXT_DELETE:
return wxEVT_RICHTEXT_DELETE;
case WXD_EVENT_TYPE_RICHTEXT_CONTENT_INSERTED:
return wxEVT_RICHTEXT_CONTENT_INSERTED;
case WXD_EVENT_TYPE_RICHTEXT_CONTENT_DELETED:
return wxEVT_RICHTEXT_CONTENT_DELETED;
case WXD_EVENT_TYPE_RICHTEXT_STYLE_CHANGED:
return wxEVT_RICHTEXT_STYLE_CHANGED;
case WXD_EVENT_TYPE_RICHTEXT_SELECTION_CHANGED:
return wxEVT_RICHTEXT_SELECTION_CHANGED;
case WXD_EVENT_TYPE_RICHTEXT_STYLESHEET_CHANGING:
return wxEVT_RICHTEXT_STYLESHEET_CHANGING;
case WXD_EVENT_TYPE_RICHTEXT_STYLESHEET_CHANGED:
return wxEVT_RICHTEXT_STYLESHEET_CHANGED;
case WXD_EVENT_TYPE_RICHTEXT_STYLESHEET_REPLACING:
return wxEVT_RICHTEXT_STYLESHEET_REPLACING;
case WXD_EVENT_TYPE_RICHTEXT_STYLESHEET_REPLACED:
return wxEVT_RICHTEXT_STYLESHEET_REPLACED;
#endif
#if wxUSE_TASKBARICON
case WXD_EVENT_TYPE_TASKBAR_LEFT_DOWN:
return wxEVT_TASKBAR_LEFT_DOWN;
case WXD_EVENT_TYPE_TASKBAR_LEFT_DCLICK:
return wxEVT_TASKBAR_LEFT_DCLICK;
case WXD_EVENT_TYPE_TASKBAR_MOVE:
return wxEVT_TASKBAR_MOVE;
case WXD_EVENT_TYPE_TASKBAR_LEFT_UP:
return wxEVT_TASKBAR_LEFT_UP;
case WXD_EVENT_TYPE_TASKBAR_RIGHT_DOWN:
return wxEVT_TASKBAR_RIGHT_DOWN;
case WXD_EVENT_TYPE_TASKBAR_RIGHT_UP:
return wxEVT_TASKBAR_RIGHT_UP;
case WXD_EVENT_TYPE_TASKBAR_RIGHT_DCLICK:
return wxEVT_TASKBAR_RIGHT_DCLICK;
case WXD_EVENT_TYPE_TASKBAR_BALLOON_TIMEOUT:
return wxEVT_TASKBAR_BALLOON_TIMEOUT;
case WXD_EVENT_TYPE_TASKBAR_BALLOON_CLICK:
return wxEVT_TASKBAR_BALLOON_CLICK;
#endif
#if wxdUSE_WEBVIEW
case WXD_EVENT_TYPE_WEBVIEW_CREATED:
return wxEVT_WEBVIEW_CREATED;
case WXD_EVENT_TYPE_WEBVIEW_NAVIGATING:
return wxEVT_WEBVIEW_NAVIGATING;
case WXD_EVENT_TYPE_WEBVIEW_NAVIGATED:
return wxEVT_WEBVIEW_NAVIGATED;
case WXD_EVENT_TYPE_WEBVIEW_LOADED:
return wxEVT_WEBVIEW_LOADED;
case WXD_EVENT_TYPE_WEBVIEW_ERROR:
return wxEVT_WEBVIEW_ERROR;
case WXD_EVENT_TYPE_WEBVIEW_NEWWINDOW:
return wxEVT_WEBVIEW_NEWWINDOW;
case WXD_EVENT_TYPE_WEBVIEW_NEWWINDOW_FEATURES:
return wxEVT_WEBVIEW_NEWWINDOW_FEATURES;
case WXD_EVENT_TYPE_WEBVIEW_TITLE_CHANGED:
return wxEVT_WEBVIEW_TITLE_CHANGED;
case WXD_EVENT_TYPE_WEBVIEW_FULLSCREEN_CHANGED:
return wxEVT_WEBVIEW_FULLSCREEN_CHANGED;
case WXD_EVENT_TYPE_WEBVIEW_SCRIPT_MESSAGE_RECEIVED:
return wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED;
case WXD_EVENT_TYPE_WEBVIEW_SCRIPT_RESULT:
return wxEVT_WEBVIEW_SCRIPT_RESULT;
case WXD_EVENT_TYPE_WEBVIEW_WINDOW_CLOSE_REQUESTED:
return wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED;
case WXD_EVENT_TYPE_WEBVIEW_BROWSING_DATA_CLEARED:
return wxEVT_WEBVIEW_BROWSING_DATA_CLEARED;
#endif
case WXD_EVENT_TYPE_MENU_OPEN:
return wxEVT_MENU_OPEN;
case WXD_EVENT_TYPE_MENU_CLOSE:
return wxEVT_MENU_CLOSE;
case WXD_EVENT_TYPE_MENU_HIGHLIGHT:
return wxEVT_MENU_HIGHLIGHT;
case WXD_EVENT_TYPE_CONTEXT_MENU:
return wxEVT_CONTEXT_MENU;
case WXD_EVENT_TYPE_GRID_CELL_LEFT_CLICK:
return wxEVT_GRID_CELL_LEFT_CLICK;
case WXD_EVENT_TYPE_GRID_CELL_RIGHT_CLICK:
return wxEVT_GRID_CELL_RIGHT_CLICK;
case WXD_EVENT_TYPE_GRID_CELL_LEFT_DCLICK:
return wxEVT_GRID_CELL_LEFT_DCLICK;
case WXD_EVENT_TYPE_GRID_CELL_RIGHT_DCLICK:
return wxEVT_GRID_CELL_RIGHT_DCLICK;
case WXD_EVENT_TYPE_GRID_LABEL_LEFT_CLICK:
return wxEVT_GRID_LABEL_LEFT_CLICK;
case WXD_EVENT_TYPE_GRID_LABEL_RIGHT_CLICK:
return wxEVT_GRID_LABEL_RIGHT_CLICK;
case WXD_EVENT_TYPE_GRID_LABEL_LEFT_DCLICK:
return wxEVT_GRID_LABEL_LEFT_DCLICK;
case WXD_EVENT_TYPE_GRID_LABEL_RIGHT_DCLICK:
return wxEVT_GRID_LABEL_RIGHT_DCLICK;
case WXD_EVENT_TYPE_GRID_CELL_CHANGED:
return wxEVT_GRID_CELL_CHANGED;
case WXD_EVENT_TYPE_GRID_SELECT_CELL:
return wxEVT_GRID_SELECT_CELL;
case WXD_EVENT_TYPE_GRID_EDITOR_SHOWN:
return wxEVT_GRID_EDITOR_SHOWN;
case WXD_EVENT_TYPE_GRID_EDITOR_HIDDEN:
return wxEVT_GRID_EDITOR_HIDDEN;
case WXD_EVENT_TYPE_GRID_EDITOR_CREATED:
return wxEVT_GRID_EDITOR_CREATED;
case WXD_EVENT_TYPE_GRID_CELL_BEGIN_DRAG:
return wxEVT_GRID_CELL_BEGIN_DRAG;
case WXD_EVENT_TYPE_GRID_ROW_SIZE:
return wxEVT_GRID_ROW_SIZE;
case WXD_EVENT_TYPE_GRID_COL_SIZE:
return wxEVT_GRID_COL_SIZE;
case WXD_EVENT_TYPE_GRID_RANGE_SELECTED:
return wxEVT_GRID_RANGE_SELECTED;
case WXD_EVENT_TYPE_GRID_TABBING:
return wxEVT_GRID_TABBING;
default:
return wxEVT_NULL;
}
}
template <typename T>
T*
wxEvent_SafeDynamicCast(wxd_Event_t* event)
{
if (!event)
return nullptr;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
return dynamic_cast<T*>(wx_event);
}
extern "C" int
wxd_IsMouseButtonEvent(wxd_Event_t* event)
{
if (!event)
return 0;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxEventType type = wx_event->GetEventType();
return (type == wxEVT_LEFT_DOWN || type == wxEVT_LEFT_UP || type == wxEVT_RIGHT_DOWN ||
type == wxEVT_RIGHT_UP || type == wxEVT_MIDDLE_DOWN || type == wxEVT_MIDDLE_UP ||
type == wxEVT_MOUSEWHEEL) ?
1 :
0;
}
extern "C" int
wxd_IsMouseMotionEvent(wxd_Event_t* event)
{
if (!event)
return 0;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxEventType type = wx_event->GetEventType();
return (type == wxEVT_MOTION) ? 1 : 0;
}
extern "C" int
wxd_IsKeyboardEvent(wxd_Event_t* event)
{
if (!event)
return 0;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxEventType type = wx_event->GetEventType();
return (type == wxEVT_KEY_DOWN || type == wxEVT_KEY_UP || type == wxEVT_CHAR) ? 1 : 0;
}
extern "C" int
wxd_IsSizeEvent(wxd_Event_t* event)
{
if (!event)
return 0;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
return (wx_event->GetEventType() == wxEVT_SIZE) ? 1 : 0;
}
extern "C" int
wxd_Event_GetRawType(wxd_Event_t* event)
{
if (!event)
return -1;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
return static_cast<int>(wx_event->GetEventType());
}
WXD_EXPORTED void*
wxd_CommandEvent_GetClientData(wxd_Event_t* self)
{
if (!self)
return nullptr;
wxEvent* baseEvent = reinterpret_cast<wxEvent*>(self);
wxCommandEvent* cmdEvent = wxDynamicCast(baseEvent, wxCommandEvent);
if (!cmdEvent)
return nullptr;
return cmdEvent->GetClientData();
}
WXD_EXPORTED int32_t
wxd_CheckListBoxEvent_GetSelection(wxd_Event_t* self)
{
if (!self)
return -1;
wxEvent* baseEvent = reinterpret_cast<wxEvent*>(self);
wxCommandEvent* cmdEvent = wxDynamicCast(baseEvent, wxCommandEvent);
if (!cmdEvent)
return -1;
return cmdEvent->GetInt();
}
WXD_EXPORTED bool
wxd_DataViewEvent_GetColumn(wxd_Event_t* event, int32_t* column)
{
if (!event || !column)
return false;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxDataViewEvent* dve = dynamic_cast<wxDataViewEvent*>(wx_event);
if (!dve)
return false;
*column = dve->GetColumn();
return true;
}
WXD_EXPORTED bool
wxd_DataViewEvent_GetRow(wxd_Event_t* event, int64_t* row)
{
if (!event || !row)
return false;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxDataViewEvent* dve = dynamic_cast<wxDataViewEvent*>(wx_event);
if (!dve)
return false;
wxDataViewItem item = dve->GetItem();
if (!item.IsOk())
return false;
wxDataViewModel* model = dve->GetModel();
if (model) {
wxDataViewVirtualListModel* vmodel = dynamic_cast<wxDataViewVirtualListModel*>(model);
if (vmodel) {
*row = static_cast<int64_t>(vmodel->GetRow(item));
return true;
}
wxDataViewIndexListModel* listModel = dynamic_cast<wxDataViewIndexListModel*>(model);
if (listModel) {
*row = static_cast<int64_t>(listModel->GetRow(item));
return true;
}
}
if (item.GetID()) {
*row = static_cast<int64_t>(reinterpret_cast<uintptr_t>(item.GetID()) - 1);
return true;
}
return false;
}
WXD_EXPORTED wxd_Variant_t*
wxd_DataViewEvent_GetValue(wxd_Event_t* event)
{
if (!event)
return nullptr;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxDataViewEvent* dve = dynamic_cast<wxDataViewEvent*>(wx_event);
if (!dve)
return nullptr;
wxVariant var = dve->GetValue();
return reinterpret_cast<wxd_Variant_t*>(new (std::nothrow) wxVariant(var));
}
WXD_EXPORTED bool
wxd_DataViewEvent_SetValue(wxd_Event_t* event, const wxd_Variant_t* value)
{
if (!event || !value)
return false;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxDataViewEvent* dve = dynamic_cast<wxDataViewEvent*>(wx_event);
if (!dve)
return false;
return true;
}
WXD_EXPORTED bool
wxd_DataViewEvent_IsEditCancelled(wxd_Event_t* event)
{
if (!event)
return true;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxDataViewEvent* dve = dynamic_cast<wxDataViewEvent*>(wx_event);
if (!dve)
return true;
return dve->IsEditCancelled();
}
WXD_EXPORTED wxd_Point
wxd_DataViewEvent_GetPosition(const wxd_Event_t* event)
{
wxd_Point defaultPos = { -1, -1 };
if (!event)
return defaultPos;
const wxEvent* wx_event = reinterpret_cast<const wxEvent*>(event);
const wxDataViewEvent* dve = dynamic_cast<const wxDataViewEvent*>(wx_event);
if (!dve)
return defaultPos;
wxPoint p = dve->GetPosition();
wxd_Point out = { p.x, p.y };
return out;
}
WXD_EXPORTED const wxd_DataViewItem_t*
wxd_DataViewEvent_GetItem(wxd_Event_t* event)
{
if (!event)
return nullptr;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxDataViewEvent* dve = dynamic_cast<wxDataViewEvent*>(wx_event);
if (!dve)
return nullptr;
wxDataViewItem item = dve->GetItem();
if (!item.IsOk())
return nullptr;
return wxd_DataViewItem_Clone(reinterpret_cast<const wxd_DataViewItem_t*>(&item));
}
WXD_EXPORTED void
wxd_IdleEvent_RequestMore(wxd_Event_t* event, bool needMore)
{
if (!event)
return;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxIdleEvent* idle_event = dynamic_cast<wxIdleEvent*>(wx_event);
if (!idle_event)
return;
idle_event->RequestMore(needMore);
}
WXD_EXPORTED bool
wxd_IdleEvent_MoreRequested(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxIdleEvent* idle_event = dynamic_cast<wxIdleEvent*>(wx_event);
if (!idle_event)
return false;
return idle_event->MoreRequested();
}
WXD_EXPORTED void
wxd_IdleEvent_SetMode(int mode)
{
wxIdleEvent::SetMode(static_cast<wxIdleMode>(mode));
}
WXD_EXPORTED int
wxd_IdleEvent_GetMode()
{
return static_cast<int>(wxIdleEvent::GetMode());
}
WXD_EXPORTED int
wxd_MouseEvent_GetWheelRotation(wxd_Event_t* event)
{
if (!event)
return 0;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxMouseEvent* mouse_event = wxDynamicCast(wx_event, wxMouseEvent);
if (!mouse_event)
return 0;
return mouse_event->GetWheelRotation();
}
WXD_EXPORTED int
wxd_MouseEvent_GetWheelDelta(wxd_Event_t* event)
{
if (!event)
return 120; wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxMouseEvent* mouse_event = wxDynamicCast(wx_event, wxMouseEvent);
if (!mouse_event)
return 120;
return mouse_event->GetWheelDelta();
}
WXD_EXPORTED bool
wxd_KeyEvent_ControlDown(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* baseEvent = static_cast<wxEvent*>(static_cast<void*>(event));
wxKeyEvent* keyEvent = dynamic_cast<wxKeyEvent*>(baseEvent);
if (!keyEvent)
return false;
return keyEvent->ControlDown();
}
WXD_EXPORTED bool
wxd_KeyEvent_ShiftDown(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* baseEvent = static_cast<wxEvent*>(static_cast<void*>(event));
wxKeyEvent* keyEvent = dynamic_cast<wxKeyEvent*>(baseEvent);
if (!keyEvent)
return false;
return keyEvent->ShiftDown();
}
WXD_EXPORTED bool
wxd_KeyEvent_AltDown(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* baseEvent = static_cast<wxEvent*>(static_cast<void*>(event));
wxKeyEvent* keyEvent = dynamic_cast<wxKeyEvent*>(baseEvent);
if (!keyEvent)
return false;
return keyEvent->AltDown();
}
WXD_EXPORTED bool
wxd_KeyEvent_MetaDown(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* baseEvent = static_cast<wxEvent*>(static_cast<void*>(event));
wxKeyEvent* keyEvent = dynamic_cast<wxKeyEvent*>(baseEvent);
if (!keyEvent)
return false;
return keyEvent->MetaDown();
}
WXD_EXPORTED bool
wxd_KeyEvent_CmdDown(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* baseEvent = static_cast<wxEvent*>(static_cast<void*>(event));
wxKeyEvent* keyEvent = dynamic_cast<wxKeyEvent*>(baseEvent);
if (!keyEvent)
return false;
return keyEvent->CmdDown();
}
WXD_EXPORTED bool
wxd_Event_CanVeto(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxCloseEvent* close_event = wxDynamicCast(wx_event, wxCloseEvent);
if (close_event) {
return close_event->CanVeto();
}
wxNotifyEvent* notify_event = wxDynamicCast(wx_event, wxNotifyEvent);
if (notify_event) {
return true; }
return false; }
WXD_EXPORTED void
wxd_Event_Veto(wxd_Event_t* event)
{
if (!event)
return;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxCloseEvent* close_event = wxDynamicCast(wx_event, wxCloseEvent);
if (close_event) {
close_event->Veto();
return;
}
wxNotifyEvent* notify_event = wxDynamicCast(wx_event, wxNotifyEvent);
if (notify_event) {
notify_event->Veto();
return;
}
}
WXD_EXPORTED bool
wxd_Event_IsVetoed(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
return IsEventVetoed(*wx_event);
}
WXD_EXPORTED void
wxd_Event_SetCanVeto(wxd_Event_t* event, bool can_veto)
{
if (!event)
return;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxCloseEvent* close_event = wxDynamicCast(wx_event, wxCloseEvent);
if (close_event) {
close_event->SetCanVeto(can_veto);
return;
}
wxNotifyEvent* notify_event = wxDynamicCast(wx_event, wxNotifyEvent);
if (notify_event) {
return;
}
}
WXD_EXPORTED wxd_Long_t
wxd_TreeListEvent_GetItem(wxd_Event_t* event)
{
if (!event)
return 0;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxTreeListEvent* tl_event = dynamic_cast<wxTreeListEvent*>(wx_event);
if (!tl_event)
return 0;
wxTreeListItem item = tl_event->GetItem();
return (wxd_Long_t)item.GetID();
}
WXD_EXPORTED int
wxd_TreeListEvent_GetColumn(wxd_Event_t* event)
{
if (!event)
return -1;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxTreeListEvent* tl_event = dynamic_cast<wxTreeListEvent*>(wx_event);
if (!tl_event)
return -1;
return tl_event->GetColumn();
}
WXD_EXPORTED int
wxd_TreeListEvent_GetOldCheckedState(wxd_Event_t* event)
{
if (!event)
return -1;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxTreeListEvent* tl_event = dynamic_cast<wxTreeListEvent*>(wx_event);
if (!tl_event)
return -1;
wxCheckBoxState state = tl_event->GetOldCheckedState();
switch (state) {
case wxCHK_CHECKED:
return 1;
case wxCHK_UNDETERMINED:
return 2;
default:
return 0; }
}
WXD_EXPORTED int
wxd_MenuEvent_GetMenuId(wxd_Event_t* event)
{
if (!event) {
return -1;
}
wxEvent* wx_event = (wxEvent*)event;
wxEventType eventType = wx_event->GetEventType();
if (eventType != wxEVT_MENU_OPEN && eventType != wxEVT_MENU_CLOSE &&
eventType != wxEVT_MENU_HIGHLIGHT) {
return -1;
}
wxMenuEvent* menu_event = wxDynamicCast(wx_event, wxMenuEvent);
if (menu_event) {
return menu_event->GetMenuId();
}
return -1;
}
WXD_EXPORTED bool
wxd_MenuEvent_IsPopup(wxd_Event_t* event)
{
if (!event) {
return false;
}
wxEvent* wx_event = (wxEvent*)event;
wxEventType eventType = wx_event->GetEventType();
if (eventType != wxEVT_MENU_OPEN && eventType != wxEVT_MENU_CLOSE &&
eventType != wxEVT_MENU_HIGHLIGHT) {
return false;
}
wxMenuEvent* menu_event = wxDynamicCast(wx_event, wxMenuEvent);
if (menu_event) {
return menu_event->IsPopup();
}
return false;
}
WXD_EXPORTED wxd_Point
wxd_ContextMenuEvent_GetPosition(wxd_Event_t* event)
{
wxd_Point result = { -1, -1 };
if (!event) {
return result;
}
wxEvent* wx_event = (wxEvent*)event;
wxEventType eventType = wx_event->GetEventType();
if (eventType != wxEVT_CONTEXT_MENU) {
return result;
}
wxContextMenuEvent* ctx_event = wxDynamicCast(wx_event, wxContextMenuEvent);
if (ctx_event) {
wxPoint pos = ctx_event->GetPosition();
result.x = pos.x;
result.y = pos.y;
}
return result;
}
WXD_EXPORTED bool
wxd_DataViewEvent_GetSortOrder(const wxd_Event_t* event, bool* ascending)
{
if (!event || !ascending) {
return false;
}
const wxEvent* wx_event = reinterpret_cast<const wxEvent*>(event);
if (wx_event->GetEventType() != wxEVT_DATAVIEW_COLUMN_SORTED) {
return false;
}
const wxDataViewEvent* dv_event = wxDynamicCast(wx_event, wxDataViewEvent);
if (!dv_event) {
return false;
}
wxObject* obj = wx_event->GetEventObject();
wxDataViewCtrl* ctrl = wxDynamicCast(obj, wxDataViewCtrl);
if (!ctrl) {
return false;
}
int colIdx = dv_event->GetColumn();
if (colIdx < 0 || colIdx >= (int)ctrl->GetColumnCount()) {
return false;
}
wxDataViewColumn* col = ctrl->GetColumn((unsigned)colIdx);
if (!col) {
return false;
}
*ascending = col->IsSortOrderAscending();
return true;
}
extern "C" wxd_Size
wxd_SizeEvent_GetSize(wxd_Event_t* event)
{
wxd_Size result = { -1, -1 };
if (!event)
return result;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxSizeEvent* size_event = dynamic_cast<wxSizeEvent*>(wx_event);
if (!size_event)
return result;
wxSize size = size_event->GetSize();
result.width = size.GetWidth();
result.height = size.GetHeight();
return result;
}
extern "C" bool
wxd_CollapsiblePaneEvent_GetCollapsed(wxd_Event_t* event)
{
if (!event)
return false;
wxEvent* wx_event = reinterpret_cast<wxEvent*>(event);
wxCollapsiblePaneEvent* cp_event = dynamic_cast<wxCollapsiblePaneEvent*>(wx_event);
if (!cp_event)
return false;
return cp_event->GetCollapsed();
}
extern "C" bool
wxd_ActivateEvent_IsActive(wxd_Event_t* event)
{
if (!event)
return false;
wxActivateEvent* activate_event = dynamic_cast<wxActivateEvent*>(reinterpret_cast<wxEvent*>(event));
if (!activate_event)
return false;
return activate_event->GetActive();
}