void LbSubjectsItemCheck(object sender, ItemCheckEventArgs e) { if (loadingSubjects) { return; } if (e.Index == 0) { try { ignoreServicesLoading = true; loadingSubjects = true; LockUpdate(true); if (e.NewValue == CheckState.Checked) { //all subjects.Clear(); subjects.AddRange(supportedSubjects); for (int i = 1; i < lbSubjects.Items.Count; i++) { lbSubjects.SetItemCheckState(i, e.NewValue); } } else if (e.NewValue == CheckState.Unchecked) { subjects.Clear(); subjects.Add((lbSubjects.Items[1] as SubjectContainer).Subject); lbSubjects.SetItemCheckState(1, CheckState.Checked); for (int i = 2; i < lbSubjects.Items.Count; i++) { lbSubjects.SetItemCheckState(i, e.NewValue); } } SetLanguages(profile.GetLanguagePairs()); LanguagePairCollection to_delete = new LanguagePairCollection(); int index; foreach (LanguagePair lp in history) { index = Languages.BinarySearch(lp); if (index < 0) { to_delete.Add(lp); } } foreach (LanguagePair lp in to_delete) { history.Remove(lp); } LoadHistory(); } finally { LockUpdate(false); ignoreServicesLoading = false; loadingSubjects = false; serviceItemsSettings = null; //reset LoadServices(false); } if (SubjectsChanged != null) { SubjectsChanged(this, new EventArgs()); } return; } SubjectContainer sc = (SubjectContainer)lbSubjects.Items[e.Index]; if (e.NewValue == CheckState.Checked) { subjects.Add(sc.Subject); } else if (e.NewValue == CheckState.Unchecked) { if (subjects.Count == 1) { int new_idx = e.Index; new_idx++; if (new_idx >= lbSubjects.Items.Count) { new_idx = 1; } lbSubjects.SetItemChecked(new_idx, true); } subjects.Remove(sc.Subject); } try { ignoreServicesLoading = true; SetLanguages(profile.GetLanguagePairs()); LanguagePairCollection to_delete = new LanguagePairCollection(); int index; foreach (LanguagePair lp in history) { index = Languages.BinarySearch(lp); if (index < 0) { to_delete.Add(lp); } } foreach (LanguagePair lp in to_delete) { history.Remove(lp); } LoadHistory(); } finally { ignoreServicesLoading = false; serviceItemsSettings = null; //reset LoadServices(false); } if (SubjectsChanged != null) { SubjectsChanged(this, new EventArgs()); } }