From 7bbf10f8f0ce90470e96e47132f2082384557b54 Mon Sep 17 00:00:00 2001 From: Kathy Date: Tue, 26 Jun 2012 15:30:07 +0000 Subject: [PATCH] --- PROMS/Volian.Print.Library/vlnParagraph.cs | 179 ++++++++++++++++----- 1 file changed, 140 insertions(+), 39 deletions(-) diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index 9505419a..7990257c 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -91,7 +91,10 @@ namespace Volian.Print.Library } Add(para); // para.YBottomMost will have y for bottom of any substeps that are also enclosed in the box. - yoff = para.YBottomMost; + if (childItemInfo.IsStep && childItemInfo.MyHLS.FormatStepData.UseSmartTemplate && para.ChildrenBelow.Count>0 && para.ChildrenBelow[0].YBottomMost > para.YBottomMost) + yoff = para.ChildrenBelow[0].YBottomMost; + else + yoff = para.YBottomMost; if (childItemInfo.FormatStepData != null && childItemInfo.FormatStepData.BoxIt) { box.Height = yoff - box.YOffset - (1.1F * vlnPrintObject.SixLinesPerInch); @@ -655,6 +658,7 @@ namespace Volian.Print.Library private int COL_WID_ADJ = 6; // adjusts for incorrect use of WidSTable when breaking a line (it breaks 6 chars too short) public vlnParagraph(vlnParagraph parent, PdfContentByte cb, ItemInfo itemInfo, float xoff, float yoff, int rnoLevel, int maxRNO, FormatInfo formatInfo) { + float savCheckListBottomMost = 0; //int[] problemIDs = { 889 }; //List lProblemIDs = new List(problemIDs); //if (lProblemIDs.Contains(itemInfo.ItemID)) @@ -694,8 +698,9 @@ namespace Volian.Print.Library if (itemInfo.MyParent.IsCaution || itemInfo.MyParent.IsNote) XOffset += 72 * (itemInfo.FormatStepData.CautionOrNoteSubstepIndent == null ? 0 : (float)itemInfo.FormatStepData.CautionOrNoteSubstepIndent / (float)itemInfo.FormatStepData.Font.CPI); - // research a better way - maybe add an xml tag or check printident vs editident: - if (MyItemInfo.ActiveFormat.Name == "WCNCKL" && (MyItemInfo.MyContent.Type == 20031 || MyItemInfo.MyContent.Type == 20030 || MyItemInfo.MyContent.Type == 20035)) + if (itemInfo.IsStep && itemInfo.MyHLS.FormatStepData.UseSmartTemplate && + itemInfo.FormatStepData.StepLayoutData.AlignWithParentTab + || (itemInfo.Steps != null && itemInfo.Steps.Count > 0 && itemInfo.Steps[0].FormatStepData.StepLayoutData.AlignWithParentTab)) itemInfo.MyTab = null; if (itemInfo.MyTab != null && itemInfo.MyTab.Text != null && itemInfo.MyTab.Text != "") { @@ -717,7 +722,22 @@ namespace Volian.Print.Library { float offset = (float)itemInfo.MyDocStyle.Layout.LeftMargin; if (formatInfo.PlantFormat.FormatData.SectData.SectionNumber.Pos != null) - offset += (float)formatInfo.PlantFormat.FormatData.SectData.SectionNumber.Pos; + { + // determine level of metasections. This level will be used to calculate the + // indent. DO I NEED THIS HERE???? + int level = 0; + ItemInfo iilvl = itemInfo; + while (!iilvl.IsProcedure) + { + level++; + iilvl = iilvl.MyParent; + } + level = level <= 2 ? 1 : level - 1; + if (level == 1) + offset += (float)formatInfo.PlantFormat.FormatData.SectData.SectionNumber.Pos; + else + offset += (level-1) * ((float)formatInfo.PlantFormat.FormatData.SectData.SectionHeader.Pos-(float)formatInfo.PlantFormat.FormatData.SectData.SectionNumber.Pos); + } localXOffset = offset; } } @@ -774,6 +794,7 @@ namespace Volian.Print.Library } else if (itemInfo.IsFigure) // if a figure we've got to determine the size: { + string erMsg = null; if (itemInfo.MyContent.Text != null) { ProcedureInfo proc = itemInfo.MyProcedure; @@ -781,37 +802,42 @@ namespace Volian.Print.Library ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst; ROFSTLookup lookup = rofst.ROFSTLookup; string linkInfoText = itemInfo.MyContent.Text.Replace(@"\v ", ""); - Match m = Regex.Match(linkInfoText, @"(.*)[#]Link:([A-Za-z]*):(.*)"); - string[] subs = m.Groups[3].Value.Split(" ".ToCharArray()); - string roid = subs[1]; - string val = lookup.GetRoValue(subs[1]); - if (val == null) val = lookup.GetRoValue(subs[1].Substring(0, 12)); - if (val != null) + if (linkInfoText.Contains("?")) + erMsg = "RO was not found during data migration."; + else { - string[] vals = val.Split("\n".ToCharArray()); - Width = Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) * MyItemInfo.FormatStepData.Font.CharsToTwips; - int lines = Int32.Parse(vals[2], System.Globalization.NumberStyles.AllowHexSpecifier); - Height = lines * SixLinesPerInch; - //yForCheckoff = yoff + Height - SixLinesPerInch; - if (dropCheckoff) - yForCheckoff += Height - SixLinesPerInch; // place checkoff on last row of text - yoff += (Height + (2 * SixLinesPerInch)); - string erMsg = null; - try + Match m = Regex.Match(linkInfoText, @"(.*)[#]Link:([A-Za-z]*):(.*)"); + string[] subs = m.Groups[3].Value.Split(" ".ToCharArray()); + string roid = subs[1]; + string val = lookup.GetRoValue(subs[1]); + if (val == null) val = lookup.GetRoValue(subs[1].Substring(0, 12)); + if (val != null) { - ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]); - if (roImage != null) - ImageText = val; - else - erMsg = string.Format("Image {0} does not exist.", vals[0]); - } + string[] vals = val.Split("\n".ToCharArray()); + Width = Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) * MyItemInfo.FormatStepData.Font.CharsToTwips; + int lines = Int32.Parse(vals[2], System.Globalization.NumberStyles.AllowHexSpecifier); + Height = lines * SixLinesPerInch; + //yForCheckoff = yoff + Height - SixLinesPerInch; + if (dropCheckoff) + yForCheckoff += Height - SixLinesPerInch; // place checkoff on last row of text + yoff += (Height + (2 * SixLinesPerInch)); - catch (Exception ex) - { - erMsg = string.Format("Image {0} does not exist, error = {1}.", vals[0], ex.Message); + try + { + ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]); + if (roImage != null) + ImageText = val; + else + erMsg = string.Format("Image {0} does not exist.", vals[0]); + } + + catch (Exception ex) + { + erMsg = string.Format("Image {0} does not exist, error = {1}.", vals[0], ex.Message); + } } - if (erMsg != null) Rtf = GetRtf(erMsg, itemInfo.ActiveFormat.PlantFormat.FormatData.Font); } + if (erMsg != null) Rtf = GetRtf(erMsg, itemInfo.ActiveFormat.PlantFormat.FormatData.Font); CalculateXOffset(itemInfo, maxRNO, formatInfo); } } @@ -825,9 +851,10 @@ namespace Volian.Print.Library Width += 24; Rtf = Rtf.Replace("{Backspace}", ""); } - if (formatInfo.Name == "WCNCKL") + if (itemInfo.IsStep && itemInfo.MyHLS.FormatStepData.UseSmartTemplate) { - if (itemInfo.IsStep && (MyItemInfo.MyContent.Type == 20031 || MyItemInfo.MyContent.Type == 20030 || MyItemInfo.MyContent.Type == 20035)) + if (itemInfo.FormatStepData.StepLayoutData.AlignWithParentTab + || (itemInfo.Steps != null && itemInfo.Steps.Count > 0 && itemInfo.Steps[0].FormatStepData.StepLayoutData.AlignWithParentTab)) { int stplevl = TheStepLevel(itemInfo); if (stplevl >= 0 && MyItemInfo.MyHLS.FormatStepData.VertPos[stplevl] > 0) @@ -848,17 +875,27 @@ namespace Volian.Print.Library SectionConfig sc = itemInfo.MyConfig as SectionConfig; if ((sc != null && sc.Section_PrintHdr == "Y") && itemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseMetaSections) printMetaHdr = true; } - // Determine if section title is output - if ((!itemInfo.IsStepSection && MyItemInfo.ActiveFormat.Name != "WCNCKL") + + // If WCN checklists, the substeps are printed in a row, need to keep track of the 'longest' in + // y direction (bottommost) across the row. + if (itemInfo.IsStep && itemInfo.MyHLS.FormatStepData.UseSmartTemplate && (TheStepLevel(itemInfo)>0)) + { + // do I need to get max of savCheckListBottomMost & (yoff+Height+SixLinesPerInch) + savCheckListBottomMost = yoff + Height + SixLinesPerInch; + } + // Get Y offset for regular steps, or if section title is output or if not within row (not last column of + // text) for wcn checklist, i.e. . + if ((!itemInfo.IsStepSection && !itemInfo.MyHLS.FormatStepData.UseSmartTemplate) || printMetaHdr || (formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ShowSectionTitles && !MyItemInfo.MyDocStyle.CancelSectTitle && !MyItemInfo.MyDocStyle.SpecialStepsFoldout) - || (MyItemInfo.ActiveFormat.Name=="WCNCKL" && !MyItemInfo.IsStepSection - && itemInfo.MyContent.Type != 20031 && itemInfo.MyContent.Type != 20030)) // && itemInfo.MyContent.Type != 20035)) + // In WCN Checklist: I don't have children or if I have children the first child doesn't alignwithparent. + || (!itemInfo.IsStepSection && itemInfo.MyHLS.FormatStepData.UseSmartTemplate + && ((itemInfo.Steps == null || itemInfo.Steps.Count == 0) + || !itemInfo.Steps[0].FormatStepData.StepLayoutData.AlignWithParentTab))) { yoff += Height; - //yForCheckoff = yoff - SixLinesPerInch; yoff += AdjustForBlankLines(); if (dropCheckoff) yForCheckoff += Height - SixLinesPerInch; // place checkoff on last row of text @@ -917,10 +954,15 @@ namespace Volian.Print.Library yoff += myRnoSep.Height + SixLinesPerInch; } YBottomMost = yoff; + + // For WCN Checklist, the substeps are in rows of data. The YBottomMost is the bottom most for + // the row. + if (savCheckListBottomMost != 0 && savCheckListBottomMost>YBottomMost) YBottomMost = savCheckListBottomMost; } private int TheStepLevel(ItemInfo itemInfo) { + if (itemInfo.IsHigh) return -1; int lev = 0; ItemInfo ii = itemInfo; while (!ii.MyParent.IsHigh) @@ -1513,7 +1555,20 @@ namespace Volian.Print.Library if (itemInfo.IsStepSection) { if (formatInfo.PlantFormat.FormatData.SectData.SectionHeader.Just == "PSLeft") - XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + (float)formatInfo.PlantFormat.FormatData.SectData.SectionHeader.Pos; + { + int level = 0; + ItemInfo iilvl = itemInfo; + while (!iilvl.IsProcedure) + { + level++; + iilvl = iilvl.MyParent; + } + level = level <= 2 ? 1 : level - 1; + if (level==1) + XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + (level * (float)formatInfo.PlantFormat.FormatData.SectData.SectionHeader.Pos); + else + XOffset = (float)formatInfo.PlantFormat.FormatData.SectData.MetaSectionList[level].ColSByLevel; + } return; } int typ = ((int)itemInfo.MyContent.Type) % 10000; @@ -1626,7 +1681,12 @@ namespace Volian.Print.Library { int typ = ((int)itemInfo.MyContent.Type) % 10000; int? bxIndx = itemInfo.IsStep ? formatInfo.PlantFormat.FormatData.StepDataList[typ].StepLayoutData.STBoxindex : null; - float? widOvrd = itemInfo.FormatStepData == null ? null : itemInfo.FormatStepData.WidthOverride; + float? widOvrd = 0; + float xwid = 0; + if (itemInfo.IsStep && itemInfo.MyHLS.FormatStepData.UseSmartTemplate && (xwid = GetWidthFromTemplate(itemInfo, formatInfo))>0) + widOvrd = xwid; + else + widOvrd = itemInfo.FormatStepData == null ? null : itemInfo.FormatStepData.WidthOverride; if ((widOvrd??0) != 0) { Width = (float)widOvrd; @@ -1723,6 +1783,47 @@ namespace Volian.Print.Library Width = adjwidth + MyParent.Width - tabWidth + (myTab == null ? 0 : myTab.TabAlign); } } + private float GetWidthFromTemplate(ItemInfo itemInfo, FormatInfo formatInfo) + { + float rtnwid = 0; + int tpIndx = GetSmartTemplateIndex(itemInfo, itemInfo.MyContent.Type, formatInfo); + if (tpIndx != -1) + { + int ncol = formatInfo.PlantFormat.FormatData.Templates[tpIndx].width; + // now convert to the units for this format. The template width data is in number of columns. + rtnwid = ncol * itemInfo.FormatStepData.Font.CharsToTwips; + } + return rtnwid; + } + private int GetSmartTemplateIndex(ItemInfo itemInfo, int? type, FormatInfo formatInfo) + { + int indx = 0; + // find the starting template in the list for the high level step type: + int highType = (int)itemInfo.MyHLS.MyContent.Type-20001; + while (indx < formatInfo.PlantFormat.FormatData.Templates.Count) + { + // level of 0 starts a new group. + if (formatInfo.PlantFormat.FormatData.Templates[indx].level == 0) + { + indx++; + // now see if we're on the high level step type, if so, look under this one + // for the step type that we're on. If found return the index of it. + if (formatInfo.PlantFormat.FormatData.Templates[indx].type == highType) + { + indx++; + while (indx < formatInfo.PlantFormat.FormatData.Templates.Count && formatInfo.PlantFormat.FormatData.Templates[indx].level != 0) + { + if (formatInfo.PlantFormat.FormatData.Templates[indx].type == type - 20001) + return indx; + indx++; + } + } + } + else + indx++; + } + return -1; // didn't find this step type in the template width override list. + } private float AdjustForSectionLevelTab() {