public void AddTask() { // TODO: Untestable, rewrite for unit testing. // Ask user for category data: DataInputDialog = dialogFactory.GetDialog(EDialog.StandardTask); DataInputDialog.AskUser(); if (DataInputDialog.IsDataProvided()) { var tsk = (ITask)DataInputDialog.ReturnValue; // Look for proper category in memory to add new task, after that - display it: foreach (var item in Categories) { // Check if task provided already exists in this category: if (item.Tasks.Contains(tsk)) { messageBoxFactory.ShowMessageBox( EMessageBox.Standard, string.Format(Resources.TaskAlreadyExistsErrorMessage, item.Name), Settings.Default.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (tsk.Complete) { if (item.Name == Resources.CompletedTaskListText) { item.Tasks.Add(tsk); } else { continue; } break; } else { if (item.Name == tsk.Category) { item.Tasks.Add(tsk); } else { continue; } break; } } ActiveForm.AddTaskToDisplay(tsk); } else { messageBoxFactory.ShowMessageBox( EMessageBox.Standard, Resources.NoDataProvidedErrorText, Settings.Default.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); } var dialog = (Form)DataInputDialog; dialog.Dispose(); }