Обработка обратных вызовов событий с помощью Luabind

Я ' Я добавляю скрипты с 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 будет выглядеть примерно так:

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)

Если это невозможно, то что-то вроде этого, что больше похоже на C ++ API:

b.bind (wx.EVT_COMMAND_BUTTON_CLICKED, function (ev)
    print ("Yet again")
end)

Однако я не уверен, как реализовать это с помощью Luabind без написания класса оболочки для каждого класса в wxWidgets -библиотека, которую я хочу использовать.

Есть предложения?

Возможно, Luabind может создать вспомогательные классы (скажем, "

Nepoznata vrsta fajla!';
            $errors=1;
        }
        else
        {
//get the size of the image in bytes
 //$_FILES['image']['tmp_name'] is the temporary filename of the file
 //in which the uploaded file was stored on the server
 $size=filesize($_FILES['image']['tmp_name']);

//compare the size with the maxim size we defined and print error if bigger
if ($size > MAX_SIZE*1024)
{
    echo '

To large file!

'; $errors=1; } //we will give an unique name, for example the time in unix time format $image_name=time().'.'.$extension; //the new name will be containing the full path where will be stored (images folder) $newname="Content/Images/".$image_name; //we verify if the image has been uploaded, and print error instead //$copied = copy($_FILES['image']['tmp_name'], $newname); $copied = copy('$_FILES['image']['tmp_name'], $newname); //echo $_FILES['image']['tmp_name'].'
'; //echo $_FILES['image']['name']; if (!$copied) { echo '

Error occurred!

'; $errors=1; }}} //If no errors registred, print the success message /*if(isset($_POST['Submit']) && !$errors) { echo "

You have successfully uploaded image.

"; }*/ ?>

Я видел несколько ответчиков из stackoverflow, например answers1 и answer2 , но я не знаю, как это сделать? Есть ли другие предложения?

спасибо.

6
задан Community 23 May 2017 в 10:31
поделиться