Browse Source

Updated the UISection and tb_toggle_container to add children components to a layout so that they can be seen.

Matt Benic 8 years ago
parent
commit
fa6bb37f1d

+ 74 - 0
Source/Atomic/UI/UISection.cpp

@@ -55,4 +55,78 @@ bool UISection::OnEvent(const tb::TBWidgetEvent &ev)
     return UIWidget::OnEvent(ev);
     return UIWidget::OnEvent(ev);
 }
 }
 
 
+void UISection::AddChild(UIWidget* child)
+{
+    if (!widget_ || !child || !child->GetInternalWidget())
+        return;
+
+    TBSafeCast<TBSection>(widget_)->AddToggleChild(child->GetInternalWidget());
+}
+
+void UISection::AddChildAfter(UIWidget* child, UIWidget* otherChild)
+{
+    if (!widget_ || !child || !child->GetInternalWidget() || !otherChild || !otherChild->GetInternalWidget())
+        return;
+
+    TBSafeCast<TBSection>(widget_)->AddToggleChildRelative(child->GetInternalWidget(), tb::WIDGET_Z_REL_AFTER, otherChild->GetInternalWidget());
+}
+
+void UISection::AddChildBefore(UIWidget* child, UIWidget* otherChild)
+{
+    if (!widget_ || !child || !child->GetInternalWidget() || !otherChild || !otherChild->GetInternalWidget())
+        return;
+
+    TBSafeCast<TBSection>(widget_)->AddToggleChildRelative(child->GetInternalWidget(), tb::WIDGET_Z_REL_BEFORE, otherChild->GetInternalWidget());
+}
+
+void UISection::AddChildRelative(UIWidget* child, UI_WIDGET_Z_REL z, UIWidget* reference)
+{
+    if (!widget_ || !child || !child->GetInternalWidget() || !reference || !reference->GetInternalWidget())
+        return;
+
+    TBSafeCast<TBSection>(widget_)->AddToggleChildRelative(child->GetInternalWidget(), (WIDGET_Z_REL)z, reference->GetInternalWidget());
+}
+
+void UISection::RemoveChild(UIWidget* child, bool cleanup)
+{
+    if (!widget_ || !child)
+        return;
+
+    TBWidget* childw = child->GetInternalWidget();
+
+    if (!childw)
+        return;
+
+    TBSafeCast<TBSection>(widget_)->RemoveToggleChild(childw);
+}
+
+void UISection::DeleteAllChildren()
+{
+    if (!widget_)
+        return;
+
+    TBSafeCast<TBSection>(widget_)->DeleteAllChildren();
+}
+
+UIWidget* UISection::GetFirstChild()
+{
+    if (!widget_)
+        return NULL;
+
+    return GetSubsystem<UI>()->WrapWidget(TBSafeCast<TBSection>(widget_)->GetFirstToggleChild());
+}
+
+UIWidget* UISection::GetWidget(const String& id)
+{
+    if (!widget_)
+        return 0;
+
+    TBWidget* child = TBSafeCast<TBSection>(widget_)->GetToggleWidgetById(TBID(id.CString()));
+
+    if (!child)
+        return 0;
+
+    UI* ui = GetSubsystem<UI>();
+    return ui->WrapWidget(child);
+}
 }
 }

+ 12 - 0
Source/Atomic/UI/UISection.h

@@ -37,6 +37,18 @@ public:
     UISection(Context* context, bool createWidget = true);
     UISection(Context* context, bool createWidget = true);
     virtual ~UISection();
     virtual ~UISection();
 
 
+    void AddChild(UIWidget* child);
+    void AddChildAfter(UIWidget* child, UIWidget* otherChild);
+    void AddChildBefore(UIWidget* child, UIWidget* otherChild);
+    void AddChildRelative(UIWidget* child, UI_WIDGET_Z_REL z, UIWidget* reference);
+
+    void RemoveChild(UIWidget* child, bool cleanup = true);
+    void DeleteAllChildren();
+
+    UIWidget* GetFirstChild();
+    UIWidget* GetWidget(const String& id);
+
+
 protected:
 protected:
 
 
     virtual bool OnEvent(const tb::TBWidgetEvent &ev);
     virtual bool OnEvent(const tb::TBWidgetEvent &ev);

