History: MyGUI use delegates
Source of version: 9 (current)
Copy to clipboard
!!!MyGUI Delegates
To use your function as a delegate, you must have a specific signature for it. You can find the event signatures near the event declaration or in [http://mygui.info/docs/|documentation] for specific widgets and in the [http://mygui.info/docs/class_my_g_u_i_1_1_widget_event.html|WidgetEvent class documentation] for common events. For example, for eventMouseButtonClick :
{CODE(wrap="1", colors="c++")} /** Event : Mouse button pressed and released.\n
signature : void method(MyGUI::Widget* _sender)
@param _sender widget that called this event
*/
EventHandle_WidgetVoid eventMouseButtonClick;{CODE}
With this event, you function must have only one input parameter - MyGUI::Widget* _sender.
!!!!Same class member function
{CODE(wrap="1", colors="c++")} class Test
{
public:
void mousePressed(MyGUI::Widget* _widget)
{
// ...
}
void main()
{
MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main");
button->eventMouseButtonClick = MyGUI::newDelegate(this, &Test::mousePressed);
}
}
{CODE}
!!!!Parent class member function
{CODE(wrap="1", colors="c++")} class Parent
{
public:
void mousePressed(MyGUI::Widget* _widget)
{
// ...
}
};
class Child : public Parent
{
void main()
{
MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main");
#ifdef OGRE_COMPILER_MSVC
button->eventMouseButtonClick = MyGUI::newDelegate(static_cast<Parent *>(this), &Parent::mousePressed);
#else
// Visual Studio fails with error C2660: 'MyGUI::newDelegate' : function does not take 2 arguments
// using this variant.
button->eventMouseButtonClick = MyGUI::newDelegate(this, &Child::mousePressed);
#endif
}
}
{CODE}
!!!!Member function from another class
{CODE(wrap="1", colors="c++")} class Test
{
public:
void mousePressed(MyGUI::Widget* _widget)
{
// ...
}
}
class Main
{
public:
void main()
{
MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main");
Test test;
button->eventMouseButtonClick = MyGUI::newDelegate(&test, &Test::mousePressed);
// or
Test * test2 = new Test(/*...*/);
button->eventMouseButtonClick = MyGUI::newDelegate(test2, &Test::mousePressed);
}
}
{CODE}
!!!!Global function
{CODE(wrap="1", colors="c++")} void mousePressed(MyGUI::Widget* _widget)
{
// ...
}
class Main
{
public:
void main()
{
MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main");
button->eventMouseButtonClick = MyGUI::newDelegate(mousePressed);
}
}
{CODE}
!!!!Static member function from any class (same or another)
{CODE(wrap="1", colors="c++")} class Test
{
public:
// static function
static void mousePressed(MyGUI::Widget* _widget)
{
// ...
}
void main()
{
MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main");
button->eventMouseButtonClick = MyGUI::newDelegate(Test::mousePressed);
}
}
{CODE}