public bool MoveCharactersToGroup(IList <string> characterIds, CharacterGroup destGroup, bool warnUserAboutProximity = false) { CharacterGroup sourceGroup = GetSourceGroupForMove(characterIds, destGroup); if (sourceGroup == null) { return(false); } if (destGroup != null && warnUserAboutProximity && destGroup.CharacterIds.Count > 0) { var proximity = new Proximity(m_project.IncludedBooks, m_project.DramatizationPreferences); var testGroup = new CharacterIdHashSet(destGroup.CharacterIds); var resultsBefore = proximity.CalculateMinimumProximity(testGroup); int proximityBefore = resultsBefore.NumberOfBlocks; testGroup.AddRange(characterIds); var resultsAfter = proximity.CalculateMinimumProximity(testGroup); int proximityAfter = resultsAfter.NumberOfBlocks; if (proximityBefore > proximityAfter && proximityAfter <= Proximity.kDefaultMinimumProximity) { var firstReference = resultsAfter.FirstReference; var secondReference = resultsAfter.SecondReference; var dlgMessageFormat1 = (firstReference == secondReference) ? LocalizationManager.GetString("DialogBoxes.VoiceActorAssignmentDlg.MoveCharacterDialog.Message.Part1", "This move will result in a group with a minimum proximity of {0} blocks between [{1}] and [{2}] in {3}.") : LocalizationManager.GetString("DialogBoxes.VoiceActorAssignmentDlg.MoveCharacterDialog.Message.Part1", "This move will result in a group with a minimum proximity of {0} blocks between [{1}] in {3} and [{2}] in {4}."); dlgMessageFormat1 = string.Format(dlgMessageFormat1, resultsAfter.NumberOfBlocks, CharacterVerseData.GetCharacterNameForUi(resultsAfter.FirstCharacterId), CharacterVerseData.GetCharacterNameForUi(resultsAfter.SecondCharacterId), firstReference, secondReference); var dlgMessageFormat2 = LocalizationManager.GetString("DialogBoxes.VoiceActorAssignmentDlg.MoveCharacterDialog.Message.Part2", "Do you want to continue with this move?"); var dlgMessage = string.Format(dlgMessageFormat1 + Environment.NewLine + Environment.NewLine + dlgMessageFormat2); var dlgTitle = LocalizationManager.GetString("DialogBoxes.VoiceActorAssignmentDlg.MoveCharacterDialog.Title", "Confirm"); if (MessageBox.Show(dlgMessage, dlgTitle, MessageBoxButtons.YesNo) != DialogResult.Yes) { return(false); } } } m_undoStack.Push(new MoveCharactersToGroupUndoAction(m_project, sourceGroup, destGroup, characterIds)); Save(); return(true); }
public void CalculateMinimumProximity_TreatStandardNonScriptureCharactersAsDistinct_ExtraBiblicalResultsInZeroProximityWithChapterNumber() { var project = TestProject.CreateTestProject(TestProject.TestBook.MRK); project.UseDefaultForUnresolvedMultipleChoiceCharacters(); project.DramatizationPreferences.BookTitleAndChapterDramatization = ExtraBiblicalMaterialSpeakerOption.MaleActor; project.DramatizationPreferences.SectionHeadDramatization = ExtraBiblicalMaterialSpeakerOption.ActorOfEitherGender; project.DramatizationPreferences.BookIntroductionsDramatization = ExtraBiblicalMaterialSpeakerOption.FemaleActor; var proximity = new Proximity(project.IncludedBooks, project.DramatizationPreferences); var characterIds = new HashSet <string> { CharacterVerseData.GetStandardCharacterId("MRK", CharacterVerseData.StandardCharacter.BookOrChapter), CharacterVerseData.GetStandardCharacterId("MRK", CharacterVerseData.StandardCharacter.ExtraBiblical), CharacterVerseData.GetStandardCharacterId("MRK", CharacterVerseData.StandardCharacter.Intro) }; MinimumProximity minProximity = proximity.CalculateMinimumProximity(characterIds); Assert.AreEqual(0, minProximity.NumberOfBlocks); Assert.AreEqual(CharacterVerseData.GetStandardCharacterId("MRK", CharacterVerseData.StandardCharacter.BookOrChapter), minProximity.FirstCharacterId); Assert.AreEqual(CharacterVerseData.GetStandardCharacterId("MRK", CharacterVerseData.StandardCharacter.ExtraBiblical), minProximity.SecondCharacterId); Assert.AreEqual("MRK 1:0", minProximity.FirstReference); Assert.AreEqual("MRK 1:0", minProximity.SecondReference); }
public void CalculateMinimumProximity_NarrationByAuthor_NonStrictAdherenceToNarratorPrefs_AllStandardCharactersAndBookAuthorResultsInMaxProximity() { var project = TestProject.CreateTestProject(TestProject.TestBook.GAL); project.UseDefaultForUnresolvedMultipleChoiceCharacters(); var idPaul = BiblicalAuthors.GetAuthorOfBook("GAL").Name; foreach (var block in project.IncludedBooks[0].GetBlocksForVerse(2, 15)) { block.CharacterId = idPaul; } project.CharacterGroupGenerationPreferences.NarratorsOption = NarratorsOption.NarrationByAuthor; // The following can be anything but omitted, but by making them all different, we prove that // non-strict adherence to the the narrator prefs is really happening. project.DramatizationPreferences.BookTitleAndChapterDramatization = ExtraBiblicalMaterialSpeakerOption.ActorOfEitherGender; project.DramatizationPreferences.BookIntroductionsDramatization = ExtraBiblicalMaterialSpeakerOption.FemaleActor; project.DramatizationPreferences.SectionHeadDramatization = ExtraBiblicalMaterialSpeakerOption.MaleActor; var proximity = new Proximity(project, false); var characterIds = new HashSet <string> { CharacterVerseData.GetStandardCharacterId("GAL", CharacterVerseData.StandardCharacter.Narrator), CharacterVerseData.GetStandardCharacterId("GAL", CharacterVerseData.StandardCharacter.ExtraBiblical), CharacterVerseData.GetStandardCharacterId("GAL", CharacterVerseData.StandardCharacter.Intro), // Not actually used in GAL test data CharacterVerseData.GetStandardCharacterId("GAL", CharacterVerseData.StandardCharacter.BookOrChapter), idPaul }; MinimumProximity minProximity = proximity.CalculateMinimumProximity(characterIds); Assert.AreEqual(Int32.MaxValue, minProximity.NumberOfBlocks); }
public void CalculateMinimumProximity_NonStrictAdherenceToNarratorPrefs_AllStandardCharactersAndBookAuthorResultsInMaxProximity() { var project = TestProject.CreateTestProject(TestProject.TestBook.JOS); // Using Joshua because the test data for Joshua has into material project.UseDefaultForUnresolvedMultipleChoiceCharacters(); project.CharacterGroupGenerationPreferences.NarratorsOption = NarratorsOption.SingleNarrator; // By making theses all different, we force the CharacterGroupGenerator (which we aren't calling here) to put each // type of standard character in a different group, but with "not strict" proximity, we still consider it legit to // manually put them in the same group. project.DramatizationPreferences.BookTitleAndChapterDramatization = ExtraBiblicalMaterialSpeakerOption.ActorOfEitherGender; project.DramatizationPreferences.BookIntroductionsDramatization = ExtraBiblicalMaterialSpeakerOption.FemaleActor; project.DramatizationPreferences.SectionHeadDramatization = ExtraBiblicalMaterialSpeakerOption.MaleActor; var proximity = new Proximity(project, false); var characterIds = new HashSet <string> { CharacterVerseData.GetStandardCharacterId("JOS", CharacterVerseData.StandardCharacter.Narrator), CharacterVerseData.GetStandardCharacterId("JOS", CharacterVerseData.StandardCharacter.ExtraBiblical), CharacterVerseData.GetStandardCharacterId("JOS", CharacterVerseData.StandardCharacter.Intro), CharacterVerseData.GetStandardCharacterId("JOS", CharacterVerseData.StandardCharacter.BookOrChapter), }; MinimumProximity minProximity = proximity.CalculateMinimumProximity(characterIds); Assert.AreEqual(Int32.MaxValue, minProximity.NumberOfBlocks); }
public void CalculateMinimumProximity_NarrationByAuthor_CharacterSpeakingInBookHeNarratesResultsInMaxProximity() { var project = TestProject.CreateTestProject(TestProject.TestBook.GAL); project.UseDefaultForUnresolvedMultipleChoiceCharacters(); var idPaul = BiblicalAuthors.GetAuthorOfBook("GAL").Name; foreach (var block in project.IncludedBooks[0].GetBlocksForVerse(2, 15)) { block.CharacterId = idPaul; } project.CharacterGroupGenerationPreferences.NarratorsOption = NarratorsOption.NarrationByAuthor; project.DramatizationPreferences.BookTitleAndChapterDramatization = ExtraBiblicalMaterialSpeakerOption.Narrator; project.CharacterGroupGenerationPreferences.NumberOfMaleNarrators = 1; var proximity = new Proximity(project); var characterIds = new HashSet <string> { CharacterVerseData.GetStandardCharacterId("GAL", CharacterVerseData.StandardCharacter.Narrator), CharacterVerseData.GetStandardCharacterId("GAL", CharacterVerseData.StandardCharacter.BookOrChapter), idPaul }; MinimumProximity minProximity = proximity.CalculateMinimumProximity(characterIds); Assert.AreEqual(Int32.MaxValue, minProximity.NumberOfBlocks); }
public void CalculateMinimumProximity_OneCharacterGroupJesus_ReturnsMaxInt() { HashSet <string> characterIds = new HashSet <string>(); characterIds.Add("Jesus"); MinimumProximity minProximity = m_proximity.CalculateMinimumProximity(characterIds); Assert.AreEqual(Int32.MaxValue, minProximity.NumberOfBlocks); Assert.AreEqual("Jesus", minProximity.FirstCharacterId); Assert.AreEqual("Jesus", minProximity.SecondCharacterId); Assert.AreEqual("MRK 1:17", minProximity.FirstReference); Assert.AreEqual("MRK 1:17", minProximity.SecondReference); }
public VoiceActorAssignmentViewModel(Project project) { m_project = project; CharacterGroupAttribute <CharacterGender> .GetUiStringForValue = GetUiStringForCharacterGender; CharacterGroupAttribute <CharacterAge> .GetUiStringForValue = GetUiStringForCharacterAge; #if DEBUG var p = new Proximity(m_project.IncludedBooks, m_project.DramatizationPreferences); foreach (var group in CharacterGroups.OrderBy(g => g.GroupIdForUiDisplay)) { Debug.WriteLine(group.GroupIdForUiDisplay + ": " + p.CalculateMinimumProximity(group.CharacterIds)); } #endif }
public VoiceActorAssignmentViewModel(Project project, Dictionary <string, int> keyStrokesByCharacterId = null) { m_project = project; m_keyStrokesByCharacterId = keyStrokesByCharacterId ?? m_project.GetKeyStrokesByCharacterId(); CharacterGroupAttribute <CharacterGender> .GetUiStringForValue = GetUiStringForCharacterGender; CharacterGroupAttribute <CharacterAge> .GetUiStringForValue = GetUiStringForCharacterAge; m_project.CharacterGroupList.PopulateEstimatedHours(m_keyStrokesByCharacterId); #if DEBUG var p = new Proximity(m_project); foreach (var group in CharacterGroups.OrderBy(g => g.GroupNumber)) { Debug.WriteLine(group.GroupNumber + ": " + p.CalculateMinimumProximity(group.CharacterIds)); } #endif }
public void CalculateMinimumProximity_OneCharacterGroupJesus_ReturnsMaxInt() { HashSet <string> characterIds = new HashSet <string>(); characterIds.Add("Jesus"); MinimumProximity minProximity = m_proximity.CalculateMinimumProximity(characterIds); Assert.AreEqual(Int32.MaxValue, minProximity.NumberOfBlocks); Assert.AreEqual("Jesus", minProximity.FirstBlock.CharacterIdInScript); Assert.AreEqual("Jesus", minProximity.SecondBlock.CharacterIdInScript); Assert.AreEqual("MRK", minProximity.FirstBook.BookId); Assert.AreEqual("MRK", minProximity.SecondBook.BookId); Assert.AreEqual(1, minProximity.FirstBlock.ChapterNumber); Assert.AreEqual(1, minProximity.SecondBlock.ChapterNumber); Assert.AreEqual(17, minProximity.FirstBlock.InitialStartVerseNumber); Assert.AreEqual(17, minProximity.SecondBlock.InitialStartVerseNumber); }
public VoiceActorAssignmentViewModel(Project project) { m_project = project; ProjectProximity = new Proximity(m_project, false); CharacterGroupAttribute <CharacterGender> .GetUiStringForValue = GetUiStringForCharacterGender; CharacterGroupAttribute <CharacterAge> .GetUiStringForValue = GetUiStringForCharacterAge; LogAndOutputToDebugConsole("Group".PadRight(7) + ": " + MinimumProximity.ReportHeader + Environment.NewLine + "-".PadRight(100, '-')); foreach (var group in CharacterGroups.OrderBy(g => g.GroupIdForUiDisplay)) { LogAndOutputToDebugConsole(group.GroupIdForUiDisplay.PadRight(7) + ": " + ProjectProximity.CalculateMinimumProximity(group.CharacterIds)); } }