Browse Source

Added Disable/Enable/Disable to GUIElement

Marko Pintera 12 years ago
parent
commit
d5d36e3cdd
32 changed files with 323 additions and 44 deletions
  1. 5 4
      CSharpWrap.txt
  2. 24 0
      MBansheeEngine/GUIArea.cs
  3. 32 0
      MBansheeEngine/GUIElement.cs
  4. 1 1
      MBansheeEngine/GUILabel.cs
  5. 1 1
      MBansheeEngine/GUILayout.cs
  6. 1 1
      MBansheeEngine/GUIListBox.cs
  7. 1 1
      MBansheeEngine/GUIScrollArea.cs
  8. 2 2
      MBansheeEngine/GUISpace.cs
  9. 1 1
      MBansheeEngine/GUITextBox.cs
  10. 1 1
      MBansheeEngine/GUITexture.cs
  11. 0 16
      MBansheeEngine/GUIWidget.cs
  12. 1 1
      MBansheeEngine/MBansheeEngine.csproj
  13. 4 0
      SBansheeEngine/Include/BsScriptGUIArea.h
  14. 4 0
      SBansheeEngine/Include/BsScriptGUIButton.h
  15. 7 1
      SBansheeEngine/Include/BsScriptGUIFixedSpace.h
  16. 6 1
      SBansheeEngine/Include/BsScriptGUIFlexibleSpace.h
  17. 4 0
      SBansheeEngine/Include/BsScriptGUIInputBox.h
  18. 4 0
      SBansheeEngine/Include/BsScriptGUILabel.h
  19. 6 1
      SBansheeEngine/Include/BsScriptGUILayout.h
  20. 4 0
      SBansheeEngine/Include/BsScriptGUIListBox.h
  21. 4 0
      SBansheeEngine/Include/BsScriptGUIScrollArea.h
  22. 4 0
      SBansheeEngine/Include/BsScriptGUITexture.h
  23. 18 0
      SBansheeEngine/Source/BsScriptGUIArea.cpp
  24. 19 0
      SBansheeEngine/Source/BsScriptGUIButton.cpp
  25. 22 3
      SBansheeEngine/Source/BsScriptGUIFixedSpace.cpp
  26. 22 3
      SBansheeEngine/Source/BsScriptGUIFlexibleSpace.cpp
  27. 19 0
      SBansheeEngine/Source/BsScriptGUIInputBox.cpp
  28. 19 0
      SBansheeEngine/Source/BsScriptGUILabel.cpp
  29. 30 6
      SBansheeEngine/Source/BsScriptGUILayout.cpp
  30. 19 0
      SBansheeEngine/Source/BsScriptGUIListBox.cpp
  31. 19 0
      SBansheeEngine/Source/BsScriptGUIScrollArea.cpp
  32. 19 0
      SBansheeEngine/Source/BsScriptGUITexture.cpp

+ 5 - 4
CSharpWrap.txt

@@ -92,20 +92,21 @@ Eventually make all math classes templates that work on both doubles and floats.
 ----------------------------
 
 Implement:
- - GUIListBox
-  - onSelectionChanged
-
  - GUIToggle
   - onToggled
   - ToggleGroup (?)
 
+  - ScrollArea is broken. Vertical scrollbar is not positioned properly.
+  - Clicking a holding a scroll bar then dragging the mouse out of window leaves the bar selected (sometimes)
+
 ScrollArea will likely need:
- C#: test it
  C++/C#: always/never show horz/vert scroll bar
  C++/C#: optional styles for scroll bars
  C++/C#: scrollTo(pct)
 
  - Destroy()
+ - Disable()
+ - Enable()
  - GUISkin
    - List of properties with all common styles, like .button, .label
    - Get/SetStyle methods for custom styles

+ 24 - 0
MBansheeEngine/GUIArea.cs

@@ -51,6 +51,21 @@ namespace BansheeEngine
             return newArea;
         }
 
+        public void Destroy()
+        {
+            Internal_Destroy(mCachedPtr);
+        }
+
+        public void Enable()
+        {
+            Internal_Enable(mCachedPtr);
+        }
+
+        public void Disable()
+        {
+            Internal_Disable(mCachedPtr);
+        }
+
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern void Internal_CreateInstance(GUIArea instance, GUIBase parent, int x, int y, int width, int height, short depth);
 
