public void EditTask() { // TODO: Untestable, rewrite for unit testing. var oldTaskName = ActiveForm.GetCurrentSelectedTaskName(); if (oldTaskName == null) { messageBoxFactory.ShowMessageBox( EMessageBox.Standard, Resources.NoRowSelectedErrorMessage, Settings.Default.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var selectedTask = QueryTask(oldTaskName); DataInputDialog = dialogFactory.GetDialog(EDialog.StandardTask, selectedTask); DataInputDialog.AskUser(); if (DataInputDialog.IsDataProvided()) { var newTask = (ITask)DataInputDialog.ReturnValue; // Is new task and old task the same: if (selectedTask.Equals(newTask)) { messageBoxFactory.ShowMessageBox( EMessageBox.Standard, Resources.EditedTaskStillTheSameErrorMessage, Settings.Default.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } ICategory category; // Delete task from old category: if (selectedTask.Complete) { category = QueryCategory(Resources.CompletedTaskListText); } else { category = QueryCategory(selectedTask.Category); } category.Tasks.Remove(selectedTask); // Add task to new category: if (newTask.Complete) { category = QueryCategory(Resources.CompletedTaskListText); } else { category = QueryCategory(newTask.Category); } category.Tasks.Add(newTask); ActiveForm.EditTaskInDisplay(newTask, selectedTask); } else { messageBoxFactory.ShowMessageBox( EMessageBox.Standard, Resources.NoDataProvidedErrorText, Settings.Default.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); } var dialog = (Form)DataInputDialog; dialog.Dispose(); }