Я добавляю скрипты с Lua в наше приложение, и мне нужно реализовать привязки для GUI-инструментария.Набор инструментов, который мы используем, это wxWidgets.
Я использую Lua 5.1 и luabind 0.9.1, и до сих пор он работал очень хорошо.Однако я не уверен, как лучше всего справляться с событиями.Например, если вы хотите создать кнопку и напечатать строку при ее нажатии, вы напишите что-то вроде этого в 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");
}
}
Мой API-интерфейс моей мечты для выполнения того же действия в Lua будет выглядеть примерно так:this:
b = wx.Button (frm, -1, "Click me")
b.on_click = function (ev)
print ("Button clicked")
end
Или разрешить несколько обработчиков событий:
b.on_click:add (function (ev)
print ("Button clicked again ...")
end)
Если это невозможно, что-то вроде этого, больше напоминающее API C ++:
b.bind (wx.EVT_COMMAND_BUTTON_CLICKED, function (ev)
print ("Yet again")
end)
Однако я не уверен, как реализовать это с использованием Luabind без написания класса-оболочки для каждого класса в библиотеке wxWidgets, который я хочу использовать.
Есть предложения?
Возможно, Luabindсоздать вспомогательные классы (скажем, "wxLuaEventPropagator") автоматически каким-то образом?Так что класс wxButton имеет вложенный класс wxLuaEventPropagator для каждого события («on_click» и т. Д.).Еще раз, я не хочу создавать классы-обертки для каждого класса в wxWidgets, который я использую, так как есть тонна.
(Да, я знаю о wxLua)