@@ -65,5 +80,14 @@ namespace BansheeEngine
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern void Internal_CreateInstanceResizableXY(GUIArea instance, GUIBase parent, int offsetLeft, int offsetRight, int offsetTop,
             int offsetBottom, short depth);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_Destroy(IntPtr nativeInstance);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_Enable(IntPtr nativeInstance);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_Disable(IntPtr nativeInstance);
     }
 }

+ 32 - 0
MBansheeEngine/GUIElement.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Runtime.CompilerServices;
+
+namespace BansheeEngine
+{
+    public class GUIElement : ScriptObject
+    {
+        public void Destroy()
+        {
+            Internal_Destroy(mCachedPtr);
+        }
+
+        public void Enable()
+        {
+            Internal_Enable(mCachedPtr);
+        }
+
+        public void Disable()
+        {
+            Internal_Disable(mCachedPtr);
+        }
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_Destroy(IntPtr nativeInstance);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_Enable(IntPtr nativeInstance);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_Disable(IntPtr nativeInstance);
+    }
+}

+ 1 - 1
MBansheeEngine/GUILabel.cs

@@ -3,7 +3,7 @@ using System.Runtime.CompilerServices;
 
 namespace BansheeEngine
 {
-    public sealed class GUILabel : ScriptObject
+    public sealed class GUILabel : GUIElement
     {
         internal GUILabel(GUILayout parentLayout, GUIContent content, GUIElementStyle style, params GUIOption[] options)
         {

+ 1 - 1
MBansheeEngine/GUILayout.cs

@@ -3,7 +3,7 @@ using System.Runtime.CompilerServices;
 
 namespace BansheeEngine
 {
-    public abstract class GUILayout : ScriptObject
+    public abstract class GUILayout : GUIElement
     {
         public GUILabel AddLabel(GUIContent content, GUIElementStyle style, params GUIOption[] options)
         {

+ 1 - 1
MBansheeEngine/GUIListBox.cs

@@ -3,7 +3,7 @@ using System.Runtime.CompilerServices;
 
 namespace BansheeEngine
 {
-    public sealed class GUIListBox : ScriptObject
+    public sealed class GUIListBox : GUIElement
     {
         public delegate void OnSelectionChangedDelegate(int index);
 

+ 1 - 1
MBansheeEngine/GUIScrollArea.cs

@@ -2,7 +2,7 @@
 
 namespace BansheeEngine
 {
-    public sealed class GUIScrollArea : ScriptObject
+    public sealed class GUIScrollArea : GUIElement
     {
         private GUILayout _mainLayout;
 

+ 2 - 2
MBansheeEngine/GUISpace.cs

@@ -2,7 +2,7 @@
 
 namespace BansheeEngine
 {
-    public sealed class GUIFixedSpace : ScriptObject
+    public sealed class GUIFixedSpace : GUIElement
     {
         internal GUIFixedSpace(GUILayout parentLayout, int size)
         {
@@ -13,7 +13,7 @@ namespace BansheeEngine
         private static extern void Internal_CreateInstance(GUIFixedSpace instance, GUILayout parentLayout, int size);
     }
 
-    public sealed class GUIFlexibleSpace : ScriptObject
+    public sealed class GUIFlexibleSpace : GUIElement
     {
         internal GUIFlexibleSpace(GUILayout parentLayout)
         {

+ 1 - 1
MBansheeEngine/GUITextBox.cs

@@ -3,7 +3,7 @@ using System.Runtime.CompilerServices;
 
 namespace BansheeEngine
 {
-    public sealed class GUITextBox : ScriptObject
+    public sealed class GUITextBox : GUIElement
     {
         internal GUITextBox(GUILayout parentLayout, bool multiline, GUIElementStyle style, params GUIOption[] options)
         {

+ 1 - 1
MBansheeEngine/GUITexture.cs

@@ -12,7 +12,7 @@ namespace BansheeEngine
 	};
 
 
-    public sealed class GUITexture : ScriptObject
+    public sealed class GUITexture : GUIElement
     {
         internal GUITexture(GUILayout parentLayout, SpriteTexture texture, GUIImageScaleMode scale, GUIElementStyle style, params GUIOption[] options)
         {

+ 0 - 16
MBansheeEngine/GUIWidget.cs

@@ -1,16 +0,0 @@
-using System;
-using System.Runtime.CompilerServices;
-
-namespace BansheeEngine
-{
-    public sealed class GUIWidget : ScriptObject
-    {
-        public GUIWidget()
-        {
-            Internal_CreateInstance(this);
-        }
-
-        [MethodImpl(MethodImplOptions.InternalCall)]
-        private static extern void Internal_CreateInstance(GUIWidget instance);
-    }
-}

+ 1 - 1
MBansheeEngine/MBansheeEngine.csproj

@@ -50,6 +50,7 @@
     <Compile Include="GUIBase.cs" />
     <Compile Include="GUIButton.cs" />
     <Compile Include="GUIContent.cs" />
+    <Compile Include="GUIElement.cs" />
     <Compile Include="GUIElementStateStyle.cs" />
     <Compile Include="GUIElementStyle.cs" />
     <Compile Include="GUIListBox.cs" />
@@ -63,7 +64,6 @@
     <Compile Include="GUISkin.cs" />
     <Compile Include="GUISpace.cs" />
     <Compile Include="GUITexture.cs" />
-    <Compile Include="GUIWidget.cs" />
     <Compile Include="LocString.cs" />
     <Compile Include="MathEx.cs" />
     <Compile Include="Matrix3.cs" />

+ 4 - 0
SBansheeEngine/Include/BsScriptGUIArea.h

@@ -28,6 +28,10 @@ namespace BansheeEngine
 
 		static void internal_destroyInstance(ScriptGUIArea* nativeInstance);
 
+		static void internal_destroy(ScriptGUIArea* nativeInstance);
+		static void internal_disable(ScriptGUIArea* nativeInstance);
+		static void internal_enable(ScriptGUIArea* nativeInstance);
+
 		static void initRuntimeData();
 
 		ScriptGUIArea(GUIArea* area, ScriptGUIBase* parentGUI);

+ 4 - 0
SBansheeEngine/Include/BsScriptGUIButton.h

@@ -18,6 +18,10 @@ namespace BansheeEngine
 		static void internal_destroyInstance(ScriptGUIButton* nativeInstance);
 		static void internal_setContent(ScriptGUIButton* nativeInstance, MonoObject* content);
 
+		static void internal_destroy(ScriptGUIButton* nativeInstance);
+		static void internal_disable(ScriptGUIButton* nativeInstance);
+		static void internal_enable(ScriptGUIButton* nativeInstance);
+
 		static void initRuntimeData();
 
 		static void onClick(MonoObject* instance);

+ 7 - 1
SBansheeEngine/Include/BsScriptGUIFixedSpace.h

@@ -14,10 +14,16 @@ namespace BansheeEngine
 		static void internal_createInstance(MonoObject* instance, MonoObject* parentLayout, CM::UINT32 size);
 		static void internal_destroyInstance(ScriptGUIFixedSpace* nativeInstance);
 
+		static void internal_destroy(ScriptGUIFixedSpace* nativeInstance);
+		static void internal_disable(ScriptGUIFixedSpace* nativeInstance);
+		static void internal_enable(ScriptGUIFixedSpace* nativeInstance);
+
 		static void initRuntimeData();
 
-		ScriptGUIFixedSpace(GUIFixedSpace& fixedSpace);
+		ScriptGUIFixedSpace(GUIFixedSpace& fixedSpace, GUILayout* parentLayout);
 
 		GUIFixedSpace& mFixedSpace;
+		GUILayout* mParentLayout;
+
 	};
 }

+ 6 - 1
SBansheeEngine/Include/BsScriptGUIFlexibleSpace.h

@@ -14,10 +14,15 @@ namespace BansheeEngine
 		static void internal_createInstance(MonoObject* instance, MonoObject* parentLayout);
 		static void internal_destroyInstance(ScriptGUIFlexibleSpace* nativeInstance);
 
+		static void internal_destroy(ScriptGUIFlexibleSpace* nativeInstance);
+		static void internal_disable(ScriptGUIFlexibleSpace* nativeInstance);
+		static void internal_enable(ScriptGUIFlexibleSpace* nativeInstance);
+
 		static void initRuntimeData();
 
-		ScriptGUIFlexibleSpace(GUIFlexibleSpace& flexibleSpace);
+		ScriptGUIFlexibleSpace(GUIFlexibleSpace& flexibleSpace, GUILayout* parentLayout);
 
 		GUIFlexibleSpace& mFlexibleSpace;
+		GUILayout* mParentLayout;
 	};
 }

+ 4 - 0
SBansheeEngine/Include/BsScriptGUIInputBox.h

@@ -21,6 +21,10 @@ namespace BansheeEngine
 		static void internal_setText(ScriptGUIInputBox* nativeInstance, MonoString* text);
 		static void internal_getText(ScriptGUIInputBox* nativeInstance, MonoString** text);
 
+		static void internal_destroy(ScriptGUIInputBox* nativeInstance);
+		static void internal_disable(ScriptGUIInputBox* nativeInstance);
+		static void internal_enable(ScriptGUIInputBox* nativeInstance);
+
 		static void initRuntimeData();
 
 		ScriptGUIInputBox(GUIInputBox* inputBox);

+ 4 - 0
SBansheeEngine/Include/BsScriptGUILabel.h

@@ -18,6 +18,10 @@ namespace BansheeEngine
 		static void internal_destroyInstance(ScriptGUILabel* nativeInstance);
 		static void internal_setContent(ScriptGUILabel* nativeInstance, MonoObject* content);
 
+		static void internal_destroy(ScriptGUILabel* nativeInstance);
+		static void internal_disable(ScriptGUILabel* nativeInstance);
+		static void internal_enable(ScriptGUILabel* nativeInstance);
+
 		static void initRuntimeData();
 
 		ScriptGUILabel(GUILabel* label);

+ 6 - 1
SBansheeEngine/Include/BsScriptGUILayout.h

@@ -22,11 +22,16 @@ namespace BansheeEngine
 		static void internal_createInstanceYFromScrollArea(MonoObject* instance, MonoObject* parentScrollArea);
 		static void internal_destroyInstance(ScriptGUILayout* nativeInstance);
 
+		static void internal_destroy(ScriptGUILayout* nativeInstance);
+		static void internal_disable(ScriptGUILayout* nativeInstance);
+		static void internal_enable(ScriptGUILayout* nativeInstance);
+
 		static void initRuntimeData();
 
-		ScriptGUILayout(GUILayout* layout, GUIWidget& parentWidget);
+		ScriptGUILayout(GUILayout* layout, GUIWidget& parentWidget, GUILayout* parentLayout);
 
 		GUILayout* mLayout;
+		GUILayout* mParentLayout;
 		GUIWidget& mParentWidget;
 	};
 }

+ 4 - 0
SBansheeEngine/Include/BsScriptGUIListBox.h

@@ -19,6 +19,10 @@ namespace BansheeEngine
 		static void internal_destroyInstance(ScriptGUIListBox* nativeInstance);
 		static void internal_setElements(ScriptGUIListBox* nativeInstance, MonoArray* elements);
 
+		static void internal_destroy(ScriptGUIListBox* nativeInstance);
+		static void internal_disable(ScriptGUIListBox* nativeInstance);
+		static void internal_enable(ScriptGUIListBox* nativeInstance);
+
 		static void initRuntimeData();
 
 		static void onSelectionChanged(MonoObject* instance, CM::UINT32 index);

+ 4 - 0
SBansheeEngine/Include/BsScriptGUIScrollArea.h

@@ -18,6 +18,10 @@ namespace BansheeEngine
 		static void internal_createInstance(MonoObject* instance, MonoObject* parentLayout, MonoObject* style, MonoArray* guiOptions);
 		static void internal_destroyInstance(ScriptGUIScrollArea* nativeInstance);
 
+		static void internal_destroy(ScriptGUIScrollArea* nativeInstance);
+		static void internal_disable(ScriptGUIScrollArea* nativeInstance);
+		static void internal_enable(ScriptGUIScrollArea* nativeInstance);
+
 		static void initRuntimeData();
 
 		ScriptGUIScrollArea(GUIScrollArea* button, GUIWidget& parentWidget);

+ 4 - 0
SBansheeEngine/Include/BsScriptGUITexture.h

@@ -20,6 +20,10 @@ namespace BansheeEngine
 		static void internal_destroyInstance(ScriptGUITexture* nativeInstance);
 		static void internal_setTexture(ScriptGUITexture* nativeInstance, MonoObject* texture);
 
+		static void internal_destroy(ScriptGUITexture* nativeInstance);
+		static void internal_disable(ScriptGUITexture* nativeInstance);
+		static void internal_enable(ScriptGUITexture* nativeInstance);
+
 		static void initRuntimeData();
 
 		ScriptGUITexture(GUITexture* texture);

+ 18 - 0
SBansheeEngine/Source/BsScriptGUIArea.cpp

@@ -32,6 +32,9 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableY", &ScriptGUIArea::internal_createInstanceResizeableY);
 		metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableXY", &ScriptGUIArea::internal_createInstanceResizeableXY);
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIArea::internal_destroyInstance);
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUIArea::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUIArea::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUIArea::internal_disable);
 	}
 
 	GUIWidget& ScriptGUIArea::getParentWidget() const 
@@ -91,4 +94,19 @@ namespace BansheeEngine
 		nativeInstance->destroyInstance();
 		cm_delete(nativeInstance);
 	}
+
+	void ScriptGUIArea::internal_destroy(ScriptGUIArea* nativeInstance)
+	{
+		GUIArea::destroy(nativeInstance->getInternalValue());
+	}
+
+	void ScriptGUIArea::internal_disable(ScriptGUIArea* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->disable();
+	}
+
+	void ScriptGUIArea::internal_enable(ScriptGUIArea* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->enable();
+	}
 }

+ 19 - 0
SBansheeEngine/Source/BsScriptGUIButton.cpp

@@ -42,6 +42,10 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIButton::internal_destroyInstance);
 		metaData.scriptClass->addInternalCall("Internal_SetContent", &ScriptGUIButton::internal_setContent);
 
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUIButton::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUIButton::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUIButton::internal_disable);
+
 		onClickThunk = (OnClickThunkDef)metaData.scriptClass->getMethod("DoOnClick").getThunk();
 		onHoverThunk = (OnHoverThunkDef)metaData.scriptClass->getMethod("DoOnHover").getThunk();
 		onOutThunk = (OnOutThunkDef)metaData.scriptClass->getMethod("DoOnOut").getThunk();
@@ -89,6 +93,21 @@ namespace BansheeEngine
 		nativeInstance->getInternalValue()->setContent(nativeContent);
 	}
 
+	void ScriptGUIButton::internal_destroy(ScriptGUIButton* nativeInstance)
+	{
+		GUIElement::destroy(nativeInstance->getInternalValue());
+	}
+
+	void ScriptGUIButton::internal_disable(ScriptGUIButton* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->disableRecursively();
+	}
+
+	void ScriptGUIButton::internal_enable(ScriptGUIButton* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->enableRecursively();
+	}
+
 	void ScriptGUIButton::onClick(MonoObject* instance)
 	{
 		MonoException* exception = nullptr;

+ 22 - 3
SBansheeEngine/Source/BsScriptGUIFixedSpace.cpp

@@ -13,8 +13,8 @@ using namespace CamelotFramework;
 
 namespace BansheeEngine
 {
-	ScriptGUIFixedSpace::ScriptGUIFixedSpace(GUIFixedSpace& fixedSpace)
-		:mFixedSpace(fixedSpace)
+	ScriptGUIFixedSpace::ScriptGUIFixedSpace(GUIFixedSpace& fixedSpace, GUILayout* parentLayout)
+		:mFixedSpace(fixedSpace), mParentLayout(parentLayout)
 	{
 
 	}
@@ -30,6 +30,10 @@ namespace BansheeEngine
 	{
 		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIFixedSpace::internal_createInstance);
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIFixedSpace::internal_destroyInstance);
+
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUIFixedSpace::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUIFixedSpace::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUIFixedSpace::internal_disable);
 	}
 
 	void ScriptGUIFixedSpace::internal_createInstance(MonoObject* instance, MonoObject* parentLayout, UINT32 size)
@@ -38,7 +42,7 @@ namespace BansheeEngine
 		GUILayout* nativeLayout = scriptLayout->getInternalValue();
 		GUIFixedSpace& space = nativeLayout->addSpace(size);
 
-		ScriptGUIFixedSpace* nativeInstance = new (cm_alloc<ScriptGUIFixedSpace>()) ScriptGUIFixedSpace(space);
+		ScriptGUIFixedSpace* nativeInstance = new (cm_alloc<ScriptGUIFixedSpace>()) ScriptGUIFixedSpace(space, nativeLayout);
 		nativeInstance->createInstance(instance);
 
 		metaData.thisPtrField->setValue(instance, nativeInstance);
@@ -49,4 +53,19 @@ namespace BansheeEngine
 		nativeInstance->destroyInstance();
 		cm_delete(nativeInstance);
 	}
+
+	void ScriptGUIFixedSpace::internal_destroy(ScriptGUIFixedSpace* nativeInstance)
+	{
+		nativeInstance->mParentLayout->removeSpace(nativeInstance->mFixedSpace);
+	}
+
+	void ScriptGUIFixedSpace::internal_disable(ScriptGUIFixedSpace* nativeInstance)
+	{
+		nativeInstance->mFixedSpace.disableRecursively();
+	}
+
+	void ScriptGUIFixedSpace::internal_enable(ScriptGUIFixedSpace* nativeInstance)
+	{
+		nativeInstance->mFixedSpace.enableRecursively();
+	}
 }

+ 22 - 3
SBansheeEngine/Source/BsScriptGUIFlexibleSpace.cpp

@@ -13,8 +13,8 @@ using namespace CamelotFramework;
 
 namespace BansheeEngine
 {
-	ScriptGUIFlexibleSpace::ScriptGUIFlexibleSpace(GUIFlexibleSpace& flexibleSpace)
-		:mFlexibleSpace(flexibleSpace)
+	ScriptGUIFlexibleSpace::ScriptGUIFlexibleSpace(GUIFlexibleSpace& flexibleSpace, GUILayout* parentLayout)
+		:mFlexibleSpace(flexibleSpace), mParentLayout(parentLayout)
 	{
 
 	}
@@ -30,6 +30,10 @@ namespace BansheeEngine
 	{
 		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIFlexibleSpace::internal_createInstance);
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIFlexibleSpace::internal_destroyInstance);
+
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUIFlexibleSpace::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUIFlexibleSpace::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUIFlexibleSpace::internal_disable);
 	}
 
 	void ScriptGUIFlexibleSpace::internal_createInstance(MonoObject* instance, MonoObject* parentLayout)
