private void SelectWords() { var vm = (WordsViewModel)DataContext; if (_monitor.Busy) { return; } using (_monitor.Enter()) { foreach (WordViewModel word in WordsListBox.SelectedItems.Cast <WordViewModel>().Except(vm.SelectedWords)) { ClearWordSelection(word); } WordsListBox.SelectedItems.Clear(); foreach (WordViewModel word in vm.SelectedWords) { WordsListBox.SelectedItems.Add(word); } } if (vm.SelectedWords.Count > 0) { WordsListBox.ScrollIntoView(vm.SelectedWords[0]); } }
private void GroupSelection_SelectionChanged(object sender, SelectionChangedEventArgs e) { using (_monitor.Enter()) { var selected = TypeSelection.SelectedItem; var group = (ItemGroup)GroupSelection.SelectedItem; if (group == ItemGroup.Any) { TypeList = new[] { ItemType.Any }; } else { var list = Types .Where(t => t == ItemType.Any || t.Group() == group) .ToArray(); if (list.Length == 2) { // Only contains "any" and the only type of the selected group // -> "any" makes no sense, take the only type list = new [] { list[1] }; } TypeList = list; } TypeSelection.SelectedIndex = 0; if (TypeSelection.SelectedItem == selected) { UpdateBaseList(); } } }
private void PersistentDataOnPropertyChanging(object sender, PropertyChangingEventArgs e) { if (e.PropertyName == nameof(IPersistentData.CurrentBuild)) { _persistentData.CurrentBuild.PropertyChanged -= CurrentBuildOnPropertyChanged; _setNodeValueMonitor.Enter(); } }
private void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { if (CollectionChanged != null) { using (_reentrancyMonitor.Enter()) CollectionChanged(this, e); } }
private void OnPropertyChanged(PropertyChangedEventArgs e) { if (PropertyChanged != null) { using (_reentrancyMonitor.Enter()) PropertyChanged(this, e); } }
private void GroupSelection_SelectionChanged(object sender, SelectionChangedEventArgs e) { var d = _monitor.Enter(); var val = (ItemGroup)GroupSelection.SelectedItem; TypeList = Enum.GetValues(typeof(ItemType)).Cast <ItemType>().Where(t => t.Group() == val).ToArray(); TypeSelection.SelectedIndex = 0; d.Dispose(); }
private void SelectedWordsChanged(object sender, NotifyCollectionChangedEventArgs e) { if (_monitor.Busy) { return; } using (_monitor.Enter()) SelectWords((IEnumerable <MultipleWordAlignmentWordViewModel>)sender); }
private void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { NotifyCollectionChangedEventHandler handler = CollectionChanged; if (handler != null) { using (_reentrancyMonitor.Enter()) handler(this, e); } }
public void Enter_EnterTwoTimesDisposeOneTime_IsBusy() { var monitor = new SimpleMonitor(); monitor.Enter(); monitor.Enter(); monitor.Dispose(); Assert.True(monitor.Busy); }
private void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { using (_reentrancyMonitor.Enter()) handler(this, e); } }
public void Enter_EnterTwoTimesDisposeTwoTime_IsNotBusy() { var monitor = new SimpleMonitor(); monitor.Enter(); monitor.Enter(); monitor.Dispose(); monitor.Dispose(); Assert.False(monitor.Busy); }
private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) { var vm = (WordListsViewModel)sender; switch (e.PropertyName) { case "Meanings": vm.Meanings.CollectionChanged += Meanings_CollectionChanged; break; case "Varieties": DispatcherHelper.CheckBeginInvokeOnUI(LoadCollectionView); break; case "SelectedVarietyMeaning": DispatcherHelper.CheckBeginInvokeOnUI(() => { if (_selectMonitor.Busy) { return; } using (_selectMonitor.Enter()) { WordListsGrid.SelectedCellRanges.Clear(); if (vm.SelectedVarietyMeaning != null) { WordListsVarietyViewModel variety = vm.SelectedVarietyMeaning.Variety; int itemIndex = WordListsGrid.Items.IndexOf(variety); WordListsGrid.BringItemIntoView(variety); WordListsGrid.Dispatcher.BeginInvoke(new Action(() => { var row = (DataRow)WordListsGrid.GetContainerFromIndex(itemIndex); if (row != null) { Cell cell = row.Cells.Single(c => c.Content == vm.SelectedVarietyMeaning); WordListsGrid.SelectedCellRanges.Add(new SelectionCellRange(itemIndex, cell.ParentColumn.Index)); WordListsGrid.CurrentItem = variety; WordListsGrid.CurrentColumn = cell.ParentColumn; cell.BringIntoView(); } }), DispatcherPriority.Background); } } }); break; } }
public void Enter_Call_IsBusy() { var monitor = new SimpleMonitor(); monitor.Enter(); Assert.True(monitor.Busy); }
public void Enter_DisposeAfter_IsNotBusy() { var monitor = new SimpleMonitor(); monitor.Enter(); monitor.Dispose(); Assert.False(monitor.Busy); }
private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) { var vm = (SegmentsViewModel)sender; switch (e.PropertyName) { case "Varieties": DispatcherHelper.CheckBeginInvokeOnUI(LoadCollectionView); break; case "SelectedSegment": DispatcherHelper.CheckBeginInvokeOnUI(() => { if (_selectMonitor.Busy) { return; } using (_selectMonitor.Enter()) { SegmentsDataGrid.SelectedCellRanges.Clear(); if (vm.SelectedSegment != null) { VarietyViewModel variety = vm.SelectedSegment.Variety; int itemIndex = SegmentsDataGrid.Items.IndexOf(variety); SegmentsDataGrid.BringItemIntoView(variety); SegmentsDataGrid.Dispatcher.BeginInvoke(new Action(() => { var row = (DataRow)SegmentsDataGrid.GetContainerFromIndex(itemIndex); if (row != null) { Cell cell = row.Cells.Single(c => c.DataContext == vm.SelectedSegment); SegmentsDataGrid.SelectedCellRanges.Add(new SelectionCellRange(itemIndex, cell.ParentColumn.Index)); cell.BringIntoView(); } }), DispatcherPriority.Background); } } }); break; } }
private void SelectWordPairs() { if (_monitor.Busy) { return; } using (_monitor.Enter()) { var vm = (WordPairsViewModel)DataContext; WordPairsListBox.SelectedItems.Clear(); foreach (WordPairViewModel wordPair in vm.SelectedWordPairs) { WordPairsListBox.SelectedItems.Add(wordPair); } if (vm.SelectedWordPairs.Count > 0) { WordPairsListBox.ScrollIntoView(vm.SelectedWordPairs[0]); } } }
internal bool FindNext(FindField field, string str) { if (_words.Count == 0) { ResetSearch(); return(false); } if (_selectedWords.Count == 0) { _startWord = _wordsView.Cast <WordViewModel>().Last(); } else if (_startWord == null) { _startWord = _selectedWords[0]; } else if (_selectedWords.Contains(_startWord)) { ResetSearch(); return(false); } List <WordViewModel> words = _wordsView.Cast <WordViewModel>().ToList(); WordViewModel curWord = _selectedWords.Count == 0 ? _startWord : _selectedWords[0]; int wordIndex = words.IndexOf(curWord); do { wordIndex = (wordIndex + 1) % words.Count; curWord = words[wordIndex]; bool match = false; switch (field) { case FindField.Form: match = curWord.StrRep.Contains(str); break; case FindField.Gloss: match = curWord.Meaning.Gloss.Contains(str); break; } if (match) { using (_selectedWordsMonitor.Enter()) { _selectedWords.Clear(); _selectedWords.Add(curWord); } return(true); } }while (_startWord != curWord); ResetSearch(); return(false); }
private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) { var vm = (SegmentMappingsTableViewModel)sender; switch (e.PropertyName) { case "SelectedSegmentPair": DispatcherHelper.CheckBeginInvokeOnUI(() => { if (_selectMonitor.Busy) { return; } using (_selectMonitor.Enter()) { SegmentsDataGrid.SelectedCellRanges.Clear(); if (vm.SelectedSegmentPair != null) { SegmentMappingsTableSegmentViewModel segment = vm.SelectedSegmentPair.Segment1; int itemIndex = SegmentsDataGrid.Items.IndexOf(segment); SegmentsDataGrid.BringItemIntoView(segment); SegmentsDataGrid.Dispatcher.BeginInvoke(new Action(() => { var row = (DataRow)SegmentsDataGrid.GetContainerFromIndex(itemIndex); if (row != null) { Cell cell = row.Cells.Single(c => c.Content == vm.SelectedSegmentPair); SegmentsDataGrid.SelectedCellRanges.Add(new SelectionCellRange(itemIndex, cell.ParentColumn.Index)); SegmentsDataGrid.CurrentItem = segment; SegmentsDataGrid.CurrentColumn = cell.ParentColumn; cell.BringIntoView(); } }), DispatcherPriority.Background); } } }); break; } }
private void SelectedWordPairs_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { var vm = (WordPairsViewModel)DataContext; if (_monitor.Busy) { return; } using (_monitor.Enter()) { WordPairsListBox.SelectedItems.Clear(); foreach (WordPairViewModel wordPair in vm.SelectedWordPairs) { WordPairsListBox.SelectedItems.Add(wordPair); } if (vm.SelectedWordPairs.Count > 0) { WordPairsListBox.ScrollIntoView(vm.SelectedWordPairs[0]); } } }
/// <summary> /// Finds the next. /// </summary> private void FindNext() { if (_selectedVarietyPair == null || (_selectedVarietyPair.Cognates.WordPairs.Count == 0 && _selectedVarietyPair.Noncognates.WordPairs.Count == 0)) { SearchEnded(); return; } WordPairsViewModel cognates = _selectedVarietyPair.Cognates; WordPairsViewModel noncognates = _selectedVarietyPair.Noncognates; if (cognates.WordPairs.Count > 0 && cognates.SelectedWordPairs.Count == 0 && noncognates.SelectedWordPairs.Count == 0) { _startWordPairs = cognates; } else if (_startWordPairs == null) { _startWordPairs = cognates.SelectedWordPairs.Count > 0 ? cognates : noncognates; } WordPairsViewModel curWordPairs; if (cognates.SelectedWordPairs.Count > 0) { curWordPairs = cognates; } else if (noncognates.SelectedWordPairs.Count > 0) { curWordPairs = noncognates; } else { curWordPairs = _startWordPairs; } bool startAtBeginning = false; while (true) { using (_selectedWordPairsMonitor.Enter()) { if (curWordPairs.FindNext(_findViewModel.Field, _findViewModel.String, _searchWrapped, startAtBeginning)) { WordPairsViewModel otherWordPairs = curWordPairs == cognates ? noncognates : cognates; otherWordPairs.ClearPreviousSearchHit(); break; } } if (curWordPairs == _startWordPairs) { if (_startWordPairs.IsSearching) { curWordPairs = _startWordPairs == cognates ? noncognates : cognates; } else { SearchEnded(); break; } } else if (_startWordPairs.IsSearching) { curWordPairs = _startWordPairs; startAtBeginning = true; _searchWrapped = true; } else { SearchEnded(); break; } } }
protected IDisposable BlockReentrancy() { _monitor.Enter(); return(_monitor); }
internal bool FindNext(FindField field, string str, bool wrap, bool startAtBeginning) { if (_wordPairs.Count == 0) { if (wrap) { ResetSearch(); } return(false); } if (!startAtBeginning && _selectedWordPairs.Count == 0) { _startWordPair = _wordPairsView.Cast <WordPairViewModel>().Last(); } else if (_startWordPair == null) { _startWordPair = _selectedWordPairs[0]; } else if (!startAtBeginning && _selectedWordPairs.Contains(_startWordPair)) { if (wrap) { ResetSearch(); } return(false); } List <WordPairViewModel> wordPairs = _wordPairsView.Cast <WordPairViewModel>().ToList(); WordPairViewModel curWordPair; if (startAtBeginning) { curWordPair = wordPairs[wordPairs.Count - 1]; if (_startWordPair == curWordPair) { ResetSearch(); return(false); } } else { curWordPair = _selectedWordPairs.Count == 0 ? _startWordPair : _selectedWordPairs[0]; } int wordPairIndex = wordPairs.IndexOf(curWordPair); do { wordPairIndex++; if (wordPairIndex == wordPairs.Count) { if (!wrap && !startAtBeginning && _startWordPair != curWordPair) { return(false); } wordPairIndex = 0; } curWordPair = wordPairs[wordPairIndex]; bool match = false; switch (field) { case FindField.Form: match = curWordPair.DomainWordPair.Word1.StrRep.Contains(str) || curWordPair.DomainWordPair.Word2.StrRep.Contains(str); break; case FindField.Gloss: match = curWordPair.Meaning.Gloss.Contains(str); break; } if (match) { using (_selectedWordPairsMonitor.Enter()) { _selectedWordPairs.Clear(); _selectedWordPairs.Add(curWordPair); } return(true); } }while (_startWordPair != curWordPair); if (wrap) { ResetSearch(); } return(false); }