void AddButtons()
        {
            int NumberOfAnalogue = 2;

            PhraseOfCollectMode CurrentPhrase = new PhraseOfCollectMode(LearningItem.CurrentSub);

            // finds analogue
            int WordsNumber = CurrentPhrase.Words.Count;
            List<PhraseOfCollectMode> analogue = LearningItem.MainSubs.PhrasesList.FindAll(x => x.Words.Count == WordsNumber);
            if (analogue.Count < (NumberOfAnalogue + 10))
            {
                analogue = LearningItem.MainSubs.PhrasesList.FindAll(
                    x => ((x.Words.Count >= WordsNumber - 1) && (x.Words.Count <= WordsNumber + 1)));
                    if (analogue.Count < (NumberOfAnalogue + 10))
                    {
                        analogue = LearningItem.MainSubs.PhrasesList;
                    }
             }

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

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

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

                if (string.IsNullOrEmpty(rndphrase.SubtitleItem.Text2)) continue;

                // Find duplicate
                bool IsThisDuplicate = false;
                foreach(var phr_ in PhrasesForShow)
                {
                    if (PhraseOfCollectMode.IsPhraseEqualent(phr_.Value,rndphrase))
                    {
                        IsThisDuplicate = true;
                        break;
                    }
                }
                if (IsThisDuplicate) 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 < AppSetting.NumberOfPrasesForUndestandingTest)
            {
                DialogService.Message(Loc.T("UnderstandingTest.Messages.NotEnoughPhrases"),Loc.T("Common.Titles.Error"));
                return;
            }

            // Add to panel
            ButtonsCollection.Clear();
            foreach (var elm in PhrasesForShow.OrderBy(x=>x.Key).ToList())
            {
                ButtonsCollection.Add(new ButtonModel() {Text = elm.Value.SubtitleItem.Text2,IsItTrue = elm.Value == CurrentPhrase});
            }
        }
Esempio n. 2
0
 public void GeneratePhraseHashCodes()
 {
     StringBuilder hash = new StringBuilder(500);
     foreach (SubtitleItem subtitleItem in Items)
     {
         hash.Clear();
         PhraseOfCollectMode phrase = new PhraseOfCollectMode(subtitleItem);
         foreach (PhraseOfCollectMode.Word word in phrase.Words)
         {
             hash.Append(word.word_of_phrase);
             
         }
         subtitleItem.PhraseStringHash = hash.ToString().ToLower();
     }
 }
