void wxEvtHandler_Connect(WxeApp *app, wxeMemEnv *memenv, wxeCommand& Ecmd) { ErlNifEnv *env = Ecmd.env; ERL_NIF_TERM * argv = Ecmd.args; int winid; int lastid; int skip; wxeErlTerm * userData; int fun_cb; wxEvtHandler *This = (wxEvtHandler *) memenv->getPtr(env, argv[0], "This"); if(!enif_get_int(env, argv[1], &winid)) Badarg("Winid"); if(!enif_get_int(env, argv[2], &lastid)) Badarg("LastId"); skip = enif_is_identical(argv[3], WXE_ATOM_true); userData = new wxeErlTerm(argv[4]); if(!enif_get_int(env, argv[5], &fun_cb)) Badarg("FunId"); if(!enif_is_atom(env, argv[6])) Badarg("EvType"); int eventType = wxeEventTypeFromAtom(argv[6]); if(!enif_is_atom(env, argv[7])) Badarg("ClassName"); wxeReturn rt = wxeReturn(memenv, Ecmd.caller, true); if(eventType > 0 ) { wxeEvtListener * Evt_cb = new wxeEvtListener(Ecmd.caller,app->getRef(This, memenv), argv[7], fun_cb, skip, userData, memenv->me_ref); This->Connect(winid, lastid, eventType, (wxObjectEventFunction)(wxEventFunction) &wxeEvtListener::forward, Evt_cb, Evt_cb); rt.send(enif_make_tuple2(rt.env, WXE_ATOM_ok, rt.make_ref(app->getRef((void *)Evt_cb,memenv), "wxeEvtListener"))); } else { rt.send(enif_make_tuple2(rt.env, WXE_ATOM_badarg, rt.make_atom("event_type"))); } } void wxEvtHandler_Disconnect_2(WxeApp *app, wxeMemEnv *memenv, wxeCommand& Ecmd) { ErlNifEnv *env = Ecmd.env; ERL_NIF_TERM * argv = Ecmd.args; int winid; int lastid; wxeEvtListener *Listener = (wxeEvtListener *) memenv->getPtr(env, argv[0], "Listener"); wxEvtHandler *This = (wxEvtHandler *) memenv->getPtr(env, argv[1],"This"); if(!enif_get_int(env, argv[2], &winid)) Badarg("Winid"); if(!enif_get_int(env, argv[3], &lastid)) Badarg("LastId"); if(!enif_is_atom(env, argv[4])) Badarg("EvType"); int eventType = wxeEventTypeFromAtom(argv[4]); wxeReturn rt = wxeReturn(memenv, Ecmd.caller, true); if(eventType > 0) { if(app->recurse_level > 1) { Ecmd.op = 101; app->delayed_delete->Append(&Ecmd); } else { bool Result = This->Disconnect(winid,lastid,eventType, (wxObjectEventFunction)(wxEventFunction) &wxeEvtListener::forward, NULL, Listener); rt.send(rt.make_bool(Result)); } } else { rt.send(enif_make_tuple2(rt.env, WXE_ATOM_badarg, rt.make_atom("event_type"))); } }