using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WebWindowTest.Json; using static WebWindowTest.Json.WindowConst; namespace WebWindowTest.Models { public class SashDimension { #region Public Constructors public SashDimension(double dDimension, bool bIsRelative, Sash Parent, int nSashId) { m_dDimension = dDimension; m_bIsRelative = bIsRelative; m_Parent = Parent; m_nSashId = nSashId; // 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.TURNONLY_RIGHT); break; } case Openings.TILTTURN_RIGHT: { SetOpeningType(Openings.TURNONLY_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); } #endregion Public Constructors #region Public Properties public bool bHasHandle { get { return m_bHasHandle; } set { m_bHasHandle = value; //m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized()); } } public bool bIsRelative { get { return m_bIsRelative; } } public double dDimension { get { return m_dDimension; } set { // Controllo che il valore inserito sia compreso tra 0 e 100 if (value > 0 && value < 100) { // 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); // se diminuisce dimensione 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; } } // se aumenta dimensione else { double dRes = value; // se non ultima anta 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); } // se ultima anta else if (RelativeDimList.Count > 1) { if (RelativeDimList.Count > 2) { for (var Ind = 0; Ind <= nIndex - 2; Ind++) dRes += RelativeDimList[Ind].dDimension; } //for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++) // dRes += RelativeDimList[Ind].dDimension; dRes = (100 - dRes); RelativeDimList[nIndex - 1].SetDimension(dRes); //for (var nInd = 0; nInd <= nIndex - 1; nInd++) // RelativeDimList[nInd].SetDimension(dRes); } else { m_dDimension = 100; return; } } } } } m_dDimension = value; m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized()); } } } public int nSashId { get { return m_nSashId; } } public Openings OpeningType { get { return (Openings)m_SelOpeningType; } } public List OpeningTypeList { get { return m_OpeningTypeList; } } public Openings SelOpeningType { get { return m_SelOpeningType; } set { m_SelOpeningType = value; m_Parent.ReqRefreshShape(); m_Parent.RefreshHardwareOptionList(); m_Parent.SetFirstHardware(); } } public int SelOpeningTypeIndex { get { //return IdNameStruct.IndFromId((int)m_SelOpeningType, m_OpeningTypeList); return (int)m_SelOpeningType; } set { //Openings newOpening = (Openings)IdNameStruct.IdFromInd(value, m_OpeningTypeList); Openings newOpening = (Openings)value; if ((newOpening != Openings.TILTTURN_LEFT && newOpening != Openings.TILTTURN_RIGHT) || (newOpening == Openings.TILTTURN_LEFT && m_bHasHandle) || (newOpening == Openings.TILTTURN_RIGHT && m_bHasHandle)) { m_SelOpeningType = newOpening; m_Parent.ReqRefreshShape(); m_Parent.RefreshHardwareOptionList(); m_Parent.SetFirstHardware(); m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized()); } } } #endregion Public Properties #region Public Methods public SashDimension Copy() { SashDimension newSashDim = new SashDimension(dDimension, bIsRelative, m_Parent, m_nSashId); newSashDim.SetOpeningType(SelOpeningType); newSashDim.SetHasHandle(bHasHandle); return newSashDim; } #endregion Public Methods #region Internal Methods internal JsonSashDimension Serialize() { JsonSashDimension JsonSashDimension = new JsonSashDimension(OpeningType, m_bHasHandle, m_dDimension, m_nSashId); return JsonSashDimension; } internal void SetDimension(double dValue) { m_dDimension = dValue; } internal void SetHasHandle(bool value) { m_bHasHandle = value; } internal void SetOpeningType(Openings value) { m_SelOpeningType = value; } #endregion Internal Methods #region Private Fields private bool m_bHasHandle; private bool m_bIsRelative = false; private double m_dDimension; private int m_nSashId; private List m_OpeningTypeList = new List { new IdNameStruct((int)Openings.TURNONLY_LEFT, "A bandiera sinistra"), new IdNameStruct((int)Openings.TURNONLY_RIGHT, "A bandiera destra"), new IdNameStruct((int)Openings.TILTTURN_LEFT, "Ad anta-ribalta sinistra"), new IdNameStruct((int)Openings.TILTTURN_RIGHT, "Ad anta-ribalta destra"), new IdNameStruct((int)Openings.TILTONLY_TOP, "Solo verso alto"), new IdNameStruct((int)Openings.TILTONLY_BOTTOM, "Solo verso basso"), new IdNameStruct((int)Openings.PIVOT, "Pivot"), new IdNameStruct((int)Openings.FIXED, "Fissa"), new IdNameStruct((int)Openings.COMPLANARSLIDE_LEFT, "Complanare sinistra"), new IdNameStruct((int)Openings.COMPLANARSLIDE_RIGHT, "Complanare destra"), new IdNameStruct((int)Openings.LIFTSLIDE_LEFT, "Scorrevole sinistra"), new IdNameStruct((int)Openings.LIFTSLIDE_RIGHT, "Scorrevole destra") //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, "←┐") }; // reference private Sash m_Parent; private Openings m_SelOpeningType; #endregion Private Fields } }