Compare commits

..
Author SHA1 Message Date
mschill f5f9975363 B2026-077 – Update Format inheritance to use index id instead of position/order. 2026-09-28 14:15:48 -04:00
mschill 8df20f32ce Merge pull request 'B2026-076 - Update Base format to move new type to bottom' (#818) from B2026-076 into Development
Ready for QA
2026-09-15 11:59:46 -04:00
mschill 6ca427a7c6 B2026-076 - Update Base format to move new 2026-09-15 12:01:22 -04:00
mschill 14a8922976 Merge pull request 'C2026-054 Text change for Open Tabs from Previous Session dialog box' (#815) from C2026-054-Text-change-for-Open-Tabs-from-Previous-Session into Development
Looks Good. Ready for QA.
2026-09-14 05:36:50 -04:00
plarsen 2f5affabbe C2026-054-Text-change-for-Open-Tabs-from-Previous-Session 2026-09-12 07:47:56 -04:00
plarsen 44c86e5d80 C2026-054-Text-change-for-Open-Tabs-from-Previous-Session 2026-09-11 12:13:16 -04:00
plarsen d5859f2a01 C2026-054-Text-change-for-Open-Tabs-from-Previous-Session 2026-09-10 16:10:08 -04:00
jjenko 506c826eb3 Merge pull request 'C2026 048 tool tip update' (#814) from C2026-048-Tool-Tip-Update into Development
good for testing phase
2026-09-10 14:00:18 -04:00
plarsen 96839f8379 Merge branch 'Development' into C2026-048-Tool-Tip-Update 2026-09-10 13:53:21 -04:00
plarsen f6e42d933e C2026-048-Tool-Tip-Update 2026-09-10 11:11:06 -04:00
mschill 28b79bf81b Merge pull request 'C2026-053' (#813) from C2026-053_restore_only_Proc_section_tabs into Development
Looks Good - Ready For QA
2026-09-09 14:54:21 -04:00
jjenko a87e23af7e C2026-053
When restoring the open procedure tabs while starting up PROMS, don’t restore any of the Word section tabs.
2026-09-09 14:51:51 -04:00
mschill 1e0e3a7114 Merge pull request 'B2026-074 Fixed issue where PROMS would hang when opening multiple saved Word section tabs. Also, we now save and restore to the step location of saved procedure editor sections.' (#812) from B2026-074_restore_proc_tabs into Development
Looks good. Ready for QA.
2026-09-04 10:47:44 -04:00
jjenko 7333247b52 B2026-074 Fixed issue where PROMS would hang when opening multiple saved Word section tabs. Also, we now save and restore to the step location of saved procedure editor sections. 2026-09-04 10:44:35 -04:00
jjenko e16b3262d9 Merge pull request 'C2026-041-invisible-position-changes-as-differences' (#807) from C2026-041-invisible-position-changes-as-differences into Development
good for QA
2026-09-03 08:56:31 -04:00
32 changed files with 230 additions and 440 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+10 -9
View File
@@ -1,4 +1,5 @@
namespace VEPROMS
{
partial class dlgCheckOpenTabs
@@ -42,12 +43,12 @@ namespace VEPROMS
//
this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelX1.Location = new System.Drawing.Point(23, 2);
this.labelX1.Location = new System.Drawing.Point(23, 5);
this.labelX1.Name = "labelX1";
this.labelX1.Size = new System.Drawing.Size(363, 78);
this.labelX1.Size = new System.Drawing.Size(363, 90);
this.labelX1.TabIndex = 0;
this.labelX1.Text = "Would you like for PROMS to reopen the tabs that you had open during your last se" +
"ssion?";
"ssion?" + System.Environment.NewLine + System.Environment.NewLine + "NOTE: This will not apply to Word section tabs that were previously open.";
this.labelX1.WordWrap = true;
//
// cbRemember
@@ -56,20 +57,20 @@ namespace VEPROMS
//
//
this.cbRemember.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.cbRemember.Location = new System.Drawing.Point(23, 75);
this.cbRemember.Location = new System.Drawing.Point(23, 100);
this.cbRemember.Name = "cbRemember";
this.cbRemember.Size = new System.Drawing.Size(376, 47);
this.cbRemember.Size = new System.Drawing.Size(376, 55);
this.cbRemember.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.cbRemember.TabIndex = 1;
this.cbRemember.Text = "Check this box to not be prompted in the future when opening PROMS. \nNote that th" +
"ese settings can be adjusted at any time from the \nOPTIONS menu for PROMS.";
"ese settings can be adjusted at any time from the \nOPTIONS menu for PROMS.";
//
// btnOpenTabs
//
this.btnOpenTabs.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnOpenTabs.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnOpenTabs.DialogResult = System.Windows.Forms.DialogResult.Yes;
this.btnOpenTabs.Location = new System.Drawing.Point(23, 139);
this.btnOpenTabs.Location = new System.Drawing.Point(23, 165);
this.btnOpenTabs.Name = "btnOpenTabs";
this.btnOpenTabs.Size = new System.Drawing.Size(150, 42);
this.btnOpenTabs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
@@ -82,7 +83,7 @@ namespace VEPROMS
this.btnNoTabs.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnNoTabs.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnNoTabs.DialogResult = System.Windows.Forms.DialogResult.No;
this.btnNoTabs.Location = new System.Drawing.Point(216, 139);
this.btnNoTabs.Location = new System.Drawing.Point(216, 165);
this.btnNoTabs.Name = "btnNoTabs";
this.btnNoTabs.Size = new System.Drawing.Size(150, 42);
this.btnNoTabs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
@@ -94,7 +95,7 @@ namespace VEPROMS
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(411, 193);
this.ClientSize = new System.Drawing.Size(411, 220);
this.ControlBox = false;
this.Controls.Add(this.btnNoTabs);
this.Controls.Add(this.btnOpenTabs);
+34 -40
View File
@@ -1,23 +1,15 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Configuration;
using System.Reflection;
using VEPROMS.CSLA.Library;
//using Csla;
using DevComponents;
using DevComponents.DotNetBar;
using DevComponents.DotNetBar.Rendering;
using VEPROMS.Properties;
using Volian.Controls.Library;
using DescriptiveEnum;
using Volian.Base.Library;
using Volian.Print.Library;
using JR.Utils.GUI.Forms;
@@ -1610,7 +1602,7 @@ namespace VEPROMS
displayRO.MyROFST = SelectedROFst;
// B2023-021: force Load of Step Prop/RO panel RO tree by passing in
// true to LoadTree
if (!_WeAreExitingPROMS) displayRO.LoadTree(true);
if (!_WeAreExitingPROMS) displayRO.LoadTree(this,true);
}
}
@@ -1846,7 +1838,7 @@ namespace VEPROMS
// should be closed or if we should exit PROMS or just Cancel to continue working
if (tc._MyDisplayTabItems.Count < 1) // If all thabs are closed in the editor will indicate that in the database.
{
VEPROMS.CSLA.Library.Item.DeactivateStateDisplayTabTmp(MySessionInfo.UserID);
Item.DeactivateStateDisplayTabTmp(MySessionInfo.UserID);
}
if (!_WeAreExitingPROMS && !ClosingWithError && tc.SelectedDisplayTabItem != null && tc._MyDisplayTabItems.Count > 0)
{
@@ -1864,7 +1856,7 @@ namespace VEPROMS
return;
}
string stk = Volian.Base.Library.vlnStackTrace.StackToString();
string stk = vlnStackTrace.StackToString();
if (!stk.Contains("Exception"))
{
@@ -1872,33 +1864,28 @@ namespace VEPROMS
// B2019-071 we will now close one or all of the tabs (even step editor ones)
if (_WeAreExitingPROMS)
{
string DisplayTabID = "";
int pos;
int TabItemID;
string DisplayTabName = "";
int cnt = 0;
// Deactivate previous procedure tab state by user
VEPROMS.CSLA.Library.Item.DeactivateStateDisplayTabTmp(MySessionInfo.UserID);
Item.DeactivateStateDisplayTabTmp(MySessionInfo.UserID);
// Save current procedure tab state
//B2024-082 Remember Tabs Not opening in correct order
int cnt = 0;
foreach (DisplayTabItem dti in tc.MyBar.Items)
{
cnt++;
DisplayTabID = dti.MyKey;
TabItemID = dti.MyItemInfo.ItemID;
DisplayTabName = dti.ToString();
Item.AddDisplayTabsState(TabItemID, DisplayTabID, DisplayTabName, MySessionInfo.UserID, cnt);
ItemInfo itminfo = dti.MyItemInfo;
string DisplayTabID = dti.MyKey;
string DisplayTabName = dti.ToString();
// B2026-074 if a Word section, save the ItemID of the entire Word section
// else if a Step Editor section, save the ItemID of the step part the user was on
int TabItemID = itminfo.HasWordContent ? itminfo.ItemID : dti.MyStepTabPanel.MyStepTabRibbon.MyEditItem.MyItemInfo.ItemID;
Item.AddDisplayTabsState(TabItemID, DisplayTabID, DisplayTabName, MySessionInfo.UserID, cnt);
}
}
int n = tc._MyDisplayTabItems.Count;
while (n-- > 0 && tc._MyDisplayTabItems.Count > 0)
{
tc.CloseTabItem(tc.SelectedDisplayTabItem);
// B2019-071 close just the current tab and continue working
if (!dctoe.ExitPROMS)
{
@@ -2543,13 +2530,13 @@ namespace VEPROMS
}
// Add retrieve displaytabs state here.
openDisplaytabstate();
OpenDisplaytabstate();
}
public void openDisplaytabstate()
private void OpenDisplaytabstate()
{
// Retrieve edit tab state from database.
DataTable DisPlayTabState = VEPROMS.CSLA.Library.Item.GetDisplayTabs(VlnSettings.UserID);
DataTable DisPlayTabState = Item.GetDisplayTabs(VlnSettings.UserID);
//CSM - C2024-031 - Getting User Settings
//and set checkboxes based on what they are set to
@@ -2569,17 +2556,23 @@ namespace VEPROMS
usersettings.SetUserSettings(true, result == DialogResult.Yes);
}
if (result == DialogResult.Yes)
{
// B2026-074 added flag (LoadingSavedProcTabs) to supress unnecessary event calls
// this will help prevent PROMS from getting stuck continuously looping through the same events
// when Word procedure tabs are restored.
// C2026-053 leaving this flag in her for now should we decide to trouble-shoot reopening of Word tabs later on.
tc.LoadingSavedProcTabs = true; // we check for this flag in DSOTabPanel.cs when opening Word sections
foreach (DataRow TabState in DisPlayTabState.Rows)
{
int _ItemID = (int)TabState["ItemID"];
ItemInfo _Procedure = ItemInfo.Get(_ItemID);
// Open procedure in the editor.
if (_Procedure == null) continue; //skip and continue with foreach
// C2026-053 Open procedure tab but only if it's NOT a Word section
// Needed to disable opening saved Word sections - at least for now.
// We were running into performace and random hanging issues with the Word tabs - maybe windows event related.
if (_Procedure == null || _Procedure.HasWordContent) continue; //skip and continue with foreach
OpenItem(_Procedure);
if (tc.MyEditItem == null) continue; // skip and continue with foreach
if (tc.MyEditItem == null) continue; // skip and continue with foreach
// SelectedStepTabPanel needs to be set so the print buttons on the ribbon will work.
SelectedStepTabPanel = tc.MyEditItem.MyStepPanel.MyStepTabPanel;
@@ -2594,6 +2587,7 @@ namespace VEPROMS
SpellChecker.MyEditItem = tc.MyEditItem; //B2025-043 Remember Tabs is not setting the EditItem for the active window causing a PROMS crash when Spell Check
}
}
tc.LoadingSavedProcTabs = false;
}
}
}
@@ -4374,7 +4368,7 @@ namespace VEPROMS
displayRO.MyRTB = (SelectedStepTabPanel == null) ? null :
SelectedStepTabPanel.MyStepPanel.SelectedEditItem == null ? null : SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB;
displayRO.LoadTree(); //B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.LoadTree(this); //B2022-026 RO Memory reduction coding (Jakes Merge)
}
#endregion
@@ -4528,7 +4522,7 @@ namespace VEPROMS
// need this to update RO Tree after UpdateRofst (B2015-226)
// B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.MyROFST = SelectedROFst;
displayRO.LoadTree();
displayRO.LoadTree(this);
// resetting the MyROFSTLookup for the search & reports panels will refresh the RO trees after UpdateRofst in each of those panels (B2015-226)
if (SelectedDVI != null)
@@ -4603,7 +4597,7 @@ namespace VEPROMS
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// if ROFST got updated,
// set the Selected FST so it is in sync
if (!_WeAreExitingPROMS && displayRO.LoadTree(true))
if (!_WeAreExitingPROMS && displayRO.LoadTree(this,true))
{
SelectedROFst = displayRO.MyROFST;
}
@@ -4723,7 +4717,7 @@ namespace VEPROMS
// B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.MyRTB = null;
displayRO.LoadTree();
displayRO.LoadTree(this);
}
infotabTags.Visible = false;
@@ -4810,7 +4804,7 @@ namespace VEPROMS
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// if ROFST got updated,
// set the Selected FST so it is in sync
if (!_WeAreExitingPROMS && displayRO.LoadTree())
if (!_WeAreExitingPROMS && displayRO.LoadTree(this))
{
SelectedROFst = displayRO.MyROFST;
}
@@ -4843,7 +4837,7 @@ namespace VEPROMS
// B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.SetFindDocROButton(false);
if (!_WeAreExitingPROMS) displayRO.LoadTree();
if (!_WeAreExitingPROMS) displayRO.LoadTree(this);
//C2019-036 View Only mode work with Checked Out Procedures
//In View Only Mode - Step Properties should be disabled
@@ -4864,7 +4858,7 @@ namespace VEPROMS
displayRO.ROTypeFilter = E_ROValueType.All; // allow all RO types for Word attachments (but fix)
displayRO.SetFindDocROButton(true);
displayRO.LoadTree();
displayRO.LoadTree(this);
}
}
@@ -4996,7 +4990,7 @@ namespace VEPROMS
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// if ROFST got updated,
// set the Selected FST so it is in sync
if (displayRO.LoadTree())
if (displayRO.LoadTree(this))
{
SelectedROFst = displayRO.MyROFST;
}
+177 -378
View File
@@ -12,47 +12,14 @@ namespace VEPROMS.CSLA.Library
private static XmlElement mydocele;
public vlnFormatDocument(IFormatOrFormatInfo myFormat)
{
_MyFormat = myFormat;
MyFormat = myFormat;
LoadXml(MyFormat.Data);
mydocele = this.DocumentElement;
mydocele = DocumentElement;
}
private IFormatOrFormatInfo _MyFormat;
public IFormatOrFormatInfo MyFormat
public IFormatOrFormatInfo MyFormat { get; set; }
public static XmlNode LookupSingleNode(XmlNode xmlNode, string path)
{
get { return _MyFormat; }
set { _MyFormat = value; }
}
public static XmlNode LookupSingleNode(XmlNode xmlNode, string path)
{
//original:
//if (xmlNode == null) return null;
//XmlNode xn = xmlNode.SelectSingleNode(path);
//if (xn != null) return xn;
//if (xmlNode.Name == "Step") xn = LookupSingleStepNode(xmlNode, path);
//if (xn != null) return xn;
//if (path.StartsWith("Font")) return LookupSingleFontNode(xmlNode, path);
//return InheritLookup(xmlNode, path);
/* RHM 20090821 -
if (path.StartsWith("Font"))
{
XmlNode xn = null;
if (xmlNode != null)
{
xn = xmlNode.SelectSingleNode(path);
// RHM 2008-12-15 - Added logic to keep looking if a blank attribute is found
if (xn != null && xn is XmlAttribute && (xn as XmlAttribute).Value != "") return xn;
//if (xn != null) return xn;
}
else
{
xmlNode = LookupSingleNode(mydocele.FirstChild, "/PlantFormat/FormatData");
}
if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleNode {0},{1}", xmlNode.Name == "Step" ? "Step." + xmlNode.Attributes["Type"].Value : xmlNode.Name, path);
return LookupSingleFontNode(xmlNode, path);
}
else
{
*/
if (xmlNode == null) return null;
XmlNode xn = xmlNode.SelectSingleNode(path);
if (xmlNode.Name == "Box") return xn; // if box, don't do inheritance.
@@ -72,7 +39,6 @@ namespace VEPROMS.CSLA.Library
if (xn != null) return xn;
if (path.StartsWith("Font")) return LookupSingleFontNode(xmlNode, path); // Then do Font Inheritance
return InheritLookup(xmlNode, path, false);
// }
}
public static XmlNode LookupSingleFontNode(XmlNode xmlNode, string path)
{
@@ -108,29 +74,15 @@ namespace VEPROMS.CSLA.Library
if (xmlNode == null) return null;
XmlNode xn = xmlNode.SelectSingleNode(path);
XmlNode tmpNode = xmlNode;
XmlNode tmpNode2 = xmlNode;
XmlNode tmpNode2 = xmlNode;
while (xn == null) //Walk-up the format tree to find a step node
{
//if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleStepNode -> Loop {0},{1}", xmlNode.Name == "Step" ? "Step." + xmlNode.Attributes["Type"].Value : xmlNode.Name, path);
tmpNode = xmlNode;
// RHM 20090831 Try doing a lookup of the parent. If no parent, go back to the original and do an inheritance lookup
XmlAttribute attr = xmlNode.Attributes["ParentType"];
//if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleStepNode -> Loop {0},{1}", xmlNode.Name == "Step" ? "Step." + xmlNode.Attributes["Type"].Value : xmlNode.Name, path);
// RHM 20090831 Try doing a lookup of the parent. If no parent, go back to the original and do an inheritance lookup
XmlAttribute attr = xmlNode.Attributes["ParentType"];
if (attr == null || attr.Value == string.Empty) // Cannot find ParentType so do an InheritanceLookup
return InheritLookup(tmpNode2, path, true);
//return InheritLookup(xmlNode, path, false);
xmlNode = xmlNode.ParentNode.SelectSingleNode(string.Format("Step[@Type='{0}']", xmlNode.Attributes["ParentType"].InnerText));
// Based upon our current data - the following conditions are never met.
//if (xmlNode == null && path.StartsWith("Font"))
//{
// //if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleStepNode -> Font {0},{1}", tmpNode.Name == "Step" ? "Step." + tmpNode.Attributes["Type"].Value : tmpNode.Name, path);
// return LookupSingleFontNode(tmpNode, path);
//}
//if (xmlNode == null)
//{
// //if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleStepNode -> Font {0},{1}", tmpNode2.Name == "Step" ? "Step." + tmpNode2.Attributes["Type"].Value : tmpNode2.Name, path);
// return InheritLookup(tmpNode2, path, true);
//}
xn = xmlNode.SelectSingleNode(path);
}
return xn;
@@ -145,38 +97,20 @@ namespace VEPROMS.CSLA.Library
}
public static string Lookup(XmlNode xmlNode, string path)
{
//if (xmlNode == null) return null;
XmlNode xn = LookupSingleNode(xmlNode, path);
//if (xn == null) xn = InheritLookup(xmlNode, path);
if (xn == null) return null;
return xn.InnerText;
}
//public static string StepLookup(XmlNode xmlNode, string path)
//{
// //if (xmlNode == null) return null;
// XmlNode xn = LookupSingleStepNode(xmlNode, path);
// //if (xn == null) xn = InheritLookup(xmlNode, path);
// if (xn == null) return null;
// return xn.InnerText;
//}
public static T EnumLookup<T>(XmlNode xmlNode, string path)
return xn?.InnerText;
}
public static T EnumLookup<T>(XmlNode xmlNode, string path)
{
string str = Lookup(xmlNode,path);
if (str == null) return default(T);
return (T)Enum.Parse(typeof(T), str);
}
public static int? IntLookup(XmlNode xmlNode, string path)
return str == null ? default : (T)Enum.Parse(typeof(T), str);
}
public static int? IntLookup(XmlNode xmlNode, string path)
{
//if (xmlNode == null) return null;
//XmlNode xn = LookupSingleNode(xmlNode, path);
//if (xn == null) xn = InheritLookup(xmlNode, path);
//if (xn == null) return null;
//return int.Parse(xn.InnerText);
string str = Lookup(xmlNode, path);
if (str == null) return null;
return int.Parse(str);
}
public static int SiblingCount(XmlNode xmlNode)
return str == null ? null : (int?)int.Parse(str);
}
public static int SiblingCount(XmlNode xmlNode)
{
int retval = 0;
string nodeName = xmlNode.Name;
@@ -189,22 +123,32 @@ namespace VEPROMS.CSLA.Library
public static string Path(XmlNode xmlNode)
{
// Walk the path
string parentPath = (xmlNode.ParentNode == xmlNode.OwnerDocument ? "" : Path(xmlNode.ParentNode));
string parentPath = xmlNode.ParentNode == xmlNode.OwnerDocument ? "" : Path(xmlNode.ParentNode);
// Count Siblings with the Same Name
int sibCount = SiblingCount(xmlNode);
return string.Format("{0}/{1}[{2}]", parentPath, xmlNode.Name, sibCount);
}
public static XmlNode InheritLookup(XmlNode xmlNode, string path, bool stepLookup)
//B2026-077 – Update Format inheritance to use index id instead of position/order.
public static string PathByIndex(XmlNode xmlNode)
{
if (xmlNode.Name == "TransTypes" || xmlNode.Name == "Step")
{
string parentPath = xmlNode.ParentNode == xmlNode.OwnerDocument ? "" : Path(xmlNode.ParentNode);
string Indx = xmlNode.Attributes["Index"].Value;
return $@"{parentPath}/{xmlNode.Name}[@Index='{Indx}']";
}
else
{
return Path(xmlNode);
}
}
public static XmlNode InheritLookup(XmlNode xmlNode, string path, bool stepLookup)
{
//stepLookup = false; // 8/2 change for inheritance
if (xmlNode == null) return null;// No path to match
string xPath = Path(xmlNode);// Build xPath from xmlNode
if (xmlNode.Name == "TransTypes")
{
string TransIndex = xmlNode.Attributes["Index"].Value;
xPath = System.Text.RegularExpressions.Regex.Replace(xPath, @"\[[0-9]*\]$", @"[@Index='" + TransIndex + @"']");
}
vlnFormatDocument fd = (vlnFormatDocument)(xmlNode.OwnerDocument);//First Get the vlnFormatDocument - This also ties it to a FormatInfo object
string xPath = PathByIndex(xmlNode);// Build xPath from xmlNode
vlnFormatDocument fd = (vlnFormatDocument)xmlNode.OwnerDocument;//First Get the vlnFormatDocument - This also ties it to a FormatInfo object
while(fd.MyFormat.MyIParent != null)
{
fd = fd.MyFormat.MyIParent.PlantFormat.XmlDoc;// Get the parents vlnFormatDocument
@@ -215,8 +159,8 @@ namespace VEPROMS.CSLA.Library
else xp = fd.SelectSingleNode(xPath);// Get the related node
if (xp != null)
{
XmlNode xn = null;
if (stepLookup)
XmlNode xn;
if (stepLookup)
{
//if (path.Contains("Font")) Console.WriteLine("vlnFormatItem.SelectSingleNode {0},{1}", xp.Name == "Step" ? "Step." + xp.Attributes["Type"].Value : xp.Name, path);
xn = LookupSingleStepNode(xp, path);
@@ -233,14 +177,14 @@ namespace VEPROMS.CSLA.Library
{
if (xmlNode == null) return null;// No path to match
string xPath = Path(xmlNode);// Build xPath from xmlNode
vlnFormatDocument fd = (vlnFormatDocument)(xmlNode.OwnerDocument);//First Get the vlnFormatDocument - This also ties it to a FormatInfo object
vlnFormatDocument fd = (vlnFormatDocument)xmlNode.OwnerDocument;//First Get the vlnFormatDocument - This also ties it to a FormatInfo object
while (fd.MyFormat.MyIParent != null)
{
fd = fd.MyFormat.MyIParent.PlantFormat.XmlDoc;// Get the parents vlnFormatDocument
if (fd != null)
{
XmlNode xp = fd.SelectSingleNode(xPath);// Get the related node
if (xp != null)
if (xp != null)
{
XmlNodeList xl = xp.SelectNodes(path);
if (xl != null && xl.Count > 0)
@@ -256,100 +200,41 @@ namespace VEPROMS.CSLA.Library
[TypeConverter(typeof(ExpandableObjectConverter))]
public class vlnFormatItem
{
public vlnFormatItem(XmlNode xmlNode)
{
_XmlNode = xmlNode;
}
public vlnFormatItem() { }
XmlNode _XmlNode;
internal XmlNode XmlNode
{
get { return _XmlNode; }
set { _XmlNode = value; }
}
private IFormatOrFormatInfo _MyFormat;
public vlnFormatItem(XmlNode xmlNode) => XmlNode = xmlNode;
public vlnFormatItem() { }
internal XmlNode XmlNode { get; set; }
private IFormatOrFormatInfo _MyFormat;
public IFormatOrFormatInfo MyFormat
{
get
{
if (_MyFormat == null)
{
vlnFormatDocument doc = (XmlNode.OwnerDocument) as vlnFormatDocument;
if(doc != null)
_MyFormat = doc.MyFormat;
}
if (XmlNode.OwnerDocument is vlnFormatDocument doc)
_MyFormat = doc.MyFormat;
}
return _MyFormat;
}
}
private IFormatOrFormatInfo _MyParentFormat;
public IFormatOrFormatInfo MyParentFormat
public IFormatOrFormatInfo MyParentFormat => MyFormat.MyIParent;
public virtual string GetPDDisplayName() => ToString();
public virtual string GetPDName() => ToString();
public virtual string GetPDDescription() => ToString();
public virtual string GetPDCategory() => ToString();
public XmlNodeList SelectNodes(string path) => vlnFormatDocument.LookupNodes(XmlNode, path);
public XmlNode SelectSingleNode(string path)
{
get
{
return MyFormat.MyIParent;
}
}
public virtual string GetPDDisplayName()
{ return ToString(); }
public virtual string GetPDName()
{ return ToString(); }
public virtual string GetPDDescription()
{ return ToString(); }
public virtual string GetPDCategory()
{ return ToString(); }
public XmlNodeList SelectNodes(string path)
{
return vlnFormatDocument.LookupNodes(_XmlNode, path);
}
public XmlNode SelectSingleNode(string path)
{
//AdjustLookup(_XmlNode, path);
//if(path.Contains("Font")) Console.WriteLine("vlnFormatItem.SelectSingleNode {0},{1}", _XmlNode.Name == "Step" ? "Step." + _XmlNode.Attributes["Type"].Value : _XmlNode.Name, path);
return vlnFormatDocument.LookupSingleNode(_XmlNode, path);
return vlnFormatDocument.LookupSingleNode(XmlNode, path);
}
//public static string _LookUpNode;
//private static void AdjustLookup(XmlNode xmlNode,string path)
//{
// if (xmlNode.Name == "Step")
// {
// XmlAttribute attr = xmlNode.Attributes["Type"];
// if (attr != null) _LookUpNode = attr.Value;
// //Console.WriteLine("AdjustLookup Type = {0}/{1}", _LookUpNode, path);
// }
// else
// {
// //Console.WriteLine("AdjustLookup {0}", xmlNode.Name);
// }
//}
public XmlNode SelectSingleFontNode(string path)
{
return vlnFormatDocument.LookupSingleFontNode(_XmlNode, path);
}
public string Lookup(string path)
{
return vlnFormatDocument.Lookup(_XmlNode, path);
}
public string Lookup(string path, ref string local)
{
return (local != null? local : local = Lookup(path));
}
//public string StepLookup(string path)
//{
// return vlnFormatDocument.StepLookup(_XmlNode, path);
//}
public int? IntLookup(string path)
{
return vlnFormatDocument.IntLookup(_XmlNode, path);
}
public int? IntLookup(string path, ref int? local)
{
return (local != null ? local : local = IntLookup(path));
}
public T EnumLookup<T>(string path)
{
return vlnFormatDocument.EnumLookup<T>(_XmlNode, path);
}
public bool LazyLoad(ref LazyLoad<bool> ll, string xPath)
public XmlNode SelectSingleFontNode(string path) => vlnFormatDocument.LookupSingleFontNode(XmlNode, path);
public string Lookup(string path) => vlnFormatDocument.Lookup(XmlNode, path);
public string Lookup(string path, ref string local) => local ?? (local = Lookup(path));
public int? IntLookup(string path) => vlnFormatDocument.IntLookup(XmlNode, path);
public int? IntLookup(string path, ref int? local) => local != null ? local : local = IntLookup(path);
public T EnumLookup<T>(string path) => vlnFormatDocument.EnumLookup<T>(XmlNode, path);
public bool LazyLoad(ref LazyLoad<bool> ll, string xPath)
{
if (ll == null)
{
@@ -358,12 +243,9 @@ namespace VEPROMS.CSLA.Library
}
return ll.Value;
}
protected static bool RetrieveBool(XmlNode xn)
{
return xn != null && xn.InnerText.ToUpper() == "TRUE";
}
// a LaxyLoad that allows you to pass in the default setting
public bool LazyLoad(ref LazyLoad<bool> ll, string xPath, bool defaultReturn)
protected static bool RetrieveBool(XmlNode xn) => xn != null && xn.InnerText.ToUpper() == "TRUE";
// a LazyLoad that allows you to pass in the default setting
public bool LazyLoad(ref LazyLoad<bool> ll, string xPath, bool defaultReturn)
{
if (ll == null)
{
@@ -372,12 +254,9 @@ namespace VEPROMS.CSLA.Library
}
return ll.Value;
}
// if nothing is set for this node, then use the passed in default value
protected static bool RetrieveBool(XmlNode xn, bool defaultReturn)
{
return (xn != null) ? xn.InnerText.ToUpper() == "TRUE" : defaultReturn;
}
public string LazyLoad(ref LazyLoad<string> ll, string xPath)
// if nothing is set for this node, then use the passed in default value
protected static bool RetrieveBool(XmlNode xn, bool defaultReturn) => (xn != null) ? xn.InnerText.ToUpper() == "TRUE" : defaultReturn;
public string LazyLoad(ref LazyLoad<string> ll, string xPath)
{
if (ll == null)
{
@@ -386,16 +265,13 @@ namespace VEPROMS.CSLA.Library
}
return ll.Value;
}
protected static string RetrieveString(XmlNode xn)
{
return xn != null ? xn.InnerText : null;
}
public string MyPath
protected static string RetrieveString(XmlNode xn) => xn?.InnerText;
public string MyPath
{
get
{
StringBuilder sb = new StringBuilder();
XmlNode node = _XmlNode;
XmlNode node = XmlNode;
string prefix = "";
while (node != null)
{
@@ -429,14 +305,13 @@ namespace VEPROMS.CSLA.Library
int? value = null;
if (xn != null)
{
int iValue = 0;
if (!int.TryParse(xn.InnerText, out iValue))
{
if (xn.InnerText == "") return null;
Console.WriteLine(string.Format("'{0}'\r\n'{1}'\r\n'{2}' could not be converted to int?", MyFormat.FullName, MyPath + "/" + xPath, xn.InnerText));
throw (new Exception(string.Format("{0} = '{1}' could not be converted to int?", xPath, xn.InnerText)));
}
value = iValue;
if (!int.TryParse(xn.InnerText, out int iValue))
{
if (xn.InnerText == "") return null;
Console.WriteLine(string.Format("'{0}'\r\n'{1}'\r\n'{2}' could not be converted to int?", MyFormat.FullName, MyPath + "/" + xPath, xn.InnerText));
throw new Exception(string.Format("{0} = '{1}' could not be converted to int?", xPath, xn.InnerText));
}
value = iValue;
}
return value;
}
@@ -445,13 +320,12 @@ namespace VEPROMS.CSLA.Library
float? value = null;
if (xn != null)
{
float fValue = 0;
if (!float.TryParse(xn.InnerText, out fValue))
{
Console.WriteLine(string.Format("'{0}'\r\n'{1}'\r\n'{2}' could not be converted to float?", MyFormat.FullName, MyPath + "/" + xPath, xn.InnerText));
throw (new Exception(string.Format("{0} = '{1}' could not be converted to float?", xPath, xn.InnerText)));
}
value = fValue;
if (!float.TryParse(xn.InnerText, out float fValue))
{
Console.WriteLine(string.Format("'{0}'\r\n'{1}'\r\n'{2}' could not be converted to float?", MyFormat.FullName, MyPath + "/" + xPath, xn.InnerText));
throw new Exception(string.Format("{0} = '{1}' could not be converted to float?", xPath, xn.InnerText));
}
value = fValue;
}
return value;
}
@@ -460,9 +334,8 @@ namespace VEPROMS.CSLA.Library
{
if (ll == null)
{
XmlNode xn = this._XmlNode;
xn = SelectSingleNode(xPath);
if (xn == null)
XmlNode xn = SelectSingleNode(xPath);
if (xn == null)
ll = new LazyLoad<T?>(null);
else if (xn.Value == "")// No value specified - Use zero value if it is defined - GetName returns a null if it is not defined
ll = new LazyLoad<Nullable<T>>(Enum.GetName(typeof(T), 0) != null ? (Nullable<T>) Enum.Parse(typeof(T), "0") : null);
@@ -497,17 +370,10 @@ namespace VEPROMS.CSLA.Library
#region LazyLoad
public class LazyLoad<T>
{
public LazyLoad(T value)
{
_Value = value;
}
private T _Value;
public T Value
{
get { return _Value; }
set { _Value = value; }
}
}
public LazyLoad(T value) => Value = value;
public T Value { get; set; }
}
#endregion
#region vlnFormatList, new()
public class vlnFormatList<T> : List<T>, ICustomTypeDescriptor
@@ -522,9 +388,11 @@ namespace VEPROMS.CSLA.Library
_XmlNodeList = value;
foreach (XmlNode xn in _XmlNodeList)
{
T tt = new T();
tt.XmlNode = xn;
Add(tt);
T tt = new T
{
XmlNode = xn
};
Add(tt);
}
}
}
@@ -546,7 +414,7 @@ namespace VEPROMS.CSLA.Library
XmlNode node = _XmlNodeList[0]; // Get the first node in a list
vlnFormatDocument doc = null;
if (node != null)
doc = (node.OwnerDocument) as vlnFormatDocument; // Get the owner document as a vlnFormatDocument
doc = node.OwnerDocument as vlnFormatDocument; // Get the owner document as a vlnFormatDocument
if (doc != null)
_MyFormat = doc.MyFormat; // Get the Format associated with the vlnFormatDocument
}
@@ -557,36 +425,24 @@ namespace VEPROMS.CSLA.Library
_MyFormat = value;
}
}
#region ICustomTypeDescriptor
public String GetClassName()
{ return TypeDescriptor.GetClassName(this, true); }
public AttributeCollection GetAttributes()
{ return TypeDescriptor.GetAttributes(this, true); }
public String GetComponentName()
{ return TypeDescriptor.GetComponentName(this, true); }
public TypeConverter GetConverter()
{ return TypeDescriptor.GetConverter(this, true); }
public EventDescriptor GetDefaultEvent()
{ return TypeDescriptor.GetDefaultEvent(this, true); }
public PropertyDescriptor GetDefaultProperty()
{ return TypeDescriptor.GetDefaultProperty(this, true); }
public object GetEditor(Type editorBaseType)
{ return TypeDescriptor.GetEditor(this, editorBaseType, true); }
public EventDescriptorCollection GetEvents(Attribute[] attributes)
{ return TypeDescriptor.GetEvents(this, attributes, true); }
public EventDescriptorCollection GetEvents()
{ return TypeDescriptor.GetEvents(this, true); }
public object GetPropertyOwner(PropertyDescriptor pd)
{ return this; }
public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{ return GetProperties(); }
public virtual PropertyDescriptorCollection GetProperties()
#region ICustomTypeDescriptor
public string GetClassName() => TypeDescriptor.GetClassName(this, true);
public AttributeCollection GetAttributes() => TypeDescriptor.GetAttributes(this, true);
public string GetComponentName() => TypeDescriptor.GetComponentName(this, true);
public TypeConverter GetConverter() => TypeDescriptor.GetConverter(this, true);
public EventDescriptor GetDefaultEvent() => TypeDescriptor.GetDefaultEvent(this, true);
public PropertyDescriptor GetDefaultProperty() => TypeDescriptor.GetDefaultProperty(this, true);
public object GetEditor(Type editorBaseType) => TypeDescriptor.GetEditor(this, editorBaseType, true);
public EventDescriptorCollection GetEvents(Attribute[] attributes) => TypeDescriptor.GetEvents(this, attributes, true);
public EventDescriptorCollection GetEvents() => TypeDescriptor.GetEvents(this, true);
public object GetPropertyOwner(PropertyDescriptor pd) => this;
public PropertyDescriptorCollection GetProperties(Attribute[] attributes) => GetProperties();
public virtual PropertyDescriptorCollection GetProperties()
{
// Create a collection object to hold property descriptors
PropertyDescriptorCollection pds = new PropertyDescriptorCollection(null);
// Iterate the list
int i = 0;
for (i = 0; i < this.Count; i++)
// Iterate the list
for (int i = 0; i < Count; i++)
{
// Create a property descriptor for the item and add to the property descriptor collection
pds.Add(new vlnPropertyDescriptor<vlnFormatList<T>, T>(this, i));
@@ -601,13 +457,10 @@ namespace VEPROMS.CSLA.Library
public class vlnIndexedFormatList<T> : vlnFormatList<T>, ICustomTypeDescriptor
where T : vlnFormatItem,IVlnIndexedFormatItem, new()
{
public vlnIndexedFormatList(XmlNodeList xmlNodeList,IFormatOrFormatInfo myFormat) : base(xmlNodeList)
{
MyFormat = myFormat;
}
public vlnIndexedFormatList() : base() { }
public virtual vlnIndexedFormatList<T> InheritedList { get { return null; } }
public new T this[int index]
public vlnIndexedFormatList(XmlNodeList xmlNodeList, IFormatOrFormatInfo myFormat) : base(xmlNodeList) => MyFormat = myFormat;
public vlnIndexedFormatList() : base() { }
public virtual vlnIndexedFormatList<T> InheritedList => null;
public new T this[int index]
{
get
{
@@ -620,8 +473,6 @@ namespace VEPROMS.CSLA.Library
if (ttlParent != null)
return ttlParent[index];
return null;
// None found - Can I find it in another format?
return null;
}
}
public int MaxIndex
@@ -657,36 +508,25 @@ namespace VEPROMS.CSLA.Library
return max;
}
}
#region ICustomTypeDescriptor
public String GetClassName()
{ return TypeDescriptor.GetClassName(this, true); }
public AttributeCollection GetAttributes()
{ return TypeDescriptor.GetAttributes(this, true); }
public String GetComponentName()
{ return TypeDescriptor.GetComponentName(this, true); }
public TypeConverter GetConverter()
{ return TypeDescriptor.GetConverter(this, true); }
public EventDescriptor GetDefaultEvent()
{ return TypeDescriptor.GetDefaultEvent(this, true); }
public PropertyDescriptor GetDefaultProperty()
{ return TypeDescriptor.GetDefaultProperty(this, true); }
public object GetEditor(Type editorBaseType)
{ return TypeDescriptor.GetEditor(this, editorBaseType, true); }
public EventDescriptorCollection GetEvents(Attribute[] attributes)
#region ICustomTypeDescriptor
public new string GetClassName() => TypeDescriptor.GetClassName(this, true);
public new AttributeCollection GetAttributes() => TypeDescriptor.GetAttributes(this, true);
public new string GetComponentName() => TypeDescriptor.GetComponentName(this, true);
public new TypeConverter GetConverter() => TypeDescriptor.GetConverter(this, true);
public new EventDescriptor GetDefaultEvent() => TypeDescriptor.GetDefaultEvent(this, true);
public new PropertyDescriptor GetDefaultProperty() => TypeDescriptor.GetDefaultProperty(this, true);
public new object GetEditor(Type editorBaseType) => TypeDescriptor.GetEditor(this, editorBaseType, true);
public new EventDescriptorCollection GetEvents(Attribute[] attributes)
{ return TypeDescriptor.GetEvents(this, attributes, true); }
public EventDescriptorCollection GetEvents()
{ return TypeDescriptor.GetEvents(this, true); }
public object GetPropertyOwner(PropertyDescriptor pd)
{ return this; }
public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{ return GetProperties(); }
public virtual PropertyDescriptorCollection GetProperties()
public new EventDescriptorCollection GetEvents() => TypeDescriptor.GetEvents(this, true);
public new object GetPropertyOwner(PropertyDescriptor pd) => this;
public new PropertyDescriptorCollection GetProperties(Attribute[] attributes) => GetProperties();
public new virtual PropertyDescriptorCollection GetProperties()
{
// Create a collection object to hold property descriptors
PropertyDescriptorCollection pds = new PropertyDescriptorCollection(null);
// Iterate the list
int i = 0;
for (i = 0; i < this.Count; i++)
for (int i = 0; i < Count; i++)
{
// Create a property descriptor for the item and add to the property descriptor collection
pds.Add(new vlnPropertyDescriptor<vlnFormatList<T>, T>(this, i));
@@ -701,14 +541,11 @@ namespace VEPROMS.CSLA.Library
public class vlnNamedFormatList<T> : vlnFormatList<T>, ICustomTypeDescriptor
where T : vlnFormatItem, IVlnNamedFormatItem, new()
{
public vlnNamedFormatList(XmlNodeList xmlNodeList, IFormatOrFormatInfo myFormat)
: base(xmlNodeList)
{
MyFormat = myFormat;
}
public vlnNamedFormatList() : base() { }
public virtual vlnNamedFormatList<T> InheritedList { get { return null; } }
public new T this[string name]
public vlnNamedFormatList(XmlNodeList xmlNodeList, IFormatOrFormatInfo myFormat)
: base(xmlNodeList) => MyFormat = myFormat;
public vlnNamedFormatList() : base() { }
public virtual vlnNamedFormatList<T> InheritedList => null;
public T this[string name]
{
get
{
@@ -721,8 +558,6 @@ namespace VEPROMS.CSLA.Library
if (ttlParent != null)
return ttlParent[name];
return null;
// None found - Can I find it in another format?
return null;
}
}
public new T this[int index]
@@ -735,47 +570,27 @@ namespace VEPROMS.CSLA.Library
if (ttlParent != null)
return ttlParent[index];
return null;
// None found - Can I find it in another format?
return null;
}
}
public new int Count
{
get
{
return base.Count;
}
}
#region ICustomTypeDescriptor
public String GetClassName()
{ return TypeDescriptor.GetClassName(this, true); }
public AttributeCollection GetAttributes()
{ return TypeDescriptor.GetAttributes(this, true); }
public String GetComponentName()
{ return TypeDescriptor.GetComponentName(this, true); }
public TypeConverter GetConverter()
{ return TypeDescriptor.GetConverter(this, true); }
public EventDescriptor GetDefaultEvent()
{ return TypeDescriptor.GetDefaultEvent(this, true); }
public PropertyDescriptor GetDefaultProperty()
{ return TypeDescriptor.GetDefaultProperty(this, true); }
public object GetEditor(Type editorBaseType)
{ return TypeDescriptor.GetEditor(this, editorBaseType, true); }
public EventDescriptorCollection GetEvents(Attribute[] attributes)
{ return TypeDescriptor.GetEvents(this, attributes, true); }
public EventDescriptorCollection GetEvents()
{ return TypeDescriptor.GetEvents(this, true); }
public object GetPropertyOwner(PropertyDescriptor pd)
{ return this; }
public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{ return GetProperties(); }
public virtual PropertyDescriptorCollection GetProperties()
public new int Count => base.Count;
#region ICustomTypeDescriptor
public new string GetClassName() => TypeDescriptor.GetClassName(this, true);
public new AttributeCollection GetAttributes() => TypeDescriptor.GetAttributes(this, true);
public new string GetComponentName() => TypeDescriptor.GetComponentName(this, true);
public new TypeConverter GetConverter() => TypeDescriptor.GetConverter(this, true);
public new EventDescriptor GetDefaultEvent() => TypeDescriptor.GetDefaultEvent(this, true);
public new PropertyDescriptor GetDefaultProperty() => TypeDescriptor.GetDefaultProperty(this, true);
public new object GetEditor(Type editorBaseType) => TypeDescriptor.GetEditor(this, editorBaseType, true);
public new EventDescriptorCollection GetEvents(Attribute[] attributes) => TypeDescriptor.GetEvents(this, attributes, true);
public new EventDescriptorCollection GetEvents() => TypeDescriptor.GetEvents(this, true);
public new object GetPropertyOwner(PropertyDescriptor pd) => this;
public new PropertyDescriptorCollection GetProperties(Attribute[] attributes) => GetProperties();
public new virtual PropertyDescriptorCollection GetProperties()
{
// Create a collection object to hold property descriptors
PropertyDescriptorCollection pds = new PropertyDescriptorCollection(null);
// Iterate the list
int i = 0;
for (i = 0; i < this.Count; i++)
for (int i = 0; i < Count; i++)
{
// Create a property descriptor for the item and add to the property descriptor collection
pds.Add(new vlnPropertyDescriptor<vlnFormatList<T>, T>(this, i));
@@ -793,16 +608,16 @@ namespace VEPROMS.CSLA.Library
{
private string Plural(string name)
{
if (name.EndsWith("y")) return name.Substring(0, name.Length - 1) + "ies";
if (name.EndsWith("ss")) return name + "es";
else return name + "s";
if (name.EndsWith("y")) return $"{name.Substring(0, name.Length - 1)}ies";
if (name.EndsWith("ss")) return $"{name}es";
else return $"{name}s";
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType)
{
if (destType == typeof(string) && value is T)
if (destType == typeof(string) && value is T vart)
{
// Return department and department role separated by comma.
return ((T)value).Count.ToString() + " " + (((T)value).Count == 1 ? typeof(C).Name : Plural(typeof(C).Name));
return $"{vart.Count} {(vart.Count == 1 ? typeof(C).Name : Plural(typeof(C).Name))}";
}
return base.ConvertTo(context, culture, value, destType);
}
@@ -815,17 +630,16 @@ namespace VEPROMS.CSLA.Library
{
private string Plural(string name)
{
if (name.EndsWith("y")) return name.Substring(0, name.Length - 1) + "ies";
if (name.EndsWith("ss")) return name + "es";
if (name.EndsWith("x")) return name + "es";
else return name + "s";
}
if (name.EndsWith("y")) return $"{name.Substring(0, name.Length - 1)}ies";
if (name.EndsWith("ss")) return $"{name}es";
return name.EndsWith("x") ? $"{name}es" : $"{name}s";
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType)
{
if (destType == typeof(string) && value is T)
if (destType == typeof(string) && value is T vart)
{
// Return department and department role separated by comma.
return ((T)value).MaxIndex.ToString() + " " + (((T)value).MaxIndex == 1 ? typeof(C).Name : Plural(typeof(C).Name));
return $"{vart.MaxIndex} {(vart.MaxIndex == 1 ? typeof(C).Name : Plural(typeof(C).Name))}";
}
return base.ConvertTo(context, culture, value, destType);
}
@@ -837,38 +651,23 @@ namespace VEPROMS.CSLA.Library
where C : vlnFormatItem, new()
{
protected C _Item = null;
public vlnPropertyDescriptor(T itemList, int index)
: base("#" + index.ToString(), null)
{
_Item = itemList[index];
}
public override bool CanResetValue(object component)
{ return true; }
public override Type ComponentType
{ get { return _Item.GetType(); } }
public override object GetValue(object component)
{ return _Item; }
public override bool IsReadOnly
{ get { return true; } }
public override Type PropertyType
{ get { return _Item.GetType(); } }
public override void ResetValue(object component)
public vlnPropertyDescriptor(T itemList, int index)
: base("#" + index.ToString(), null) => _Item = itemList[index];
public override bool CanResetValue(object component) => true;
public override Type ComponentType => _Item.GetType();
public override object GetValue(object component) => _Item;
public override bool IsReadOnly => true;
public override Type PropertyType => _Item.GetType();
public override void ResetValue(object component)
{ ;}
public override bool ShouldSerializeValue(object component)
{ return true; }
public override void SetValue(object component, object value)
public override bool ShouldSerializeValue(object component) => true;
public override void SetValue(object component, object value)
{ /*_Item = value*/;}
//public override AttributeCollection Attributes
//{ get { return new AttributeCollection(null); } }
public override string DisplayName
{ get { return _Item.GetPDDisplayName(); } }
public override string Description
{ get { return _Item.GetPDDescription(); } }
public override string Name
{ get { return _Item.GetPDName(); } }
public override string Category
{ get { return _Item.GetPDCategory(); } }
} // Class
public override string DisplayName => _Item.GetPDDisplayName();
public override string Description => _Item.GetPDDescription();
public override string Name => _Item.GetPDName();
public override string Category => _Item.GetPDCategory();
} // Class
#endregion
}
+2 -6
View File
@@ -1,12 +1,7 @@
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using Volian.Controls.Library;
using System.Reflection;
using LBWordLibrary;
using JR.Utils.GUI.Forms;
@@ -607,7 +602,8 @@ namespace Volian.Controls.Library
if (_In_DSOTabPanel_Enter) return;
//vlnStackTrace.ShowStack("DSOTabPanel_Enter {0} DocID {1} Index {2} {3}",_In_DSOTabPanel_Enter, this._MyDocumentInfo.DocID, _MyDisplayTabControl.MyBar.SelectedDockTab, sender.GetType().FullName);
_In_DSOTabPanel_Enter = true;
if (MyDisplayTabItem.MyItemInfo != null)
// B2026-074 only do this if we are not restoring save procedure tabs
if (MyDisplayTabItem.MyItemInfo != null && !_MyDisplayTabControl.LoadingSavedProcTabs)
_MyDisplayTabControl.OnItemSelectedChanged(this,new ItemSelectedChangedEventArgs(MyDisplayTabItem.MyItemInfo));
_MyEdWord.Focus();
_In_DSOTabPanel_Enter = false;
+2 -3
View File
@@ -7,7 +7,6 @@ using System.Drawing;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using Volian.Base.Library;
@@ -622,7 +621,7 @@ namespace Volian.Controls.Library
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// changed to return true if the RO FST got updated
public bool LoadTree(bool forceReload = false)
public bool LoadTree(IWin32Window mainForm, bool forceReload = false)
{
bool updatedROs = false;
@@ -653,7 +652,7 @@ namespace Volian.Controls.Library
}
else if (changedDocVersion && !askedAboutchangedDocVersion && !ROWorkingDraftAsk.ContainsWorkingDraft(_docVersionInfo.VersionID))
{
if (MessageBox.Show($"There exists a newer ROFST for this RO database that was loaded for other sets.\r\n\r\nDo you want to update this set's ROs to be consistent/use the latest loaded ROFST?", "Load ROs", MessageBoxButtons.YesNo) == DialogResult.Yes)
if (MessageBox.Show(mainForm,$"There exists a newer ROFST for this RO database that was loaded for other sets.\r\n\r\nDo you want to update this set's ROs to be consistent/use the latest loaded ROFST?", "Load ROs", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
InitialProgressBarMessage = "Updating ROs";
+1 -1
View File
@@ -747,7 +747,7 @@ namespace Volian.Controls.Library
this.cbxFndUnLnkROVals.Margin = new System.Windows.Forms.Padding(2);
this.cbxFndUnLnkROVals.Name = "cbxFndUnLnkROVals";
this.cbxFndUnLnkROVals.Size = new System.Drawing.Size(176, 19);
this.superTooltip1.SetSuperTooltip(this.cbxFndUnLnkROVals, new DevComponents.DotNetBar.SuperTooltipInfo("Find Linked Values", "", "Finding unlinked values does the search for a specific RO.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
this.superTooltip1.SetSuperTooltip(this.cbxFndUnLnkROVals, new DevComponents.DotNetBar.SuperTooltipInfo("Find Unlinked Values", "", "Finding unlinked values does the search for a specific RO.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
this.cbxFndUnLnkROVals.TabIndex = 2;
this.cbxFndUnLnkROVals.Text = "Find Unlinked Values of Selected RO";
//
@@ -1,12 +1,9 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using Volian.Controls.Library;
using DevComponents.DotNetBar;
using JR.Utils.GUI.Forms;
using Volian.Base.Library;
@@ -59,6 +56,9 @@ namespace Volian.Controls.Library
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
// B2026-074 added flag to use when restoring saved procedure tabs
public bool LoadingSavedProcTabs { get; set; } = false;
private static bool _SyncronizeEnahnced = false;
public static bool SyncronizeEnhanced
{
@@ -1282,6 +1282,7 @@ namespace Volian.Controls.Library
get { return _SyncEnhancedDocuments; }
set { _SyncEnhancedDocuments = value; }
}
public void HandleChangeId(ItemInfo myItemInfo, DisplayTabItem pg)
{
if (myItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ChangeBarData.ChangeIds)