public void OrderModified(LogicalOrder order) { if (order.IsActive) { // Any change to an active order even if only // a price change means the list change. IsActiveOrdersChanged = true; if (!activeOrders.Contains(order)) { var newNode = nodePool.Create(order); bool found = false; var next = activeOrders.First; for (var node = next; node != null; node = next) { next = node.Next; LogicalOrder other = node.Value; if (order.CompareTo(other) < 0) { activeOrders.AddBefore(node, newNode); found = true; break; } } if (!found) { activeOrders.AddLast(newNode); } } } else { var node = activeOrders.Find(order); if (node != null) { activeOrders.Remove(node); nodePool.Free(node); // Since this order became inactive, it // means the active list changed. IsActiveOrdersChanged = true; } } if (order.IsNextBar) { if (!nextBarOrders.Contains(order)) { nextBarOrders.Add(order); } } else { if (nextBarOrders.Contains(order)) { nextBarOrders.Remove(order); } } ActiveOrdersChanged(order); }
bool MoveCurrentTo(int position, bool force, bool cancellable) { if (DeferCurrentChanged) { return(false); } object newItem = ItemAtIndex(position); bool raiseEvents = force || CurrentItem != newItem; if (raiseEvents) { CurrentChangingEventArgs e = new CurrentChangingEventArgs(cancellable && ActiveList.Contains(CurrentItem)); RaiseCurrentChanging(e); if (e.Cancel) { return(true); } } IsCurrentAfterLast = position == ActiveList.Count || ActiveList.Count == 0; IsCurrentBeforeFirst = position == -1 || ActiveList.Count == 0; UpdateCurrentPositionAndItem(position, newItem); if (raiseEvents) { RaiseCurrentChanged(EventArgs.Empty); } return(IsValidSelection); }
public override bool Contains(object item) { ThrowIfDeferred(); return(ActiveList.Contains(item)); }