diff --git a/Src/xWorks/DictionaryConfigurationController.cs b/Src/xWorks/DictionaryConfigurationController.cs index 6639bc1373..c173fea2cd 100644 --- a/Src/xWorks/DictionaryConfigurationController.cs +++ b/Src/xWorks/DictionaryConfigurationController.cs @@ -520,18 +520,18 @@ public static void SetConfigureHomographParameters(DictionaryConfigurationModel var senseNode = mainEntryNode.Children.Where(prop => prop.Label == senseType).FirstOrDefault(); if (senseNode == null) return; var senseOptions = (DictionaryNodeSenseOptions)senseNode.DictionaryNodeOptions; - cacheHc.ksSenseNumberStyle = senseOptions.NumberingStyle; + cacheHc.ksSenseNumberStyle = senseOptions.NonEmptyNumberingStyle; //SubSense Node var subSenseNode = senseNode.Children.Where(prop => prop.Label == "Subsenses").FirstOrDefault(); if (subSenseNode == null) return; var subSenseOptions = (DictionaryNodeSenseOptions)subSenseNode.DictionaryNodeOptions; - cacheHc.ksSubSenseNumberStyle = subSenseOptions.NumberingStyle; + cacheHc.ksSubSenseNumberStyle = subSenseOptions.NonEmptyNumberingStyle; cacheHc.ksParentSenseNumberStyle = subSenseOptions.ParentSenseNumberingStyle; //SubSubSense Node var subSubSenseNode = subSenseNode.ReferencedOrDirectChildren.Where(prop => prop.Label == "Subsenses").FirstOrDefault(); if (subSubSenseNode == null) return; var subSubSenseOptions = (DictionaryNodeSenseOptions)subSubSenseNode.DictionaryNodeOptions; - cacheHc.ksSubSubSenseNumberStyle = subSubSenseOptions.NumberingStyle; + cacheHc.ksSubSubSenseNumberStyle = subSubSenseOptions.NonEmptyNumberingStyle; cacheHc.ksParentSubSenseNumberStyle = subSubSenseOptions.ParentSenseNumberingStyle; } diff --git a/Src/xWorks/DictionaryDetailsView/SenseOptionsView.cs b/Src/xWorks/DictionaryDetailsView/SenseOptionsView.cs index 3a9300c717..0b5803838a 100644 --- a/Src/xWorks/DictionaryDetailsView/SenseOptionsView.cs +++ b/Src/xWorks/DictionaryDetailsView/SenseOptionsView.cs @@ -66,8 +66,12 @@ public string NumberingStyle { get { - // Return null if string is empty, because returning an empty string for reversal numbers - // also forces sense numbers not to be displayed. Null doesn't cause the same problem. + // Handles NumberingStyle for the dictionary/reversal configuration dialog preview display. + // Both empty string and null mean there is no numbering style to use. + // Numbering style will be null if no numbering style has ever been selected. + // Numbering style will be an empty string if a numbering style was selected at some point and then turned back off. + // Returning an empty string for reversal numbering style forces sense numbers to be turned off too, but null doesn't cause this problem. + // Return null if numbering style is empty. var formatString = ((NumberingStyleComboItem)dropDownNumberingStyle.SelectedItem).FormatString; return string.IsNullOrEmpty(formatString) ? null : formatString; } diff --git a/Src/xWorks/DictionaryNodeOptions.cs b/Src/xWorks/DictionaryNodeOptions.cs index 209d8768a6..d53cfc0057 100644 --- a/Src/xWorks/DictionaryNodeOptions.cs +++ b/Src/xWorks/DictionaryNodeOptions.cs @@ -56,7 +56,33 @@ public class DictionaryNodeSenseOptions : DictionaryNodeOptions // Example values: ""->none; %O->1.2.3; %d->1, 2, 3 [XmlAttribute(AttributeName = "numberingStyle")] - public string NumberingStyle { get; set; } + private string m_NumberingStyle; + + /// + /// Numbering style for senses. If null or empty, no style is used. + /// + /// NumberingStyle is null if no numbering style has ever been selected. + /// NumberingStyle is an empty string if a numbering style is selected but then removed. + /// + public string NumberingStyle + { + get => m_NumberingStyle; + set => m_NumberingStyle = value; + } + + /// + /// Returns the numbering style, or null if no numbering style should be used. + /// + /// may contain either null or an empty string to indicate + /// that numbering is disabled. An empty string used for reversals' NumberingStyle also + /// forces sense numbers to be disabled. This property normalizes both values to null + /// to retain the expected behavior for senses. + /// + public string NonEmptyNumberingStyle + { + get => string.IsNullOrEmpty(m_NumberingStyle) ? null : m_NumberingStyle; + set => m_NumberingStyle = value; + } // Example values: ""->none; %j->Joined; %.->Separated by dot [XmlAttribute(AttributeName = "parentSenseNumberingStyle")]