/// <summary> /// Command callback. Applies the bulk edit depending /// on the mode and value. /// </summary> private void OnBulkEditTextApply() { string messageBoxContent = string.Format("Do you really want to apply " + "this {2} to all {0} selected items?{1}Existing {2} values will be " + "overwritten and lost forever.", SelectedItems.Count, Environment.NewLine, BulkEditMode == BulkEditModeEnum.MeaningNote ? "meaning note" : (BulkEditMode == BulkEditModeEnum.ReadingNote ? "reading note" : "tag")); if (System.Windows.MessageBox.Show( NavigationActor.Instance.ActiveWindow, messageBoxContent, "Bulk edition confirmation", System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Question, System.Windows.MessageBoxResult.Cancel) == System.Windows.MessageBoxResult.Yes) { BulkEditTaskEnum task = BulkEditMode == BulkEditModeEnum.MeaningNote ? BulkEditTaskEnum.MeaningNote : (BulkEditMode == BulkEditModeEnum.ReadingNote ? BulkEditTaskEnum.ReadingNote : BulkEditTaskEnum.Tags); BulkEdit(task, SelectedItems.Select(i => i.Reference).ToArray(), BulkEditValue); } }
/// <summary> /// Background task work method. /// Performs the bulk edit. /// </summary> private void DoBulkEdit(object sender, DoWorkEventArgs e) { BulkEditTaskEnum task = (BulkEditTaskEnum)((object[])e.Argument)[0]; SrsEntry[] entries = (SrsEntry[])((object[])e.Argument)[1]; object value = ((object[])e.Argument)[2]; switch (task) { case BulkEditTaskEnum.MeaningNote: BulkEditResultCount = _srsEntryDao.BulkEditMeaningNote(entries, (string)value); break; case BulkEditTaskEnum.ReadingNote: BulkEditResultCount = _srsEntryDao.BulkEditReadingNote(entries, (string)value); break; case BulkEditTaskEnum.Tags: BulkEditResultCount = _srsEntryDao.BulkEditTags(entries, (string)value); break; case BulkEditTaskEnum.Level: BulkEditResultCount = _srsEntryDao.BulkEditGrade(entries, (short)value, SrsLevelStore.Instance.GetLevelByValue((short)value).Delay); break; case BulkEditTaskEnum.Timing: BulkEditResultCount = _srsEntryDao.BulkEditReviewDate(entries); break; case BulkEditTaskEnum.Suspend: BulkEditResultCount = _srsEntryDao.BulkSuspend(entries); break; case BulkEditTaskEnum.Resume: BulkEditResultCount = _srsEntryDao.BulkResume(entries); break; case BulkEditTaskEnum.Delete: BulkEditResultCount = _srsEntryDao.BulkDelete(entries); break; default: throw new ArgumentException(string.Format( "Unknown task: \"{0}\".", task)); } }
/// <summary> /// Starts a background task that will perform the bulk edition. /// </summary> private void BulkEdit(BulkEditTaskEnum task, SrsEntry[] items, object value = null) { BulkEditResultCount = 0; BulkEditMode = BulkEditModeEnum.Applying; BulkEditValue = string.Empty; BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += DoBulkEdit; worker.RunWorkerCompleted += DoneBulkEdit; // Only run the worker when SRS levels are loaded because they // are needed in some cases. SrsLevelStore.Instance.IssueWhenLoaded(() => { worker.RunWorkerAsync(new object[] { task, items, value }); }); }