diff --git a/PROMS/Volian.Controls.Library/RTBItem.cs b/PROMS/Volian.Controls.Library/RTBItem.cs index 2fd7174c..9536707f 100644 --- a/PROMS/Volian.Controls.Library/RTBItem.cs +++ b/PROMS/Volian.Controls.Library/RTBItem.cs @@ -60,7 +60,7 @@ namespace Volian.Controls.Library get { return Width - lblTab.Left; } set { - Width = RTBMargin + value + lblTab.Left; + Width = CheckOffMargin + RTBMargin + value + lblTab.Left; } } /// @@ -152,11 +152,18 @@ namespace Volian.Controls.Library ItemInfo.ResetTabString(MyID); string tabString = MyItemInfo.MyTab.CleanText; lblTab.Text = tabString; - lblTab.Width = tabString.Length * 8 * MyStepPanel.DPI / 96;// Adjust width for DPI + // calculate the width based upon characters per inch considering user's DPI + int cpi = MyItemInfo.IsStep ? (int)MyItemInfo.FormatStepData.TabData.Font.CPI : 12; + + // if the tab ends with a single digit & has a '.' before it, add space for the possibility + // that the number can be two digits, for example... 8.1.9 goes to 8.1.10. We want + // the step windows to line up, so the 8.1.9 has one character more space (lastDigitSingle) + bool lastDigitSingle = Regex.IsMatch(tabString, "^.*[^0-9][0-9] *$"); + lblTab.Width = ((lastDigitSingle?1:0) + tabString.Length) * MyStepPanel.DPI/cpi; Invalidate(); - _MyStepRTB.Left = lblTab.Left + lblTab.Width;// +2; - _MyStepRTB.Width = Width - _MyStepRTB.Left - RTBMargin; - _TabFormat = value; // tabString; + _MyStepRTB.Left = lblTab.Left + lblTab.Width; + _MyStepRTB.Width = Width - _MyStepRTB.Left - RTBMargin - CheckOffMargin; + _TabFormat = value; } } } @@ -173,6 +180,33 @@ namespace Volian.Controls.Library get { return _RTBMargin; } set { _RTBMargin = value; } } + private int? _CheckOffMargin = null; + /// + /// Margin between the EditItem and the StepRTB. Appears on the Right. + /// Will allow space to draw a CheckOff on the right side of the EditItem. + /// + public int CheckOffMargin + { + get + { + if (_CheckOffMargin == null) + { + if (MyItemInfo==null) _CheckOffMargin = 0; + else + { + if (!MyItemInfo.IsStep || !MyItemInfo.SectionHasCheckOffs()) _CheckOffMargin = 0; + else + { + Graphics g = CreateGraphics(); + SizeF sz = g.MeasureString("M", MyItemInfo.FormatStepData.Font.WindowsFont); + _CheckOffMargin = (int)sz.Width; + } + } + } + return (int)_CheckOffMargin; + } + set { _CheckOffMargin = value; } + } #endregion #region Constructors public RTBItem(ItemInfo itemInfo, StepPanel myStepPanel, EditItem myParentEditItem, ChildRelation myChildRelation, bool expand) diff --git a/PROMS/Volian.Controls.Library/StepRTB.cs b/PROMS/Volian.Controls.Library/StepRTB.cs index 4347f3cb..770cad67 100644 --- a/PROMS/Volian.Controls.Library/StepRTB.cs +++ b/PROMS/Volian.Controls.Library/StepRTB.cs @@ -323,7 +323,7 @@ namespace Volian.Controls.Library { if (_MyItemInfo == null && Parent is EditItem) _MyItemInfo = (Parent as EditItem).MyItemInfo; - else if (_MyItemInfo == null && Parent.Parent is EditItem) + else if (_MyItemInfo == null && Parent != null && Parent.Parent is EditItem) _MyItemInfo = (Parent.Parent as EditItem).MyItemInfo; return _MyItemInfo; }