diff --git a/PROMS/Volian.Controls.Library/DisplayText.cs b/PROMS/Volian.Controls.Library/DisplayText.cs index 8423d489..ebeb500d 100644 --- a/PROMS/Volian.Controls.Library/DisplayText.cs +++ b/PROMS/Volian.Controls.Library/DisplayText.cs @@ -191,6 +191,7 @@ namespace Volian.Controls.Library { try { + FormatInfo formatInfo = _MyItemInfo.ActiveFormat; _MyItem = _MyItemInfo.Get(); // check for different text, i.e. text from this itm doesn't match // original text, a change occurred in database, but not from this user. @@ -225,6 +226,10 @@ namespace Volian.Controls.Library if (ctReplacements.Count > 0) { EditText = FixCtReplacements(EditText, ctReplacements); + // Replace Transition Text + foreach (ContentTransition ct in ctReplacements.Values) + using (TransitionInfo tran = TransitionInfo.Get(ct.TransitionID)) + _MyItem.MyContent.FixTransitionText(tran); _MyItem.Save(); } if (roUsgReplacements.Count > 0) @@ -695,7 +700,7 @@ namespace Volian.Controls.Library { if (ti.TransitionID == transitionID) { - string path = ti.ResolvePathTo(_MyFormat, _MyItemInfo, ItemInfo.Get(ti.ToID), ti.RangeID==0?null:ItemInfo.Get(ti.RangeID)); + string path = ti.ResolvePathTo(_MyFormat, _MyItemInfo, ti.TranType, ti.MyItemToID, ti.MyItemRangeID); return path; } } @@ -746,7 +751,14 @@ namespace Volian.Controls.Library else if (text[endComment + 3] == '\\') retlen = 3; vte.TextAndLink = text.Substring(index, endComment - index + retlen); rettoken = endComment + retlen; - if (vte.Type != E_TextElementType.ReferencedObject) vte.TextAndLink = vte.TextAndLink = vte.TextAndLink.Replace("(Resolved Transition Text)", tmptxt); + if (vte.Type != E_TextElementType.ReferencedObject) + { + if (vte.TextAndLink.Contains("(Resolved Transition Text)")) + vte.TextAndLink = vte.TextAndLink.Replace("(Resolved Transition Text)", tmptxt); + else + if (vte.Text != tmptxt) + vte.Text = tmptxt; + } DisplayTextElementList.Add(vte); return rettoken; } @@ -825,8 +837,17 @@ namespace Volian.Controls.Library } else { - string pat = @"(?<=\W|^)" + rs.ReplaceWord + @"(?=\W|$)"; - Text = Regex.Replace(Text, pat, rs.ReplaceWith); + // If there are Regex Control Characters '\[]()' prefix them with backslash + string replaceWord = Regex.Replace(rs.ReplaceWord, @"\\[[\]()]", @"\$0"); + string pat = @"(?<=\W|^)" + replaceWord + @"(?=\W|$)"; + try + { + Text = Regex.Replace(Text, pat, rs.ReplaceWith); + } + catch (Exception ex) + { + Console.WriteLine("{0},'{1}',{2},'{3}'", _MyItemInfo.ActiveFormat.Name, replaceWord, ex.GetType().Name, ex.Message); + } } } @@ -852,8 +873,8 @@ namespace Volian.Controls.Library get { return _Type; } set { _Type = value; } } - private string _Text; - public string Text + protected string _Text; + virtual public string Text { get { return _Text; } set { _Text = value; } @@ -873,6 +894,31 @@ namespace Volian.Controls.Library get { return _TextAndLink; } set { _TextAndLink = value; } } + /// + /// Text - this should parse the text and return the results + /// + override public string Text + { + get + { + if (_TextAndLink != null) + { + Match m = Regex.Match(_TextAndLink, @""); + return m.Groups[1].ToString(); + } + return _Text; + } + set + { + if (_TextAndLink != null) + { + Match m = Regex.Match(_TextAndLink, @""); + System.Text.RegularExpressions.Group g = m.Groups[1]; + _TextAndLink = _TextAndLink.Substring(0, g.Index) + value + _TextAndLink.Substring(g.Index + g.Length); + } + _Text = value; + } + } } #endregion diff --git a/PROMS/Volian.Controls.Library/DisplayTransition.cs b/PROMS/Volian.Controls.Library/DisplayTransition.cs index 4f323404..25e73459 100644 --- a/PROMS/Volian.Controls.Library/DisplayTransition.cs +++ b/PROMS/Volian.Controls.Library/DisplayTransition.cs @@ -707,7 +707,7 @@ namespace Volian.Controls.Library } private void btnTranSave_Click(object sender, EventArgs e) { - string trantxt = "*Resolved Transition Text*"; + string trantxt = "(Resolved Transition Text)"; string linktxt = null; E_TransUI etm = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[listBoxTranFmt.SelectedIndex].TransUI; // if must have a step, test for this first. @@ -719,8 +719,8 @@ namespace Volian.Controls.Library return; } } - ItemInfo _tranitem1 = null; - ItemInfo _tranitem2 = null; + ItemInfo toItem = null; + ItemInfo rangeItem = null; if ((etm & E_TransUI.StepLast) == E_TransUI.StepLast) //range { if (_RangeNode1==null) @@ -728,7 +728,7 @@ namespace Volian.Controls.Library MessageBox.Show("Must 'Select Step' for transition 'to'"); return; } - _tranitem1 = (ItemInfo)_RangeNode1.VEObject; + toItem = (ItemInfo)_RangeNode1.VEObject; // Get the second item in the range, based on current tree view selection. if (_RangeNode2 == null && tvTran.SelectedNode == null) { @@ -736,52 +736,56 @@ namespace Volian.Controls.Library return; } if (_RangeNode2 == null) _RangeNode2 = (VETreeNode)tvTran.SelectedNode; - _tranitem2 = (ItemInfo)_RangeNode2.VEObject; + rangeItem = (ItemInfo)_RangeNode2.VEObject; // Check that the two items are of the below the section type. - if (_tranitem1.MyContent.Type < 20000 || _tranitem2.MyContent.Type < 20000) + if (toItem.MyContent.Type < 20000 || rangeItem.MyContent.Type < 20000) { MessageBox.Show("Must select two items at the step level or below, i.e. no sections, procedures, etc."); return; } - linktxt = string.Format("#Link:Transition:{0} {1} {2}", listBoxTranFmt.SelectedIndex, _tranitem1.ItemID, _tranitem2.ItemID); + linktxt = string.Format("#Link:Transition:{0} {1} {2}", listBoxTranFmt.SelectedIndex, toItem.ItemID, rangeItem.ItemID); } else if ((etm & E_TransUI.StepFirst) == E_TransUI.StepFirst) { VETreeNode vtn = (VETreeNode)tvTran.SelectedNode; if (vtn != null) { - _tranitem1 = (ItemInfo)vtn.VEObject; // is this cast valid? - linktxt = string.Format("#Link:Transition:{0} {1}", listBoxTranFmt.SelectedIndex, _tranitem1.ItemID); + toItem = (ItemInfo)vtn.VEObject; // is this cast valid? + linktxt = string.Format("#Link:Transition:{0} {1}", listBoxTranFmt.SelectedIndex, toItem.ItemID); } } - if (_tranitem1 == null && (etm & E_TransUI.SectMenuAny) == E_TransUI.SectMenuAny) + if (toItem == null && (etm & E_TransUI.SectMenuAny) == E_TransUI.SectMenuAny) { - if (tvTran.Enabled == false || _tranitem1.IsAccPages) - _tranitem1 = (ItemInfo)cbTranSects.SelectedItem; + if (tvTran.Enabled == false || toItem.IsAccPages) + toItem = (ItemInfo)cbTranSects.SelectedItem; else { VETreeNode vtn = (VETreeNode)tvTran.SelectedNode; - _tranitem1 = (ItemInfo)vtn.VEObject; + toItem = (ItemInfo)vtn.VEObject; } - if (_tranitem1==null) + if (toItem==null) { MessageBox.Show("Must 'Select Section' or 'Select Step' for transition 'to'"); return; } - linktxt = string.Format("#Link:Transition:{0} {1}", listBoxTranFmt.SelectedIndex, _tranitem1.ItemID); + linktxt = string.Format("#Link:Transition:{0} {1}", listBoxTranFmt.SelectedIndex, toItem.ItemID); } - if (_tranitem1 == null && (((etm & E_TransUI.ProcCur) == E_TransUI.ProcCur) || ((etm & E_TransUI.ProcMenu) == E_TransUI.ProcMenu))) + if (toItem == null && (((etm & E_TransUI.ProcCur) == E_TransUI.ProcCur) || ((etm & E_TransUI.ProcMenu) == E_TransUI.ProcMenu))) { - _tranitem1 = (ItemInfo)cbTranProcs.SelectedItem; - if (_tranitem1 == null) + toItem = (ItemInfo)cbTranProcs.SelectedItem; + if (toItem == null) { MessageBox.Show("Must select an item for transition 'to'"); return; } - linktxt = string.Format("#Link:Transition:{0} {1}", listBoxTranFmt.SelectedIndex, _tranitem1.ItemID); + linktxt = string.Format("#Link:Transition:{0} {1}", listBoxTranFmt.SelectedIndex, toItem.ItemID); } + // Can I build the text right now? + trantxt = TransitionText.GetResolvedText(_MyRTB.MyItemInfo, listBoxTranFmt.SelectedIndex,toItem,rangeItem ?? toItem); _MyRTB.InsertTran(trantxt, linktxt); + _MyRTB.Select(_MyRTB.SelectionStart + trantxt.Length + linktxt.Length,0); + _MyRTB.Focus(); } #endregion #region VariousSupportMethods