3
@author Generate utility by Albert Semenov
11
#include "NativePtrHolder.h"
12
#include "WidgetHolder.h"
14
#include "Delegates.h"
21
public ref class BaseWidget abstract
25
BaseWidget() : mNative(0), mIsWrap(true) { }
28
BaseWidget( MyGUI::Widget* _native )
30
if (_native == nullptr) return;
32
mParent = getMangedParent(mNative);
33
if (mParent == nullptr) mRoots.Add(this);
34
else mParent->mChilds.Add(this);
35
WidgetHolder sender = this;
36
mNative->setUserData(sender);
45
if (mParent == nullptr)
51
mParent->mChilds.Remove(this);
55
MyGUI::WidgetManager::getInstance().destroyWidget(mNative);
61
void CreateWidget( BaseWidget ^ _parent, MyGUI::WidgetStyle _style, const std::string& _skin, const MyGUI::IntCoord& _coord, MyGUI::Align _align, const std::string& _layer, const std::string& _name )
63
if (_parent == nullptr)
65
mNative = MyGUI::Gui::getInstance().createWidgetT(
76
mNative = _parent->mNative->createWidgetT(
83
mParent->mChilds.Add(this);
85
WidgetHolder sender = this;
86
mNative->setUserData(sender);
92
while (mChilds.Count > 0)
94
BaseWidget ^ child = mChilds[0];
100
BaseWidget ^ getMangedParent(MyGUI::Widget* _widget)
102
MyGUI::Widget* parent = _widget->getParent();
103
while (parent != nullptr)
105
WidgetHolder* obj = parent->getUserData< WidgetHolder >(false);
106
if (obj != nullptr) return obj->toObject();
107
parent = parent->getParent();
113
generic <typename WidgetType> where WidgetType : ref class
114
WidgetType CreateWidget(System::String ^ _skin, IntCoord _coord, Align _align, System::String ^ _name)
116
BaseWidget ^ child = (BaseWidget ^ )(System::Activator::CreateInstance<WidgetType>());
117
child->CreateWidget(this, MyGUI::WidgetStyle::Child, Convert<const std::string&>::From(_skin), Convert<const MyGUI::IntCoord&>::From(_coord), Convert<MyGUI::Align>::From(_align), "", Convert<const std::string&>::From(_name));
118
return (WidgetType)child;
121
generic <typename WidgetType> where WidgetType : ref class
122
WidgetType CreateWidget(System::String ^ _skin, IntCoord _coord, Align _align)
124
BaseWidget ^ child = (BaseWidget ^ )(System::Activator::CreateInstance<WidgetType>());
125
child->CreateWidget(this, MyGUI::WidgetStyle::Child, Convert<const std::string&>::From(_skin), Convert<const MyGUI::IntCoord&>::From(_coord), Convert<MyGUI::Align>::From(_align), "", "");
126
return (WidgetType)child;
129
generic <typename WidgetType> where WidgetType : ref class
130
WidgetType CreateWidget(WidgetStyle _style, System::String ^ _skin, IntCoord _coord, Align _align, System::String ^ _layer, System::String ^ _name)
132
BaseWidget ^ child = (BaseWidget ^ )(System::Activator::CreateInstance<WidgetType>());
133
child->CreateWidget(this, Convert<MyGUI::WidgetStyle>::From(_style), Convert<const std::string&>::From(_skin), Convert<const MyGUI::IntCoord&>::From(_coord), Convert<MyGUI::Align>::From(_align), Convert<const std::string&>::From(_layer), Convert<const std::string&>::From(_name));
134
return (WidgetType)child;
137
BaseWidget ^ CreateWidgetT(System::Type ^ _type, WidgetStyle _style, System::String ^ _skin, IntCoord _coord, Align _align, System::String ^ _layer, System::String ^ _name)
139
System::Reflection::ConstructorInfo ^ ci = _type->GetConstructor(gcnew cli::array < System::Type ^ > (0));
140
BaseWidget ^ child = (BaseWidget ^ )ci->Invoke(nullptr);
141
child->CreateWidget(this, Convert<MyGUI::WidgetStyle>::From(_style), Convert<const std::string&>::From(_skin), Convert<const MyGUI::IntCoord&>::From(_coord), Convert<MyGUI::Align>::From(_align), Convert<const std::string&>::From(_layer), Convert<const std::string&>::From(_name));
146
virtual const std::string& getClassTypeName() = 0;
147
MyGUI::Widget* GetNativePtr()
153
System::IntPtr GetNativeIntPtr()
155
return System::IntPtr(mNative);
158
property System::Object ^ UserData
160
System::Object ^ get( )
162
MMYGUI_CHECK_NATIVE(mNative);
165
void set(System::Object ^ _value)
167
MMYGUI_CHECK_NATIVE(mNative);
173
MyGUI::Widget* mNative;
177
BaseWidget ^ mParent;
178
System::Collections::Generic::List < BaseWidget ^ > mChilds;
179
System::Object ^ mUserData;
180
static System::Collections::Generic::List < BaseWidget ^ > mRoots;
184
} // namespace Managed