Browse Source

Handle deleting children in a UIListView

Josh Engebretson 10 years ago
parent
commit
7e86eb4ff8
2 changed files with 34 additions and 8 deletions
  1. 32 0
      Source/Atomic/UI/UIListView.cpp
  2. 2 8
      Source/AtomicJS/Packages/Atomic/Core.json

+ 32 - 0
Source/Atomic/UI/UIListView.cpp

@@ -28,6 +28,19 @@ public:
 
     bool GetExpanded() { return expanded_; }
 
+    void GetChildren(PODVector<ListViewItem*>& children, bool recursive = false)
+    {
+        children += children_;
+
+        if (recursive)
+        {
+            for (unsigned i = 0; i < children_.Size(); i++)
+            {
+                children_[i]->GetChildren(children, recursive);
+            }
+        }
+    }
+
     void SetExpanded(bool expanded)
     {
         expanded_ = expanded;
@@ -323,10 +336,29 @@ void UIListView::DeleteItemByID(const String& id)
         if (source_->GetItemID(i) == tbid)
         {
             ListViewItem* item = source_->GetItem(i);
+
             if (item->parent_)
                 item->parent_->children_.Remove(item);
 
+            PODVector<ListViewItem*> children;
+
+            item->GetChildren(children, true);
+
+            for (unsigned j = 0; j < children.Size(); j++)
+            {
+                for (int k = 0; k <  source_->GetNumItems(); k++)
+                {
+                    if (children[j] == source_->GetItem(k))
+                    {
+                        source_->DeleteItem(k);
+                        break;
+
+                    }
+                }
+            }
+
             source_->DeleteItem(i);
+
             return;
         }
     }

+ 2 - 8
Source/AtomicJS/Packages/Atomic/Core.json

@@ -7,9 +7,7 @@
 	},
 	"excludes" : {
 		"Object" : {
-			"SendEvent" : ["StringHash"],
-			"UnsubscribeFromEvents" : ["Object"],
-			"UnsubscribeFromAllEvents" : []
+			"SendEvent" : ["StringHash"]
 		}
 	},
 	"typescript_decl" : {
@@ -17,11 +15,7 @@
 		"Object" : [
 			"sendEvent(eventType:string, data?:Object);",
 			"subscribeToEvent(eventType:string, callback:(data:any)=>void);",
-			"subscribeToEvent(sender:AObject, eventType:string, callback:(data:any)=>void);",
-			"unsubscribeFromAllEvents();",
-			"unsubscribeFromEvent(event:String);",
-			"unsubscribeFromEvents(sender:Atomic.AObject);",
-			"unsubscribeFromSenderEvent(sender:Atomic.AObject, event:String);"
+			"subscribeToEvent(sender:AObject, eventType:string, callback:(data:any)=>void);"
 		]
 	}
 }