@@ -38,7 +42,7 @@ namespace BansheeEngine
 		GUILayout* nativeLayout = scriptLayout->getInternalValue();
 		GUIFlexibleSpace& space = nativeLayout->addFlexibleSpace();
 
-		ScriptGUIFlexibleSpace* nativeInstance = new (cm_alloc<ScriptGUIFlexibleSpace>()) ScriptGUIFlexibleSpace(space);
+		ScriptGUIFlexibleSpace* nativeInstance = new (cm_alloc<ScriptGUIFlexibleSpace>()) ScriptGUIFlexibleSpace(space, nativeLayout);
 		nativeInstance->createInstance(instance);
 
 		metaData.thisPtrField->setValue(instance, nativeInstance);
@@ -49,4 +53,19 @@ namespace BansheeEngine
 		nativeInstance->destroyInstance();
 		cm_delete(nativeInstance);
 	}
+
+	void ScriptGUIFlexibleSpace::internal_destroy(ScriptGUIFlexibleSpace* nativeInstance)
+	{
+		nativeInstance->mParentLayout->removeFlexibleSpace(nativeInstance->mFlexibleSpace);
+	}
+
+	void ScriptGUIFlexibleSpace::internal_disable(ScriptGUIFlexibleSpace* nativeInstance)
+	{
+		nativeInstance->mFlexibleSpace.disableRecursively();
+	}
+
+	void ScriptGUIFlexibleSpace::internal_enable(ScriptGUIFlexibleSpace* nativeInstance)
+	{
+		nativeInstance->mFlexibleSpace.enableRecursively();
+	}
 }

