Skip to main content

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}