Esempio n. 3
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++)
     {
         int pz = String.Compare(a.Words[i].word_of_phrase, b.Words[i].word_of_phrase, StringComparison.OrdinalIgnoreCase);
         if (pz != 0)
         {
             eq = false;
             break;
         }
     }
     return eq;
 }
        void SplitPhraseOnWords(SubtitleItem item)
        {
            if (!item.DoNotCollectThisItem)
            {
                item.WordsCollection.Clear();
                PhraseOfCollectMode phrase = new PhraseOfCollectMode(item);
                byte idx = 1;
                foreach (var wrd in phrase.Words)
                {
                    if (item.WordsCollection.Any(x => string.Compare(x.word, wrd.word_of_phrase, true) == 0 )) continue;
                    item.WordsCollection.Add(new WordOfSubtitleItem
                    {
                        word = wrd.word_of_phrase,
                        number = idx,
                    });
                    idx++;

                }
            }
        }
        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 = VisualState.Visible});
            }
            player.Play();
        }
        private void Controller(PlayerEvent evnt)
        {
            SubtitleItem SubItem = evnt.SubItem;
            Logger.Write<PlayerWindow_ViewModel>(LogMsgType.DeepTrace,string.Format("Event {0}",evnt));


            if (SubItem == null)
            {
                Logger.Write<PlayerWindow_ViewModel>(LogMsgType.DeepTrace,string.Format("Skip because sub is null  {1}:{2} {0}", SubItem.Text, SubItem.TimeStart, SubItem.TimeEnd));
            }

            switch (evnt.KindOfEvent)
            {

                case PlyaerEventEnum.NewSubItem:
                    Logger.Write<PlayerWindow_ViewModel>(LogMsgType.DeepTrace,$"Set a new phrase {SubItem.Text}:{SubItem.TimeStart} {SubItem.TimeEnd}");
                    LearningItem.CurrentSub = SubItem;

                    if (SubItem.DoNotCollectThisItem)
                    {
                            SubItem.IsCollect = true;
                            SubItem.IsTestedOnUnderstand = true;
                    }
                    if (!AppSetting.CollectSamePhrases && !String.IsNullOrEmpty(SubItem.PhraseStringHash))
                    {
                        if (
                            LearningItem.MainSubs.Items.Any(
                                (x) => x.IsCollect && x.PhraseStringHash == SubItem.PhraseStringHash))
                        {
                            SubItem.IsCollect = true;
                            SubItem.IsTestedOnUnderstand = true;
                        }
                    }
                    PhraseOfCollectMode phrase = new PhraseOfCollectMode(SubItem);
                    if(phrase.Words.Count == 0) SubItem.IsCollect = true;
                    if (!AppSetting.CollectOneWordPhrases )
                    {
                        if (phrase.Words.Count == 1)
                        {
                            SubItem.IsCollect = true;
                            SubItem.IsTestedOnUnderstand = true;
                        }
                    }

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

                case PlyaerEventEnum.EndOfSubtitle:
                    break;

                case PlyaerEventEnum.CollectingWordTestPassed:
                    LearningItem.CurrentSub.MarkAsCollected(true);
                    StatList.Add(new StatisticsMessage() { Cmd = StatisticsCmd.PhraseCollected, phrase = CurrentPhrase });
                    if (LearningItem.UnderstandingTest)
                    {
                        //player.isHidden = true;
                        NavigationService.OpenDialog(Views.UnderstandingTest, new UnderstandingTest_parameters { LearningItem = LearningItem,SubtitleItem = evnt.SubItem});
                    }
                    break;

                case PlyaerEventEnum.UnderstandingTestPassed:
                    //player.isHidden = false;
                    LearningItem.CurrentSub.IsTestedOnUnderstand = true;
                    StatList.Add(new StatisticsMessage() { Cmd = StatisticsCmd.PassUnderstandingTest, phrase = CurrentPhrase });
                    break;

                case PlyaerEventEnum.UnderstandingTestFailed:
                    //player.isHidden = false;
                    // repeat Collect phrases if Understanding test failed
                    if (LearningItem.CollectPhrases)
                    {
                        LearningItem.CurrentSub.MarkAsCollected(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();
                    //player.isHidden = false;
                    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();
            }

            switch (evnt.KindOfEvent)
            {
                case PlyaerEventEnum.EndOfSubtitle:
                    if (!IsAllTestPassed)
                    {
                        player.Pause();
                    } else
                    {
                        Controller(new PlayerEvent(this,PlyaerEventEnum.ClearCurrentSub, SubItem));
                        Logger.Write<PlayerWindow_ViewModel>(LogMsgType.DeepTrace,string.Format("Controller:CurrentSub = 0 Position {0}", player.Position));
                        player.Play();
                    }
                    break;

                case PlyaerEventEnum.NewSubItem:
                    // 
                    if (LearningItem.ShowNewWords)
                    {
                        ObservableCollection<WordOfDictionary> CollectionOfNewWords = PersonalDictionary.GetListOfNewWords(SubItem);
                        if (CollectionOfNewWords.Count > 0)
                        {
                            player.Pause();
                            //player.isHidden = true;
                            NavigationService.OpenDialog(Views.WordsTranslation,new WordsTranslation_parameters(){Mode = WordsTranslation_parameters.ViewMode.FoundNewWord, WordsCollection = CollectionOfNewWords,SubtitleItem=SubItem,LearningItem=LearningItem});
                        }
                    }
                    break;
            }

        }
 private void TranslateWord_Cmd(PhraseOfCollectMode.Word word)
 {
     WordsTranslation_parameters param = new WordsTranslation_parameters();
     param.Mode = WordsTranslation_parameters.ViewMode.WordTranslation;
     param.WordsCollection = new ObservableCollection<WordOfDictionary>();
     param.WordsCollection.Add(new WordOfDictionary() {word_of_dictionary = word.word_of_phrase});
     param.Dictionary = PersonalDictionary;
     NavigationService.NavigateForward(Views.WordsTranslation,param);   
 }
        protected void SetCurrentWord(WordOfDictionary item)
        {

            if (!IsInDesignMode)
            {
                if (CurrentWord != null)  CurrentWord.PropertyChanged -= CurrentWord_PropertyChanged;
            }
            
            CurrentWord = item;

            

            if (!IsInDesignMode)
            {
                CmdDispatcher("SpeechItem");
                CurrentWord.PropertyChanged += CurrentWord_PropertyChanged;
                // Language services
                LanguageServiceCollection = LanguageServices.GetServices(CurrentWord.TargetLanguage,CurrentWord.NativeLanguage);
            }

            // default setting
            btnOk.Visibility = VisualState.Collapsed;
            ImagesList_Visibility = VisualState.Collapsed;
            ErrorIconVisibility = VisualState.Collapsed;
            EditModeVisibility = VisualState.Collapsed;

            

            bool Testing = false;
            switch (mode)
            {
                case WordsTranslation_parameters.ViewMode.FoundNewWord:
                    Header_LabelModel.Text  = Tx.T("WordsTranslation.Caption.NewWordsFound");
                    Header2_LabelModel.Text = Tx.T("WordsTranslation.Caption.NewWordsFound.Second");

                    //Testing = LearningItem.TestingUnderstandingNewWords;
                    Testing = true;

                    btnTrainingNext.Visibility = VisualState.Collapsed;
                    ImagePanelVisibility = Testing ? VisualState.Collapsed : VisualState.Visible;
                    WordsButtonPanelVisibility = Testing ? VisualState.Visible : VisualState.Collapsed;
                    TranslatingVisibility = Testing ? VisualState.Hidden : VisualState.Visible;
                    if (TranslatingVisibility == VisualState.Visible)
                    {
                        CommentaryVisibilty = string.IsNullOrEmpty(CurrentWord.commentary) ? VisualState.Collapsed : VisualState.Visible;
                    } else
                    {
                        CommentaryVisibilty = VisualState.Hidden;
                    }
                    BottomButtonsPanelVisibility = Testing ? VisualState.Collapsed : VisualState.Visible;

                    break;

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

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

                case WordsTranslation_parameters.ViewMode.DictionaryItem:
                    Header_LabelModel.Text = Tx.T("WordsTranslation.Caption.Translation");
                    Testing = false;
                    btnTrainingNext.Visibility = VisualState.Visible;
                    btnPreviousButton.Visibility = VisualState.Hidden;
                    btnNextButton.Visibility = VisualState.Hidden;
                    WordsCollection_ListModel.Visibility = VisualState.Visible;
                    WordsButtonPanelVisibility = VisualState.Collapsed;
                    BottomButtonsPanelVisibility = VisualState.Collapsed;
                    btnTrainingNext.Visibility = VisualState.Collapsed;
                    btnAllWordsList.Visibility = VisualState.Collapsed;
                    break;
                    
                case WordsTranslation_parameters.ViewMode.Edit:
                    btnPreviousButton.Visibility = VisualState.Collapsed;
                    btnNextButton.Visibility = VisualState.Collapsed;
                    WordsCollection_ListModel.Visibility = VisualState.Collapsed;
                    btnOk.Visibility = VisualState.Visible;
                    BottomButtonsPanelVisibility = VisualState.Collapsed;
                    WordsButtonPanelVisibility = VisualState.Collapsed;
                    btnTrainingNext.Visibility = VisualState.Collapsed;
                    TranslatingVisibility = VisualState.Visible;
                    CommentaryVisibilty = VisualState.Visible;
                    RightPanel_Properties.IsChecked = true;
                    ImagesList_Visibility = VisualState.Visible;
                    EditModeVisibility = VisualState.Visible;
                    ContextVisibility = VisualState.Collapsed;
                    
                    break;

                default:
                    throw new NotImplementedException();
            }
            if (IsInDesignMode) return;
            /*
            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_of_phrase = CurrentWord.translation_as_string };
                phrase.Words.Add(trueword);

                if(CurrentWord.translation_as_string.Length > 0)
                {
                    Dictionary dict_ = CurrentWord.Dictionary;
                    if (dict_ == null)
                    {
                        SystemMessage.Show("Dictionary is null " + CurrentWord);
                        return;
                    }
                    Language lang_ = dict_.SecondaryLanguage;
                    if(lang_ == null)
                    {
                        SystemMessage.Show("Language is null " + dict_);
                        return;
                    }
                    FrequencyDictionary fdic_ = lang_.FrequencyDictionary;
                    if(fdic_ == null)
                    {
                        SystemMessage.Show("Frequency dictionary is null" + dict_);
                        return;
                    }

                    ObservableCollection<FrequencyDictionary.Item> coll = fdic_.GetRndWords(4);
                    foreach(var elm in coll)
                    {
                        phrase.Words.Add(new PhraseOfCollectMode.Word() { word_of_phrase = elm.Lemma});
                    }
                } else SystemMessage.Show("Can't found translation for "+CurrentWord);

                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_of_phrase, WordOfButton = word,IsItTrue = word == trueword});
                }
            }
        }