using WebWindowComplex.Json; using static WebWindowComplex.Json.WindowConst; namespace WebWindowComplex.Models { public class SashDimension { #region Public Constructors public SashDimension(double dDimension, MeasureTypes MeasureType, Sash Parent, int nSashId) { m_dDimension = dDimension; m_Parent = Parent; m_nSashId = nSashId; SetMeasureType(MeasureType); // 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 double dDimension { get { return m_dDimension; } set { double valMax = 0; bool valueAccept = false; switch (MeasureType) { case MeasureTypes.ABSOLUT: { valMax = m_Parent.SashList.Sum(x => x.dDimension); valueAccept = (value < valMax && value > 0) ? true: false; break; } case MeasureTypes.PROPORTIONAL: { valMax = m_Parent.SashList.Sum(x => x.dDimension); break; } case MeasureTypes.PERCENTAGE: { valMax = 100; valueAccept = (value < valMax && value > 0) ? true : false; break; } } if (!MeasureType.Equals(MeasureTypes.PROPORTIONAL)) { if (valueAccept) { // verifico se ci sono altri in percentuale List DimList = m_Parent.SashList.Where(x => x.MeasureType.Equals(MeasureType)).ToList(); if (DimList.Count > 0) { int nIndex = DimList.IndexOf(this); // se diminuisce dimensione if (value < m_dDimension) { if (nIndex < DimList.Count - 1) DimList[nIndex + 1].SetDimension(DimList[nIndex + 1].dDimension + (m_dDimension - value)); else if (DimList.Count > 1) DimList[nIndex - 1].SetDimension(DimList[nIndex - 1].dDimension + (m_dDimension - value)); else { m_dDimension = valMax; return; } } // se aumenta dimensione else { double dRes = value; // se non ultima anta if (nIndex < DimList.Count - 1) { for (var nInd = 0; nInd <= nIndex - 1; nInd++) dRes += DimList[nInd].dDimension; dRes = (100 - dRes) / (DimList.Count - nIndex - 1); for (var Ind = nIndex + 1; Ind <= DimList.Count - 1; Ind++) DimList[Ind].SetDimension(dRes); } // se ultima anta else if (DimList.Count > 1) { if (DimList.Count > 2) { for (var Ind = 0; Ind <= nIndex - 2; Ind++) dRes += DimList[Ind].dDimension; } dRes = (valMax - dRes); DimList[nIndex - 1].SetDimension(dRes); } else { m_dDimension = valMax; return; } } } m_dDimension = value; m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized()); } } else { m_dDimension = value; m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized()); } //// se sono in percentuale //if (m_MeasureType.Equals(MeasureTypes.PERCENTAGE)) //{ // // Controllo che il valore inserito sia compreso tra 0 e 100 // if (value > 0 && value < 100) // { // // verifico se ci sono altri in percentuale // List RelativeDimList = m_Parent.SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).ToList(); // if (RelativeDimList.Count > 0) // { // 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; // } // dRes = (100 - dRes); // RelativeDimList[nIndex - 1].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 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()); } } } public MeasureTypes MeasureType { get { return m_SelMeasureType; } } public List MeasureTypeList { get { return m_MeasureTypeList; } } public MeasureTypes SelMeasureType { get { return m_SelMeasureType; } set { m_SelMeasureType = value; } } public int SelMeasureTypeIndex { get { return (int)m_SelMeasureType; } set { m_SelMeasureType = (MeasureTypes)value; } } #endregion Public Properties #region Public Methods public SashDimension Copy() { SashDimension newSashDim = new SashDimension(dDimension, MeasureType, m_Parent, m_nSashId); newSashDim.SetMeasureType(MeasureType); 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; } internal void SetMeasureType(MeasureTypes value) { m_SelMeasureType = value; } #endregion Internal Methods #region Private Fields private bool m_bHasHandle; 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, "←┐") }; private List m_MeasureTypeList = new List { new IdNameStruct((int)MeasureTypes.ABSOLUT, "Absolut"), new IdNameStruct((int)MeasureTypes.PROPORTIONAL, "Proportional"), new IdNameStruct((int)MeasureTypes.PERCENTAGE, "Percentage"), }; // reference private Sash m_Parent; private Openings m_SelOpeningType; private MeasureTypes m_SelMeasureType; #endregion Private Fields #region Private Methods /// /// Recupero della larghezza del frame /// /// private double GetWidth() { double width = 0; int indexSash = 0; if (m_Parent.ParentArea != null && m_Parent.ParentArea.ParentArea != null && m_Parent.ParentArea.ParentArea is Split) { Split splitParent = (Split)m_Parent.ParentArea.ParentArea; if(splitParent.SplitVertList.Count > 0) { for(int i = 0; i < splitParent.AreaList.Count; i++) { if (splitParent.AreaList[i].AreaList[0].Equals(this)) { indexSash = i; } } } //int indexSash = splitParent.AreaList.Where(x => x.AreaList[0].Equals(this)); } else { Frame a = m_Parent.ParentWindow.AreaList[0]; FrameDimension? fd = a.DimensionList.Where(x => x.sName == "Width").SingleOrDefault(); width = fd.dValue; } return width; } #endregion Private Methods } }