public void AddItem(object item, string categoryName) { int index; List <object> category; if (!m_categories.TryGetValue(categoryName, out category)) { index = m_categories.Count; category = new List <object>(); m_categories.Add(categoryName, category); ItemInserted.Raise(this, new ItemInsertedEventArgs <object>(index, categoryName, this)); } index = category.Count; category.Add(item); ItemInserted.Raise(this, new ItemInsertedEventArgs <object>(index, item, categoryName)); }
private void DomNode_ChildInserted(object sender, ChildEventArgs e) { AddNode(e.Child); if (IsCircuitItem(e.Child, e.Parent)) { if (e.Child.Is <Wire>()) { var connection = e.Child.Cast <Wire>(); if (connection.InputElement.Is <Group>()) // set dirty to force update group pin connectivity { connection.InputElement.Cast <Group>().Dirty = true; } if (connection.OutputElement.Is <Group>()) { connection.OutputElement.Cast <Group>().Dirty = true; } } ItemInserted.Raise(this, new ItemInsertedEventArgs <object>(e.Index, e.Child, e.Parent)); var circuitValidator = DomNode.GetRoot().As <CircuitValidator>(); if (circuitValidator != null) { var transactionContext = circuitValidator.ActiveHistoryContext; if (transactionContext != null && transactionContext != this) { if (transactionContext.DomNode.Ancestry.FirstOrDefault(x => x == e.Parent) != null) { if (transactionContext.InTransaction) { transactionContext.AddOperation(new ChildInsertedOperation(e)); #if DEBUG_VERBOSE var parent = transactionContext.DomNode.Ancestry.FirstOrDefault(x => x == e.Parent); Trace.TraceInformation("PARENT GRAPH {0} -- Added {1} to parent {2}", CircuitUtil.GetDomNodeName(parent), CircuitUtil.GetDomNodeName(e.Child), CircuitUtil.GetDomNodeName(e.Parent)); #endif } } } } } }
private void GenerateVirtual() { var items = s_random.Next(10000, 100001); Outputs.WriteLine( OutputMessageType.Info, "Adding {0} items to the virtual list.", items); var arrayItems = new object[items]; for (var i = 0; i < items; i++) { var data = CreateItem(null); data.ItemChanged += DataItemChanged; arrayItems[i] = data; m_data.Add(data); } // Can accept an array of objects or single object ItemInserted.Raise(this, new ItemInsertedEventArgs <object>(-1, arrayItems)); }
private void GenerateHierarchical(DataItem parent) { DataItem root = null; var tempParent = parent; var items = s_random.Next(3, 10); for (var i = 0; i < items; i++) { var data = CreateItem(tempParent); data.ItemChanged += DataItemChanged; if (root == null) { root = data; } if (tempParent == null) { m_data.Add(data); } else { tempParent.Children.Add(data); } tempParent = data; } ItemInserted.Raise(this, new ItemInsertedEventArgs <object>(-1, root, parent)); if (parent != null) { ItemChanged.Raise(this, new ItemChangedEventArgs <object>(parent)); } }
private void root_ChildInserted(object sender, ChildEventArgs e) { ItemInserted.Raise(this, new ItemInsertedEventArgs <object>(-1, e.Child, e.Parent)); }
void DomNode_ChildInserted(object sender, ChildEventArgs e) { ItemInserted.Raise(this, new ItemInsertedEventArgs <object>(e.Index, e.Child, e.Parent)); }
/// <summary> /// /// </summary> /// <param name="Item"></param> /// <param name="Index"></param> protected virtual void OnItemInserted(T Item, int Index) { itemInserted?.Invoke(this, new EventArgs <object>(Item, Index)); ItemInserted?.Invoke(this, new EventArgs <T>(Item, Index)); }
/// <summary> /// Raises the ItemInserted event and performs custom processing</summary> /// <param name="e">ItemInsertedEventArgs containing event data</param> protected virtual void OnObjectInserted(ItemInsertedEventArgs <object> e) { ItemInserted.Raise(this, e); }
/// <summary> /// Add's the given item, with the given amount to the pool. /// Amount will be batched automatically based on max stack size. /// </summary> /// <param name="newItem"></param> /// <param name="amount"></param> public bool Add(T newItem, int amount, out string message) { message = string.Empty; if (amount <= 0) { throw new Exception("[ItemInsert]: Item amount cannot be zero or less."); } // Seperate into batches, if the amount is too much. if (amount > _maxStackSize) { var seperateAmount = Mathf.CeilToInt((float)amount / _maxStackSize); int totalAmount = amount; int leftOver = totalAmount; for (int i = 0; i < seperateAmount; i++) { if (leftOver >= _maxStackSize) { if (!Add(newItem, _maxStackSize, out message)) { return(false); } } else if (leftOver > 0) { if (!Add(newItem, leftOver, out message)) { return(false); } } leftOver -= _maxStackSize; if (leftOver <= 0) { break; } } return(true); } var validItems = _items .Where(a => a != null && a.Item.Id == newItem.Id && a.Amount < _maxStackSize) .OrderByDescending(a => a.Amount); // Add amount to existing items in the inventory already int totalValidAmount = amount; foreach (var item in validItems) { int differenceAmount = _maxStackSize - item.Amount; if (totalValidAmount >= differenceAmount) { totalValidAmount -= differenceAmount; int oldAmount = item.Amount; item.Amount += differenceAmount; ItemUpdated?.Invoke(this, new InventoryArgs(item.Item, oldAmount, item.Amount)); RenderChange(Array.IndexOf(_items, item), item); } else { int oldAmount = item.Amount; item.Amount += totalValidAmount; ItemUpdated?.Invoke(this, new InventoryArgs(item.Item, oldAmount, item.Amount)); RenderChange(Array.IndexOf(_items, item), item); totalValidAmount = 0; } if (totalValidAmount == 0) { break; } } // Add new item, if there is still amount left if (totalValidAmount > 0) { if (_items.All(a => a != null)) { if (amount - totalValidAmount == 0) { message = "Inventory is full."; } else { message = "Inventory is full, only added " + (amount - totalValidAmount) + " amount."; } return(false); } var item = new InventoryItem(newItem, totalValidAmount); var firstOpenIndex = Array.FindIndex(_items, a => a == null); if (firstOpenIndex == -1) { throw new Exception("Inventory is full, we shouldn't have gotten here.."); } _items[firstOpenIndex] = item; ItemInserted?.Invoke(this, new InventoryArgs(newItem, 0, item.Amount)); RenderChange(firstOpenIndex, item); } return(true); }
protected virtual void OnItemInserted(ItemInsertedEventArgs args) { ItemInserted?.Invoke(this, args); }