static void Main(string[] args) { InitParams initParams = new InitParams { WorkDayTimeStart = new TimeSpan(12, 0, 0), WorkDayTimeEnd = new TimeSpan(15, 0, 0), DinnerTimeStart = new TimeSpan(13, 0, 0), DinnerTimeEnd = new TimeSpan(14, 0, 0), WorkingCellDuration = new TimeSpan(0, 25, 0), Path = "file.json" }; InitParams initParams2 = new InitParams { WorkDayTimeStart = new TimeSpan(10, 0, 0), WorkDayTimeEnd = new TimeSpan(12, 55, 0), DinnerTimeStart = new TimeSpan(11, 0, 0), DinnerTimeEnd = new TimeSpan(12, 0, 0), WorkingCellDuration = new TimeSpan(0, 30, 0), Path = "file.json" }; Grid grid = new Grid(initParams2); WorkingGrid workingGrid = grid.FormWorkingGrid(); grid.SaveWorkingGrid(workingGrid); }
private bool CanConnectedColorReachCellInColumn(int rowIdx, int colIdx, ColorClassifier colCc) { var array = WorkingGrid.GetColumn(colIdx); var firstIndex = IndexOf(array, colCc.MyColor); var lastIndex = LastIndexOf(array, colCc.MyColor); if (firstIndex <= OutOfBoundsConst) { return(true); } if (firstIndex > rowIdx) { var minIdx = lastIndex - colCc.Count + 1; //3 if (rowIdx < minIdx) { return(false); } } else if (lastIndex < rowIdx) { var maxIdx = firstIndex + colCc.Count - 1; //5 if (rowIdx > maxIdx) { return(false); } } return(true); }
/// <summary> /// Подготовка для сохранения. Подсчет общего времени отдыха и проставление ID. /// </summary> private GridForStore PrepareGridForSave(WorkingGrid workingGrid) { GridForStore gridForSave = new GridForStore(); var freeTimeMinutes = workingGrid.FreeTime.Sum(t => t.Duration.TotalMinutes); gridForSave.FreeTime = Convert.ToInt32(Math.Floor(freeTimeMinutes)); gridForSave.Cells = new List <TimeCellForStore>(); int id = 1; foreach (var item in workingGrid.WorkingCells) { gridForSave.Cells.Add( new TimeCellForStore { ID = id++, Start = item.Start, End = item.End } ); } return(gridForSave); }
private void FillCellAndSetDirty(int row, int column, Color?colorToFill = null) { colorToFill = colorToFill ?? _currentColor.MyColor; if (WorkingGrid[row, column].Equals(Color.Empty)) { WorkingGrid[row, column] = colorToFill.Value; _paintedCount++; _isDirty = true; } #if DEBUG _readableString = WorkingGrid.ToReadableString(); if (AnswerGrid != null && AnswerGrid[row, column] != colorToFill.Value) { throw new Exception(string.Format("Oops, wrong color! Expected: <{0}>. Actual: <{1}>", AnswerGrid[row, column], colorToFill.Value)); } #endif }
private void SolveActually() { #if DEBUG _readableString = WorkingGrid.ToReadableString(); #endif do { _iterationCounter++; _isDirty = false; Iterate(Selection.Row); Iterate(Selection.Column); IterateCells(); if (CellCount == _paintedCount) { break; } } while (_isDirty); }
/// <summary> /// Сохраняем дневную сетку в файл /// </summary> /// <param name="workingGrid"></param> public void SaveWorkingGrid(WorkingGrid workingGrid) { GridForStore gridForSave = PrepareGridForSave(workingGrid); JsonSerializer serializer = new JsonSerializer(); serializer.Converters.Add(new TimespanConverter()); serializer.NullValueHandling = NullValueHandling.Ignore; serializer.Formatting = Formatting.Indented; using (StreamWriter sw = new StreamWriter(initParams.Path)) { using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, gridForSave); } } }
private int CountNumberOfElementsBeforeAndAfterInColumn(int startingRowIdx, int colIdx, Color colorToFind) { var array = WorkingGrid.GetColumn(colIdx); var count = 0; var i = startingRowIdx - 1; while (i >= 0 && array[i].Equals(colorToFind)) { count++; i--; } i = startingRowIdx + 1; while (i < RowCount && array[i].Equals(colorToFind)) { count++; i++; } return(count); }
private void SetupSelectionAndFields(Selection selection) { _selection = selection; if (_selection == Selection.Row) { _items = Rows; _oppositeItems = Columns; _selectionCount = ColCount; _getArray = (rowNumber => WorkingGrid.GetRow(rowNumber)); _getCell = ((x, y) => WorkingGrid[x, y]); } else { _items = Columns; _oppositeItems = Rows; _selectionCount = RowCount; _getArray = (colNumber => WorkingGrid.GetColumn(colNumber)); _getCell = ((x, y) => WorkingGrid[y, x]); } }
private bool CanConnectedColorReachCellInRow(int rowIdx, int colIdx, ColorClassifier rowCc) { var array = WorkingGrid.GetRow(rowIdx); var firstIndex = IndexOf(array, rowCc.MyColor); var lastIndex = LastIndexOf(array, rowCc.MyColor); if (firstIndex <= OutOfBoundsConst) { return(true); } if (firstIndex > colIdx) { //a,_,_,_,b,_,_,_,_,a: "b" er connected, og Count = 2. //colIdx = 1 //firstIndex = 4 //lastIndex = 4 var minIdx = lastIndex - rowCc.Count + 1; //3 if (colIdx < minIdx) { return(false); } } else if (lastIndex < colIdx) { //a,a,a,_,b,_,_,_,_,a: "b" er connected, og Count = 2. //colIdx = 6 //firstIndex = 4 //lastIndex = 4 var maxIdx = firstIndex + rowCc.Count - 1; //5 if (colIdx > maxIdx) { return(false); } } return(true); }
private void BillImport_Load(object sender, EventArgs e) { int jobcount = 0; Parent_Item = ListToImport[0].Parent_item; try { jobcount = (int)jobTableAdapter.CountJobs(ListToImport[0].Parent_item, "CJ%"); } catch { } if (jobcount > 0) { FetchBill form = new FetchBill(ListToImport[0].Parent_item); form.ShowDialog(); for (int i = 0; i < form.BillList.Count; i++) { WorkingGrid.Rows.Add(); WorkingGrid[1, i].Value = form.BillList[i].Item; WorkingGrid[0, i].Value = form.BillList[i].sequence; WorkingGrid[3, i].Value = form.BillList[i].qty; WorkingGrid[5, i].Value = form.BillList[i].u_m; } form.Close(); form.Dispose(); for (int i = 0; i < WorkingGrid.Rows.Count; i++) { for (int j = 0; j < ListToImport.Count; j++) { if (WorkingGrid[1, i].Value != null) { if (WorkingGrid[1, i].Value.ToString().Trim() == ListToImport[j].Item) { System.Diagnostics.Debug.Print(ListToImport[j].Item); WorkingGrid[2, i].Value = ListToImport[j].Qty; ListToImport.RemoveAt(j); } } } } for (int i = 0; i < ListToImport.Count; i++) { WorkingGrid.Rows.Insert(0); WorkingGrid[1, 0].Value = ListToImport[i].Item; WorkingGrid[2, 0].Value = ListToImport[i].Qty; WorkingGrid[0, 0].Value = Convert.ToInt32(WorkingGrid[0, WorkingGrid.Rows.Count - 1].Value) + 1; WorkingGrid.Sort(WorkingGrid.Columns[1], ListSortDirection.Ascending); } SetGrid(); } else { ItemCreate form = new ItemCreate(ListToImport[0].Parent_item, ""); form.ShowDialog(); if (form.DialogResult == DialogResult.Cancel) { form.Dispose(); this.Close(); this.Dispose(); } else { form.Dispose(); for (int i = 0; i < ListToImport.Count; i++) { WorkingGrid.Rows.Insert(0); WorkingGrid[0, 0].Value = i + 1; WorkingGrid[1, 0].Value = ListToImport[i].Item; WorkingGrid[2, 0].Value = ListToImport[i].Qty; WorkingGrid[4, 0].Value = ListToImport[i].Description; WorkingGrid.Sort(WorkingGrid.Columns[1], ListSortDirection.Ascending); } } } SetGrid(); for (int i = 0; i < WorkingGrid.Rows.Count; i++) { if (WorkingGrid[4, i].Value == null) { int ItemExists = 0; try { ItemExists = Convert.ToInt32(itemTableAdapter.ExistsCount(WorkingGrid[1, i].Value.ToString())); } catch { ItemExists = 0; } if (ItemExists != 0) { WorkingGrid[4, i].Value = itemTableAdapter.DescQuery(WorkingGrid[1, i].Value.ToString()); } } } }