/// <summary> /// Shows the new writing system properties dialog. /// </summary> /// <param name="owner">The owner.</param> /// <param name="cache">The cache.</param> /// <param name="wsManager">The ws manager.</param> /// <param name="wsContainer">The ws container.</param> /// <param name="helpTopicProvider">The help topic provider.</param> /// <param name="app">The app.</param> /// <param name="stylesheet">The stylesheet.</param> /// <param name="displayRelatedWss">if set to <c>true</c> related writing systems will be displayed.</param> /// <param name="defaultName">The default language name for the new writing system.</param> /// <param name="newWritingSystems">The new writing systems.</param> /// <returns></returns> public static bool ShowNewDialog(Form owner, FdoCache cache, IWritingSystemManager wsManager, IWritingSystemContainer wsContainer, IHelpTopicProvider helpTopicProvider, IApp app, IVwStylesheet stylesheet, bool displayRelatedWss, string defaultName, out IEnumerable<IWritingSystem> newWritingSystems) { newWritingSystems = null; LanguageSubtag languageSubtag; using (new WaitCursor(owner)) using (var dlg = new LanguageSelectionDlg(wsManager, helpTopicProvider)) { dlg.Text = FwCoreDlgs.kstidLanguageSelectionNewWsCaption; dlg.DefaultLanguageName = defaultName; if (dlg.ShowDialog(owner) != DialogResult.OK) return false; languageSubtag = dlg.LanguageSubtag; } using (new WaitCursor(owner)) using (var wsPropsDlg = new WritingSystemPropertiesDialog(cache, wsManager, wsContainer, helpTopicProvider, app, stylesheet)) { wsPropsDlg.SetupDialog(languageSubtag, displayRelatedWss); if (wsPropsDlg.ShowDialog(owner) == DialogResult.OK) { newWritingSystems = wsPropsDlg.NewWritingSystems; return true; } } return false; }
private void NoteChangesAndUpdateCache(WritingSystemPropertiesDialog wsProps) { m_fWsChanged = wsProps.IsChanged; m_fNewRendering = wsProps.NewRenderingNeeded; m_fWsSortChanged = wsProps.SortChanged; if (wsProps.IsChanged) { m_cache.ResetLanguageEncodings(); List<LanguageDefinition> newlyAdded = wsProps.NewlyAddedLanguageDefns(); foreach (LanguageDefinition langDef in newlyAdded) { ILgWritingSystem ws = new LgWritingSystem(m_cache, m_cache.LanguageWritingSystemFactoryAccessor.GetWsFromStr(langDef.CurrentFullLocale())); AddWsToList(ws, m_selectedList); } foreach (LanguageDefinition langDef in wsProps.FinalLanguageDefns) { if (langDef.HasPendingMerge() || newlyAdded.Contains(langDef)) continue; int wsIdOld = langDef.WsOriginal; // The display name may have changed and that means the name of the WS changed. // Therefore we have to call UpdatePropIfCached so that the new names // display in the dialog. m_cache.VwOleDbDaAccessor.UpdatePropIfCached(wsIdOld, (int)LgWritingSystem.LgWritingSystemTags.kflidName, (int)CellarModuleDefns.kcptMultiUnicode, langDef.WsUi); m_cache.VwOleDbDaAccessor.UpdatePropIfCached(wsIdOld, (int)LgWritingSystem.LgWritingSystemTags.kflidICULocale, (int)CellarModuleDefns.kcptUnicode, langDef.WsUi); } } }
/// <summary> /// Shows the modify writing system properties dialog. /// </summary> /// <param name="owner">The owner.</param> /// <param name="selectedWs">The selected writing system.</param> /// <param name="addNewForLangOfSelectedWs">if set to <c>true</c> a new writing system with the /// same language as the selected writing system will be added.</param> /// <param name="cache">The cache.</param> /// <param name="wsContainer">The ws container.</param> /// <param name="helpTopicProvider">The help topic provider.</param> /// <param name="app">The app.</param> /// <param name="stylesheet">The stylesheet.</param> /// <param name="newWritingSystems">The new writing systems.</param> /// <returns></returns> public static bool ShowModifyDialog(Form owner, IWritingSystem selectedWs, bool addNewForLangOfSelectedWs, FdoCache cache, IWritingSystemContainer wsContainer, IHelpTopicProvider helpTopicProvider, IApp app, IVwStylesheet stylesheet, out IEnumerable<IWritingSystem> newWritingSystems) { newWritingSystems = null; string path; if (!cache.ServiceLocator.WritingSystemManager.CanSave(selectedWs, out path)) { MessageBox.Show(owner, string.Format(FwCoreDlgs.ksCannotSaveWritingSystem, path), FwCoreDlgs.ksError, MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; // nothing changed. } using (new WaitCursor(owner)) using (var wsPropsDlg = new WritingSystemPropertiesDialog(cache, cache.ServiceLocator.WritingSystemManager, wsContainer, helpTopicProvider, app, stylesheet)) { wsPropsDlg.SetupDialog(selectedWs, true); if (addNewForLangOfSelectedWs) wsPropsDlg.AddNewWsForLanguage(); if (!ClientServerServicesHelper.WarnOnOpeningSingleUserDialog(cache)) return false; // nothing changed. if (!SharedBackendServicesHelper.WarnOnOpeningSingleUserDialog(cache)) return false; if (wsPropsDlg.ShowDialog(owner) == DialogResult.OK) { if (wsPropsDlg.IsChanged) { newWritingSystems = wsPropsDlg.NewWritingSystems; return true; } } } return false; }
/// ------------------------------------------------------------------------------------ /// <summary> /// Displays the WritingSystemPropertiesDialog dialog. /// </summary> /// ------------------------------------------------------------------------------------ private void DisplayModifyWritingSystemProperties(bool addNewForLangOfSelectedWs) { IWritingSystem lgWsSelected = GetCurrentSelectedWs(); DialogResult = DialogResult.None; using (WritingSystemPropertiesDialog wsProps = new WritingSystemPropertiesDialog(m_cache, m_helpTopicProvider, m_stylesheet)) { wsProps.SetupForWsMerges(m_tool, m_strmLog, m_hvoProj, m_hvoRoot, m_wsUser); wsProps.OnAboutToMergeWritingSystems += new EventHandler(wsProps_OnAboutToMergeWritingSystems); wsProps.ActiveWss = GetAllActiveWssInDialog(); if (!wsProps.TrySetupDialog(lgWsSelected)) return; if (addNewForLangOfSelectedWs) wsProps.AddNewWsForLanguage(); if (wsProps.ShowDialog() == DialogResult.OK) { // Note: wsProps can get Disposed if user performs a merge, since wsProps_OnAboutToMergeWritingSystems() // will Close our dialog and set the result to Abort. if (DialogResult != DialogResult.Abort) NoteChangesAndUpdateCache(wsProps); m_selectedList.Invalidate(); } } }