private void SplitOnWords()
        {

            ProgressBar_Model pb = new ProgressBar_Model();
            pb.Text = Tx.T("SubtitleEditor.Messages.Processing.SplitOnWords");
            pb.Minimum = 0;
            pb.Maximum = Subtitles.Items.Count;
            pb.Value = pb.Minimum;

            ViewModelLocator.AddLongTaskProgressBar(pb);
            int cnt = 0;

            Subtitles.IsThereDictionary = true;
            //if (Subtitles.Dictionary == null) Subtitles.Dictionary = new Dictionary();

            // create a new words
            int loccnt = 0;
            foreach (SubtitleItem item in Subtitles.Items.OrderBy(x=>x.TimeStart))
            {
                if (item.WordsCollection == null) item.WordsCollection = new SynchronizedObservableCollection<SubtitleItem.Word>();
                PhraseOfCollectMode phrase = new PhraseOfCollectMode(item);
                byte idx = 1;
                foreach (var wrd in phrase.Words)
                {

                    // removes doubles
                    //if (item.WordsCollection.Any(x => x.word == wrd.word)) continue;

                    item.WordsCollection.Add(new SubtitleItem.Word
                    {
                        word = wrd.word,
                        number = idx,
                    });
                    idx++;

                    loccnt++;
                    if (loccnt == 50)
                    {
                        EFDbContext.SaveChgs();
                        loccnt = 0;
                    }

                }

                pb.Value = ++cnt;
                if (pb.IsCanceled) break;

            }

            EFDbContext.SaveChgs();
            ViewModelLocator.RemoveLongTaskProgressBar(pb);
            
        }
        void AddButtons()
        {
            PhraseOfCollectMode CurrentPhrase = new PhraseOfCollectMode(LearningItem.CurrentSub);

            // find analogue
            List<PhraseOfCollectMode> analogue = LearningItem.MainSubs.PhrasesList.FindAll(x => x.Words.Count == CurrentPhrase.Words.Count);
            if (analogue.Count < 3){
                analogue = LearningItem.MainSubs.PhrasesList.FindAll(
                    x => ((x.Words.Count >= CurrentPhrase.Words.Count - 1) && (x.Words.Count <= CurrentPhrase.Words.Count + 1)));
                    if (analogue.Count < 3)
                    {
                        analogue = LearningItem.MainSubs.PhrasesList;
                    }
             }

            // a list of phrases 
            Random rnd = new Random();
            SortedList<int, PhraseOfCollectMode> PhrasesForShow = new SortedList<int, PhraseOfCollectMode>();
            PhrasesForShow.Add(rnd.Next(0, 32000), CurrentPhrase);

            for (int i = 0; i < 100; i++)
            {
                if (PhrasesForShow.Count == LearningItem.NumberOfPrasesForUndestandingTest)  break;

                PhraseOfCollectMode rndphrase = analogue[rnd.Next(0, analogue.Count)];

                if (IsEmpty(rndphrase.SubtitleItem.Text2)) continue;

                var tlist = PhrasesForShow.Where(x => PhraseOfCollectMode.IsPhraseEqualent(x.Value, rndphrase));
                if (tlist.Count() > 0) continue;

                PhrasesForShow.Add(rnd.Next(0, 32000), rndphrase);
            }

            if(PhrasesForShow.Count < LearningItem.NumberOfPrasesForUndestandingTest)
            {
                DialogService.Message(Tx.T("UnderstandingTest.Messages.NotEnoughPhrases"),Tx.T("Common.Titles.Error"));
                return;
            }

            // Add to panel
            ButtonsCollection.Clear();
            foreach (var elm in PhrasesForShow)
            {
                ButtonsCollection.Add(new ButtonModel() {Text = elm.Value.SubtitleItem.Text2,IsItTrue = elm.Value == CurrentPhrase});
            }
        }
        public void SetCurrentWord(WordOfDictionary item)
        {

            if (CurrentWord != null)  CurrentWord.PropertyChanged -= CurrentWord_PropertyChanged;

            CurrentWord = item;
            if (!IsInDesignMode)
            {
                CommandDispatcher("SpeechItem");
            }
            CurrentWord.PropertyChanged += CurrentWord_PropertyChanged;


            // default setting
            btnOk.Visibility = Visibility.Collapsed;
            TranslationsPanel_Visibility = Visibility.Collapsed;
            ImagesList_Visibility = Visibility.Collapsed;

            EditModeVisibility = Visibility.Collapsed;

            bool Testing = false;
            switch (mode)
            {
                case Mode.FoundNewWord:
                    Header_LabelModel.Text = Tx.T("WordsTranslation.Caption.NewWordsFound");
                    Testing = LearningItem.TestingUnderstandingNewWords;
                    btnTrainingNext.Visibility = Visibility.Collapsed;
                    ImagePanelVisibility = Testing ? Visibility.Collapsed : Visibility.Visible;
                    WordsButtonPanelVisibility = Testing ? Visibility.Visible : Visibility.Collapsed;
                    TranslatingVisibility = Testing ? Visibility.Hidden : Visibility.Visible;
                    BottomButtonsPanelVisibility = Testing ? Visibility.Collapsed : Visibility.Visible;
                    break;

                case Mode.Training:
                    Header_LabelModel.Text = Tx.T("WordsTranslation.Caption.Training");
                    Testing = true;
                    btnTrainingNext.Visibility = Visibility.Hidden;
                    ImagePanelVisibility = Visibility.Hidden;
                    WordsButtonPanelVisibility = Visibility.Visible;
                    TranslatingVisibility = Visibility.Hidden;
                    BottomButtonsPanelVisibility = Visibility.Collapsed;
                    WordsCollection_ListModel.Visibility = Visibility.Visible;
                    btnPreviousButton.Visibility = Visibility.Collapsed;
                    btnNextButton.Visibility = Visibility.Collapsed;
                    break;

                case Mode.WordTranslation:
                    Header_LabelModel.Text = Tx.T("WordsTranslation.Caption.Translation");
                    Testing = false;
                    btnTrainingNext.Visibility = Visibility.Visible;
                    btnPreviousButton.Visibility = Visibility.Hidden;
                    btnNextButton.Visibility = Visibility.Hidden;
                    WordsCollection_ListModel.Visibility = Visibility.Visible;
                    break;

                case Mode.Edit:
                    btnPreviousButton.Visibility = Visibility.Collapsed;
                    btnNextButton.Visibility = Visibility.Collapsed;
                    WordsCollection_ListModel.Visibility = Visibility.Collapsed;
                    btnOk.Visibility = Visibility.Visible;
                    BottomButtonsPanelVisibility = Visibility.Collapsed;
                    WordsButtonPanelVisibility = Visibility.Collapsed;
                    btnTrainingNext.Visibility = Visibility.Collapsed;
                    TranslatingVisibility = Visibility.Collapsed;
                    TranslationsPanel_Visibility = Visibility.Visible;
                    ImagesList_Visibility = Visibility.Visible;
                    EditModeVisibility = Visibility.Visible;
                    break;

                default:
                    throw new NotImplementedException();
            }

            /*
            btnSkip.Visibility = Visibility.Visible;
            if(Testing)
            {
                btnPreviousButton.Visibility = Visibility.Hidden;
                btnNextButton.Visibility = Visibility.Hidden;
                WordsCollection_ListModel.Visibility = Visibility.Visible;
            } else
            {
                WordsCollection_ListModel.Visibility = Visibility.Collapsed;
                btnNextButton.Visibility = idx < WordsCollection.Count - 1 ? Visibility.Visible : Visibility.Hidden;
                btnPreviousButton.Visibility = idx > 0 ? Visibility.Visible : Visibility.Hidden;
            }
            */

            if (IsInDesignMode) return;

            if (Testing)
            {
                PhraseOfCollectMode phrase = new PhraseOfCollectMode();
                PhraseOfCollectMode.Word trueword = new PhraseOfCollectMode.Word() { word = CurrentWord.translation_as_string };
                phrase.Words.Add(trueword);

                if(CurrentWord.translation_as_string.Length > 0)
                {
                    ObservableCollection<FrequencyDictionary.Item> coll = CurrentWord.Dictionary.SecondaryLanguage.FrequencyDictionary.GetRndWords(4);
                    foreach(var elm in coll)
                    {
                        phrase.Words.Add(new PhraseOfCollectMode.Word() { word = elm.Lemma});
                    }
                } else throw new NotImplementedException("err");

                WordsForSelection_Buttons.Clear();
                phrase.StartRandomSelection();
                for (int i = 0; i < phrase.Words.Count; i++)
                {
                    PhraseOfCollectMode.Word word = phrase.GetNextRandom();
                    WordsForSelection_Buttons.Add(new ButtonModel() { Text=word.word, WordOfButton = word,IsItTrue = word == trueword});
                }
            }
        }
        private void AddWordsToPanel(SubtitleItem SubItem)
        {
            player.Pause();
            CollectPhrases_Buttons.Clear();

            if (SubItem == null) return;

            if (SubItem.IsCollect)
            {
                CollectedPhraseText = SubItem.Text;
                return;
            }

            CurrentPhrase = new PhraseOfCollectMode(SubItem);
            CurrentPhrase.StartRandomSelection();
            for (int i = 0; i < CurrentPhrase.Words.Count; i++)
            {

                PhraseOfCollectMode.Word word = CurrentPhrase.GetNextRandom();
                CollectPhrases_Buttons.Add(new ButtonModel() { WordOfButton = word,Visibility = Visibility.Visible});
            }
            player.Play();
        }
        private void Controller(PlayerEvent evnt)
        {
            SubtitleItem SubItem = evnt.SubItem;
            Logger.Trace("Event {0}",evnt);


            if (SubItem == null)
            {
                Logger.Trace("Skip because sub is null  {1}:{2} {0}", SubItem.Text, SubItem.TimeStart, SubItem.TimeEnd);
            }

            switch (evnt.KindOfEvent)
            {

                case PlyaerEventEnum.NewSubItem:
                    Logger.Trace("Set a new phrase {1}:{2} {0}", SubItem.Text, SubItem.TimeStart, SubItem.TimeEnd);
                    LearningItem.CurrentSub = SubItem;

                    if (LearningItem.CollectPhrases && !SubItem.IsCollect)
                    {
                        AddWordsToPanel(SubItem);
                    }
                    if (!player.IsPlaying) player.Play();
                    break;

                case PlyaerEventEnum.EndOfSubtitle:
                    break;

                case PlyaerEventEnum.CollectingWordTestPassed:
                    LearningItem.CurrentSub.IsCollect = true;
                    StatList.Add(new StatisticsMessage() { Cmd = StatisticsCmd.PhraseCollected, phrase = CurrentPhrase });
                    if (LearningItem.UnderstandingTest)
                    {
                        //NavigationService.NavigateForward(ViewModelLocator.UnderstandingTest,new UnderstandingTest_parameters() { LearningItem = LearningItem });
                        VideoFrameVisibility = Visibility.Hidden;
                        NavigationService.OpenDialog(Form.UnderstandingTest,
                            new UnderstandingTest_parameters() { LearningItem = LearningItem});
                        //VideoFrameVisibility = Visibility.Visible;
                    }
                    break;

                case PlyaerEventEnum.UnderstandingTestPassed:
                    VideoFrameVisibility = Visibility.Visible;
                    LearningItem.CurrentSub.IsTestedOnUnderstand = true;
                    StatList.Add(new StatisticsMessage() { Cmd = StatisticsCmd.PassUnderstandingTest, phrase = CurrentPhrase });
                    break;

                case PlyaerEventEnum.UnderstandingTestFailed:
                    VideoFrameVisibility = Visibility.Visible;
                    // repeat Collect phrases if Understanding test failed
                    if (LearningItem.CollectPhrases)
                    {
                        LearningItem.CurrentSub.IsCollect = false;
                        AddWordsToPanel(SubItem);
                    }
                    StatList.Clear();
                    CmdDispatcher("Replay");
                    return;

                case PlyaerEventEnum.ClearCurrentSub:
                    LearningItem.CurrentSub = null;
                    CollectPhrases_Buttons.Clear();
                    CollectedPhraseText = "";
                    CurrentPhrase = null;
                    return;

                case PlyaerEventEnum.FoundNewWordsFormClosed:
                    player.Play();
                    VideoFrameVisibility = Visibility.Visible;
                    break;
            }

            bool IsAllTestPassed = true;
            if (LearningItem.CollectPhrases && !SubItem.IsCollect) IsAllTestPassed = false;
            if (LearningItem.UnderstandingTest && !SubItem.IsTestedOnUnderstand) IsAllTestPassed = false;

            if (IsAllTestPassed)
            {
                foreach (var elm in StatList) { LearningItem.UpdateStatistics(elm); }
                StatList.Clear();
                player.Play();
                /*
                Controller(new PlayerEvent(PlyaerEventEnum.ClearCurrentSub, SubItem));
                Logger.Trace("Controller:CurrentSub = 0 Position {0}",player.Position);
                player.Play();
                */

                /*
                SubtitleItem newsub = LearningItem.MainSubs.GetNextSub(LearningItem.CurrentSub);
                SetNewPhrase(newsub);
                */

            }

            switch (evnt.KindOfEvent)
            {
                case PlyaerEventEnum.EndOfSubtitle:
                    if (!IsAllTestPassed)
                    {
                        player.Pause();
                    } else
                    {
                        Controller(new PlayerEvent(PlyaerEventEnum.ClearCurrentSub, SubItem));
                        Logger.Trace("Controller:CurrentSub = 0 Position {0}", player.Position);
                        player.Play();
                    }
                    break;

                case PlyaerEventEnum.NewSubItem:
                    // 
                    if (LearningItem.ShowNewWords)
                    {
                        ObservableCollection<WordOfDictionary> CollectionOfNewWords = AppSetting.PersonalDictionary.GetListOfNewWords(SubItem);
                        if (CollectionOfNewWords.Count > 0)
                        {
                            player.Pause();
                            VideoFrameVisibility = Visibility.Hidden;
                            NavigationService.OpenDialog(Form.WordsTranslation,new WordsTranslation_parameters(){WordsCollection = CollectionOfNewWords,SubtitleItem=SubItem,LearningItem=LearningItem},"EmptyDialog");
                            //NavigationService.NavigateForward(ViewModelLocator.FoundNewWords,new FoundNewWords_parameters(){NewWordsCollection = CollectionOfNewWords,SubtitleItem=SubItem,LearningItem=LearningItem});
                        }
                    }
                    break;
            }

        }
 private void TranslateWord_Cmd(PhraseOfCollectMode.Word word)
 {
     WordsTranslation_parameters param = new WordsTranslation_parameters();
     param.Mode = WordsTranslation_ViewModel.Mode.WordTranslation;
     param.WordsCollection = new ObservableCollection<WordOfDictionary>();
     param.WordsCollection.Add(new WordOfDictionary() {word = word.word});
     param.Dictionary = AppSetting.PersonalDictionary;
     NavigationService.NavigateForward(Form.WordsTranslation,param);   
 }
Exemple #7
0
 public static bool IsPhraseEqualent(PhraseOfCollectMode a, PhraseOfCollectMode b)
 {
     if (a.Words.Count != b.Words.Count)
     {
         return false;
     }
     bool eq = true;
     for (int i = 0; i < a.Words.Count; i++)
     {
         if (a.Words[i] != b.Words[i])
         {
             eq = false;
             break;
         }
     }
     return eq;
 }