public string DisplayMaterial(string name, double percent, MaterialCommoditiesList historicmatlist = null, MaterialCommoditiesList currentmatlist = null) { StringBuilder scanText = new StringBuilder(); MaterialCommodityDB mc = MaterialCommodityDB.GetCachedMaterial(name); if (mc != null) { MaterialCommodities historic = historicmatlist?.Find(mc.name); MaterialCommodities current = Object.ReferenceEquals(historicmatlist, currentmatlist) ? null : currentmatlist?.Find(mc.name); int?limit = MaterialCommodityDB.MaterialLimit(mc); string matinfo = historic?.count.ToString() ?? "0"; if (limit != null) { matinfo += "/" + limit.Value.ToString(); } if (current != null && (historic == null || historic.count != current.count)) { matinfo += " Cur " + current.count.ToString(); } scanText.AppendFormat("{0} ({1}) {2} {3}% {4}\n", mc.name, mc.shortname, mc.type, percent.ToString("N1"), matinfo); } else { scanText.AppendFormat("{0} {1}%\n", System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(name.ToLower()), percent.ToString("N1")); } return(scanText.ToNullSafeString()); }
// curmats may be null Point CreateMaterialNodes(List <ExtPictureBox.ImageElement> pc, JournalScan sn, MaterialCommoditiesList curmats, HistoryList hl, Point matpos, Size matsize) { Point startpos = matpos; Point maximum = matpos; int noperline = 0; bool noncommon = ShowMaterialsRare; string matclicktext = sn.DisplayMaterials(2, curmats, hl.GetLast?.MaterialCommodity); foreach (KeyValuePair <string, double> sd in sn.Materials) { string tooltip = sn.DisplayMaterial(sd.Key, sd.Value, curmats, hl.GetLast?.MaterialCommodity); Color fillc = Color.Yellow; string abv = sd.Key.Substring(0, 1); MaterialCommodityData mc = MaterialCommodityData.GetByFDName(sd.Key); if (mc != null) { abv = mc.Shortname; fillc = mc.Colour; if (HideFullMaterials) // check full { int?limit = mc.MaterialLimit(); MaterialCommodities matnow = curmats?.Find(mc); // allow curmats = null // debug if (matnow != null && mc.shortname == "Fe") matnow.count = 10000; if (matnow != null && limit != null && matnow.Count >= limit) // and limit { continue; } } if (noncommon && mc.IsCommonMaterial) { continue; } } CreateMaterialImage(pc, matpos, matsize, abv, tooltip + "\n\n" + "All " + matclicktext, tooltip, fillc, Color.Black); maximum = new Point(Math.Max(maximum.X, matpos.X + matsize.Width), Math.Max(maximum.Y, matpos.Y + matsize.Height)); if (++noperline == 4) { matpos = new Point(startpos.X, matpos.Y + matsize.Height + materiallinespacerxy); noperline = 0; } else { matpos.X += matsize.Width + materiallinespacerxy; } } return(maximum); }
private void comboBoxCustomAdd_SelectedIndexChanged(object sender, EventArgs e) { if (ignoresi) { return; } int i = comboBoxCustomAdd.SelectedIndex; if (i < mclist.Count) { MaterialCommodities mc = mclist[i]; int j = 0; for (; j < dataGridViewMC.Rows.Count; j++) { if (((string)(dataGridViewMC.Rows[j].Cells[namecol].Value)).Equals(mc.name)) { break; } } if (j == dataGridViewMC.Rows.Count) { if (materials) { object[] rowobj = { mc.name, mc.shortname, mc.category, mc.type, "0" }; dataGridViewMC.Rows.Add(rowobj); } else { object[] rowobj = { mc.name, mc.type, "0", "0" }; dataGridViewMC.Rows.Add(rowobj); } labelNoItems.Visible = false; } } else { dataGridViewMC.Rows.Add(); DataGridViewRow rw = dataGridViewMC.Rows[dataGridViewMC.Rows.Count - 1]; rw.Cells[typecol].ReadOnly = true; if (materials) { rw.Cells[abvcol].ReadOnly = true; } labelNoItems.Visible = false; } ignoresi = true; comboBoxCustomAdd.SelectedIndex = -1; comboBoxCustomAdd.Text = "Select another"; ignoresi = false; }
private void Display(MaterialCommoditiesList mcl) // update display. mcl can be null { last_mcl = mcl; DataGridViewColumn sortcolprev = dataGridViewMC.SortedColumn != null ? dataGridViewMC.SortedColumn : dataGridViewMC.Columns[0]; SortOrder sortorderprev = dataGridViewMC.SortedColumn != null ? dataGridViewMC.SortOrder : SortOrder.Ascending; int firstline = dataGridViewMC.SafeFirstDisplayedScrollingRowIndex(); dataGridViewMC.Rows.Clear(); textBoxItems1.Text = textBoxItems2.Text = ""; if (mcl == null) { return; } //System.Diagnostics.Debug.WriteLine("Display mcl " + mcl.GetHashCode()); string filters = GetSetting(dbFilter, "All"); //System.Diagnostics.Debug.WriteLine("Filter is " + filters); string[] filter = filters.SplitNoEmptyStartFinish(';'); bool all = filter.Length > 0 && filter[0] == "All"; bool showzeros = checkBoxShowZeros.Checked; dataViewScrollerPanel.SuspendLayout(); MaterialCommodityData[] allitems = materials ? MaterialCommodityData.GetMaterials(true) : MaterialCommodityData.GetCommodities(true); foreach (MaterialCommodityData mcd in allitems) // we go thru all items.. { if (all || filter.Contains(mcd.FDName)) // and see if they are in the filter { object[] rowobj; MaterialCommodities m = mcl.List.Find(x => string.Equals(x.Details.FDName, mcd.FDName, StringComparison.InvariantCultureIgnoreCase)); // and we see if we actually have some at this time if (showzeros || (m != null && m.Count > 0)) // if display zero, or we have some.. { string s = Recipes.UsedInRecipesByFDName(mcd.FDName, Environment.NewLine); if (materials) { int limit = mcd.MaterialLimit() ?? 0; rowobj = new[] { mcd.Name, mcd.Shortname, mcd.TranslatedCategory, mcd.TranslatedType + (limit > 0 ? " (" + limit.ToString() + ")" : ""), m != null?m.Count.ToString() : "0", s }; } else { rowobj = new[] { mcd.Name, mcd.TranslatedType, m != null?m.Count.ToString() : "0", m != null?m.Price.ToString("0.#") : "-", s }; } dataGridViewMC.Rows.Add(rowobj); dataGridViewMC.Rows[dataGridViewMC.RowCount - 1].Cells[dataGridViewMC.ColumnCount - 1].ToolTipText = s; dataGridViewMC.Rows[dataGridViewMC.RowCount - 1].Tag = s; } } } dataViewScrollerPanel.ResumeLayout(); dataGridViewMC.Sort(sortcolprev, (sortorderprev == SortOrder.Descending) ? ListSortDirection.Descending : ListSortDirection.Ascending); dataGridViewMC.Columns[sortcolprev.Index].HeaderCell.SortGlyphDirection = sortorderprev; if (firstline >= 0 && firstline < dataGridViewMC.RowCount) { dataGridViewMC.SafeFirstDisplayedScrollingRowIndex(firstline); } if (materials) { textBoxItems1.Text = mcl.DataCount.ToString(); textBoxItems2.Text = mcl.MaterialsCount.ToString(); } else { textBoxItems1.Text = mcl.CargoCount.ToString(); } }
// curmats may be null Point CreateMaterialNodes(List <ExtPictureBox.ImageElement> pc, JournalScan sn, MaterialCommoditiesList curmats, HistoryList hl, Point matpos, Size matsize) { Point startpos = matpos; Point maximum = matpos; int noperline = 0; string matclicktext = sn.DisplayMaterials(2, curmats, hl.GetLast?.MaterialCommodity); foreach (KeyValuePair <string, double> sd in sn.Materials) { string tooltip = sn.DisplayMaterial(sd.Key, sd.Value, curmats, hl.GetLast?.MaterialCommodity); Color fillc = Color.Yellow; string abv = sd.Key.Substring(0, 1); MaterialCommodityData mc = MaterialCommodityData.GetByFDName(sd.Key); if (mc != null) { abv = mc.Shortname; fillc = mc.Colour; if (HideFullMaterials) // check full { int?limit = mc.MaterialLimit(); MaterialCommodities matnow = curmats?.Find(mc); // allow curmats = null // debug if (matnow != null && mc.shortname == "Fe") matnow.count = 10000; if (matnow != null && limit != null && matnow.Count >= limit) // and limit { continue; } } if (ShowOnlyMaterialsRare && mc.IsCommonMaterial) { continue; } } System.Drawing.Imaging.ColorMap colormap = new System.Drawing.Imaging.ColorMap(); colormap.OldColor = Color.White; // this is the marker colour to replace colormap.NewColor = fillc; Bitmap mat = BaseUtils.BitMapHelpers.ReplaceColourInBitmap((Bitmap)Icons.Controls.Scan_Bodies_Material, new System.Drawing.Imaging.ColorMap[] { colormap }); BaseUtils.BitMapHelpers.DrawTextCentreIntoBitmap(ref mat, abv, stdfont, Color.Black); ExtPictureBox.ImageElement ie = new ExtPictureBox.ImageElement( new Rectangle(matpos.X, matpos.Y, matsize.Width, matsize.Height), mat, tooltip + "\n\n" + "All " + matclicktext, tooltip); pc.Add(ie); maximum = new Point(Math.Max(maximum.X, matpos.X + matsize.Width), Math.Max(maximum.Y, matpos.Y + matsize.Height)); if (++noperline == 4) { matpos = new Point(startpos.X, matpos.Y + matsize.Height + materiallinespacerxy); noperline = 0; } else { matpos.X += matsize.Width + materiallinespacerxy; } } return(maximum); }
private void Display(MaterialCommoditiesList mcl) { dataGridViewMC.Rows.Clear(); textBoxItems1.Text = textBoxItems2.Text = ""; if (mcl == null) { return; } string[] filter = EliteDangerousCore.DB.SQLiteDBClass.GetSettingString(DbFilterSave, "All").SplitNoEmptyStartFinish(';'); bool all = filter.Length > 0 && filter[0] == "All"; bool clearzero = checkBoxClear.Checked; MaterialCommodityData[] allitems = materials ? MaterialCommodityData.GetMaterials(true) : MaterialCommodityData.GetCommodities(true); foreach (MaterialCommodityData mcd in allitems) // we go thru all items.. { if (all || filter.Contains(mcd.FDName)) // and see if they are in the filter { object[] rowobj; MaterialCommodities m = mcl.List.Find(x => x.Details.Name == mcd.Name); // and we see if we actually have some at this time if (!clearzero || (m != null && m.Count > 0)) // if display zero, or we have some.. { if (materials) { int limit = mcd.MaterialLimit() ?? 0; rowobj = new[] { mcd.Name, mcd.Shortname, mcd.TranslatedCategory, mcd.TranslatedType + (limit > 0 ? " (" + limit.ToString() + ")" : ""), m != null?m.Count.ToString() : "0" }; } else { rowobj = new[] { mcd.Name, mcd.TranslatedType, m != null?m.Count.ToString() : "0", m != null?m.Price.ToString("0.#") : "-" }; } dataGridViewMC.Rows.Add(rowobj); } } } if (dataGridViewMC.SortedColumn != null && dataGridViewMC.SortOrder != SortOrder.None) { dataGridViewMC.Sort(dataGridViewMC.SortedColumn, dataGridViewMC.SortOrder == SortOrder.Descending ? ListSortDirection.Descending : ListSortDirection.Ascending); } if (materials) { textBoxItems1.Text = mcl.DataCount.ToStringInvariant(); textBoxItems2.Text = mcl.MaterialsCount.ToStringInvariant(); } else { textBoxItems1.Text = mcl.CargoCount.ToStringInvariant(); } }
private void buttonExtApply_Click(object sender, EventArgs e) { List <MaterialCommodities> mcchange = new List <MaterialCommodities>(); bool updateddb = false; for (int i = 0; i < last_mc.Count; i++) { string name = (string)dataGridViewMC.Rows[i].Cells[namecol].Value; string abv = (abvcol >= 0) ? (string)dataGridViewMC.Rows[i].Cells[abvcol].Value : last_mc[i].shortname; string cat = (catcol >= 0) ? (string)dataGridViewMC.Rows[i].Cells[catcol].Value : last_mc[i].category; string type = (string)dataGridViewMC.Rows[i].Cells[typecol].Value; if (!last_mc[i].name.Equals(name) || !last_mc[i].shortname.Equals(abv) || !last_mc[i].category.Equals(cat) || !last_mc[i].type.Equals(type)) { //System.Diagnostics.Debug.WriteLine("Row " + i + " changed text"); MaterialCommodities.ChangeDbText(last_mc[i].fdname, name, abv, cat, type); updateddb = true; } int numvalue = 0; int.TryParse((string)dataGridViewMC.Rows[i].Cells[numcol].Value, out numvalue); double price = 0; bool pricechange = false; if (!materials) { double.TryParse((string)dataGridViewMC.Rows[i].Cells[pricecol].Value, out price); pricechange = Math.Abs(last_mc[i].price - price) >= 0.01; } if (last_mc[i].count != numvalue || pricechange) { mcchange.Add(new MaterialCommodities(0, last_mc[i].category, last_mc[i].name, last_mc[i].fdname, "", "", Color.Red, 0, numvalue, (pricechange) ? price : 0)); //System.Diagnostics.Debug.WriteLine("Row " + i + " changed number"); } } for (int i = last_mc.Count; i < dataGridViewMC.Rows.Count; i++) // these have been added { string name = (string)dataGridViewMC.Rows[i].Cells[namecol].Value; string cat = (materials) ? (string)dataGridViewMC.Rows[i].Cells[catcol].Value : MaterialCommodities.CommodityCategory; string fdname = Tools.FDName(name); int numvalue = 0; bool numok = int.TryParse((string)dataGridViewMC.Rows[i].Cells[numcol].Value, out numvalue); double price = 0; if (!materials) { double.TryParse((string)dataGridViewMC.Rows[i].Cells[pricecol].Value, out price); } if (numok && cat.Length > 0 && name.Length > 0) { mcchange.Add(new MaterialCommodities(0, cat, name, fdname, "", "", Color.Red, 0, numvalue, price)); } } DisableEditing(); if (OnChangedCount != null) { OnChangedCount(mcchange); } else if (updateddb && OnRequestRefresh != null) { OnRequestRefresh(); } }
private void Display(MaterialCommoditiesList mcl) { if (mcl == last_mcl) // same list, nothing to do { //System.Diagnostics.Debug.WriteLine("Same mcl " + mcl?.GetHashCode()); return; } last_mcl = mcl; //System.Diagnostics.Debug.WriteLine("Display mcl " + mcl.GetHashCode()); DataGridViewColumn sortcolprev = dataGridViewMC.SortedColumn != null ? dataGridViewMC.SortedColumn : dataGridViewMC.Columns[0]; SortOrder sortorderprev = dataGridViewMC.SortedColumn != null ? dataGridViewMC.SortOrder : SortOrder.Ascending; int firstline = dataGridViewMC.FirstDisplayedScrollingRowIndex; dataGridViewMC.Rows.Clear(); textBoxItems1.Text = textBoxItems2.Text = ""; if (mcl == null) { return; } string[] filter = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingString(DbFilterSave, "All").SplitNoEmptyStartFinish(';'); bool all = filter.Length > 0 && filter[0] == "All"; bool clearzero = checkBoxClear.Checked; MaterialCommodityData[] allitems = materials ? MaterialCommodityData.GetMaterials(true) : MaterialCommodityData.GetCommodities(true); foreach (MaterialCommodityData mcd in allitems) // we go thru all items.. { if (all || filter.Contains(mcd.FDName)) // and see if they are in the filter { object[] rowobj; MaterialCommodities m = mcl.List.Find(x => x.Details.Name == mcd.Name); // and we see if we actually have some at this time if (!clearzero || (m != null && m.Count > 0)) // if display zero, or we have some.. { if (materials) { int limit = mcd.MaterialLimit() ?? 0; rowobj = new[] { mcd.Name, mcd.Shortname, mcd.TranslatedCategory, mcd.TranslatedType + (limit > 0 ? " (" + limit.ToString() + ")" : ""), m != null?m.Count.ToString() : "0" }; } else { rowobj = new[] { mcd.Name, mcd.TranslatedType, m != null?m.Count.ToString() : "0", m != null?m.Price.ToString("0.#") : "-" }; } string s = Recipes.UsedInSythesisByFDName(mcd.FDName, Environment.NewLine); string e = Recipes.UsedInEngineeringByFDName(mcd.FDName, Environment.NewLine); s = s.AppendPrePad(e, Environment.NewLine); string b = Recipes.UsedInTechBrokerUnlocksByFDName(mcd.FDName, Environment.NewLine); s = s.AppendPrePad(b, Environment.NewLine); string se = Recipes.UsedInSpecialEffectsyFDName(mcd.FDName, Environment.NewLine); s = s.AppendPrePad(se, Environment.NewLine); dataGridViewMC.Rows.Add(rowobj); dataGridViewMC.Rows[dataGridViewMC.RowCount - 1].Cells[0].ToolTipText = s; dataGridViewMC.Rows[dataGridViewMC.RowCount - 1].Tag = s; } } } dataGridViewMC.Sort(sortcolprev, (sortorderprev == SortOrder.Descending) ? ListSortDirection.Descending : ListSortDirection.Ascending); dataGridViewMC.Columns[sortcolprev.Index].HeaderCell.SortGlyphDirection = sortorderprev; if (firstline >= 0 && firstline < dataGridViewMC.RowCount) { dataGridViewMC.FirstDisplayedScrollingRowIndex = firstline; } if (materials) { textBoxItems1.Text = mcl.DataCount.ToString(); textBoxItems2.Text = mcl.MaterialsCount.ToString(); } else { textBoxItems1.Text = mcl.CargoCount.ToString(); } }