protected int GetDefaultWs(InterlinearMapping mapping) { int ws; switch (mapping.Destination) { default: ws = m_cache.DefaultAnalWs; break; case InterlinDestination.Ignored: ws = 0; break; case InterlinDestination.Baseline: case InterlinDestination.Wordform: ws = m_cache.DefaultVernWs; break; } return(ws); }
protected int GetDefaultWs(InterlinearMapping mapping) { int ws; switch (mapping.Destination) { default: ws = m_cache.DefaultAnalWs; break; case InterlinDestination.Ignored: ws = 0; break; case InterlinDestination.Baseline: case InterlinDestination.Wordform: ws = m_cache.DefaultVernWs; break; } return ws; }
protected override void OnNextButton() { if (CurrentStepNumber == 0) { // Populate m_mappingsList based on the selected files. var sfmcounts = new Dictionary<string, int>(); var sfmOrder = new Dictionary<int, string>(); // key is 100000*fileNum + orderInFile, value is a marker int fileNum = 0; foreach (var pathName in InputFiles) { var reader = new SfmFileReaderEx(pathName); followedBy = reader.GetFollowedByInfo(); foreach (string marker in reader.SfmInfo) { int oldVal; if (!sfmcounts.TryGetValue(marker, out oldVal)) { // first time we've seen it: this file determines order; sfmOrder[fileNum * 100000 + reader.GetSFMOrder(marker)] = marker; } sfmcounts[marker] = oldVal + reader.GetSFMCount(marker); } fileNum++; } // Read the map file (unless we've been to this pane before...then use the saved settings), integrate with the sfmcount info. var savedMappings = new Dictionary<string, InterlinearMapping>(); m_oldMappings = m_firstTimeInMappingsPane ? LoadSettings() : new List<InterlinearMapping>((m_mappings)); m_firstTimeInMappingsPane = false; foreach (var mapping in m_oldMappings) savedMappings[mapping.Marker] = mapping; m_mappings.Clear(); var keys = new List<int>(sfmOrder.Keys); keys.Sort(); foreach (var key in keys) { var marker = sfmOrder[key]; InterlinearMapping mapping; if (savedMappings.TryGetValue(marker, out mapping)) { mapping = new InterlinearMapping(mapping); if (string.IsNullOrEmpty(mapping.WritingSystem)) { var ws = GetDefaultWs(mapping); if (ws != 0) mapping.WritingSystem = m_cache.WritingSystemFactory.GetStrFromWs(ws); } else if (mapping.WritingSystem == "{vern}") mapping.WritingSystem = m_cache.WritingSystemFactory.GetStrFromWs(m_cache.DefaultVernWs); } else mapping = new InterlinearMapping() {Marker = marker}; mapping.Count = sfmcounts[marker].ToString(); m_mappings.Add(mapping); } m_mappingsList.SuspendLayout(); m_mappingsList.Items.Clear(); foreach (var mapping in m_mappings) { var item = new ListViewItem("\\" + mapping.Marker); item.SubItems.Add(mapping.Count); item.SubItems.Add(GetDestinationName(mapping.Destination)); item.SubItems.Add(mapping.WritingSystem != null ? GetWritingSystemName(mapping.WritingSystem) : ""); item.SubItems.Add(mapping.Converter ?? ""); m_mappingsList.Items.Add(item); } if (m_mappingsList.Items.Count > 0) m_mappingsList.SelectedIndices.Add(0); m_mappingsList.ResumeLayout(); } else if(CurrentStepNumber == 1) { ICollection<IWritingSystem> currentVernacWSs = m_cache.LanguageProject.VernacularWritingSystems; ICollection<IWritingSystem> currentAnalysWSs = m_cache.LanguageProject.AnalysisWritingSystems; var vernToAdd = new ArrayList(); var analysToAdd = new ArrayList(); int textCount = CalculateTextCount(m_mappings, followedBy); foreach(var mapping in m_mappings) { if (mapping.Destination == InterlinDestination.Ignored) continue; // may well have no WS, in any case, we don't care whether it's in our list. bool creationCancelled = false; var ws = (IWritingSystem)m_cache.WritingSystemFactory.get_Engine(mapping.WritingSystem); if (mapping.Destination == InterlinDestination.Baseline || mapping.Destination == InterlinDestination.Wordform) { if(!currentVernacWSs.Contains(ws) && !vernToAdd.Contains(ws)) { //Show creation dialog for Vernacular var result = MessageBox.Show(this, String.Format(ITextStrings.ksImportSFMInterlinNewVernac, ws), String.Format(ITextStrings.ksImportSFMInterlinNewWSTitle, ws), MessageBoxButtons.YesNo); if(result == DialogResult.Yes) { vernToAdd.Add(ws); } else //if they bail out we won't add any writing systems, they might change them all { return; } } } else { if(!currentAnalysWSs.Contains(ws) && !analysToAdd.Contains(ws)) { var result = MessageBox.Show(this, String.Format(ITextStrings.ksImportSFMInterlinNewAnalysis, ws), String.Format(ITextStrings.ksImportSFMInterlinNewWSTitle, ws), MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { analysToAdd.Add(ws); } else //if they bail out we won't add any writing systems, they might change them all { return; } } } } NonUndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW(m_cache.ActionHandlerAccessor, () => //Add all the collected new languages into the project in their proper section. { foreach (IWritingSystem analysLang in analysToAdd) { m_cache.LanguageProject.AddToCurrentAnalysisWritingSystems(analysLang); } foreach (IWritingSystem vernLang in vernToAdd) { m_cache.LanguageProject.AddToCurrentVernacularWritingSystems(vernLang); } }); if(textCount > 1) { numberOfTextsLabel.Text = String.Format(ITextStrings.ksImportSFMInterlinTextCount, textCount); } else { numberOfTextsLabel.Text = String.Empty; } } base.OnNextButton(); }
protected override void OnNextButton() { if (CurrentStepNumber == 0) { // Populate m_mappingsList based on the selected files. var sfmcounts = new Dictionary <string, int>(); var sfmOrder = new Dictionary <int, string>(); // key is 100000*fileNum + orderInFile, value is a marker int fileNum = 0; foreach (var pathName in InputFiles) { var reader = new SfmFileReaderEx(pathName); followedBy = reader.GetFollowedByInfo(); foreach (string marker in reader.SfmInfo) { int oldVal; if (!sfmcounts.TryGetValue(marker, out oldVal)) { // first time we've seen it: this file determines order; sfmOrder[fileNum * 100000 + reader.GetSFMOrder(marker)] = marker; } sfmcounts[marker] = oldVal + reader.GetSFMCount(marker); } fileNum++; } // Read the map file (unless we've been to this pane before...then use the saved settings), integrate with the sfmcount info. var savedMappings = new Dictionary <string, InterlinearMapping>(); m_oldMappings = m_firstTimeInMappingsPane ? LoadSettings() : new List <InterlinearMapping>((m_mappings)); m_firstTimeInMappingsPane = false; foreach (var mapping in m_oldMappings) { savedMappings[mapping.Marker] = mapping; } m_mappings.Clear(); var keys = new List <int>(sfmOrder.Keys); keys.Sort(); foreach (var key in keys) { var marker = sfmOrder[key]; InterlinearMapping mapping; if (savedMappings.TryGetValue(marker, out mapping)) { mapping = new InterlinearMapping(mapping); if (string.IsNullOrEmpty(mapping.WritingSystem)) { var ws = GetDefaultWs(mapping); if (ws != 0) { mapping.WritingSystem = m_cache.WritingSystemFactory.GetStrFromWs(ws); } } else if (mapping.WritingSystem == "{vern}") { mapping.WritingSystem = m_cache.WritingSystemFactory.GetStrFromWs(m_cache.DefaultVernWs); } } else { mapping = new InterlinearMapping() { Marker = marker } }; mapping.Count = sfmcounts[marker].ToString(); m_mappings.Add(mapping); } m_mappingsList.SuspendLayout(); m_mappingsList.Items.Clear(); foreach (var mapping in m_mappings) { var item = new ListViewItem("\\" + mapping.Marker); item.SubItems.Add(mapping.Count); item.SubItems.Add(GetDestinationName(mapping.Destination)); item.SubItems.Add(mapping.WritingSystem != null ? GetWritingSystemName(mapping.WritingSystem) : ""); item.SubItems.Add(mapping.Converter ?? ""); m_mappingsList.Items.Add(item); } if (m_mappingsList.Items.Count > 0) { m_mappingsList.SelectedIndices.Add(0); } m_mappingsList.ResumeLayout(); } else if (CurrentStepNumber == 1) { ICollection <IWritingSystem> currentVernacWSs = m_cache.LanguageProject.VernacularWritingSystems; ICollection <IWritingSystem> currentAnalysWSs = m_cache.LanguageProject.AnalysisWritingSystems; var vernToAdd = new ArrayList(); var analysToAdd = new ArrayList(); int textCount = CalculateTextCount(m_mappings, followedBy); foreach (var mapping in m_mappings) { if (mapping.Destination == InterlinDestination.Ignored) { continue; // may well have no WS, in any case, we don't care whether it's in our list. } bool creationCancelled = false; var ws = (IWritingSystem)m_cache.WritingSystemFactory.get_Engine(mapping.WritingSystem); if (mapping.Destination == InterlinDestination.Baseline || mapping.Destination == InterlinDestination.Wordform) { if (!currentVernacWSs.Contains(ws) && !vernToAdd.Contains(ws)) { //Show creation dialog for Vernacular var result = MessageBox.Show(this, String.Format(ITextStrings.ksImportSFMInterlinNewVernac, ws), String.Format(ITextStrings.ksImportSFMInterlinNewWSTitle, ws), MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { vernToAdd.Add(ws); } else //if they bail out we won't add any writing systems, they might change them all { return; } } } else { if (!currentAnalysWSs.Contains(ws) && !analysToAdd.Contains(ws)) { var result = MessageBox.Show(this, String.Format(ITextStrings.ksImportSFMInterlinNewAnalysis, ws), String.Format(ITextStrings.ksImportSFMInterlinNewWSTitle, ws), MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { analysToAdd.Add(ws); } else //if they bail out we won't add any writing systems, they might change them all { return; } } } } NonUndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW(m_cache.ActionHandlerAccessor, () => //Add all the collected new languages into the project in their proper section. { foreach (IWritingSystem analysLang in analysToAdd) { m_cache.LanguageProject.AddToCurrentAnalysisWritingSystems(analysLang); } foreach (IWritingSystem vernLang in vernToAdd) { m_cache.LanguageProject.AddToCurrentVernacularWritingSystems(vernLang); } }); if (textCount > 1) { numberOfTextsLabel.Text = String.Format(ITextStrings.ksImportSFMInterlinTextCount, textCount); } else { numberOfTextsLabel.Text = String.Empty; } } base.OnNextButton(); }