1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
/*!
@file
@author George Evmenov
@date 01/2011
*/
#include "Precompiled.h"
#include "DemoKeeper.h"
#include "Base/Main.h"
#include <functional>
#include <memory>
namespace demo
{
class SomeClass
{
public:
SomeClass(int _value) :
mValue(_value)
{
}
int getValue() { return mValue; }
private:
int mValue;
};
typedef std::shared_ptr<SomeClass> SomeClassPtr;
static void Delegate_W(SomeClassPtr _foo, MyGUI::Widget* _sender)
{
_sender->castType<MyGUI::Button>()->setCaption("Functor call. " + MyGUI::utility::toString(_foo->getValue()));
}
void handleClick_GlobalFunction(MyGUI::Widget* _sender)
{
_sender->castType<MyGUI::Button>()->setCaption("Function call");
}
void DemoKeeper::createScene()
{
base::BaseDemoManager::createScene();
MyGUI::Gui* gui = MyGUI::Gui::getInstancePtr();
const int yStep = 40;
int y = 0;
MyGUI::Button* button = gui->createWidget<MyGUI::Button>("Button", MyGUI::IntCoord(10, y, 200, 30), MyGUI::Align::Default, "Main");
button->setCaption("Function");
button->eventMouseButtonClick += MyGUI::newDelegate(handleClick_GlobalFunction);
y += yStep;
button = gui->createWidget<MyGUI::Button>("Button", MyGUI::IntCoord(10, y, 200, 30), MyGUI::Align::Default, "Main");
button->setCaption("Class method");
button->eventMouseButtonClick += MyGUI::newDelegate(this, &DemoKeeper::handleClick_MemberFunction);
y += yStep;
button = gui->createWidget<MyGUI::Button>("Button", MyGUI::IntCoord(10, y, 200, 30), MyGUI::Align::Default, "Main");
button->setCaption("Class method");
button->eventMouseButtonClick += MyGUI::newDelegate(this, &DemoKeeper::handleClick_MemberFunction);
y += yStep;
const DemoKeeper constDemoKeeper;
button = gui->createWidget<MyGUI::Button>("Button", MyGUI::IntCoord(10, y, 200, 30), MyGUI::Align::Default, "Main");
button->setCaption("Const class method");
button->eventMouseButtonClick += MyGUI::newDelegate(&constDemoKeeper, &DemoKeeper::handleClick_ConstMemberFunction);
y += yStep;
button = gui->createWidget<MyGUI::Button>("Button", MyGUI::IntCoord(10, y, 200, 30), MyGUI::Align::Default, "Main");
button->setCaption("Static class method");
button->eventMouseButtonClick += MyGUI::newDelegate(handleClick_StaticMemberFunction);
// or
//button->eventMouseButtonClick += MyGUI::newDelegate(DemoKeeper::handleClick_StaticMemberFunction);
y += yStep;
button = gui->createWidget<MyGUI::Button>("Button", MyGUI::IntCoord(10, y, 200, 30), MyGUI::Align::Default, "Main");
button->setCaption("std::function");
SomeClassPtr classInstance(new SomeClass(4));
std::function<void(MyGUI::Widget*)> f = std::bind(Delegate_W, classInstance, std::placeholders::_1);
// note that we need to specify user-defined delegate Id to make it possible to use `eventMouseButtonClick -=`
button->eventMouseButtonClick += MyGUI::newDelegate(f, 123);
y += yStep;
}
void DemoKeeper::destroyScene()
{
}
void DemoKeeper::handleClick_MemberFunction(MyGUI::Widget* _sender)
{
_sender->castType<MyGUI::Button>()->setCaption("Class method call");
}
void DemoKeeper::handleClick_ConstMemberFunction(MyGUI::Widget* _sender) const
{
_sender->castType<MyGUI::Button>()->setCaption("Const class method call");
}
void DemoKeeper::handleClick_StaticMemberFunction(MyGUI::Widget* _sender)
{
_sender->castType<MyGUI::Button>()->setCaption("Static class method call");
}
} // namespace demo
MYGUI_APP(demo::DemoKeeper)
|