using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Collections; using System.Collections.ObjectModel; using System.ComponentModel; using System.Drawing; using System.Runtime.Intrinsics.Arm; using System.Xml.Serialization; using WebWindowJWD; using WebWindowJWD.Json; using static WebWindowJWD.Json.WindowConst; namespace WebWindowJWD { public class Window { public event EventHandler OnPreview = delegate { }; private String m_sProfilePath; public string sProfilePath { get { return m_sProfilePath; } set { m_sProfilePath = value; } } private ObservableCollection m_AreaList = new ObservableCollection(); public ObservableCollection AreaList { get { return m_AreaList; } set { m_AreaList = value; } } internal JsonWindow Serialize() { JsonWindow JsonWindow = new JsonWindow(sProfilePath); foreach (var Area in AreaList) JsonWindow.AreaList.Add(Area.Serialize()); return JsonWindow; } internal string sSerialized() { return JsonConvert.SerializeObject(Serialize(), Formatting.Indented); } internal void OnUpdatePreview(string sJwd) { OnPreviewEventArgs e = new OnPreviewEventArgs(sJwd); EventHandler handler = OnPreview; if (handler != null) { handler(this, e); } } } public class OnPreviewEventArgs : EventArgs { public string sJwd; public OnPreviewEventArgs(string sJwd) { this.sJwd = sJwd; } } public abstract class Area { protected Window m_ParentWindow; public Window ParentWindow { get { return m_ParentWindow; } } protected int m_nAreaId = -1; public int nAreaId { get { return m_nAreaId; } set { m_nAreaId = value; m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } private List m_AreaList = new List(); public List AreaList { get { return m_AreaList; } set { m_AreaList = value; } } private AreaTypes m_AreaType; public AreaTypes AreaType { get { return m_AreaType; } set { m_AreaType = value; //m_delDrawWindow(); } } internal void SetAreaType(AreaTypes AreaType) { m_AreaType = AreaType; } private Area m_ParentArea; public Area ParentArea { get { return m_ParentArea; } } internal void SetParentArea(Area ParentArea) { m_ParentArea = ParentArea; } public Area(Area ParentArea, Window ParentWindow) { m_ParentWindow = ParentWindow; m_ParentArea = ParentArea; } internal abstract JsonArea Serialize(); } public class Frame : Area { private ObservableCollection m_ShapeList = new ObservableCollection { new IdNameStruct((int)Shapes.RECTANGLE, "Rectangle"), new IdNameStruct((int)Shapes.RIGHTCHAMFER, "Right Chamfer"), new IdNameStruct((int)Shapes.LEFTCHAMFER, "Left Chamfer"), new IdNameStruct((int)Shapes.DOUBLECHAMFER, "Double Chamfer"), new IdNameStruct((int)Shapes.ARC, "Arc"), new IdNameStruct((int)Shapes.ARC_FULL, "Arc Full"), new IdNameStruct((int)Shapes.DOUBLEARC, "Double Arc"), new IdNameStruct((int)Shapes.TRIANGLE, "Triangle") }; public ObservableCollection ShapeList { get { return m_ShapeList; } } private Shapes m_Shape; public Shapes Shape { get { return m_Shape; } } public int SelShapeIndex { get { return IdNameStruct.IndFromId((int)m_Shape, m_ShapeList); } set { Shapes SelShape = (Shapes)IdNameStruct.IdFromInd(value, m_ShapeList); if (m_Shape != SelShape) { // verifico parametri Dimension DimensionList.Clear(); // aggiungo Dimensioni switch (SelShape) { case Shapes.RECTANGLE: case Shapes.ARC_FULL: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Height", 1800, true)); break; } case Shapes.RIGHTCHAMFER: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Left Height", 1800, true)); DimensionList.Add(new FrameDimension(this, 3, "Right Height", 1500, true)); break; } case Shapes.LEFTCHAMFER: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Left Height", 1500, true)); DimensionList.Add(new FrameDimension(this, 3, "Right Height", 1800, true)); break; } case Shapes.DOUBLECHAMFER: case Shapes.ARC: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Height", 1500, true)); DimensionList.Add(new FrameDimension(this, 3, "Full Height", 1800, true)); break; } case Shapes.DOUBLEARC: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Height", 1500, true)); DimensionList.Add(new FrameDimension(this, 3, "Full Height", 2400, true)); break; } case Shapes.TRIANGLE: { DimensionList.Add(new FrameDimension(this, 1, "Width", 2000, true)); DimensionList.Add(new FrameDimension(this, 2, "Height", 1500, true)); DimensionList.Add(new FrameDimension(this, 3, "Height projection", 0, true)); break; } case Shapes.CUSTOM: { DimensionList.Clear(); break; } } // aggiungo Joint m_JointList.Clear(); switch (SelShape) { case Shapes.RECTANGLE: case Shapes.RIGHTCHAMFER: case Shapes.LEFTCHAMFER: case Shapes.DOUBLECHAMFER: case Shapes.ARC: case Shapes.DOUBLEARC: { JointList.Add(new Joint(this, 1, Joints.FULL_H)); JointList.Add(new Joint(this, 2, Joints.FULL_H)); JointList.Add(new Joint(this, 3, Joints.FULL_H)); JointList.Add(new Joint(this, 4, Joints.FULL_H)); break; } case Shapes.ARC_FULL: { JointList.Add(new Joint(this, 1, Joints.FULL_H)); JointList.Add(new Joint(this, 2, Joints.FULL_H)); JointList.Add(new Joint(this, 3, Joints.ANGLED)); JointList.Add(new Joint(this, 4, Joints.ANGLED)); break; } case Shapes.TRIANGLE: { JointList.Add(new Joint(this, 1, Joints.FULL_H)); JointList.Add(new Joint(this, 2, Joints.FULL_H)); JointList.Add(new Joint(this, 3, Joints.ANGLED)); break; } case Shapes.CUSTOM: { JointList.Clear(); break; } } m_Shape = SelShape; } m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } internal void SetSelShape(Shapes Value) { DimensionList.Clear(); // aggiungo Dimension switch (Value) { case Shapes.RECTANGLE: case Shapes.ARC_FULL: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Height", 1800, true)); break; } case Shapes.RIGHTCHAMFER: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Left Height", 1800, true)); DimensionList.Add(new FrameDimension(this, 3, "Right Height", 1500, true)); break; } case Shapes.LEFTCHAMFER: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Left Height", 1500, true)); DimensionList.Add(new FrameDimension(this, 3, "Right Height", 1800, true)); break; } case Shapes.DOUBLECHAMFER: case Shapes.ARC: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Height", 1500, true)); DimensionList.Add(new FrameDimension(this, 3, "Full Height", 1800, true)); break; } case Shapes.DOUBLEARC: { DimensionList.Add(new FrameDimension(this, 1, "Width", 1500, true)); DimensionList.Add(new FrameDimension(this, 2, "Height", 1500, true)); DimensionList.Add(new FrameDimension(this, 3, "Full Height", 2400, true)); break; } case Shapes.TRIANGLE: { DimensionList.Add(new FrameDimension(this, 1, "Width", 2000, true)); DimensionList.Add(new FrameDimension(this, 2, "Height", 1500, true)); DimensionList.Add(new FrameDimension(this, 3, "Height projection", 0, true)); break; } case Shapes.CUSTOM: { DimensionList.Clear(); break; } } // aggiungo Joint int nJointQty = 4; switch (Value) { case Shapes.RECTANGLE: case Shapes.RIGHTCHAMFER: case Shapes.LEFTCHAMFER: case Shapes.DOUBLECHAMFER: case Shapes.ARC: case Shapes.DOUBLEARC: { JointList.Add(new Joint(this, 1, Joints.FULL_H)); JointList.Add(new Joint(this, 2, Joints.FULL_H)); JointList.Add(new Joint(this, 3, Joints.FULL_H)); JointList.Add(new Joint(this, 4, Joints.FULL_H)); break; } case Shapes.ARC_FULL: { JointList.Add(new Joint(this, 1, Joints.FULL_H)); JointList.Add(new Joint(this, 2, Joints.FULL_H)); JointList.Add(new Joint(this, 3, Joints.ANGLED)); JointList.Add(new Joint(this, 4, Joints.ANGLED)); break; } case Shapes.TRIANGLE: { JointList.Add(new Joint(this, 1, Joints.FULL_H)); JointList.Add(new Joint(this, 2, Joints.FULL_H)); JointList.Add(new Joint(this, 3, Joints.ANGLED)); break; } case Shapes.CUSTOM: { JointList.Clear(); break; } } m_Shape = Value; } private ObservableCollection m_DimensionList = new ObservableCollection(); public ObservableCollection DimensionList { get { return m_DimensionList; } } private ObservableCollection m_JointList = new ObservableCollection(); public ObservableCollection JointList { get { return m_JointList; } set { m_JointList = value; } } private bool m_bBottomRail; public bool BottomRail { get { return m_bBottomRail; } set { m_bBottomRail = value; m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } internal void SetBottomRail(bool bBottomRail) { m_bBottomRail = bBottomRail; } private int m_nBottomRailQty = 0; public int BottomRailQty { get { return m_nBottomRailQty; } set { m_nBottomRailQty = value; if (m_nBottomRailQty > 0) { m_bBottomRail = true; } else { m_bBottomRail = false; } m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } internal void SetBottomRailQty(int nBottomRailQty) { m_nBottomRailQty = nBottomRailQty; } private ObservableCollection m_Outline; public ObservableCollection Outline { get { return m_Outline; } set { m_Outline = value; } } public Frame(Area ParentArea, Window ParentWindow) : base(ParentArea, ParentWindow) { } internal static Area CreateFrame(Window Window) { Frame NewFrame = new Frame(null, Window); NewFrame.SetAreaType(AreaTypes.FRAME); NewFrame.SetSelShape(Shapes.RECTANGLE); NewFrame.SetBottomRail(false); NewFrame.SetBottomRailQty(0); return NewFrame; } private LuaShapes ConvertShape(Shapes value) { switch (value) { case Shapes.RECTANGLE: { return LuaShapes.RECT; } case Shapes.RIGHTCHAMFER: { return LuaShapes.CHAMFER_SIDE; } case Shapes.LEFTCHAMFER: { return LuaShapes.CHAMFER_SIDE; } case Shapes.DOUBLECHAMFER: { return LuaShapes.CHAMFER; } case Shapes.ARC: { return LuaShapes.SEGMENTAL_ARC; } case Shapes.ARC_FULL: { return LuaShapes.ROUND_ARC; } case Shapes.DOUBLEARC: { return LuaShapes.POINTED_ARC; } case Shapes.TRIANGLE: { return LuaShapes.TRIANGLE; } default: { return LuaShapes.RECT; } } } internal override JsonArea Serialize() { JsonFrame JsonFrame = new JsonFrame(m_Shape, m_bBottomRail, m_nBottomRailQty); foreach (var Dimension in DimensionList) JsonFrame.DimensionList.Add(Dimension.Serialize()); foreach (var Joint in JointList) JsonFrame.JointList.Add(Joint.Serialize()); foreach (var Area in AreaList) JsonFrame.AreaList.Add(Area.Serialize()); return JsonFrame; } } public class Sash : Area { public int nSashQty { get { return m_SashList.Count > 0 ? m_SashList.Count : 1; } set { if (value > m_SashList.Count) { // recupero larghezza ultimo double dLastDimension = 100; double dNewDimension = 100; if (m_SashList.Count > 0) { dLastDimension = m_SashList[m_SashList.Count - 1].dDimension; dNewDimension = dLastDimension / (value + 1 - nSashQty); m_SashList[m_SashList.Count - 1].SetDimension(dNewDimension); } else dNewDimension = dLastDimension / (value + 1 - nSashQty); // aggiungo area Sash di default for (var SplitIndex = m_SashList.Count; SplitIndex <= value - 1; SplitIndex++) { SashList.Add(new SashDimension(dNewDimension, true, this)); } } else if (value < m_SashList.Count) { double dLastDimension = 0; for (var SplitIndex = m_SashList.Count - 1; SplitIndex >= value; SplitIndex += -1) { dLastDimension += m_SashList[SplitIndex].dDimension; SashList.RemoveAt(SplitIndex); } dLastDimension += m_SashList[SashList.Count - 1].dDimension; SashList[SashList.Count - 1].SetDimension(dLastDimension); } if (m_SashList.Count == 1) { List ContentArea = new List(); while (AreaList.Count > 0) { if (AreaList.Count == 1 & AreaList[0].AreaList.Count > 0) { foreach (Area selArea in AreaList[0].AreaList) { ContentArea.Add(selArea); } } AreaList.Remove(AreaList[AreaList.Count - 1]); } if (ContentArea.Count > 0) { AreaList = ContentArea; } } else { List ContentArea = new List(); if (AreaList.Count == 1 & SashList.Count > AreaList.Count) { ContentArea.Add(AreaList.ElementAt(0)); AreaList.Clear(); } for (int SplitIndex = AreaList.Count; SplitIndex <= SashList.Count - 1; SplitIndex++) { AreaList.Add(Splitted.CreateSplitted(this)); } for (int SplitIndex = SashList.Count; SplitIndex <= AreaList.Count() - 1; SplitIndex++) { AreaList.Remove(AreaList[AreaList.Count - 1]); } if (AreaList[AreaList.Count - 1].AreaList.Count == 0) { if (ContentArea.Count > 0) { for (int SplitIndex = 0; SplitIndex <= AreaList.Count() - 1; SplitIndex++) { if (SplitIndex == 0) { AreaList[0].AreaList.Add(ContentArea[0]); } else { AreaList[SplitIndex].AreaList.Add(Fill.CreateFill(AreaList[SplitIndex], FillTypes.GLASS)); } } } else { AreaList[AreaList.Count - 1].AreaList.Add(Fill.CreateFill(AreaList[AreaList.Count - 1], FillTypes.GLASS)); //AreaList[AreaList.Count - 1] = AreaList[AreaList.Count - 2]; } } } //RefreshHardwareList(); RefreshHardwareOptionList(); //SetFirstHardware(); m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } internal void SetSashQty(int Qty) { if (Qty > m_SashList.Count) { // recupero larghezza ultimo double dLastDimension = 100; double dNewDimension = 100; if (m_SashList.Count > 0) { dLastDimension = m_SashList[m_SashList.Count - 1].dDimension; dNewDimension = dLastDimension / (Qty + 1 - nSashQty); m_SashList[m_SashList.Count - 1].dDimension = dNewDimension; } else dNewDimension = dLastDimension / (Qty + 1 - nSashQty); // aggiungo area Sash di default for (var SplitIndex = m_SashList.Count; SplitIndex <= Qty - 1; SplitIndex++) SashList.Add(new SashDimension(dNewDimension, true, this)); } else if (Qty < m_SashList.Count) { for (var SplitIndex = m_SashList.Count - 1; SplitIndex >= Qty; SplitIndex += -1) SashList.RemoveAt(SplitIndex); } } private List m_OrientationSashTypeList = new List { new IdNameStruct((int)OrientationSash.VERTICAL, "Vertical"), new IdNameStruct((int)OrientationSash.HORIZONTAL, "Horizontal"), }; public List OrientationSashTypeList { get { return m_OrientationSashTypeList; } } private OrientationSash m_SelOrientationSashType; public OrientationSash SelOrientationSashType { get { return m_SelOrientationSashType; } set { m_SelOrientationSashType = value; } } public OrientationSash OrientationSashType { get { return (OrientationSash)m_SelOrientationSashType; } } internal void SetOrientationSashType(OrientationSash value) { m_SelOrientationSashType = value; } public int SelOrientationSashTypeIndex { get { return IdNameStruct.IndFromId((int)m_SelOrientationSashType, m_OrientationSashTypeList); } set { m_SelOrientationSashType = (OrientationSash)IdNameStruct.IdFromInd(value, m_OrientationSashTypeList); if (value == 0) { m_bIsSashVertical = true; } else { m_bIsSashVertical = false; } m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } private bool m_bIsSashVertical; public bool bIsSashVertical { get { return m_bIsSashVertical; } set { m_bIsSashVertical = value; } } internal void SetIsSashVertical(bool IsSashVertical) { m_bIsSashVertical = IsSashVertical; if (IsSashVertical) { m_SelOrientationSashType = OrientationSash.VERTICAL; } else { m_SelOrientationSashType = OrientationSash.HORIZONTAL; } } private bool m_bIsMeasureGlass; public bool bIsMeasureGlass { get { return m_bIsMeasureGlass; } set { m_bIsMeasureGlass = value; } } internal void SetIsMeasureGlass(bool IsMeasureGlass) { m_bIsMeasureGlass = IsMeasureGlass; } private ObservableCollection m_SashList = new ObservableCollection(); public ObservableCollection SashList { get { return m_SashList; } set { m_SashList = value; } } private SashTypes m_SashType; public SashTypes SashType { get { return m_SashType; } set { m_SashType = value; } } internal void SetSashType(SashTypes SashType) { m_SashType = SashType; } private ObservableCollection m_JointList = new ObservableCollection(); public ObservableCollection JointList { get { return m_JointList; } set { m_JointList = value; } } private bool m_bSashBottomRail; public bool SashBottomRail { get { return m_bSashBottomRail; } set { m_bSashBottomRail = value; } } internal void SetSashBottomRail(bool bBottomRail) { m_bSashBottomRail = bBottomRail; } private int m_nSashBottomRailQty; public int SashBottomRailQty { get { return m_nSashBottomRailQty; } set { m_nSashBottomRailQty = value; if (m_nSashBottomRailQty > 0) { m_bSashBottomRail = true; } else { m_bSashBottomRail = false; } m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } internal void SetSashBottomRailQty(int nBottomRailQty) { m_nSashBottomRailQty = nBottomRailQty; } private bool m_bIsPercentage = true; public bool bIsPercentage { get { return m_bIsPercentage; } } private ObservableCollection m_HardwareList = new ObservableCollection(); public ObservableCollection HardwareList { get { return m_HardwareList; } } private Hardware m_SelHardware; //public Hardware SelHardware //{ // get // { // return m_SelHardware; // } // set // { // m_SelHardware = value; // if (m_SelHardware != null && m_SelHardware.sId != "000000") // { // string sHwdOptPath = ""; // var gf = EgtLuaCreateGlobTable("WDG"); // var tft = EgtLuaSetGlobIntVar("WDG.AREAID", m_nAreaId); // var tfy = EgtLuaSetGlobStringVar("WDG.HDWFAVOURITE", value.sId); // SashDimension HandleSash = m_SashList.FirstOrDefault(x => x.bHasHandle); // string sHandle = "Dx"; // switch (GetOpeningSide(HandleSash.OpeningType)) // { // case object _ when OpeningSides.LEFT: // { // sHandle = "Sx"; // break; // } // case object _ when OpeningSides.RIGHT: // { // sHandle = "Dx"; // break; // } // } // var tfd = EgtLuaSetGlobStringVar("WDG.HDWHANDLE", sHandle); // var tlt = EgtLuaCallFunction("WinCreate_GetHardwareOptionPath"); // var tltf = EgtLuaGetGlobStringVar("WDG.HWDOPTPATH", sHwdOptPath); // if (!string.IsNullOrWhiteSpace(sHwdOptPath)) // { // XmlSerializer serializer = new XmlSerializer(typeof(ParametriOpzioni)); // ParametriOpzioni HwdOptions = null/* TODO Change to default(_) if this is not a reference type */; // string sHdwOptPath = Path.ChangeExtension(sHwdOptPath, ".opt"); // bool bHdwOptFound = false; // for (var WaitIndex = 0; WaitIndex <= 100; WaitIndex++) // { // if (File.Exists(sHdwOptPath)) // { // bHdwOptFound = true; // break; // } // System.Threading.Thread.Sleep(100); // } // if (bHdwOptFound) // { // string sHwdOptText = ""; // try // { // sHwdOptText = File.ReadAllText(sHdwOptPath); // } // catch (Exception ex) // { // EgtOutLog("Hardware file opt not found or read!"); // } // if (!string.IsNullOrWhiteSpace(sHwdOptText)) // { // using (TextReader reader = new StringReader(sHwdOptText)) // { // HwdOptions = serializer.Deserialize(reader); // } // if (!IsNothing(HwdOptions)) // { // m_HwdOptionList.Clear(); // foreach (var HdwOption in HwdOptions.Items) // m_HwdOptionList.Add(new AGBOption(HdwOption)); // NotifyPropertyChanged(nameof(HwdOptionList)); // } // } // } // var ud = EgtLuaResetGlobVar("WDG"); // } // } // } //} //internal void SetSelHardware(Hardware value) //{ // m_SelHardware = value; //} //internal void SetSelHardwareFromId(string sId) //{ // m_SelHardware = m_HardwareList.FirstOrDefault(x => x.sId == sId); // if (IsNothing(m_SelHardware)) // m_SelHardware = m_HardwareList(0); //} //internal void SetFirstHardware() //{ // if (m_HardwareList.Count > 0) // { // m_SelHardware = m_HardwareList(0); // } //} private ObservableCollection m_HwdOptionList = new ObservableCollection(); public ObservableCollection HwdOptionList { get { return m_HwdOptionList; } } public Sash(Area ParentArea, Window ParentWindow) : base(ParentArea, ParentWindow) { } internal static Sash CreateSash(Area Area) { Sash NewSash = new Sash(Area, Area.ParentWindow); NewSash.SetAreaType(AreaTypes.SASH); NewSash.SetSashQty(1); NewSash.SetOrientationSashType(OrientationSash.VERTICAL); NewSash.SetIsSashVertical(true); // recupero numero di lati dell'area contenitore //int nOutlineLayerId = EgtGetFirstNameInGroup(Area.nAreaId, WIN_OUTLINE); //int nJointQty = EgtGetGroupObjs(nOutlineLayerId); //for (var JointIndex = 0; JointIndex <= nJointQty - 1; JointIndex++) // NewSash.JointList.Add(new Joint(JointIndex + 1, Joints.FULL_H)); NewSash.SetSashBottomRail(false); NewSash.SetSashBottomRailQty(0); //NewSash.RefreshHardwareList(); NewSash.RefreshHardwareOptionList(); //NewSash.SetFirstHardware(); return NewSash; } internal OpeningTypes GetOpeningType(Openings OpeningType) { switch (OpeningType) { case Openings.TURNONLY_LEFT: case Openings.TURNONLY_RIGHT: { return OpeningTypes.TURNONLY; } case Openings.TILTTURN_LEFT: case Openings.TILTTURN_RIGHT: { return OpeningTypes.TILTTURN; } case Openings.TILTONLY_TOP: case Openings.TILTONLY_BOTTOM: { return OpeningTypes.TILTONLY; } case Openings.PIVOT: { return OpeningTypes.PIVOT; } case Openings.FIXED: { return OpeningTypes.FIXED; } case Openings.COMPLANARSLIDE_LEFT: case Openings.COMPLANARSLIDE_RIGHT: { return OpeningTypes.COMPLANARSLIDE; } case Openings.LIFTSLIDE_LEFT: case Openings.LIFTSLIDE_RIGHT: { return OpeningTypes.LIFTSLIDE; } default: { return OpeningTypes.NULL; } } } private string ConvertOpeningType() { if (m_SashList.Any(x => GetOpeningType(x.OpeningType) == OpeningTypes.TILTTURN)) return "AR"; else switch (GetOpeningType(m_SashList[0].OpeningType)) { case OpeningTypes.TURNONLY: { return "AB"; } case OpeningTypes.TILTONLY: { return "VA"; } case OpeningTypes.PIVOT: { return "BI"; } case OpeningTypes.COMPLANARSLIDE: { return "CO"; } case OpeningTypes.LIFTSLIDE: { return "AS"; } default: { return ""; } } } //internal void RefreshHardwareList() //{ // m_HardwareList.Clear(); // string sSashShape = FindSashShape(); // string sOpeningType = ConvertOpeningType(); // m_HardwareList = new ObservableCollection(from Hardware in Map.refManageWindowVM.HardwareList // where Hardware.sId == "000000" || (Hardware.nSashQty == nSashQty && Hardware.sShape == sSashShape && Hardware.sOpeningType == sOpeningType) // select Hardware); //} internal void RefreshHardwareOptionList() { m_HwdOptionList.Clear(); } internal OpeningSides GetOpeningSide(Openings OpeningType) { switch (OpeningType) { case Openings.TURNONLY_LEFT: case Openings.TILTTURN_LEFT: case Openings.TILTONLY_TOP: case Openings.COMPLANARSLIDE_LEFT: case Openings.LIFTSLIDE_LEFT: { return OpeningSides.LEFT; } case Openings.TURNONLY_RIGHT: case Openings.TILTTURN_RIGHT: case Openings.TILTONLY_BOTTOM: case Openings.COMPLANARSLIDE_RIGHT: case Openings.LIFTSLIDE_RIGHT: { return OpeningSides.RIGHT; } default: { return OpeningSides.NULL; } } } internal override JsonArea Serialize() { JsonSash JsonSash = new JsonSash(m_bIsSashVertical, m_SashType, m_bSashBottomRail, m_nSashBottomRailQty/*, m_SelHardware.sId*/); foreach (var SashDimension in SashList) JsonSash.SashList.Add(SashDimension.Serialize()); foreach (var Joint in JointList) JsonSash.JointList.Add(Joint.Serialize()); foreach (var Area in AreaList) JsonSash.AreaList.Add(Area.Serialize()); return JsonSash; } } public class Split : Area { public int nSplitQty { get { return m_SplitPositionList.Count > 0 ? m_SplitPositionList.Count - 1 : 0; } set { if (value > m_SplitPositionList.Count - 1) { // recupero larghezza ultimo double dLastDimension = 100; double dNewDimension = 100; if (m_SplitPositionList.Count > 0) { dLastDimension = m_SplitPositionList[m_SplitPositionList.Count - 1].dDimension; dNewDimension = dLastDimension / (value + 1 - nSplitQty); m_SplitPositionList[m_SplitPositionList.Count - 1].SetDimension(dNewDimension); } else dNewDimension = dLastDimension / (value + 1 - nSplitQty); // aggiungo area Split di default for (var SplitIndex = m_SplitPositionList.Count; SplitIndex <= value; SplitIndex++) SplitPositionList.Add(new SplitDimension(dNewDimension, true, this)); } else if (value < m_SplitPositionList.Count - 1) { double dLastDimension = 0; for (var SplitIndex = m_SplitPositionList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1) { dLastDimension += m_SplitPositionList[SplitIndex].dDimension; SplitPositionList.RemoveAt(SplitIndex); } dLastDimension += m_SplitPositionList[SplitPositionList.Count - 1].dDimension; SplitPositionList[SplitPositionList.Count - 1].SetDimension(dLastDimension); } for (var SplitIndex = AreaList.Count; SplitIndex <= SplitPositionList.Count - 1; SplitIndex++) { AreaList.Add(Splitted.CreateSplitted(this)); AreaList.Last().AreaList.Add(Fill.CreateFill(AreaList.Last(), FillTypes.GLASS)); } for (var SplitIndex = SplitPositionList.Count; SplitIndex <= AreaList.Count - 1; SplitIndex++) { AreaList.Remove(AreaList[AreaList.Count - 1]); } m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } internal void SetSplitQty(int Qty, bool NotifyProperty = false) { if (Qty > m_SplitPositionList.Count) { // recupero larghezza ultimo double dLastDimension = 100; double dNewDimension = 100; if (m_SplitPositionList.Count > 0) { dLastDimension = m_SplitPositionList[m_SplitPositionList.Count - 1].dDimension; dNewDimension = dLastDimension / (Qty + 1 - nSplitQty); m_SplitPositionList[m_SplitPositionList.Count - 1].dDimension = dNewDimension; } else dNewDimension = dLastDimension / (Qty + 1 - nSplitQty); // aggiungo area Split di default for (var SplitIndex = m_SplitPositionList.Count; SplitIndex <= Qty; SplitIndex++) SplitPositionList.Add(new SplitDimension(dNewDimension, true, this)); } else if (Qty < m_SplitPositionList.Count) { for (var SplitIndex = m_SplitPositionList.Count - 1; SplitIndex >= Qty; SplitIndex += -1) SplitPositionList.RemoveAt(SplitIndex); } } private ObservableCollection m_SplitShapeList = new ObservableCollection { new IdNameStruct((int)SplitShapes.VERTICAL, "Vertical"), new IdNameStruct((int)SplitShapes.HORIZONTAL, "Horizontal"), new IdNameStruct((int)SplitShapes.GRID, "Grid"), new IdNameStruct((int)SplitShapes.CUSTOM, "Custom") }; public ObservableCollection SplitShapeList { get { return m_SplitShapeList; } } private SplitShapes m_SelSplitShape; public int SelSplitShapeIndex { get { return IdNameStruct.IndFromId((int)m_SelSplitShape, m_SplitShapeList); } set { m_SelSplitShape = (SplitShapes)IdNameStruct.IdFromInd(value, m_SplitShapeList); m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } internal void SetSplitShape(SplitShapes Value, bool NotifyProperty = false) { m_SelSplitShape = Value; } internal SplitShapes SelSplitShape { get { return m_SelSplitShape; } } private bool m_bIsPercentage = true; public bool bIsPercentage { get { return m_bIsPercentage; } } private ObservableCollection m_SplitPositionList = new ObservableCollection(); public ObservableCollection SplitPositionList { get { return m_SplitPositionList; } set { m_SplitPositionList = value; } } private Curve m_Split; public Curve sSplit { get { return m_Split; } set { m_Split = value; } } public Split(Area ParentArea, Window ParentWindow) : base(ParentArea, ParentWindow) { } internal static Split CreateSplit(Area Area, SplitShapes SplitShape) { Split Split = new Split(Area, Area.ParentWindow); Split.SetAreaType(AreaTypes.SPLIT); Split.SetSplitShape(SplitShape, true); return Split; } internal override JsonArea Serialize() { JsonSplit JsonSplit = new JsonSplit(m_SelSplitShape); foreach (var SplitPosition in m_SplitPositionList) JsonSplit.SplitPositionList.Add(SplitPosition.Serialize()); foreach (var Area in AreaList) JsonSplit.AreaList.Add(Area.Serialize()); return JsonSplit; } } public class Splitted : Area { public Splitted(Area ParentArea, Window ParentWindow) : base(ParentArea, ParentWindow) { } internal static Splitted CreateSplitted(Area Area) { Splitted Splitted = new Splitted(Area, Area.ParentWindow); Splitted.SetAreaType(AreaTypes.SPLITTED); return Splitted; } internal override JsonArea Serialize() { JsonSplitted JsonSplitted = new JsonSplitted(); foreach (var Area in AreaList) JsonSplitted.AreaList.Add(Area.Serialize()); return JsonSplitted; } } public class Fill : Area { private List m_FillTypeList = new List { new IdNameStruct((int)FillTypes.GLASS, "Glass"), new IdNameStruct((int)FillTypes.WOOD, "Wood") }; public List FillTypeList { get { return m_FillTypeList; } } private FillTypes m_SelFillType; public FillTypes SelFillType { get { return m_SelFillType; } set { m_SelFillType = value; } } public FillTypes FillType { get { return (FillTypes)m_SelFillType; } } internal void SetFillType(FillTypes value) { m_SelFillType = value; } public int SelFillTypeIndex { get { return IdNameStruct.IndFromId((int)m_SelFillType, m_FillTypeList); } set { m_SelFillType = (FillTypes)IdNameStruct.IdFromInd(value, m_FillTypeList); m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized()); } } public Fill(Area ParentArea, Window ParentWindow) : base(ParentArea, ParentWindow) { } internal static Fill CreateFill(Area Area, FillTypes FillType) { Fill Fill = new Fill(Area, Area.ParentWindow); Fill.SetAreaType(AreaTypes.FILL); Fill.SetFillType(FillType); return Fill; } internal override JsonArea Serialize() { JsonFill JsonFill = new JsonFill(FillType); foreach (var Area in AreaList) JsonFill.AreaList.Add(Area.Serialize()); return JsonFill; } } public class Joint { protected Area m_ParentArea; public Area ParentArea { get { return m_ParentArea; } } private int m_nIndex; public int nIndex { get { return m_nIndex; } } private List m_JointTypeList = new List { new IdNameStruct((int)Joints.ANGLED, "Angled"), new IdNameStruct((int)Joints.FULL_H, "Full H"), new IdNameStruct((int)Joints.FULL_V, "Full V") }; public List JointTypeList { get { return m_JointTypeList; } } private Joints m_SelJointType; public int SelJointTypeIndex { get { return IdNameStruct.IndFromId((int)m_SelJointType, m_JointTypeList); } set { m_SelJointType = (Joints)IdNameStruct.IdFromInd(value, m_JointTypeList); m_ParentArea.ParentWindow.OnUpdatePreview(m_ParentArea.ParentWindow.sSerialized()); } } public Joints SelJointType { get { return m_SelJointType; } set { m_SelJointType = value; } } internal void SetSelJointType(Joints value) { m_SelJointType = value; //NotifyPropertyChanged(nameof(SelJointTypeIndex)); } public Joint(Area ParentArea, int nIndex, Joints SelJointType) { m_ParentArea = ParentArea; m_nIndex = nIndex; m_SelJointType = SelJointType; } internal JsonJoint Serialize() { JsonJoint JsonJoint = new JsonJoint(m_nIndex, m_SelJointType); return JsonJoint; } } public class Curve { private GDB_TY m_CurveType; public GDB_TY CurveType { get { return m_CurveType; } set { m_CurveType = value; } } private Point3d m_ptStart; public Point3d ptStart { get { return m_ptStart; } set { m_ptStart = value; } } private Point3d m_ptEnd; public Point3d ptEnd { get { return m_ptEnd; } set { m_ptEnd = value; } } } public class Hardware { private string m_sId; public string sId { get { return m_sId; } } private string m_sName; public string sName { get { return m_sName; } } private string m_sOpeningType; public string sOpeningType { get { return m_sOpeningType; } } private string m_sShape; public string sShape { get { return m_sShape; } } private int m_nSashQty; public int nSashQty { get { return m_nSashQty; } } private int m_nSashPosition; public int nSashPosition { get { return m_nSashPosition; } } public Hardware(string sId, string sName, string sOpeningType, string sShape, int nSashQty, int nSashPosition) { m_sId = sId; m_sName = sName; m_sOpeningType = sOpeningType; m_sShape = sShape; m_nSashQty = nSashQty; m_nSashPosition = nSashPosition; } } public class AGBOption { public enum HDWOPTIONTYPES : int { TEXT = 1, LENGHT = 2, COMBO = 3 } private HDWOPTIONTYPES m_Type; public HDWOPTIONTYPES Type { get { return m_Type; } } private string m_sName; public string sName { get { return m_sName; } } private string m_sDescription; public string sDescription { get { return m_sDescription; } } private List m_ValueList = new List(); public List ValueList { get { return m_ValueList; } } private AGBOptionParameter m_sValue; public AGBOptionParameter sValue { get { return m_sValue; } set { m_sValue = value; } } private Visibility m_OptVisibility; public Visibility OptVisibility { get { return m_OptVisibility; } } //public AGBOption(ParametriOpzioniParametri HdwOptionParam) //{ // if (HdwOptionParam.Opzioni.Count > 0) // { // m_Type = HDWOPTIONTYPES.COMBO; // foreach (var Value in HdwOptionParam.Opzioni) // m_ValueList.Add(new AGBOptionParameter(Value.Valore, Value.DescrizioneOpzione)); // } // else // m_Type = HDWOPTIONTYPES.TEXT; // m_sName = HdwOptionParam.NomeParametro; // m_sDescription = HdwOptionParam.DescrizioneParametro; // m_sValue = m_ValueList.FirstOrDefault(x => x.sValue == HdwOptionParam.ValoreCorrente); // m_OptVisibility = Visibility.Visible; // If(HdwOptionParam.Visible.ToLower = "true", Visibility.Visible, Visibility.Collapsed) //} } public class AGBOptionParameter { private string m_sValue; public string sValue { get { return m_sValue; } } private string m_sDescription; public string sDescription { get { return m_sDescription; } } public AGBOptionParameter(string sValue, string sDescription) { m_sValue = sValue; m_sDescription = sDescription; } } public class FrameDimension { protected Frame m_ParentFrame; public Frame ParentFrame { get { return m_ParentFrame; } } private bool m_bIsLen = false; private int m_nIndex; public int nIndex { get { return m_nIndex; } } private string m_sName; public string sName { get { return m_sName; } } private double m_dValue; public double dValue { get { return m_dValue; } set { m_dValue = value; m_ParentFrame.ParentWindow.OnUpdatePreview(m_ParentFrame.ParentWindow.sSerialized()); } } public FrameDimension(Frame ParentFrame, int nIndex, string sName, double dValue, bool bIsLen) { m_ParentFrame = ParentFrame; m_nIndex = nIndex; m_sName = sName; m_dValue = dValue; m_bIsLen = bIsLen; } internal JsonFrameDimension Serialize() { JsonFrameDimension JsonFrameDimension = new JsonFrameDimension(m_nIndex, m_sName, m_dValue); return JsonFrameDimension; } } public class SashDimension { // reference private Sash m_Parent; private bool m_bIsRelative = false; public bool bIsRelative { get { return m_bIsRelative; } } private List m_OpeningTypeList = new List { new IdNameStruct((int)Openings.TURNONLY_LEFT, ">"), new IdNameStruct((int)Openings.TURNONLY_RIGHT, "<"), new IdNameStruct((int)Openings.TILTTURN_LEFT, ">*"), new IdNameStruct((int)Openings.TILTTURN_RIGHT, "<*"), new IdNameStruct((int)Openings.TILTONLY_TOP, "˄"), new IdNameStruct((int)Openings.TILTONLY_BOTTOM, "˅"), new IdNameStruct((int)Openings.PIVOT, "◊"), new IdNameStruct((int)Openings.FIXED, "X"), new IdNameStruct((int)Openings.COMPLANARSLIDE_LEFT, "-→"), new IdNameStruct((int)Openings.COMPLANARSLIDE_RIGHT, "←-"), new IdNameStruct((int)Openings.LIFTSLIDE_LEFT, "┌→"), new IdNameStruct((int)Openings.LIFTSLIDE_RIGHT, "←┐") }; public List OpeningTypeList { get { return m_OpeningTypeList; } } private Openings m_SelOpeningType; public Openings SelOpeningType { get { return m_SelOpeningType; } set { m_SelOpeningType = value; //m_Parent.RefreshHardwareList(); m_Parent.RefreshHardwareOptionList(); //m_Parent.SetFirstHardware(); } } public Openings OpeningType { get { return (Openings)m_SelOpeningType; } } internal void SetOpeningType(Openings value) { m_SelOpeningType = value; } public int SelOpeningTypeIndex { get { return IdNameStruct.IndFromId((int)m_SelOpeningType, m_OpeningTypeList); } set { m_SelOpeningType = (Openings)IdNameStruct.IdFromInd(value, m_OpeningTypeList); m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized()); } } private bool m_bHasHandle; public bool bHasHandle { get { return m_bHasHandle; } set { m_bHasHandle = value; m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized()); } } internal void SetHasHandle(bool value) { m_bHasHandle = value; } private double m_dDimension; public double dDimension { get { return m_dDimension; } set { // se sono in percentuale if (m_bIsRelative) { // verifico se ci sono assoluti List RelativeDimList = m_Parent.SashList.Where(x => x.bIsRelative).ToList(); if (RelativeDimList.Count > 0) { if (m_Parent.bIsPercentage) { int nIndex = RelativeDimList.IndexOf(this); if (value < m_dDimension) { if (nIndex < RelativeDimList.Count - 1) RelativeDimList[nIndex + 1].SetDimension(RelativeDimList[nIndex + 1].dDimension + (m_dDimension - value)); else if (RelativeDimList.Count > 1) RelativeDimList[nIndex - 1].SetDimension(RelativeDimList[nIndex - 1].dDimension + (m_dDimension - value)); else { m_dDimension = 100; return; } } else { double dRes = value; if (nIndex < RelativeDimList.Count - 1) { for (var nInd = 0; nInd <= nIndex - 1; nInd++) dRes += RelativeDimList[nInd].dDimension; dRes = (100 - dRes) / (RelativeDimList.Count - nIndex - 1); for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++) RelativeDimList[Ind].SetDimension(dRes); } else if (RelativeDimList.Count > 1) { for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++) dRes += RelativeDimList[Ind].dDimension; dRes = (100 - dRes) / (nIndex - 1); for (var nInd = 0; nInd <= nIndex - 1; nInd++) RelativeDimList[nInd].SetDimension(dRes); } else { m_dDimension = 100; return; } } } else { } } } m_dDimension = value; m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized()); } } internal void SetDimension(double dValue) { m_dDimension = dValue; } public SashDimension(double dDimension, bool bIsRelative, Sash Parent) { m_dDimension = dDimension; m_bIsRelative = bIsRelative; m_Parent = Parent; // assengno maniglia if (Parent.SashList.Count == 0 || !Parent.SashList.Any(x => x.bHasHandle)) m_bHasHandle = true; // assegno tipo di anta if (Parent.SashList.Count == 0) SetOpeningType(Openings.TILTTURN_LEFT); else if (Parent.SashList.Count == 1) { switch (Parent.SashList[0].OpeningType) { case Openings.TURNONLY_LEFT: { SetOpeningType(Openings.TURNONLY_RIGHT); break; } case Openings.TURNONLY_RIGHT: { SetOpeningType(Openings.TURNONLY_LEFT); break; } case Openings.TILTTURN_LEFT: { SetOpeningType(Openings.TILTTURN_RIGHT); break; } case Openings.TILTTURN_RIGHT: { SetOpeningType(Openings.TILTTURN_LEFT); break; } case Openings.TILTONLY_TOP: { SetOpeningType(Openings.TILTONLY_BOTTOM); break; } case Openings.TILTONLY_BOTTOM: { SetOpeningType(Openings.TILTONLY_TOP); break; } case Openings.COMPLANARSLIDE_LEFT: { SetOpeningType(Openings.COMPLANARSLIDE_RIGHT); break; } case Openings.COMPLANARSLIDE_RIGHT: { SetOpeningType(Openings.COMPLANARSLIDE_LEFT); break; } case Openings.LIFTSLIDE_LEFT: { SetOpeningType(Openings.LIFTSLIDE_RIGHT); break; } case Openings.LIFTSLIDE_RIGHT: { SetOpeningType(Openings.LIFTSLIDE_LEFT); break; } } } else SetOpeningType(Parent.SashList[Parent.SashList.Count - 1].OpeningType); } internal JsonSashDimension Serialize() { JsonSashDimension JsonSashDimension = new JsonSashDimension(OpeningType, m_bHasHandle, m_dDimension); return JsonSashDimension; } } public class SplitDimension { // reference private Split m_Parent; private bool m_bIsRelative = false; public bool bIsRelative { get { return m_bIsRelative; } } internal void SetIsRelative(bool value) { m_bIsRelative = value; } private double m_dDimension; public double dDimension { get { return m_dDimension; } set { // se sono in percentuale if (m_bIsRelative) { // verifico se ci sono assoluti List RelativeDimList = m_Parent.SplitPositionList.Where(x => x.bIsRelative).ToList(); if (RelativeDimList.Count > 0) { if (m_Parent.bIsPercentage) { int nIndex = RelativeDimList.IndexOf(this); if (value < m_dDimension) { if (nIndex < RelativeDimList.Count - 1) RelativeDimList[nIndex + 1].SetDimension(RelativeDimList[nIndex + 1].dDimension + (m_dDimension - value)); else if (RelativeDimList.Count > 1) RelativeDimList[nIndex - 1].SetDimension(RelativeDimList[nIndex - 1].dDimension + (m_dDimension - value)); else { m_dDimension = 100; return; } } else { double dRes = value; if (nIndex < RelativeDimList.Count - 1) { for (var nInd = 0; nInd <= nIndex - 1; nInd++) dRes += RelativeDimList[nInd].dDimension; dRes = (100 - dRes) / (RelativeDimList.Count - nIndex - 1); for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++) RelativeDimList[Ind].SetDimension(dRes); } else if (RelativeDimList.Count > 1) { for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++) dRes += RelativeDimList[Ind].dDimension; dRes = (100 - dRes) / (nIndex - 1); for (var nInd = 0; nInd <= nIndex - 1; nInd++) RelativeDimList[nInd].SetDimension(dRes); } else { m_dDimension = 100; return; } } } else { } } } m_dDimension = value; m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized()); } } internal void SetDimension(double dValue) { m_dDimension = dValue; } public SplitDimension(double dDimension, bool bIsRelative, Split Parent) { m_dDimension = dDimension; m_bIsRelative = bIsRelative; m_Parent = Parent; } internal JsonSplitDimension Serialize() { JsonSplitDimension JsonSplitDimension = new JsonSplitDimension(m_bIsRelative, m_dDimension); return JsonSplitDimension; } } public struct IdNameStruct { private int m_Id; private string m_Name; public int Id { get { return m_Id; } set { m_Id = value; } } public string Name { get { return m_Name; } set { m_Name = value; } } public IdNameStruct(int Id, string Name) { this = default(IdNameStruct); m_Id = Id; m_Name = Name; } public override string ToString() { return Name; } public static int IndFromId(int Id, ObservableCollection List) { checked { int num = List.Count - 1; for (int i = 0; i <= num; i++) { if (List[i].Id == Id) { return i; } } return 0; } } public static int IndFromId(int Id, List List) { checked { int num = List.Count - 1; for (int i = 0; i <= num; i++) { if (List[i].Id == Id) { return i; } } return 0; } } public static int IdFromInd(int Ind, ObservableCollection List) { return List[Ind].Id; } public static int IdFromInd(int Ind, List List) { return List[Ind].Id; } public static int IndFromId(int Id, ObservableCollection List) { checked { int num = List.Count - 1; for (int i = 0; i <= num; i++) { if (List[i] is IdNameStruct && ((IdNameStruct)List[i]).Id == Id) { return i; } } return 0; } } public static int IndFromId(int Id, List List) { checked { int num = List.Count - 1; for (int i = 0; i <= num; i++) { if (List[i] is IdNameStruct && ((IdNameStruct)List[i]).Id == Id) { return i; } } return 0; } } public static int IdFromInd(int Ind, ObservableCollection List) { if (List[Ind] is IdNameStruct) { return ((IdNameStruct)List[Ind]).Id; } return 0; } public static int IdFromInd(int Ind, List List) { if (List[Ind] is IdNameStruct) { return ((IdNameStruct)List[Ind]).Id; } return 0; } //public static int IdFromName(string Name, ObservableCollection List) //{ // checked // { // int num = List.Count - 1; // for (int i = 0; i <= num; i++) // { // if (Operators.CompareString(((IdNameStruct)List[i]).Name, Name, TextCompare: false) == 0) // { // return ((IdNameStruct)List[i]).Id; // } // } // return 0; // } //} //public static int IdFromName(string Name, List List) //{ // checked // { // int num = List.Count - 1; // for (int i = 0; i <= num; i++) // { // if (Operators.CompareString(((IdNameStruct)List[i]).Name, Name, TextCompare: false) == 0) // { // return ((IdNameStruct)List[i]).Id; // } // } // return 0; // } //} } }