public WordListsVarietyViewModel(IProjectService projectService, WordListsVarietyMeaningViewModel.Factory varietyMeaningFactory, WordListsViewModel parent, Variety variety) : base(variety) { _parent = parent; _meanings = new VarietyMeaningViewModelCollection(projectService.Project.Meanings, DomainVariety.Words, meaning => varietyMeaningFactory(this, meaning)); _switchToVarietyCommand = new RelayCommand(() => Messenger.Default.Send(new SwitchViewMessage(typeof(VarietiesViewModel), DomainVariety))); _goToNextInvalidWordCommand = new RelayCommand(GotoNextInvalidWord); CheckForErrors(); }
private void Find() { if (_findViewModel != null) { return; } _findViewModel = new FindViewModel(_dialogService, FindNext); _findViewModel.PropertyChanged += (sender, args) => _startVarietyMeaning = null; _dialogService.ShowModelessDialog(this, _findViewModel, () => _findViewModel = null); }
private void SearchEnded() { _findViewModel.ShowSearchEndedMessage(); _startVarietyMeaning = null; }
private void FindNext() { WordListsVarietyMeaningViewModel curVarietyMeaning = _selectedVarietyMeaning; if (curVarietyMeaning == null) { WordListsVarietyViewModel curVariety = null; switch (_findViewModel.Field) { case FindField.Form: curVariety = _varietiesView.Cast <WordListsVarietyViewModel>().LastOrDefault(); break; case FindField.Gloss: curVariety = _varietiesView.Cast <WordListsVarietyViewModel>().FirstOrDefault(); break; } if (curVariety != null && _meanings.Count > 0) { curVarietyMeaning = curVariety.Meanings.Last(); } } if (_varieties.Count > 0 && _meanings.Count > 0 && _startVarietyMeaning == null) { _startVarietyMeaning = curVarietyMeaning; } else if (curVarietyMeaning == null || _startVarietyMeaning == curVarietyMeaning) { SearchEnded(); return; } Debug.Assert(curVarietyMeaning != null); WordListsVarietyViewModel variety = curVarietyMeaning.Variety; int meaningIndex = variety.Meanings.IndexOf(curVarietyMeaning); switch (_findViewModel.Field) { case FindField.Form: List <WordListsVarietyViewModel> varieties = _varietiesView.Cast <WordListsVarietyViewModel>().ToList(); int varietyIndex = varieties.IndexOf(variety); do { meaningIndex++; if (meaningIndex == varieties[varietyIndex].Meanings.Count) { varietyIndex = (varietyIndex + 1) % _varieties.Count; meaningIndex = 0; } curVarietyMeaning = varieties[varietyIndex].Meanings[meaningIndex]; if (curVarietyMeaning.Words.Any(w => w.StrRep.Contains(_findViewModel.String))) { Set(() => SelectedVarietyMeaning, ref _selectedVarietyMeaning, curVarietyMeaning); return; } } while (_startVarietyMeaning != curVarietyMeaning); break; case FindField.Gloss: do { meaningIndex = (meaningIndex + 1) % variety.Meanings.Count; curVarietyMeaning = variety.Meanings[meaningIndex]; if (curVarietyMeaning.DomainMeaning.Gloss.Contains(_findViewModel.String)) { Set(() => SelectedVarietyMeaning, ref _selectedVarietyMeaning, curVarietyMeaning); return; } } while (_startVarietyMeaning != curVarietyMeaning); break; } SearchEnded(); }
private void FindNext() { WordListsVarietyMeaningViewModel curVarietyMeaning = _selectedVarietyMeaning; if (curVarietyMeaning == null) { WordListsVarietyViewModel curVariety = null; switch (_findViewModel.Field) { case FindField.Form: curVariety = _varietiesView.Cast<WordListsVarietyViewModel>().LastOrDefault(); break; case FindField.Gloss: curVariety = _varietiesView.Cast<WordListsVarietyViewModel>().FirstOrDefault(); break; } if (curVariety != null && _meanings.Count > 0) curVarietyMeaning = curVariety.Meanings.Last(); } if (_varieties.Count > 0 && _meanings.Count > 0 && _startVarietyMeaning == null) { _startVarietyMeaning = curVarietyMeaning; } else if (curVarietyMeaning == null || _startVarietyMeaning == curVarietyMeaning) { SearchEnded(); return; } Debug.Assert(curVarietyMeaning != null); WordListsVarietyViewModel variety = curVarietyMeaning.Variety; int meaningIndex = variety.Meanings.IndexOf(curVarietyMeaning); switch (_findViewModel.Field) { case FindField.Form: List<WordListsVarietyViewModel> varieties = _varietiesView.Cast<WordListsVarietyViewModel>().ToList(); int varietyIndex = varieties.IndexOf(variety); do { meaningIndex++; if (meaningIndex == varieties[varietyIndex].Meanings.Count) { varietyIndex = (varietyIndex + 1) % _varieties.Count; meaningIndex = 0; } curVarietyMeaning = varieties[varietyIndex].Meanings[meaningIndex]; if (curVarietyMeaning.Words.Any(w => w.StrRep.Contains(_findViewModel.String))) { Set(() => SelectedVarietyMeaning, ref _selectedVarietyMeaning, curVarietyMeaning); return; } } while (_startVarietyMeaning != curVarietyMeaning); break; case FindField.Gloss: do { meaningIndex = (meaningIndex + 1) % variety.Meanings.Count; curVarietyMeaning = variety.Meanings[meaningIndex]; if (curVarietyMeaning.DomainMeaning.Gloss.Contains(_findViewModel.String)) { Set(() => SelectedVarietyMeaning, ref _selectedVarietyMeaning, curVarietyMeaning); return; } } while (_startVarietyMeaning != curVarietyMeaning); break; } SearchEnded(); }
private void Find() { if (_findViewModel != null) return; _findViewModel = new FindViewModel(_dialogService, FindNext); _findViewModel.PropertyChanged += (sender, args) => _startVarietyMeaning = null; _dialogService.ShowModelessDialog(this, _findViewModel, () => _findViewModel = null); }