+ 19 - 0
SBansheeEngine/Source/BsScriptGUIInputBox.cpp

@@ -38,6 +38,10 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIInputBox::internal_destroyInstance);
 		metaData.scriptClass->addInternalCall("Internal_GetText", &ScriptGUIInputBox::internal_getText);
 		metaData.scriptClass->addInternalCall("Internal_SetText", &ScriptGUIInputBox::internal_setText);
+
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUIInputBox::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUIInputBox::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUIInputBox::internal_disable);
 	}
 
 	void ScriptGUIInputBox::internal_createInstance(MonoObject* instance, MonoObject* parentLayout, bool multiline, MonoObject* style, MonoArray* guiOptions)
@@ -79,4 +83,19 @@ namespace BansheeEngine
 	{
 		nativeInstance->getInternalValue()->setText(MonoUtil::monoToWString(text));
 	}
+
+	void ScriptGUIInputBox::internal_destroy(ScriptGUIInputBox* nativeInstance)
+	{
+		GUIElement::destroy(nativeInstance->getInternalValue());
+	}
+
+	void ScriptGUIInputBox::internal_disable(ScriptGUIInputBox* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->disableRecursively();
+	}
+
+	void ScriptGUIInputBox::internal_enable(ScriptGUIInputBox* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->enableRecursively();
+	}
 }

