public void AddUpdateOrder(ulong orderID, OrderInfo order) { if (order.status == OrderStatus.Filled || order.status == OrderStatus.Cancelled || order.status == OrderStatus.Rejected) { Lvl2TableObj oldOrd; if (_orderDict.TryRemove(orderID, out oldOrd)) { lock (_bindingList) { _bindingList.Remove(oldOrd); } } } else if (_orderDict.ContainsKey(orderID)) { _orderDict[orderID].UpdateOrder(order); } else { Lvl2TableObj obj = new Lvl2TableObj(order, orderID); _orderDict.TryAdd(orderID, obj); lock (_bindingList) { _bindingList.Add(obj); } } }
private void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e) { if (_perfEnabled) { PerfAnalyzer.startTime(_perfLabel + "_RowColoringTime"); } GridView view = sender as GridView; Lvl2TableObj cellObject = null; lock (_bindingList) { if (_bindingList.Count > gridView1.GetDataSourceRowIndex(e.RowHandle)) { cellObject = _bindingList[gridView1.GetDataSourceRowIndex(e.RowHandle)]; } } if (cellObject != null) { if (cellObject.IsOurOrder) { if (e.Column.Caption.Equals("Exch")) { e.Appearance.BackColor = Color.Red; e.Appearance.ForeColor = Color.White; } else { e.Appearance.BackColor = Color.Black; e.Appearance.ForeColor = Color.White; } } else { float px = cellObject.Price; for (int j = 0; j < _sortedPriceLvls.Length; j++) { if (_sortedPriceLvls.ElementAt(j) == px) { e.Appearance.BackColor = _priceLevelBGColors[j % 6]; } } } if (_perfEnabled) { PerfAnalyzer.endTime(_perfLabel + "_RowColoringTime"); } } }
private void gridView1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { _mouseUpHit = gridView1.CalcHitInfo(new Point(e.X, e.Y)); if (_mouseUpHit.InDataRow) { Lvl2TableObj selected = _bindingList[gridView1.GetDataSourceRowIndex(_mouseUpHit.RowHandle)]; if (_mouseUpHit.Column.Caption.Equals("Exch") && selected.IsOurOrder && selected.OrderID == _mouseDownOrderID) { OnOrderCancel?.Invoke(selected.OrderID); } } } }
private void gridView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { _mouseDownOrderID = 0; _mouseDownHit = gridView1.CalcHitInfo(new Point(e.X, e.Y)); if (_mouseDownHit.InDataRow) { Lvl2TableObj selected = _bindingList[gridView1.GetDataSourceRowIndex(_mouseDownHit.RowHandle)]; if (_mouseDownHit.Column.Caption.Equals("Exch") && (selected.IsOurOrder)) { _mouseDownOrderID = selected.OrderID; } OnRowClicked?.Invoke(selected.Exch, selected.Price, selected.Size); } } }
private void RepopulateGrid() { QuoteBookStruct book = mergeQuoteBooks(); //if the book is empty, remove all exchange quotes (can't just clear list or our orders will be removes as well) if ((_buy && book.NumBid == 0 || (!_buy && book.NumAsk == 0))) { foreach (byte key in _exchBookDict.Keys) { Lvl2TableObj obj; _exchBookDict.TryRemove(key, out obj); lock (_bindingList) { _bindingList.Remove(obj); } } } else { //if any exchange has a quote in our dictionary, but not the latest quotebook, it doesn't exist anymore, so remove it foreach (byte key in _exchBookDict.Keys) { if ((_buy && !book.BidExch.Contains(key)) || (!_buy && !book.AskExch.Contains(key))) { Lvl2TableObj obj; _exchBookDict.TryRemove(key, out obj); lock (_bindingList) { _bindingList.Remove(obj); } } } } if (_perfEnabled) { PerfAnalyzer.startTime(_perfLabel + "_SetAllOrdersTime"); } _priceLevels.Clear(); List <OrderBook> books = ConvertQuoteBookToOrders(book); foreach (OrderBook b in books) { _priceLevels.Add(b._ordprc); if (_exchBookDict.ContainsKey(b._exch)) { _exchBookDict[b._exch].UpdateQuote(b); } else { Lvl2TableObj obj = new Lvl2TableObj(b); _exchBookDict.TryAdd(b._exch, obj); lock (_bindingList) { _bindingList.Add(obj); } } } _sortedPriceLvls = _buy ? _priceLevels.Reverse().ToArray() : _priceLevels.ToArray(); if (_perfEnabled) { PerfAnalyzer.endTime(_perfLabel + "_SetAllOrdersTime"); } }