+ 7 - 7
Source/Atomic/UI/UIWidget.h

@@ -200,9 +200,9 @@ class ATOMIC_API UIWidget : public Object, public tb::TBWidgetDelegate
     void SetFontDescription(UIFontDescription* fd);
     void SetFontDescription(UIFontDescription* fd);
 
 
     virtual void Remove();
     virtual void Remove();
-    void RemoveChild(UIWidget* child, bool cleanup = true);
+    virtual void RemoveChild(UIWidget* child, bool cleanup = true);
 
 
-    void DeleteAllChildren();
+    virtual void DeleteAllChildren();
 
 
     /// searches for specified widget ID from the top of the widget tree, returns the 1st one found.
     /// searches for specified widget ID from the top of the widget tree, returns the 1st one found.
     virtual UIWidget *FindWidget ( const String& searchid );
     virtual UIWidget *FindWidget ( const String& searchid );
@@ -247,7 +247,7 @@ class ATOMIC_API UIWidget : public Object, public tb::TBWidgetDelegate
     void SetDragObject(UIDragObject* object) { dragObject_ = object; }
     void SetDragObject(UIDragObject* object) { dragObject_ = object; }
     UIDragObject* GetDragObject() { return dragObject_; }
     UIDragObject* GetDragObject() { return dragObject_; }
 
 
-    UIWidget* GetFirstChild();
+    virtual UIWidget* GetFirstChild();
     UIWidget* GetNext();
     UIWidget* GetNext();
 
 
     bool IsAncestorOf(UIWidget* widget);
     bool IsAncestorOf(UIWidget* widget);
@@ -255,18 +255,18 @@ class ATOMIC_API UIWidget : public Object, public tb::TBWidgetDelegate
     void SetIsFocusable(bool value);
     void SetIsFocusable(bool value);
 
 
     // get this or child widget with id
     // get this or child widget with id
-    UIWidget* GetWidget(const String& id);
+    virtual UIWidget* GetWidget(const String& id);
 
 
     UIView* GetView();
     UIView* GetView();
 
 
     virtual void AddChild(UIWidget* child);
     virtual void AddChild(UIWidget* child);
 
 
-    void AddChildAfter(UIWidget* child, UIWidget* otherChild);
-    void AddChildBefore(UIWidget* child, UIWidget* otherChild);
+    virtual void AddChildAfter(UIWidget* child, UIWidget* otherChild);
+    virtual void AddChildBefore(UIWidget* child, UIWidget* otherChild);
 
 
     /// Add the child to this widget. See AddChild for adding a child to the top or bottom.
     /// Add the child to this widget. See AddChild for adding a child to the top or bottom.
     /// This takes a relative Z and insert the child before or after the given reference widget.
     /// This takes a relative Z and insert the child before or after the given reference widget.
-    void AddChildRelative(UIWidget* child, UI_WIDGET_Z_REL z, UIWidget* reference);
+    virtual void AddChildRelative(UIWidget* child, UI_WIDGET_Z_REL z, UIWidget* reference);
 
 
     void InvalidateLayout();
     void InvalidateLayout();
 
 

+ 48 - 0
Source/ThirdParty/TurboBadger/tb_toggle_container.cpp

@@ -50,6 +50,15 @@ TBSection::TBSection()
     m_layout.SetGravity(WIDGET_GRAVITY_ALL);
     m_layout.SetGravity(WIDGET_GRAVITY_ALL);
     m_layout.SetLayoutSize(LAYOUT_SIZE_AVAILABLE);
     m_layout.SetLayoutSize(LAYOUT_SIZE_AVAILABLE);
 
 
+    // ATOMIC BEGIN
+    m_toggle_container_layout.SetSkinBg(TBIDC("TBSection.layout"), WIDGET_INVOKE_INFO_NO_CALLBACKS);
+    m_toggle_container_layout.SetAxis(AXIS_Y);
+    m_toggle_container_layout.SetGravity(WIDGET_GRAVITY_ALL);
+    m_toggle_container_layout.SetLayoutSize(LAYOUT_SIZE_AVAILABLE);
+
+    m_toggle_container.AddChild(&m_toggle_container_layout);
+    // ATOMIC END
+
     AddChild(&m_layout);
     AddChild(&m_layout);
     m_layout.AddChild(&m_header);
     m_layout.AddChild(&m_header);
     m_layout.AddChild(&m_toggle_container);
     m_layout.AddChild(&m_toggle_container);