+ 19 - 0
SBansheeEngine/Source/BsScriptGUILabel.cpp

@@ -35,6 +35,10 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUILabel::internal_createInstance);
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUILabel::internal_destroyInstance);
 		metaData.scriptClass->addInternalCall("Internal_SetContent", &ScriptGUILabel::internal_setContent);
+
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUILabel::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUILabel::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUILabel::internal_disable);
 	}
 
 	void ScriptGUILabel::internal_createInstance(MonoObject* instance, MonoObject* parentLayout, MonoObject* content, MonoObject* style, MonoArray* guiOptions)
@@ -73,4 +77,19 @@ namespace BansheeEngine
 		GUIContent nativeContent(ScriptGUIContent::getText(content), ScriptGUIContent::getImage(content), ScriptGUIContent::getTooltip(content));
 		nativeInstance->getInternalValue()->setContent(nativeContent);
 	}
+
+	void ScriptGUILabel::internal_destroy(ScriptGUILabel* nativeInstance)
+	{
+		GUIElement::destroy(nativeInstance->getInternalValue());
+	}
+
+	void ScriptGUILabel::internal_disable(ScriptGUILabel* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->disableRecursively();
+	}
+
+	void ScriptGUILabel::internal_enable(ScriptGUILabel* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->enableRecursively();
+	}
 }

