/// <summary> /// Therefore this method, called once we have a cache and object, is our first chance to /// actually create the embedded control. /// </summary> public override void FinishInit() { CheckDisposed(); bool fVernRTL = Cache.GetBoolProperty(Cache.DefaultVernWs, (int)SIL.FieldWorks.FDO.Cellar.LgWritingSystem.LgWritingSystemTags.kflidRightToLeft); bool fAnalRTL = Cache.GetBoolProperty(Cache.DefaultAnalWs, (int)SIL.FieldWorks.FDO.Cellar.LgWritingSystem.LgWritingSystemTags.kflidRightToLeft); System.Xml.XmlAttribute xa = ConfigurationNode.Attributes["layout"]; // To properly fix LT-6239, we need to consider all four mixtures of directionality // involving the vernacular (table) and analysis (slot name) writing systems. // These four possibilities are marked RTL, LTRinRTL, RTLinLTR, and <nothing>. if (fVernRTL && fAnalRTL) { if (xa.Value.EndsWith("RTLinLTR") || xa.Value.EndsWith("LTRinRTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); } if (!xa.Value.EndsWith("RTL")) { xa.Value += "RTL"; // both vern and anal are RTL } } else if (fVernRTL && !fAnalRTL) { if (xa.Value.EndsWith("RTLinLTR")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); } else if (xa.Value.EndsWith("RTL") && !xa.Value.EndsWith("LTRinRTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 3); } if (!xa.Value.EndsWith("LTRinRTL")) { xa.Value += "LTRinRTL"; // LTR anal name in RTL vern table } } else if (!fVernRTL && fAnalRTL) { if (xa.Value.EndsWith("LTRinRTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); } else if (xa.Value.EndsWith("RTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 3); } if (!xa.Value.EndsWith("RTLinLTR")) { xa.Value += "RTLinLTR"; // RTL anal name in LTR vern table } } else { if (xa.Value.EndsWith("RTLinLTR") || xa.Value.EndsWith("LTRinRTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); } else if (xa.Value.EndsWith("RTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 3); } // both vern and anal are LTR (unmarked case) } InflAffixTemplateControl ctrl = new InflAffixTemplateControl((FdoCache)Mediator.PropertyTable.GetValue("cache"), Object.Hvo, ConfigurationNode, StringTbl); Control = ctrl; m_menuHandler = InflAffixTemplateMenuHandler.Create(ctrl, ConfigurationNode); #if !Want m_menuHandler.Init(this.Mediator, null); #else m_menuHandler.Init(null, null); #endif ctrl.SetContextMenuHandler(new InflAffixTemplateEventHandler(m_menuHandler.ShowSliceContextMenu)); ctrl.Mediator = Mediator; ctrl.SetStringTableValues(Mediator.StringTbl); if (ctrl.RootBox == null) { ctrl.MakeRoot(); } }
/// <summary> /// Therefore this method, called once we have a cache and object, is our first chance to /// actually create the embedded control. /// </summary> public override void FinishInit() { CheckDisposed(); IWritingSystemContainer wsContainer = Cache.ServiceLocator.WritingSystems; bool fVernRTL = wsContainer.DefaultVernacularWritingSystem.RightToLeftScript; bool fAnalRTL = wsContainer.DefaultAnalysisWritingSystem.RightToLeftScript; System.Xml.XmlAttribute xa = ConfigurationNode.Attributes["layout"]; // To properly fix LT-6239, we need to consider all four mixtures of directionality // involving the vernacular (table) and analysis (slot name) writing systems. // These four possibilities are marked RTL, LTRinRTL, RTLinLTR, and <nothing>. if (fVernRTL && fAnalRTL) { if (xa.Value.EndsWith("RTLinLTR") || xa.Value.EndsWith("LTRinRTL")) xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); if (!xa.Value.EndsWith("RTL")) xa.Value += "RTL"; // both vern and anal are RTL } else if (fVernRTL && !fAnalRTL) { if (xa.Value.EndsWith("RTLinLTR")) xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); else if (xa.Value.EndsWith("RTL") && !xa.Value.EndsWith("LTRinRTL")) xa.Value = xa.Value.Substring(0, xa.Value.Length - 3); if (!xa.Value.EndsWith("LTRinRTL")) xa.Value += "LTRinRTL"; // LTR anal name in RTL vern table } else if (!fVernRTL && fAnalRTL) { if (xa.Value.EndsWith("LTRinRTL")) xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); else if (xa.Value.EndsWith("RTL")) xa.Value = xa.Value.Substring(0, xa.Value.Length - 3); if (!xa.Value.EndsWith("RTLinLTR")) xa.Value += "RTLinLTR"; // RTL anal name in LTR vern table } else { if (xa.Value.EndsWith("RTLinLTR") || xa.Value.EndsWith("LTRinRTL")) xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); else if (xa.Value.EndsWith("RTL")) xa.Value = xa.Value.Substring(0, xa.Value.Length - 3); // both vern and anal are LTR (unmarked case) } var ctrl = new InflAffixTemplateControl((FdoCache)Mediator.PropertyTable.GetValue("cache"), Object.Hvo, ConfigurationNode, StringTbl); Control = ctrl; m_menuHandler = InflAffixTemplateMenuHandler.Create(ctrl, ConfigurationNode); #if !Want m_menuHandler.Init(Mediator, null); #else m_menuHandler.Init(null, null); #endif ctrl.SetContextMenuHandler(m_menuHandler.ShowSliceContextMenu); ctrl.Mediator = Mediator; ctrl.SetStringTableValues(Mediator.StringTbl); if (ctrl.RootBox == null) ctrl.MakeRoot(); }
/// <summary> /// Therefore this method, called once we have a cache and object, is our first chance to /// actually create the embedded control. /// </summary> public override void FinishInit() { CheckDisposed(); IWritingSystemContainer wsContainer = Cache.ServiceLocator.WritingSystems; bool fVernRTL = wsContainer.DefaultVernacularWritingSystem.RightToLeftScript; bool fAnalRTL = wsContainer.DefaultAnalysisWritingSystem.RightToLeftScript; System.Xml.XmlAttribute xa = ConfigurationNode.Attributes["layout"]; // To properly fix LT-6239, we need to consider all four mixtures of directionality // involving the vernacular (table) and analysis (slot name) writing systems. // These four possibilities are marked RTL, LTRinRTL, RTLinLTR, and <nothing>. if (fVernRTL && fAnalRTL) { if (xa.Value.EndsWith("RTLinLTR") || xa.Value.EndsWith("LTRinRTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); } if (!xa.Value.EndsWith("RTL")) { xa.Value += "RTL"; // both vern and anal are RTL } } else if (fVernRTL && !fAnalRTL) { if (xa.Value.EndsWith("RTLinLTR")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); } else if (xa.Value.EndsWith("RTL") && !xa.Value.EndsWith("LTRinRTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 3); } if (!xa.Value.EndsWith("LTRinRTL")) { xa.Value += "LTRinRTL"; // LTR anal name in RTL vern table } } else if (!fVernRTL && fAnalRTL) { if (xa.Value.EndsWith("LTRinRTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); } else if (xa.Value.EndsWith("RTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 3); } if (!xa.Value.EndsWith("RTLinLTR")) { xa.Value += "RTLinLTR"; // RTL anal name in LTR vern table } } else { if (xa.Value.EndsWith("RTLinLTR") || xa.Value.EndsWith("LTRinRTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 8); } else if (xa.Value.EndsWith("RTL")) { xa.Value = xa.Value.Substring(0, xa.Value.Length - 3); } // both vern and anal are LTR (unmarked case) } var ctrl = new InflAffixTemplateControl(m_propertyTable.GetValue <LcmCache>("cache"), Object.Hvo, ConfigurationNode); Control = ctrl; m_menuHandler = InflAffixTemplateMenuHandler.Create(ctrl, ConfigurationNode); #if !Want m_menuHandler.Init(Mediator, m_propertyTable, null); #else m_menuHandler.Init(null, null); #endif ctrl.SetContextMenuHandler(m_menuHandler.ShowSliceContextMenu); ctrl.Mediator = Mediator; ctrl.SetStringTableValues(); if (ctrl.RootBox == null) { ctrl.MakeRoot(); } }