/// ------------------------------------------------------------------------------------ /// <summary> /// /// </summary> /// ------------------------------------------------------------------------------------ private void UpdateLanguageCombos() { ILgWritingSystemFactory wsf = LgWritingSystemFactoryClass.Create(); string userLocale = wsf.GetStrFromWs(wsf.UserWs); // Get the set of writing systems. Set <NamedWritingSystem> writingSystems = LangProject.GetAllNamedWritingSystemsFromLDFs(wsf, userLocale); NamedWritingSystem wsSaveVern = (NamedWritingSystem)m_cbVernWrtSys.SelectedItem; NamedWritingSystem wsSaveAnal = (NamedWritingSystem)m_cbAnalWrtSys.SelectedItem; m_cbAnalWrtSys.Items.Clear(); m_cbVernWrtSys.Items.Clear(); m_cbAnalWrtSys.BeginUpdate(); m_cbVernWrtSys.BeginUpdate(); foreach (NamedWritingSystem nws in writingSystems) { m_cbAnalWrtSys.Items.Add(nws); m_cbVernWrtSys.Items.Add(nws); } int i = (wsSaveVern == null ? 0 : m_cbVernWrtSys.FindString(wsSaveVern.Name)); m_cbVernWrtSys.SelectedIndex = (i >= 0 ? i : 0); m_cbVernWrtSys.EndUpdate(); i = (wsSaveAnal == null ? 0 : m_cbAnalWrtSys.FindString(wsSaveAnal.Name)); m_cbAnalWrtSys.SelectedIndex = (i >= 0 ? i : 0); m_cbAnalWrtSys.EndUpdate(); }
private void btnAddWS_Click(object sender, System.EventArgs e) { // show the menu to select which type of writing system to create ContextMenu addWs = new ContextMenu(); // look like the "Add" button on the WS properties dlg ArrayList xmlWs = GetOtherNamedWritingSystems(); MenuItem[] xmlWsV = new MenuItem[xmlWs.Count + 2]; // one for Vernacular MenuItem[] xmlWsA = new MenuItem[xmlWs.Count + 2]; // one for Analysis for (int i = 0; i < xmlWs.Count; i++) { NamedWritingSystem nws = xmlWs[i] as NamedWritingSystem; xmlWsV[i] = new MenuItem(nws.Name, new EventHandler(btnAddWS_Vern)); xmlWsA[i] = new MenuItem(nws.Name, new EventHandler(btnAddWS_Anal)); xmlWsV[i].Tag = nws; xmlWsA[i].Tag = nws; } xmlWsV[xmlWs.Count] = new MenuItem("-"); xmlWsV[xmlWs.Count + 1] = new MenuItem(LexTextControls.ks_DefineNew_, new EventHandler(btnAddWS_Vern)); xmlWsA[xmlWs.Count] = new MenuItem("-"); xmlWsA[xmlWs.Count + 1] = new MenuItem(LexTextControls.ks_DefineNew_, new EventHandler(btnAddWS_Anal)); // have to have seperate lists addWs.MenuItems.Add(LexTextControls.ks_VernacularWS, xmlWsV); addWs.MenuItems.Add(LexTextControls.ks_AnalysisWS, xmlWsA); addWs.Show(btnAddWS, new Point(0, btnAddWS.Height)); }
public void Init(FdoCache cache, bool enableCancel) { CheckDisposed(); m_cache = cache; m_btnCancel.Visible = enableCancel; Set <int> revIdxWs = new Set <int>(4); foreach (IReversalIndex ri in cache.LangProject.LexDbOA.ReversalIndexesOC) { revIdxWs.Add(ri.WritingSystemRAHvo); } // Include only the analysis writing systems chosen by the user. See LT-7514 and LT-7239. Set <int> activeWs = new Set <int>(8); foreach (int ws in cache.LangProject.AnalysisWssRC.HvoArray) { activeWs.Add(ws); } m_cbWritingSystems.Sorted = true; m_cbWritingSystems.DisplayMember = "Name"; NamedWritingSystem nwsSelected = null; foreach (NamedWritingSystem nws in cache.LangProject.GetDbNamedWritingSystems()) { if (revIdxWs.Contains(nws.Hvo)) { AddLanguageForExistingRevIdx(nws.IcuLocale); continue; } if (!activeWs.Contains(nws.Hvo)) { continue; } m_cbWritingSystems.Items.Add(nws); if (nwsSelected == null && !LanguageMatchesExistingRevIdx(nws.IcuLocale)) { nwsSelected = nws; } } if (nwsSelected != null) { m_cbWritingSystems.SelectedItem = nwsSelected; } if (m_cbWritingSystems.Items.Count > 0 && m_cbWritingSystems.SelectedIndex < 0) { m_cbWritingSystems.SelectedIndex = 0; } if (!enableCancel && m_cbWritingSystems.Items.Count == 0) { throw new ApplicationException("Cancel is disabled, but there are none to choose, so the user has no way to get out of this dialog."); } }
private void CreateReversalIndexDlg_FormClosing(object sender, FormClosingEventArgs e) { switch (DialogResult) { default: { Debug.Assert(false, "Unexpected DialogResult."); break; } case DialogResult.Cancel: { if (!m_btnCancel.Visible) { e.Cancel = true; MessageBox.Show(LexEdStrings.ksMustSelectOne); } break; } case DialogResult.OK: { NamedWritingSystem nws = m_cbWritingSystems.SelectedItem as NamedWritingSystem; if (nws != null) { ILgWritingSystem lgws = LgWritingSystem.CreateFromDBObject(m_cache, nws.Hvo); IReversalIndex newIdx = m_cache.LangProject.LexDbOA.ReversalIndexesOC.Add(new ReversalIndex()); newIdx.WritingSystemRA = lgws; // Copy any and all alternatives from lgws.Name to newIdx.Name // LT-4907 dies here. foreach (ILgWritingSystem lgwsLoop in m_cache.LanguageEncodings) { string lgsNameAlt = lgws.Name.GetAlternative(lgwsLoop.Hvo); if (lgsNameAlt != null && lgsNameAlt.Length > 0) { newIdx.Name.SetAlternative(lgsNameAlt, lgws.Hvo); } } m_hvoRevIdx = newIdx.Hvo; } break; } } }
/// ------------------------------------------------------------------------------------ /// <summary> /// Create a new language project for the new language name /// </summary> /// <param name="progressDlg">The progress dialog.</param> /// <param name="parameters">The parameters: first parameter is resources, second is /// name of the project (string), analysis and vernacular writing system /// (NamedWritingSystem).</param> /// <returns>Always null.</returns> /// <remarks>Override DisplayUi to prevent progress dialog from showing.</remarks> /// ------------------------------------------------------------------------------------ protected internal object CreateNewLangProj(IAdvInd4 progressDlg, params object[] parameters) { Debug.Assert(parameters.Length == 4); ResourceManager resources = (ResourceManager)parameters[0]; string projectName = (string)parameters[1]; m_analWrtSys = (NamedWritingSystem)parameters[2]; m_vernWrtSys = (NamedWritingSystem)parameters[3]; string dbFileName; string logFileName; // Loading the new language project (LoadNewLangProj) took 120 steps. To be safe // we calculate with 140. Loading newlangproj took 94% of the time, so the total is // 150. int nMax = 150; progressDlg.SetRange(0, nMax); if (resources != null) { progressDlg.Message = resources.GetString("kstidCreatingDB"); } CreateNewDbFiles(projectName, out dbFileName, out logFileName); progressDlg.Step(0); m_dbName = AttachDatabase(dbFileName, logFileName); progressDlg.Step(0); if (resources != null) { progressDlg.Message = resources.GetString("kstidInitializingDB"); } LoadNewLangProj(progressDlg); // Create the FDO cache and writing systems. progressDlg.Position = (int)(nMax * 0.95); if (resources != null) { progressDlg.Message = resources.GetString("kstidCreatingWS"); } int hvoLp = 0; using (FdoCache cache = FdoCache.Create(m_dbName)) { progressDlg.Step(0); CreateAnalysisWritingSystem(cache); progressDlg.Step(0); CreateVernacularWritingSystem(cache); // Fix sort methods that should use the vernacular writing system. progressDlg.Step(0); progressDlg.Step(0); FixVernacularWritingSystemReferences(cache); progressDlg.Step(0); // set defaults so can access them now cache.LangProject.CacheDefaultWritingSystems(); progressDlg.Step(0); AssignVernacularWritingSystemToDefaultPhPhonemes(cache); progressDlg.Step(0); // Create a reversal index for the original default analysis writing system. (LT-4480) IReversalIndex newIdx = cache.LangProject.LexDbOA.ReversalIndexesOC.Add( new ReversalIndex()); ILgWritingSystem wsAnalysis = cache.LangProject.CurAnalysisWssRS[0]; newIdx.WritingSystemRA = wsAnalysis; newIdx.Name.AnalysisDefaultWritingSystem = wsAnalysis.Name.AnalysisDefaultWritingSystem; progressDlg.Step(0); // Give the language project a default name. Later this can be modified by the // user by changing it on the project properties dialog. cache.LangProject.Name.UserDefaultWritingSystem = projectName; hvoLp = cache.LangProject.Hvo; cache.Save(); progressDlg.Position = nMax; } return(new NewLangProjReturnData(hvoLp, m_serverName, m_dbName)); }
private void CommonAddWS(bool isAnalysis, MenuItem selectedMI) { string icuLocal = "", mapName = "", wsName = ""; bool addWs = true; if (selectedMI.Text == LexTextControls.ks_DefineNew_) { using (WritingSystemWizard wiz = new WritingSystemWizard()) { wiz.Init(m_cache.LanguageWritingSystemFactoryAccessor, FwApp.App); DialogResult dr = (DialogResult)wiz.ShowDialog(); if (dr == DialogResult.OK) { // The engine from the wizard isn't the real one, so it doesn't have an id. IWritingSystem wsEngine = wiz.WritingSystem(); icuLocal = wsEngine.IcuLocale; mapName = wsEngine.LegacyMapping; wsName = wsEngine.LanguageName; } else { addWs = false; } } } else { NamedWritingSystem namedWs = selectedMI.Tag as NamedWritingSystem; ILgWritingSystem wsEngine = namedWs.GetLgWritingSystem(m_cache); icuLocal = wsEngine.ICULocale; mapName = wsEngine.LegacyMapping; wsName = wsEngine.Name.BestAnalysisAlternative.Text; } if (addWs) { int ws = m_cache.LanguageWritingSystemFactoryAccessor.GetWsFromStr(icuLocal); // string wsName = ws.get_UiName(wsUser); WsInfo wsi = new WsInfo(ws, wsName, icuLocal, mapName); m_wsInfo.Add(wsi.KEY, wsi); // now select it for the ws combo box int index = cbWS.Items.Add(wsi); cbWS.SelectedIndex = index; // now if there's an encoding converter for the ws, select it if (mapName != null && mapName.Length > 0) { index = cbEC.Items.Add(mapName); cbEC.SelectedIndex = index; } else { index = cbEC.FindStringExact(m_blankEC); cbEC.SelectedIndex = index; } // now add the ws to the FDO list for it if (isAnalysis) { m_cache.LangProject.AnalysisWssRC.Add(ws); m_cache.LangProject.CurAnalysisWssRS.Append(ws); } else { m_cache.LangProject.VernWssRC.Add(ws); m_cache.LangProject.CurVernWssRS.Append(ws); } } }