+ 30 - 6
SBansheeEngine/Source/BsScriptGUILayout.cpp

@@ -13,8 +13,8 @@ using namespace CamelotFramework;
 
 namespace BansheeEngine
 {
-	ScriptGUILayout::ScriptGUILayout(GUILayout* layout, GUIWidget& parentWidget)
-		:mLayout(layout), mParentWidget(parentWidget)
+	ScriptGUILayout::ScriptGUILayout(GUILayout* layout, GUIWidget& parentWidget, GUILayout* parentLayout)
+		:mLayout(layout), mParentWidget(parentWidget), mParentLayout(parentLayout)
 	{
 
 	}
@@ -33,6 +33,10 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_CreateInstanceYFromLayout", &ScriptGUILayout::internal_createInstanceYFromLayout);
 		metaData.scriptClass->addInternalCall("Internal_CreateInstanceYFromScrollArea", &ScriptGUILayout::internal_createInstanceYFromScrollArea);
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUILayout::internal_destroyInstance);
+
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUILayout::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUILayout::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUILayout::internal_disable);
 	}
 
 	void ScriptGUILayout::internal_createInstanceXFromArea(MonoObject* instance, MonoObject* parentArea)
@@ -40,7 +44,8 @@ namespace BansheeEngine
 		ScriptGUIArea* scriptArea = ScriptGUIArea::toNative(parentArea);
 		GUIArea* nativeArea = scriptArea->getInternalValue();
 
