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}); } }
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(); } }
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}); } } }