public WordListsViewModel(IProjectService projectService, IDialogService dialogService, IImportService importService, IExportService exportService, IAnalysisService analysisService, WordListsVarietyViewModel.Factory varietyFactory) : base("Word lists") { _projectService = projectService; _dialogService = dialogService; _importService = importService; _exportService = exportService; _analysisService = analysisService; _varietyFactory = varietyFactory; Messenger.Default.Register<SwitchViewMessage>(this, HandleSwitchView); Messenger.Default.Register<DomainModelChangedMessage>(this, HandleDomainModelChanged); _projectService.ProjectOpened += _projectService_ProjectOpened; _findCommand = new RelayCommand(Find); TaskAreas.Add(new TaskAreaItemsViewModel("Common tasks", new TaskAreaCommandViewModel("Add a new variety", new RelayCommand(AddNewVariety)), new TaskAreaCommandViewModel("Add a new meaning", new RelayCommand(AddNewMeaning)), new TaskAreaCommandViewModel("Find words", _findCommand), new TaskAreaCommandViewModel("Import word lists", new RelayCommand(Import)))); TaskAreas.Add(new TaskAreaItemsViewModel("Other tasks", new TaskAreaCommandViewModel("Export word lists", new RelayCommand(Export, CanExport)), new TaskAreaCommandViewModel("Remove affixes from words in all varieties", new RelayCommand(RunStemmer, CanRunStemmer)))); _addNewVarietyCommand = new RelayCommand(AddNewVariety); _addNewMeaningCommand = new RelayCommand(AddNewMeaning); _importWordListsCommand = new RelayCommand(Import); _showGettingStartedCommand = new RelayCommand(ShowGettingStarted); _isEmpty = true; }
public WordListsVarietyMeaningViewModel(IBusyService busyService, IAnalysisService analysisService, WordViewModel.Factory wordFactory, WordListsVarietyViewModel variety, Meaning meaning) : base(meaning) { _busyService = busyService; _analysisService = analysisService; _variety = variety; _domainWords = new ObservableList <Word>(variety.DomainVariety.Words[meaning]); _words = new MirroredBindableList <Word, WordViewModel>(_domainWords, word => wordFactory(word), vm => vm.DomainWord); _domainWords.CollectionChanged += DomainWordsChanged; _strRep = string.Join(",", _domainWords.Select(word => word.StrRep)); _showInVarietiesCommand = new RelayCommand(ShowInVarieties, () => _domainWords.Count > 0); }
public WordListsVarietyMeaningViewModel(IBusyService busyService, IAnalysisService analysisService, WordViewModel.Factory wordFactory, WordListsVarietyViewModel variety, Meaning meaning) : base(meaning) { _busyService = busyService; _analysisService = analysisService; _variety = variety; _domainWords = new ObservableList<Word>(variety.DomainVariety.Words[meaning]); _words = new MirroredBindableList<Word, WordViewModel>(_domainWords, word => wordFactory(word), vm => vm.DomainWord); _domainWords.CollectionChanged += DomainWordsChanged; _strRep = string.Join(",", _domainWords.Select(word => word.StrRep)); _showInVarietiesCommand = new RelayCommand(ShowInVarieties, () => _domainWords.Count > 0); }
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(); }