-		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&nativeArea->getLayout(), scriptArea->getParentWidget());
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) 
+			ScriptGUILayout(&nativeArea->getLayout(), scriptArea->getParentWidget(), nullptr);
 		nativeInstance->createInstance(instance);
 
 		metaData.thisPtrField->setValue(instance, nativeInstance);
@@ -52,7 +57,8 @@ namespace BansheeEngine
 		GUILayout* nativeLayout = scriptLayout->getInternalValue();
 		GUILayout& layout = nativeLayout->addLayoutX();
 
-		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentWidget());
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) 
+			ScriptGUILayout(&layout, scriptLayout->getParentWidget(), nativeLayout);
 		nativeInstance->createInstance(instance);
 
 		metaData.thisPtrField->setValue(instance, nativeInstance);
@@ -64,7 +70,8 @@ namespace BansheeEngine
 		GUILayout* nativeLayout = scriptLayout->getInternalValue();
 		GUILayout& layout = nativeLayout->addLayoutY();
 
-		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentWidget());
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) 
+			ScriptGUILayout(&layout, scriptLayout->getParentWidget(), nativeLayout);
 		nativeInstance->createInstance(instance);
 
 		metaData.thisPtrField->setValue(instance, nativeInstance);
@@ -75,7 +82,8 @@ namespace BansheeEngine
 		ScriptGUIScrollArea* scriptScrollArea = ScriptGUIScrollArea::toNative(parentScrollArea);
 		GUILayout* nativeLayout = &scriptScrollArea->getInternalValue()->getLayout();
 
-		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(nativeLayout, scriptScrollArea->getParentWidget());
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) 
+			ScriptGUILayout(nativeLayout, scriptScrollArea->getParentWidget(), nativeLayout);
 		nativeInstance->createInstance(instance);
 
 		metaData.thisPtrField->setValue(instance, nativeInstance);
