private void Refinery_RetrieveVirtualItem(object a_Sender, RetrieveVirtualItemEventArgs a_QueryArgs) { MainListItem listItem = m_ItemList[a_QueryArgs.ItemIndex]; Object[] columnData = GetListItemColumnData(listItem); a_QueryArgs.Item = new ListViewItem(); ListViewItem.ListViewSubItemCollection subitems = a_QueryArgs.Item.SubItems; bool isQuantityOk = (m_SelectedAssets != null) && m_Engine.m_Settings.Appearance.UseAssetQuantities; for (int i = 0; i < (int)Columns.MaxColumns; i++) { subitems.Add(new ListViewItem.ListViewSubItem()); } if (!ItemPrice.IsValidPrice((double)columnData[(int)Columns.MarketPrice])) { a_QueryArgs.Item.BackColor = Color.White; } else { a_QueryArgs.Item.BackColor = m_Engine.GetPriceColor((double)columnData[(int)Columns.RefinedCost], (double)columnData[(int)Columns.MarketPrice], isQuantityOk); } subitems[(int)Columns.Name].Text = (string)columnData[(int)Columns.Name]; subitems[(int)Columns.MetaLevel].Text = columnData[(int)Columns.MetaLevel].ToString(); subitems[(int)Columns.RefinedCost].Text = ItemPrice.FormatPrice((double)columnData[(int)Columns.RefinedCost]); subitems[(int)Columns.MarketPrice].Text = ItemPrice.FormatPrice((double)columnData[(int)Columns.MarketPrice]); subitems[(int)Columns.PriceDelta].Text = ItemPrice.FormatPrice((double)columnData[(int)Columns.PriceDelta]); subitems[(int)Columns.Yield].Text = String.Format("{0:0.00%}", (double)columnData[(int)Columns.Yield]); subitems[(int)Columns.Tritanium].Text = Engine.FormatDouble((double)columnData[(int)Columns.Tritanium]); subitems[(int)Columns.Pyerite].Text = Engine.FormatDouble((double)columnData[(int)Columns.Pyerite]); subitems[(int)Columns.Mexallon].Text = Engine.FormatDouble((double)columnData[(int)Columns.Mexallon]); subitems[(int)Columns.Isogen].Text = Engine.FormatDouble((double)columnData[(int)Columns.Isogen]); subitems[(int)Columns.Noxcium].Text = Engine.FormatDouble((double)columnData[(int)Columns.Noxcium]); subitems[(int)Columns.Zydrine].Text = Engine.FormatDouble((double)columnData[(int)Columns.Zydrine]); subitems[(int)Columns.Megacyte].Text = Engine.FormatDouble((double)columnData[(int)Columns.Megacyte]); subitems[(int)Columns.Morphite].Text = Engine.FormatDouble((double)columnData[(int)Columns.Morphite]); subitems[(int)Columns.Quantity].Text = String.Format("{0:#,0}", columnData[(int)Columns.Quantity]); subitems[(int)Columns.Type].Text = (string)columnData[(int)Columns.Type]; double lossPercent = (double)columnData[(int)Columns.LossPercent]; bool isInvalidLossPercent = double.IsInfinity(lossPercent); subitems[(int)Columns.LossPercent].Text = isInvalidLossPercent ? "" : String.Format("{0:d}%", (int)(100 * lossPercent)); subitems[(int)Columns.Volume].Text = Engine.FormatDouble((double)columnData[(int)Columns.Volume]); subitems[(int)Columns.RefinedVolume].Text = Engine.FormatDouble((double)columnData[(int)Columns.RefinedVolume]); }
protected override int CompareItems(MainListItem a_Left, MainListItem a_Right) { Object[] leftColumns = (Object[])m_ColumnData[a_Left.TypeID]; Object[] rightColumns = (Object[])m_ColumnData[a_Right.TypeID]; Object lhs = leftColumns[(int)m_Column]; Object rhs = rightColumns[(int)m_Column]; if (lhs is String) { return(String.Compare((string)lhs, (string)rhs, StringComparison.OrdinalIgnoreCase)); } return(Comparer.DefaultInvariant.Compare(leftColumns[(int)m_Column], rightColumns[(int)m_Column])); }
/// <summary> /// Fills m_ItemList with data /// </summary> /// <param name="a_ListTypeIDs">TypeIDs of items to be filled into list</param> /// <param name="a_Assets">Null or Assets to be listed</param> private void SetupListItemsData(UInt32[] a_ListTypeIDs, AssetsMap a_Assets) { m_TotalsItem = null; List <MainListItem> specialItems = new List <MainListItem>(); if (a_Assets != null) { m_TotalsItem = new MainListItem(); m_TotalsItem.TypeID = SpecialTypeID_Totals; m_TotalsItem.ItemData = CreateSpecialItem_Totals(); m_TotalsItem.Quantity = 0; specialItems.Add(m_TotalsItem); } m_ItemList = new MainListItem[specialItems.Count + a_ListTypeIDs.Count()]; for (int i = 0; i < specialItems.Count; i++) { m_ItemList[i] = specialItems[i]; } for (int i = 0; i < a_ListTypeIDs.Count(); i++) { UInt32 currTypeID = a_ListTypeIDs[i]; MainListItem currItem = new MainListItem(); m_ItemList[specialItems.Count + i] = currItem; ItemAssets currAssets = null; if ((a_Assets != null) && a_Assets.ContainsKey(currTypeID)) { currAssets = (ItemAssets)a_Assets[currTypeID]; } currItem.TypeID = currTypeID; currItem.ItemData = m_ItemsDB.GetItemByTypeID(currTypeID); if (currAssets == null) { currItem.Quantity = 1; } else { currItem.Quantity = currAssets.Quantity; } } }
int IComparer.Compare(Object a_Left, Object a_Right) { MainListItem lhs = (MainListItem)a_Left; MainListItem rhs = (MainListItem)a_Right; bool isLhsTotals = (lhs.TypeID == SpecialTypeID_Totals); bool isRhsTotals = (rhs.TypeID == SpecialTypeID_Totals); if (isLhsTotals && isRhsTotals) { return(0); } else if (isLhsTotals) { return(-1); } else if (isRhsTotals) { return(1); } return(m_SortDirection * CompareItems(lhs, rhs)); }
protected abstract int CompareItems(MainListItem a_Left, MainListItem a_Right);
private Object[] GetListItemColumnData(MainListItem a_ListItem) { Object[] result = new Object[(int)Columns.MaxColumns]; bool isQuantityOk = (m_SelectedAssets != null) && m_Engine.m_Settings.Appearance.UseAssetQuantities; UInt32 quantity = isQuantityOk ? a_ListItem.Quantity : 1; bool isTotals = (a_ListItem.ItemData.TypeID == SpecialTypeID_Totals); if (isTotals) { quantity = 1; } lock (a_ListItem.ItemData) { ItemPrice prices = m_Engine.GetItemPrices(a_ListItem.ItemData, m_ItemsDB.GetMutators(), quantity); result[(int)Columns.Name] = a_ListItem.ItemData.ItemName; result[(int)Columns.MetaLevel] = a_ListItem.ItemData.MetaLevel; result[(int)Columns.RefinedCost] = prices.RefinedCost; result[(int)Columns.MarketPrice] = prices.MarketPrice; result[(int)Columns.PriceDelta] = prices.PriceDelta; result[(int)Columns.Yield] = m_Engine.GetEffectiveYield(a_ListItem.ItemData, m_ItemsDB.GetMutators()); double refinedVolume = 0; Columns[] materialColumns = new Columns[] { Columns.Tritanium, Columns.Pyerite, Columns.Mexallon, Columns.Isogen, Columns.Noxcium, Columns.Zydrine, Columns.Megacyte, Columns.Morphite }; Materials[] columnMaterials = new Materials[] { Materials.Tritanium, Materials.Pyerite, Materials.Mexallon, Materials.Isogen, Materials.Noxcium, Materials.Zydrine, Materials.Megacyte, Materials.Morphite }; for (int i = 0; i < materialColumns.Length; i++) { Columns currColumn = materialColumns[i]; Materials currMaterial = columnMaterials[i]; double materialAmount = 0; if (isTotals) { materialAmount = a_ListItem.ItemData.MaterialAmount[(UInt32)currMaterial]; } else { materialAmount = m_Engine.GetEffectiveRefineQuota(a_ListItem.ItemData, m_ItemsDB.GetMutators(), quantity, currMaterial); } refinedVolume += materialAmount * MaterialsInfo.GetMaterialVolume(currMaterial); result[(int)currColumn] = materialAmount; } result[(int)Columns.Quantity] = a_ListItem.Quantity; result[(int)Columns.Type] = a_ListItem.ItemData.TypeSortString; double lossPercent = 0; if (!ItemPrice.IsValidPrice(prices.MarketPrice)) { lossPercent = double.PositiveInfinity; } else { lossPercent = (prices.MarketPrice - prices.RefinedCost) / prices.MarketPrice; } result[(int)Columns.LossPercent] = lossPercent; result[(int)Columns.Volume] = quantity * a_ListItem.ItemData.Volume; result[(int)Columns.RefinedVolume] = refinedVolume; } return(result); }