@@ -57,6 +66,13 @@ TBSection::TBSection()
 
 
 TBSection::~TBSection()
 TBSection::~TBSection()
 {
 {
+    // ATOMIC BEGIN
+    while (TBWidget* child = m_toggle_container_layout.GetFirstChild())
+    {
+        m_toggle_container_layout.RemoveChild(child);
+    }
+    m_toggle_container.RemoveChild(&m_toggle_container_layout);
+    // ATOMIC END
     m_layout.RemoveChild(&m_toggle_container);
     m_layout.RemoveChild(&m_toggle_container);
     m_layout.RemoveChild(&m_header);
     m_layout.RemoveChild(&m_header);
     RemoveChild(&m_layout);
     RemoveChild(&m_layout);
@@ -68,6 +84,38 @@ void TBSection::SetValue(int value)
     m_toggle_container.SetValue(value);
     m_toggle_container.SetValue(value);
 }
 }
 
 
+// ATOMIC BEGIN
+void TBSection::AddToggleChild(TBWidget *child, WIDGET_Z z, WIDGET_INVOKE_INFO info)
+{
+    m_toggle_container_layout.AddChild(child, z, info);
+}
+
+void TBSection::AddToggleChildRelative(TBWidget *child, WIDGET_Z_REL z, TBWidget *reference, WIDGET_INVOKE_INFO info)
+{
+    m_toggle_container_layout.AddChildRelative(child, z, reference, info);
+}
+
+void TBSection::RemoveToggleChild(TBWidget* child)
+{
+    m_toggle_container_layout.RemoveChild(child);
+}
+
+void TBSection::DeleteAllToggleChildren()
+{
+    m_toggle_container_layout.DeleteAllChildren();
+}
+
+TBWidget* TBSection::GetFirstToggleChild()
+{
+    return m_toggle_container_layout.GetFirstChild();
+}
+
+TBWidget* TBSection::GetToggleWidgetById(const TBID &id)
+{
+    return m_toggle_container_layout.GetWidgetByTouchId(id);
+}
+// ATOMIC END
+
 void TBSection::OnProcessAfterChildren()
 void TBSection::OnProcessAfterChildren()
 {
 {
     if (m_pending_scroll)
     if (m_pending_scroll)

+ 13 - 0
Source/ThirdParty/TurboBadger/tb_toggle_container.h

@@ -104,6 +104,15 @@ public:
     virtual void SetValue(int value);
     virtual void SetValue(int value);
     virtual int GetValue() { return m_toggle_container.GetValue(); }
     virtual int GetValue() { return m_toggle_container.GetValue(); }
 
 
+    // ATOMIC BEGIN
+    virtual void AddToggleChild(TBWidget *child, WIDGET_Z z = WIDGET_Z_TOP, WIDGET_INVOKE_INFO info = WIDGET_INVOKE_INFO_NORMAL);
+    virtual void AddToggleChildRelative(TBWidget *child, WIDGET_Z_REL z, TBWidget *reference, WIDGET_INVOKE_INFO info = WIDGET_INVOKE_INFO_NORMAL);
+    virtual void RemoveToggleChild(TBWidget* child);
+    virtual void DeleteAllToggleChildren();
+    virtual TBWidget* GetFirstToggleChild();
+    virtual TBWidget* GetToggleWidgetById(const TBID &id);
+    // ATOMIC END
+
     virtual TBWidget *GetContentRoot() { return m_toggle_container.GetContentRoot(); }
     virtual TBWidget *GetContentRoot() { return m_toggle_container.GetContentRoot(); }
     virtual void OnProcessAfterChildren();
     virtual void OnProcessAfterChildren();
 
 
@@ -113,6 +122,10 @@ private:
     TBSectionHeader m_header;
     TBSectionHeader m_header;
     TBToggleContainer m_toggle_container;
     TBToggleContainer m_toggle_container;
     bool m_pending_scroll;
     bool m_pending_scroll;
+
+    // ATOMIC BEGIN
+    TBLayout m_toggle_container_layout;
+    // ATOMIC END
 };
 };
 
 
 }; // namespace tb
 }; // namespace tb