@@ -86,4 +94,20 @@ namespace BansheeEngine
 		nativeInstance->destroyInstance();
 		cm_delete(nativeInstance);
 	}
+
+	void ScriptGUILayout::internal_destroy(ScriptGUILayout* nativeInstance)
+	{
+		if(nativeInstance->mParentLayout != nullptr)
+			nativeInstance->mParentLayout->removeLayout(*nativeInstance->mLayout);
+	}
+
+	void ScriptGUILayout::internal_disable(ScriptGUILayout* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->disableRecursively();
+	}
+
+	void ScriptGUILayout::internal_enable(ScriptGUILayout* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->enableRecursively();
+	}
 }

+ 19 - 0
SBansheeEngine/Source/BsScriptGUIListBox.cpp

@@ -39,6 +39,10 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIListBox::internal_destroyInstance);
 		metaData.scriptClass->addInternalCall("Internal_SetElements", &ScriptGUIListBox::internal_setElements);
 
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUIListBox::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUIListBox::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUIListBox::internal_disable);
+
 		onSelectionChangedThunk = (OnSelectionChangedThunkDef)metaData.scriptClass->getMethod("DoOnSelectionChanged", 1).getThunk();
 	}
 
@@ -109,6 +113,21 @@ namespace BansheeEngine
 		nativeInstance->getInternalValue()->setElements(nativeElements);
 	}
 
+	void ScriptGUIListBox::internal_destroy(ScriptGUIListBox* nativeInstance)
+	{
+		GUIElement::destroy(nativeInstance->getInternalValue());
+	}
+
+	void ScriptGUIListBox::internal_disable(ScriptGUIListBox* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->disableRecursively();
+	}
+
+	void ScriptGUIListBox::internal_enable(ScriptGUIListBox* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->enableRecursively();
+	}
+
 	void ScriptGUIListBox::onSelectionChanged(MonoObject* instance, CM::UINT32 index)
 	{
 		MonoException* exception = nullptr;

+ 19 - 0
SBansheeEngine/Source/BsScriptGUIScrollArea.cpp

@@ -36,6 +36,10 @@ namespace BansheeEngine
 	{
 		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIScrollArea::internal_createInstance);
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIScrollArea::internal_destroyInstance);
+
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUIScrollArea::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUIScrollArea::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUIScrollArea::internal_disable);
 	}
 
 	GUIWidget& ScriptGUIScrollArea::getParentWidget() const
@@ -72,4 +76,19 @@ namespace BansheeEngine
 		nativeInstance->destroyInstance();
 		cm_delete(nativeInstance);
 	}
+
+	void ScriptGUIScrollArea::internal_destroy(ScriptGUIScrollArea* nativeInstance)
+	{
+		GUIElement::destroy(nativeInstance->getInternalValue());
+	}
+
+	void ScriptGUIScrollArea::internal_disable(ScriptGUIScrollArea* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->disableRecursively();
+	}
+
+	void ScriptGUIScrollArea::internal_enable(ScriptGUIScrollArea* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->enableRecursively();
+	}
 }

+ 19 - 0
SBansheeEngine/Source/BsScriptGUITexture.cpp

@@ -37,6 +37,10 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUITexture::internal_createInstance);
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUITexture::internal_destroyInstance);
 		metaData.scriptClass->addInternalCall("Internal_SetTexture", &ScriptGUITexture::internal_setTexture);
+
+		metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUITexture::internal_destroy);
+		metaData.scriptClass->addInternalCall("Internal_Enable", &ScriptGUITexture::internal_enable);
+		metaData.scriptClass->addInternalCall("Internal_Disable", &ScriptGUITexture::internal_disable);
 	}
 
 	void ScriptGUITexture::internal_createInstance(MonoObject* instance, MonoObject* parentLayout, MonoObject* texture, 
@@ -82,4 +86,19 @@ namespace BansheeEngine
 
 		nativeInstance->getInternalValue()->setTexture(nativeTexture);
 	}
+
+	void ScriptGUITexture::internal_destroy(ScriptGUITexture* nativeInstance)
+	{
+		GUIElement::destroy(nativeInstance->getInternalValue());
+	}
+
+	void ScriptGUITexture::internal_disable(ScriptGUITexture* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->disableRecursively();
+	}
+
+	void ScriptGUITexture::internal_enable(ScriptGUITexture* nativeInstance)
+	{
+		nativeInstance->getInternalValue()->enableRecursively();
+	}
 }