Пример #1
0
        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;
        }
Пример #2
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);
        }
Пример #3
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);
        }
Пример #4
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();
        }