/// <summary> /// Fires when Background Color Clicked /// </summary> /// <param name="sender">UI Color Menu</param> /// <param name="e">Event arguments</param> private void BackgroundColorToolStripMenuItem_Click(object sender, EventArgs e) { // Open Color Dialog box for user to select a new color ColorDialog colorDialog = new ColorDialog(); // Store a list of commands for undo / redo List <SpreadsheetEngine.ICommand> restoreBGColorCommands = new List <SpreadsheetEngine.ICommand>(); // When the user selects a new color if (colorDialog.ShowDialog() == DialogResult.OK) { // Iterate through each of the selected cells foreach (DataGridViewCell cell in dataGridView.SelectedCells) { // Covert to spreadsheetCell location CptS321.SpreadsheetCell spreadsheetCell = spreadsheet.GetCell((uint)cell.RowIndex, (uint)cell.ColumnIndex); uint oldColor = spreadsheetCell.BGColor; uint newColor = (uint)colorDialog.Color.ToArgb(); spreadsheetCell.BGColor = newColor; // Create the undo command SpreadsheetEngine.RestoreBGColorCommand restoreColor = new SpreadsheetEngine.RestoreBGColorCommand(spreadsheetCell, oldColor, newColor); restoreBGColorCommands.Add(restoreColor); } // Add command list to the stack spreadsheet.AddUndo(restoreBGColorCommands); this.undoToolStripMenuItem.Enabled = true; // Check redo stack, clear if not already empty if (!this.spreadsheet.RedoStackIsEmpty()) { this.spreadsheet.ClearRedoStack(); } } // Update button labels and enabled state UpdateToolStripMenu(); }