From e70ffda937798322a136737d0fe0722010bb40c7 Mon Sep 17 00:00:00 2001 From: Rich Date: Thu, 30 Jul 2009 19:00:35 +0000 Subject: [PATCH] Inserting New Items, FixTransition Text --- .../Extension/ItemInsertExt.cs | 54 +- .../Extension/TransitionExt.cs | 550 +++++++++++------- 2 files changed, 368 insertions(+), 236 deletions(-) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs index 4c3315f7..d5e915d2 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; +using System.Text.RegularExpressions; using Csla; using Csla.Data; @@ -125,6 +126,11 @@ namespace VEPROMS.CSLA.Library public ItemInfo InsertSiblingBefore(string text, string number) { ItemInfo tmp = DataPortal.Fetch(new AddingPartCriteria(ItemID, EAddpingPart.Before, number, text, null, null, null, null, DateTime.Now, Environment.UserName)); + // this item is updated in SQL so we have to manually force the iteminfo updates + // Refresh ItemInfo to update Previous + using (Item item = Get()) ItemInfo.Refresh(item); + // Update all of the content records that have transitions that point to the Siblings or Sibling Children of the new item + tmp.UpdateTransitionText(); return tmp; } #endregion @@ -140,8 +146,31 @@ namespace VEPROMS.CSLA.Library public ItemInfo InsertSiblingAfter(string text, string number, int? type) { ItemInfo tmp = DataPortal.Fetch(new AddingPartCriteria(ItemID, EAddpingPart.After, number, text, type, null, null, null, DateTime.Now, Environment.UserName)); + // if next exists, it is updated in SQL so we have to manually force the iteminfo updates + // Refresh ItemInfo to update PreviousID field + if (tmp.NextItem != null) using (Item item = tmp.NextItem.Get()) ItemInfo.Refresh(item); + // Update all of the content records that have transitions that point to the Siblings or Sibling Children of the new item + tmp.UpdateTransitionText(); return tmp; } + public void UpdateTransitionText() + { + // Update Ordinals from here down + ResetOrdinal(); + // This returns a list of all of the transitions that may have been affected + using(TransitionInfoList trans = TransitionInfoList.GetAffected(this.ItemID)) + { + foreach (TransitionInfo tran in trans) + { + using (Content content = tran.MyContent.Get()) + { + content.FixTransitionText(tran); + if (content.IsDirty) + content.Save(); + } + } + } + } #endregion #region Insert Child public ItemInfo InsertChild(E_FromType fromType, int type, string text) @@ -151,6 +180,11 @@ namespace VEPROMS.CSLA.Library public ItemInfo InsertChild(E_FromType fromType, int type, string text, string number) { ItemInfo tmp = DataPortal.Fetch(new AddingPartCriteria(ItemID, EAddpingPart.Child, number, text, type, (int?) fromType, null, null, DateTime.Now, Environment.UserName)); + // if next exists, it is updated in SQL so we have to manually force the iteminfo updates + // Refresh ItemInfo to update PreviousID field + if (tmp.NextItem != null) using (Item item = tmp.NextItem.Get()) ItemInfo.Refresh(item); + // Update all of the content records that have transitions that point to the Siblings or Sibling Children of the new item + tmp.UpdateTransitionText(); return tmp; } #endregion @@ -312,27 +346,23 @@ namespace VEPROMS.CSLA.Library } private static void ResetOrdinal(int itemID) { - bool first = true; ConvertListToDictionary(); string key = itemID.ToString(); - if (_CacheByPrimaryKey.ContainsKey(key)) + while (key != null && _CacheByPrimaryKey.ContainsKey(key)) { - foreach (ItemInfo itm in _CacheByPrimaryKey[key]) + ItemInfo[] items = _CacheByPrimaryKey[key].ToArray(); + key = null; + foreach (ItemInfo item in items) { - itm._Ordinal = null; - //Console.WriteLine("Ordinal {0},{1}",key,itm.MyPrevious == null ? 0 : itm.MyPrevious._Ordinal); - if (first && itm.NextItem != null) - { - ResetOrdinal(itm.NextItem.ItemID); - first = false; - } + //Console.WriteLine("item = {0}, ordinal = {1}",item,item.Ordinal); + item._Ordinal = null; + if (key == null && item.NextItem != null) + key = item.NextItem.ItemID.ToString(); } } } private void ResetOrdinal() { - //_Ordinal = null; - //Console.WriteLine("Ordinal {0},{1}",ItemID,MyPrevious == null ? 0 : MyPrevious.Ordinal); ResetOrdinal(ItemID); } } diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/TransitionExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/TransitionExt.cs index 655edd8e..a5f6804e 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/TransitionExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/TransitionExt.cs @@ -1,234 +1,15 @@ using System; using System.Collections.Generic; using System.Text; +using System.Data; +using System.Data.SqlClient; +using Csla; +using Csla.Data; namespace VEPROMS.CSLA.Library { public partial class TransitionInfo { - private StringBuilder retstr; - private FormatData _MyFormatData = null; - private ItemInfo _MyFromItemInfo = null; - public string ResolvePathTo(FormatInfo fi, ItemInfo itminfo, ItemInfo toitem, ItemInfo rangeitem) - { - retstr = new StringBuilder(); - // get the format of the transition string based on this transition's index into the TransData part of - // format.... - _MyFormatData = fi.PlantFormat.FormatData; - _MyFromItemInfo = itminfo; - string tranformat = _MyFormatData.TransData.TransTypeList[TranType].TransFormat; - E_TransUI etm = (E_TransUI)_MyFormatData.TransData.TransTypeList[TranType].TransUI; - int startIndex = 0; - int index = -1; - string nontoken = null; - bool addedtxt = false; - while ((index = tranformat.IndexOf("{", startIndex))>-1) - { - if (index > startIndex) nontoken = tranformat.Substring(startIndex, index - startIndex); - int endtokn = tranformat.IndexOf("}", index); - string token = tranformat.Substring(index, endtokn - index + 1); - switch (token) - { - case "{Proc Num}": // Coded for HLP - addedtxt = AddTransitionProcNum(addedtxt, nontoken, toitem); - break; - case "{?.Proc Num}": - addedtxt = AddOptionalTransitionProcNum(addedtxt, token, nontoken, toitem); - break; - case "{Proc Title}": // Coded for HLP - addedtxt = AddTransitionProcTitle(addedtxt, nontoken, toitem); - break; - case "{?.Proc Title}": - addedtxt = AddOptionalTransitionProcTitle(addedtxt, token, nontoken, toitem); - break; - case "{First Step}": // TODO: For hlp: LowerCaseTranNumber - lower case substep numbers in transitions - // If we're on a step put out the step number. - ItemInfo secitm = TranGetSectionItem(toitem); - if ((!((etm & E_TransUI.StepAllowNone) == E_TransUI.StepAllowNone)) || toitem.MyContent.Type > 20000) - { - if (addedtxt) Append(nontoken, false); - Append(toitem.Ordinal.ToString(), true); - addedtxt = true; - } - break; - case "{Last Step}": // TODO: TStepNoFlag, i.e. include step number in range items. - if (addedtxt) Append(nontoken, false); - Append(rangeitem.Ordinal.ToString(), true); - addedtxt = true; - break; - case "{.}": // TODO: TStepNoFlag, i.e. include step number in range items. - if (addedtxt) Append(nontoken, false); - Append("#", true); // TODO: Intermediate Range. - addedtxt = true; - break; - case "{Sect Hdr}": - addedtxt = AddTranGetSectionHdr(addedtxt, nontoken, toitem); - break; - case "{?.Sect Hdr}": - addedtxt = AddOptionalTranGetSectionHdr(addedtxt, token, nontoken, toitem); - break; - case "{Sect Title}": - // output from 16-bit code looks like section header - addedtxt = AddTranGetSectionHdr(addedtxt, nontoken, toitem); - //AddTranGetSectionTitle(nontoken, toitem); - break; - case "{?.Sect Title}": - // output from 16-bit code looks like section header - addedtxt = AddOptionalTranGetSectionHdr(addedtxt, token, nontoken, toitem); - //AddOptionalTranGetSectionTitle(token, nontoken, toitem); - break; - } - startIndex = endtokn+1; - if (startIndex >= tranformat.Length) break; - } - if (startIndex < tranformat.Length) Append(tranformat.Substring(startIndex, tranformat.Length - startIndex - 1), false); - return (retstr.ToString()); - } - private void Append(string str, bool doflags) - { - if (str == null || str == "") return; - if (doflags && _MyFormatData.TransData.XchngTranSpForHard) - { - int indx = str.IndexOf(' '); - if (indx > -1) - { - str.Remove(indx, 1); - str.Insert(indx, @"\u160?"); - } - } - retstr.Append(str); - } - private bool AddTransitionProcTitle(bool addedtxt, string nontoken, ItemInfo toitem) - { - string parenstr = toitem.MyProcedure.MyContent.Text; - StringBuilder lretstr = new StringBuilder(); - // LATER: For an else - Do I need to strip underlining here? See promsnt\lib\edit\gettran.c - if (parenstr != "" || _MyFormatData.ProcData.PrintNoTitle) - { - lretstr.Append(_MyFormatData.TransData.DelimiterForTransitionTitle); - lretstr.Append(_MyFormatData.TransData.CapsTransitions ? parenstr.ToUpper() : - _MyFormatData.TransData.Cap1stCharTrans ? CapFirstLetterOnly(parenstr, 0) : - parenstr); - lretstr.Append(_MyFormatData.TransData.DelimiterForTransitionTitle); - } - // LATER: if (DoSectionTransitions && GetSTepNO(TSeq1)) TransitionCat(AddCommaStep", Step")); - if (addedtxt) Append(nontoken, false); - Append(lretstr.ToString(), true); - if (lretstr.Length != 0) return true; - return false; - } - private string CapFirstLetterOnly(string retstr, int p) - { - string lretstr = retstr; - // LATER: write code to capitalize first letter (active plants) - return lretstr; - } - private bool AddOptionalTransitionProcTitle(bool addedtxt, string token, string nontoken, ItemInfo toitem) - { - // token is passed in for future use, i.e. if text is placed between "?" and "." to - // request other processing. - - // for now the only test is to check if the toitem is in the current procedure. - if (_MyFromItemInfo.MyProcedure.ItemID == toitem.MyProcedure.ItemID) return addedtxt?true:false; - return AddTransitionProcTitle(addedtxt, nontoken, toitem); - } - private bool AddTransitionProcNum(bool addedtxt, string nontoken, ItemInfo toitem) - { - string retstr = toitem.MyProcedure.MyContent.Number; - // LATER: start with UnitSpecific procedure number. - // LATER: Format Flag TruncateProcNmAfter1stSpace (dropped plants) - // LATER: Format Flag HardSpTranProcNumb (active plants) - if (addedtxt) Append(nontoken, false); - Append(retstr, true); - if (retstr != null && retstr != "") return true; - return false; - } - private bool AddOptionalTransitionProcNum(bool addedtxt, string token, string nontoken, ItemInfo toitem) - { - // token is passed in for future use, i.e. if text is placed between "?" and "." to - // request other processing. - - // for now the only test is to check if the toitem is in the current procedure. - if (_MyFromItemInfo.MyProcedure.ItemID == toitem.MyProcedure.ItemID) return addedtxt ? true : false; - return AddTransitionProcNum(addedtxt, nontoken, toitem); - } - // TODO: Section methods are not complete.... - private ItemInfo TranGetSectionItem(ItemInfo itminfo) - { - ItemInfo tmpitm = itminfo; - while (tmpitm.MyContent.Type >= 20000) tmpitm = tmpitm.MyParent; - return tmpitm; - } - private bool AddTranGetSectionHdr(bool addedtxt, string nontoken, ItemInfo itminfo) - { - // if this is a step section & the default section, just return - //if (TranGetSectionItem(itminfo).IsDefaultSection) return; - StringBuilder retstr = new StringBuilder(); - retstr.Append(TranGetSectionNumber(itminfo)); - string txt = TranGetSectionTitle(itminfo); - if (retstr.Length>0 && txt.Length>0) retstr.Append(", "); - retstr.Append(txt); - if (addedtxt) Append(nontoken, false); - Append(retstr.ToString(), true); - if (retstr.Length != 0) return true; - return false; - } - private bool AddOptionalTranGetSectionHdr(bool addedtxt, string token, string nontoken, ItemInfo toitem) - { - // token is passed in for future use, i.e. if text is placed between "?" and "." to - // request other processing. - - // If in same procedure, the section header is put out if not in the same section. - // If in a different procedure, the section header is put out if the 'to' item is not the - // default (or start) section. - if (_MyFromItemInfo.MyProcedure.ItemID == toitem.MyProcedure.ItemID) - { - if (TranGetSectionItem(_MyFromItemInfo).ItemID == TranGetSectionItem(toitem).ItemID) return addedtxt ? true : false; - } - else if (TranGetSectionItem(toitem).IsDefaultSection) return addedtxt ? true : false; - return AddTranGetSectionHdr(addedtxt, nontoken, toitem); - } - - private string TranGetSectionNumber(ItemInfo itminfo) - { - ItemInfo tmpitm = TranGetSectionItem(itminfo); - return (tmpitm.MyContent.Number); - } - private string TranGetSectionTitle(ItemInfo itminfo) - { - // LATER: Cap1stSectionTitle, CapFirstLetterOnly - if (_MyFormatData.TransData.UseSecTitles) - { - ItemInfo tmpitm = TranGetSectionItem(itminfo); - return (tmpitm.MyContent.Text); - } - return null; - } - private bool AddOptionalTranGetSectionTitle(bool addedtxt, string token, string nontoken, ItemInfo toitem) - { - // token is passed in for future use, i.e. if text is placed between "?" and "." to - // request other processing. - - // for now the only test is to check if the toitem is in the current section. - if (TranGetSectionItem(_MyFromItemInfo).ItemID == TranGetSectionItem(toitem).ItemID) return addedtxt ? true : false; - if (addedtxt) Append(nontoken, false); - string retstr = TranGetSectionTitle(toitem); - Append(retstr, true); - if (retstr != null && retstr != "") return true; - return false; - } - private bool AddTranGetSectionTitle(bool addedtxt, string nontoken, ItemInfo itminfo) - { - // LATER: Cap1stSectionTitle, CapFirstLetterOnly - if (_MyFormatData.TransData.UseSecTitles) - { - string retstr = TranGetSectionTitle(itminfo); - if (addedtxt)Append(nontoken, false); - Append(retstr, true); - if (retstr != null && retstr != "") return true; - } - return false; - } public string PathTo { get @@ -240,9 +21,330 @@ namespace VEPROMS.CSLA.Library { get { - //return "From " + MyContent.ContentItems[0].Path; return MyContent.ContentItems[0].Path; } } + public string ResolvePathTo(FormatInfo fi, ItemInfo itminfo, int tranType, ItemInfo toitem, ItemInfo rangeitem) + { + return TransitionText.GetResolvedText(fi, itminfo, tranType, toitem, rangeitem); + } + public string ResolvePathTo() + { + ItemInfo item = MyContent.ContentItems[0]; + return ResolvePathTo(item.ActiveFormat, item, TranType, MyItemToID, MyItemRangeID); + } + } + public partial class TransitionInfoList + { + [Serializable()] + private class AffectedTransitonsCriteria + { + public AffectedTransitonsCriteria(int itemID) + { + _ItemID = itemID; + } + private int _ItemID; + public int ItemID + { + get { return _ItemID; } + set { _ItemID = value; } + } + } + public static TransitionInfoList GetAffected(int itemID) + { + try + { + TransitionInfoList tmp = DataPortal.Fetch(new AffectedTransitonsCriteria(itemID)); + TransitionInfo.AddList(tmp); + tmp.AddEvents(); + return tmp; + } + catch (Exception ex) + { + throw new DbCslaException("Error on TransitionInfoList.GetAffected", ex); + } + } + private void DataPortal_Fetch(AffectedTransitonsCriteria criteria) + { + this.RaiseListChangedEvents = false; + if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] TransitionInfoList.DataPortal_FetchFromID", GetHashCode()); + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandText = "getAffectedTransitions"; + cm.Parameters.AddWithValue("@ItemID", criteria.ItemID); + using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) + { + IsReadOnly = false; + while (dr.Read()) this.Add(new TransitionInfo(dr)); + IsReadOnly = true; + } + } + } + } + catch (Exception ex) + { + if (_MyLog.IsErrorEnabled) _MyLog.Error("TransitionInfoList.DataPortal_FetchAffected", ex); + throw new DbCslaException("TransitionInfoList.DataPortal_Fetch", ex); + } + this.RaiseListChangedEvents = true; + } + } + public static class TransitionText + { + private delegate bool TransitionAppendFunction(bool textAdded, TransitionBuilder tb, string token, string nonToken); + private struct TransitionBuilder + { + public StringBuilder _Results; + public FormatData _FormatData; + public string _TransFormat; + public E_TransUI _TransUI; + public ItemInfo _FromItem; + public int _TranType; + public ItemInfo _ToItem; + public ItemInfo _RangeItem; + } + private static Dictionary _AppendMethods; + private static void SetupMethods() + { + _AppendMethods = new Dictionary(); + _AppendMethods.Add("{Proc Num}", AddTransitionProcNum); + _AppendMethods.Add("{?.Proc Num}", AddOptionalTransitionProcNum); + _AppendMethods.Add("{Proc Title}", AddTransitionProcTitle); + _AppendMethods.Add("{?.Proc Title}", AddOptionalTransitionProcTitle); + _AppendMethods.Add("{First Step}", AddStepNumber); + _AppendMethods.Add("{Last Step}", AddRangeStepNumber); + _AppendMethods.Add("{.}", AddIncludedStepNumber); + _AppendMethods.Add("{Sect Hdr}", AddTranGetSectionHdr); + _AppendMethods.Add("{?.Sect Hdr}", AddOptionalTranGetSectionHdr); + _AppendMethods.Add("{Sect Title}", AddTranGetSectionHdr); + _AppendMethods.Add("{?.Sect Title}", AddOptionalTranGetSectionHdr); + } + public static string GetResolvedText(ItemInfo fromInfo, int tranType, ItemInfo toItem, ItemInfo rangeItem) + { + return GetResolvedText(fromInfo.ActiveFormat, fromInfo, tranType, toItem, rangeItem); + } + public static string GetResolvedText(FormatInfo formatInfo, ItemInfo fromInfo, int tranType, ItemInfo toItem, ItemInfo rangeItem) + { + TransitionBuilder tb = SetupTransitionBuilder(formatInfo, fromInfo, tranType, toItem, rangeItem); + if(_AppendMethods==null) + SetupMethods(); + return BuildString(tb); + } + private static TransitionBuilder SetupTransitionBuilder(FormatInfo formatInfo, ItemInfo fromInfo, int tranType, ItemInfo toItem, ItemInfo rangeItem) + { + TransitionBuilder tb; + tb._Results = new StringBuilder(); + tb._FormatData = formatInfo.PlantFormat.FormatData; + // get the format of the transition string based on this transition's index into the TransData part of + // format.... + tb._TransFormat = tb._FormatData.TransData.TransTypeList[tranType].TransFormat; + tb._TransUI = (E_TransUI)tb._FormatData.TransData.TransTypeList[tranType].TransUI; + tb._FromItem = fromInfo; + tb._TranType = tranType; + tb._ToItem = toItem; + tb._RangeItem = rangeItem; + return tb; + } + private static string BuildString(TransitionBuilder tb) + { + int startIndex = 0; + int index = -1; + string nonToken = null; + bool textAdded = false; + while ((index = tb._TransFormat.IndexOf("{", startIndex)) > -1) + { + if (index > startIndex) nonToken = tb._TransFormat.Substring(startIndex, index - startIndex); + int endtokn = tb._TransFormat.IndexOf("}", index); + string token = tb._TransFormat.Substring(index, endtokn - index + 1); + if (_AppendMethods.ContainsKey(token)) + textAdded = _AppendMethods[token](textAdded, tb, token, nonToken); + startIndex = endtokn + 1; + if (startIndex >= tb._TransFormat.Length) break; + } + if (startIndex < tb._TransFormat.Length) Append(tb, tb._TransFormat.Substring(startIndex, tb._TransFormat.Length - startIndex - 1), false); + return (tb._Results.ToString()); + } + private static void Append(TransitionBuilder tb, string str, bool doflags) + { + if (str == null || str == "") return; + if (doflags && tb._FormatData.TransData.XchngTranSpForHard) + { + int indx = str.IndexOf(' '); + if (indx > -1) + { + str.Remove(indx, 1); + str.Insert(indx, @"\u160?"); + } + } + tb._Results.Append(str); + } + // TODO: TStepNoFlag, i.e. include step number in range items. + // TODO: TStepNoFlag, i.e. include step number in range items. + // TODO: For hlp: LowerCaseTranNumber - lower case substep numbers in transitions + private static bool AddTransitionProcNum(bool textAdded, TransitionBuilder tb, string token, string nonToken) // Coded for HLP + { + string retstr = tb._ToItem.MyProcedure.MyContent.Number; + // LATER: start with UnitSpecific procedure number. + // LATER: Format Flag TruncateProcNmAfter1stSpace (dropped plants) + // LATER: Format Flag HardSpTranProcNumb (active plants) + if (textAdded) Append(tb, nonToken, false); + Append(tb, retstr, true); + if (retstr != null && retstr != "") return true; + return false; + } + private static bool AddOptionalTransitionProcNum(bool textAdded, TransitionBuilder tb, string token, string nonToken) + { + // token is passed in for future use, i.e. if text is placed between "?" and "." to + // request other processing. + + // for now the only test is to check if the toitem is in the current procedure. + if (tb._FromItem.MyProcedure.ItemID == tb._ToItem.MyProcedure.ItemID) return textAdded ? true : false; + return AddTransitionProcNum(textAdded, tb, token, nonToken); + } + + private static bool AddTransitionProcTitle(bool textAdded, TransitionBuilder tb, string token, string nonToken)// Coded for HLP + { + string parenstr = tb._ToItem.MyProcedure.MyContent.Text; + StringBuilder lretstr = new StringBuilder(); + // LATER: For an else - Do I need to strip underlining here? See promsnt\lib\edit\gettran.c + if (parenstr != "" || tb._FormatData.ProcData.PrintNoTitle) + { + lretstr.Append(tb._FormatData.TransData.DelimiterForTransitionTitle); + lretstr.Append(tb._FormatData.TransData.CapsTransitions ? parenstr.ToUpper() : + tb._FormatData.TransData.Cap1stCharTrans ? CapFirstLetterOnly(parenstr, 0) : + parenstr); + lretstr.Append(tb._FormatData.TransData.DelimiterForTransitionTitle); + } + // LATER: if (DoSectionTransitions && GetSTepNO(TSeq1)) TransitionCat(AddCommaStep", Step")); + if (textAdded) Append(tb, nonToken, false); + Append(tb, lretstr.ToString(), true); + if (lretstr.Length != 0) return true; + return false; + } + private static bool AddOptionalTransitionProcTitle(bool textAdded, TransitionBuilder tb, string token, string nonToken) + { + // token is passed in for future use, i.e. if text is placed between "?" and "." to + // request other processing. + + // for now the only test is to check if the toitem is in the current procedure. + if (tb._FromItem.MyProcedure.ItemID == tb._ToItem.MyProcedure.ItemID) return textAdded ? true : false; + return AddTransitionProcTitle(textAdded, tb, token, nonToken); + } + private static bool AddStepNumber(bool textAdded, TransitionBuilder tb, string token, string nonToken) + { + // If we're on a step put out the step number. + ItemInfo secitm = TranGetSectionItem(tb._ToItem); + if ((!((tb._TransUI & E_TransUI.StepAllowNone) == E_TransUI.StepAllowNone)) || tb._ToItem.MyContent.Type > 20000) + { + if (textAdded) Append(tb, nonToken, false); + //Console.WriteLine("NEW - ItemID={0},Ordinal={1}", tb._ToItem.ItemID, tb._ToItem.Ordinal); + Append(tb, tb._ToItem.Ordinal.ToString(), true); + textAdded = true; + } + return textAdded; + } + private static bool AddRangeStepNumber(bool textAdded, TransitionBuilder tb, string token, string nonToken) + { + if (textAdded) Append(tb, nonToken, false); + Append(tb, tb._RangeItem.Ordinal.ToString(), true); + textAdded = true; + return textAdded; + } + private static bool AddIncludedStepNumber(bool textAdded, TransitionBuilder tb, string token, string nonToken) + { + if (textAdded) Append(tb, nonToken, false); + Append(tb, "#", true); // TODO: Intermediate Range. + textAdded = true; + return textAdded; + } + private static bool AddOptionalTranGetSectionHdr(bool textAdded, TransitionBuilder tb, string token, string nonToken) + { + // output from 16-bit code looks like section header + // token is passed in for future use, i.e. if text is placed between "?" and "." to + // request other processing. + + // If in same procedure, the section header is put out if not in the same section. + // If in a different procedure, the section header is put out if the 'to' item is not the + // default (or start) section. + if (tb._FromItem.MyProcedure.ItemID == tb._ToItem.MyProcedure.ItemID) + { + if (TranGetSectionItem(tb._FromItem).ItemID == TranGetSectionItem(tb._ToItem).ItemID) return textAdded ? true : false; + } + else if (TranGetSectionItem(tb._ToItem).IsDefaultSection) return textAdded ? true : false; + return AddTranGetSectionHdr(textAdded, tb, token, nonToken); + } + private static bool AddTranGetSectionHdr(bool textAdded, TransitionBuilder tb, string token, string nonToken) + { + // output from 16-bit code looks like section header + // if this is a step section & the default section, just return + //if (TranGetSectionItem(itminfo).IsDefaultSection) return; + StringBuilder retstr = new StringBuilder(); + retstr.Append(TranGetSectionNumber(tb._ToItem)); + string txt = TranGetSectionTitle(tb,tb._ToItem); + if (retstr.Length > 0 && txt.Length > 0) retstr.Append(", "); + retstr.Append(txt); + if (textAdded) Append(tb, nonToken, false); + Append(tb, retstr.ToString(), true); + if (retstr.Length != 0) return true; + return false; + } + private static bool AddOptionalTranGetSectionTitle(bool textAdded, TransitionBuilder tb, string token, string nonToken) + { + // token is passed in for future use, i.e. if text is placed between "?" and "." to + // request other processing. + + // for now the only test is to check if the toitem is in the current section. + if (TranGetSectionItem(tb._FromItem).ItemID == TranGetSectionItem(tb._ToItem).ItemID) return textAdded ? true : false; + if (textAdded) Append(tb, nonToken, false); + string retstr = TranGetSectionTitle(tb,tb._ToItem); + Append(tb, retstr, true); + if (retstr != null && retstr != "") return true; + return false; + } + private static bool AddTranGetSectionTitle(bool textAdded, TransitionBuilder tb, string token, string nonToken) + { + // LATER: Cap1stSectionTitle, CapFirstLetterOnly + if (tb._FormatData.TransData.UseSecTitles) + { + string retstr = TranGetSectionTitle(tb,tb._FromItem); + if (textAdded) Append(tb, nonToken, false); + Append(tb, retstr, true); + if (retstr != null && retstr != "") return true; + } + return false; + } + private static string CapFirstLetterOnly(string retstr, int p) + { + string lretstr = retstr; + // LATER: write code to capitalize first letter (active plants) + return lretstr; + } + // TODO: Section methods are not complete.... + private static ItemInfo TranGetSectionItem(ItemInfo itminfo) + { + ItemInfo tmpitm = itminfo; + while (tmpitm.MyContent.Type >= 20000) tmpitm = tmpitm.MyParent; + return tmpitm; + } + private static string TranGetSectionNumber(ItemInfo itminfo) + { + ItemInfo tmpitm = TranGetSectionItem(itminfo); + return (tmpitm.MyContent.Number); + } + private static string TranGetSectionTitle(TransitionBuilder tb, ItemInfo itminfo) + { + // LATER: Cap1stSectionTitle, CapFirstLetterOnly + if (tb._FormatData.TransData.UseSecTitles) + { + ItemInfo tmpitm = TranGetSectionItem(itminfo); + return (tmpitm.MyContent.Text); + } + return null; + } } }