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]);
            }
        }
Exemple #2
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();
                }
            }
        }
Exemple #3
0
 private void PersistentDataOnPropertyChanging(object sender, PropertyChangingEventArgs e)
 {
     if (e.PropertyName == nameof(IPersistentData.CurrentBuild))
     {
         _persistentData.CurrentBuild.PropertyChanged -= CurrentBuildOnPropertyChanged;
         _setNodeValueMonitor.Enter();
     }
 }
Exemple #4
0
 private void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
 {
     if (CollectionChanged != null)
     {
         using (_reentrancyMonitor.Enter())
             CollectionChanged(this, e);
     }
 }
Exemple #5
0
 private void OnPropertyChanged(PropertyChangedEventArgs e)
 {
     if (PropertyChanged != null)
     {
         using (_reentrancyMonitor.Enter())
             PropertyChanged(this, e);
     }
 }
Exemple #6
0
        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();
        }
Exemple #7
0
        private void SelectedWordsChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            if (_monitor.Busy)
            {
                return;
            }

            using (_monitor.Enter())
                SelectWords((IEnumerable <MultipleWordAlignmentWordViewModel>)sender);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #12
0
        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);
        }
Exemple #15
0
        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;
            }
        }
Exemple #16
0
        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]);
                }
            }
        }
Exemple #17
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;
            }
        }
Exemple #19
0
        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]);
                }
            }
        }
Exemple #20
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);
 }
Exemple #22
0
        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);
        }