Estoy agregando scripts con Lua a una aplicación nuestra, y necesito implementar enlaces para el GUI-toolkit. El kit de herramientas que usamos es wxWidgets.Manejar devoluciones de llamada de eventos con Luabind
Estoy usando Lua 5.1 y luabind 0.9.1, y hasta ahora ha funcionado muy bien. Sin embargo, no estoy seguro de cómo manejar mejor los eventos. Por ejemplo, si desea crear un botón e imprimir una cadena cuando se hace clic, se escribe algo como esto en C++
class MyClass : public wxFrame
{
MyClass (...)
{
b = new wxButton (this, -1, "Click me");
b->Bind (wxEVT_COMMAND_BUTTON_CLICKED, &MyClass::HandleButtonClick, this);
}
void HandleButtonClick (wxCommandEvent& ev)
{
wxMessageBox ("You clicked me");
}
}
Mi sueño-API para hacer lo mismo en Lua sería algo como esto:
b = wx.Button (frm, -1, "Click me")
b.on_click = function (ev)
print ("Button clicked")
end
O, lo que permite múltiples controladores de eventos:
b.on_click:add (function (ev)
print ("Button clicked again ...")
end)
Si no es posible, algo como esto lo que más se asemeja a la API de C++:
b.bind (wx.EVT_COMMAND_BUTTON_CLICKED, function (ev)
print ("Yet again")
end)
Sin embargo, no estoy seguro de cómo implementar esto usando Luabind sin escribir una clase contenedora para cada clase en la biblioteca wxWidgets que quiero usar.
¿Alguna sugerencia?
¿Podría Luabind crear clases auxiliares (digamos "wxLuaEventPropagator") automáticamente de alguna manera? De modo que la clase wxButton tiene una clase wxLuaEventPropagator anidada para cada evento ("on_click", y así sucesivamente). Una vez más, no quiero crear clases de contenedor para cada clase en wxWidgets que uso, ya que hay una tonelada.
(Sí, soy consciente de wxLua)
Usted dice que conoce wxLua, entonces, ¿por qué no usarlo? –
Porque: 1. la parte wx no será muy utilizada por los scripts, y creo que es una dependencia bastante pesada (no necesariamente así), 2. el proyecto podría pasar a otro kit de herramientas GUI en un futuro no muy lejano, y lo más importante: 3. hay otras aplicaciones que tendré que envolver también, así que todavía tengo que encontrar una solución para esto. Mi plan actual es abandonar Luabind, aunque me gusta mucho, y usar SWIG en su lugar. – Jonatan
Usted mencionó C++. ¿Está escrita su aplicación de host en C++? –