/// <summary> /// Генерация нового ID для следующего в строке элемента /// </summary> /// <param name="model">Модель элемента</param> /// <returns>Возвращает следующий порядковый ID для текущей строки</returns> public int GenerateID(LeasingElementModel model) { if (model == null) { throw new ArgumentNullException("Попытка генерации ID по пустой ссылке на элемент Canvas'а"); } var a = model.RowIndex + 1; //прибавляем единицу, т.к. при индексации с 0 будут наложения индекса в строках var b = 0; //получаем порядковый номер элемента в строке if (m_rowsCounters.ContainsKey(a)) { b = ++m_rowsCounters[a]; } else { m_rowsCounters.Add(a, ++b); } int pow = 1; while (pow < b) { pow = ((pow << 2) + pow) << 1; a = ((a << 2) + a) << 1; } return(a + b); }
void SetSorted(IEnumerable <Controls.LeasingChartManagers.RowManager.Row> rows) { var cars = new List <CarModel>(); var leasings = new List <LeasingElementModel>(); var comments = new List <CarCommentModel>(); //ставим флаг, что используются сортированные данные // (базовый набор НЕ используется) m_baseSetted = false; CarModel car = null; CarCommentModel comment = null; LeasingElementModel leasing = null; if (rows != null && rows.Count() > 0) { var rowIndex = 0; foreach (var row in rows) { if (row.Car != null) { car = row.Car.Clone(); car.RowIndex = rowIndex; cars.Add(car); } if (row.Comment != null) { comment = row.Comment.Clone(); comment.RowIndex = rowIndex; comments.Add(comment); } if (row.Bars.Count > 0) { foreach (var bar in row.Bars) { if (bar.Model != null) { leasing = bar.Model.Clone(); leasing.RowIndex = rowIndex; leasings.Add(leasing); } } } rowIndex++; } } Chart.ClearManagers(); CarModels = cars; Comments = comments; Leasings = leasings; Chart.Draw(); }
List <LeasingElementModel> GetLeasingModels(IEnumerable <MonthBusiness> monthBuisnesses) { var leasingBarModels = new List <LeasingElementModel>(); var index = 0; foreach (var business in monthBuisnesses) { foreach (var item in business.CarBusiness) { var car = m_CarModels.FirstOrDefault(c => c.Text.Equals(item.Name)); var rowIndex = 0; leasingBarModels.AddRange(item.Business.Select( b => { rowIndex = car == null ? 0 : car.RowIndex; var model = new LeasingElementModel() { CarName = m_CarModels.Count > 0 ? m_CarModels[rowIndex].Text : b.CarName, Leasing = b, RowIndex = rowIndex, DayColumnWidth = 21d }; if (b.CurrentMonth != null) { model.Monthes = new MonthHeaderModel[] { new MonthHeaderModel(this) { Month = b.CurrentMonth } } } ; else { model.Monthes = this.Monthes.Where(m => b.Monthes.Any(bm => bm.Equals(m.Month))).ToArray(); } return(model); })); } index++; } return(leasingBarModels); }