/// <summary> /// Clear all the items (named or anonymous). /// </summary> /// <param name="recursive"></param> public void ClearItems(bool recursive = false) { if (OnItemRemoved != null) { foreach (var kvp in Items) { OnItemRemoved(kvp.Key, kvp.Value); } foreach (var item in AnonymousItems) { OnItemRemoved(null, item); } Items.Clear(); AnonymousItems.Clear(); } else { Items.Clear(); AnonymousItems.Clear(); } if (recursive) { foreach (var subnode in Subnodes.Values) { subnode.ClearItems(recursive); } } }
private bool RemoveAnonymousItem(Queue <string> nameParts, U item, bool failQuiet) { if (nameParts.Count == 0) { var removed = AnonymousItems.Remove(item); if (OnItemRemoved != null) { OnItemRemoved(null, item); } return(removed); } else { var first = nameParts.Dequeue(); if (!Subnodes.ContainsKey(first)) { if (failQuiet) { return(false); } throw new UriTreeException( String.Format( "Could not remove item '{0}' from group with full name '{1}'; " + "missing intermediate node with name '{2}'.", item, FullName, first ) ); } return(Subnodes[first].RemoveAnonymousItem(nameParts, item, failQuiet)); } }
private void AddAnonymousItem(Queue <string> nameParts, U item) { if (nameParts.Count == 0) { AnonymousItems.Add(item); if (OnItemAdded != null) { OnItemAdded(null, item); } } else { var first = nameParts.Dequeue(); if (!Subnodes.ContainsKey(first)) { throw new UriTreeException( String.Format( "Could not add item '{0}' to group with full name '{1}'; " + "missing intermediate node with name '{2}'. Consider using InsertItem instead.", item, FullName, first ) ); } Subnodes[first].AddAnonymousItem(nameParts, item); } }
/// <summary> /// Remove an anonymous item from this group. /// </summary> /// <param name="item"></param> public bool RemoveAnonymousItem(U item, bool searchRecursive = true) { if (!AnonymousItems.Remove(item) && searchRecursive) { if (IsLeaf) { return(false); } return(Subnodes.Any(kvp => kvp.Value.RemoveAnonymousItem(item, searchRecursive))); } if (OnItemRemoved != null) { OnItemRemoved(null, item); } return(true); }
private void InsertAnonymousItem <NodeType>(Queue <string> nameParts, U item) where NodeType : UriTreeMutableGroup <T, U> { if (nameParts.Count == 0) { AnonymousItems.Add(item); if (OnItemAdded != null) { OnItemAdded(null, item); } } else { var first = nameParts.Dequeue(); if (!Subnodes.ContainsKey(first)) { var newNode = (T)Activator.CreateInstance(typeof(NodeType), first); newNode.SetParent((T)this); } Subnodes[first].InsertAnonymousItem <NodeType>(nameParts, item); } }
/// <summary> /// Add an anonymous item to this group. /// </summary> /// <param name="item"></param> public void AddAnonymousItem(U item) { AnonymousItems.Add(item); }