diff --git a/WebWindowComplex/Models/ElementDimension.cs b/WebWindowComplex/Models/ElementDimension.cs index da61cfa..d426a1b 100644 --- a/WebWindowComplex/Models/ElementDimension.cs +++ b/WebWindowComplex/Models/ElementDimension.cs @@ -34,7 +34,7 @@ namespace WebWindowComplex.Models { if(dDimension != value) { - if(m_ParentArea is Split) + if (m_ParentArea is Split) { if (value > m_dMax) value = m_dMax; @@ -43,21 +43,28 @@ namespace WebWindowComplex.Models Split s = (Split)m_ParentArea; SplitElementDimension splitElem = (SplitElementDimension)this; List elemList = new List(); + Frame? frame = s.ParentWindow.AreaList.First(); + double dimTot = 0; if (s.ElemDimVertList.Contains(splitElem)) elemList = s.SplitVertList; else if (s.ElemDimHorizList.Contains(splitElem)) elemList = s.SplitHorizList; - if (value > m_dDimension) - { - double diff = (value - m_dDimension)/2; - elemList.ElementAt(m_nIndex - 1).SetDimension(elemList.ElementAt(m_nIndex - 1).dDimension - diff); - elemList.ElementAt(m_nIndex ).SetDimension(elemList.ElementAt(m_nIndex).dDimension - diff); - } - else + if(elemList.ElementAt(m_nIndex).MeasureType is MeasureTypes.ABSOLUTE || + elemList.ElementAt(m_nIndex - 1).MeasureType is MeasureTypes.ABSOLUTE) { + if (value > m_dDimension) + { + dimTot = dimTot - (value - m_dDimension); + } + else + { + dimTot = dimTot + (m_dDimension - value); + } double diff = (m_dDimension - value)/2; - elemList.ElementAt(m_nIndex - 1).SetDimension(elemList.ElementAt(m_nIndex - 1).dDimension + diff); - elemList.ElementAt(m_nIndex).SetDimension(elemList.ElementAt(m_nIndex).dDimension + diff); + if(elemList.ElementAt(m_nIndex - 1).MeasureType is MeasureTypes.ABSOLUTE) + elemList.ElementAt(m_nIndex - 1).SetDimension(elemList.ElementAt(m_nIndex - 1).dDimension + diff); + if(elemList.ElementAt(m_nIndex).MeasureType is MeasureTypes.ABSOLUTE) + elemList.ElementAt(m_nIndex).SetDimension(elemList.ElementAt(m_nIndex).dDimension + diff); } } else if(m_ParentArea is Sash && (m_nIndex == 2 || m_nIndex == 4)) @@ -78,15 +85,18 @@ namespace WebWindowComplex.Models break; } } - if (value > m_dDimension) + if(s.SashList.ElementAt(indSash).MeasureType is MeasureTypes.ABSOLUTE) { - double diff = (value - m_dDimension); - s.SashList.ElementAt(indSash).SetDimension(s.SashList.ElementAt(indSash).dDimension - diff); - } - else - { - double diff = m_dDimension - value; - s.SashList.ElementAt(indSash).SetDimension(s.SashList.ElementAt(indSash).dDimension + diff); + if (value > m_dDimension) + { + double diff = (value - m_dDimension); + s.SashList.ElementAt(indSash).SetDimension(s.SashList.ElementAt(indSash).dDimension - diff); + } + else + { + double diff = m_dDimension - value; + s.SashList.ElementAt(indSash).SetDimension(s.SashList.ElementAt(indSash).dDimension + diff); + } } } } diff --git a/WebWindowComplex/Models/Split.cs b/WebWindowComplex/Models/Split.cs index 94500a6..8314dc7 100644 --- a/WebWindowComplex/Models/Split.cs +++ b/WebWindowComplex/Models/Split.cs @@ -1,6 +1,8 @@ using Newtonsoft.Json.Linq; using System; +using System.Collections; using System.Collections.Generic; +using System.ComponentModel.Design; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -85,103 +87,137 @@ namespace WebWindowComplex.Models } else { - double heightTot = CalculateHeightArea(ParentWindow.AreaList.First(), HeightFrame()); - // Ricalcolo dimensioni aggiungendo split - if (value > m_SplitHorizList.Count - 1) + Frame? frame = ParentWindow.AreaList.FirstOrDefault(); + if(frame != null) { - // recupero larghezza ultimo - double dLastDimension = heightTot; - double dNewDimension = heightTot; - if (m_SplitHorizList.Count > 0) + double heightTot = CalculateHeightArea(frame, frame.AvailHeightArea()); + // Ricalcolo dimensioni aggiungendo split + if (value > m_SplitHorizList.Count - 1) { - dLastDimension = m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension; - dNewDimension = (dLastDimension - m_ElemDimHorizList.Last().dDimension) / (value + 1 - nSplitQtyHoriz); - if (m_SplitHorizList[m_SplitHorizList.Count - 1].MeasureType.Equals(MeasureTypes.PROPORTIONAL)) - dNewDimension = 1; - m_SplitHorizList[m_SplitHorizList.Count - 1].SetDimension(dNewDimension); - } - else - dNewDimension = dLastDimension / (value + 1 - nSplitQtyHoriz); - // aggiungo area Split di default - for (var SplitIndex = m_SplitHorizList.Count; SplitIndex <= value; SplitIndex++) - m_SplitHorizList.Add(new SplitDimension(dNewDimension, m_SplitHorizList[m_SplitHorizList.Count - 1].MeasureType, true, this, false)); - if (!m_bSplitStartVert) - { - //Aggiungo un elemento alla sottoarea principale - ElemDimHorizList.Add(new SplitElementDimension(this, ElemDimHorizList.Max(x => x.nIndex) + 1, 78, 0)); - if(nSplitQtyVert > 0) + // recupero larghezza ultimo + double dLastDimension = heightTot; + double dNewDimension = heightTot; + if (m_SplitHorizList.Count > 0) + { + dLastDimension = m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension; + if(m_SplitHorizList.Last().MeasureType is MeasureTypes.ABSOLUTE) + dNewDimension = (dLastDimension - m_ElemDimHorizList.Last().dDimension) / (value + 1 - nSplitQtyHoriz); + else + dNewDimension = dLastDimension / (value + 1 - nSplitQtyHoriz); + if (m_SplitHorizList[m_SplitHorizList.Count - 1].MeasureType.Equals(MeasureTypes.PROPORTIONAL)) + dNewDimension = 1; + m_SplitHorizList[m_SplitHorizList.Count - 1].SetDimension(dNewDimension); + } + else + dNewDimension = dLastDimension / (value + 1 - nSplitQtyHoriz); + // aggiungo area Split di default + for (var SplitIndex = m_SplitHorizList.Count; SplitIndex <= value; SplitIndex++) + m_SplitHorizList.Add(new SplitDimension(dNewDimension, m_SplitHorizList[m_SplitHorizList.Count - 1].MeasureType, true, this, false)); + if (!m_bSplitStartVert) + { + //Aggiungo un elemento alla sottoarea principale + ElemDimHorizList.Add(new SplitElementDimension(this, ElemDimHorizList.Max(x => x.nIndex) + 1, 78, 0)); + if(nSplitQtyVert > 0) + { + // Aggiungo a tutte le sottoaree degli element + int subArea = ElemDimVertList.Max(x => x.nSubArea) + 1; + for (int i = 1; i <= ElemDimVertList.Max(x => x.nIndex); i++) + ElemDimVertList.Add(new SplitElementDimension(this, i, 78, subArea)); + } + } + else { // Aggiungo a tutte le sottoaree degli element - int subArea = ElemDimVertList.Max(x => x.nSubArea) + 1; - for (int i = 1; i <= ElemDimVertList.Max(x => x.nIndex); i++) - ElemDimVertList.Add(new SplitElementDimension(this, i, 78, subArea)); + for (int i = 1; i <= ElemDimHorizList.Max(x => x.nSubArea); i++) + { + int index = ElemDimHorizList.Where(x => x.nSubArea == i).Max(x => x.nIndex); + ElemDimHorizList.Insert(index * i + (i - 1), new SplitElementDimension(this, index + 1, 78, i)); + } } } + // Ricalcolo dimensioni rimuovendo split else { - // Aggiungo a tutte le sottoaree degli element - for (int i = 1; i <= ElemDimHorizList.Max(x => x.nSubArea); i++) + int countProportional = m_SplitHorizList.Count(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)); + if (m_SplitHorizList.Last().MeasureType.Equals(MeasureTypes.PROPORTIONAL) && countProportional - 1 == 1) { - int index = ElemDimHorizList.Where(x => x.nSubArea == i).Max(x => x.nIndex); - ElemDimHorizList.Insert(index * i + (i - 1), new SplitElementDimension(this, index + 1, 78, i)); + m_SplitHorizList.RemoveAt(m_SplitVertList.Count() - 1); + m_SplitHorizList.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).FirstOrDefault()?.SetDimension(1); + } + else + { + double dLastDimension = 0; + for (var SplitIndex = m_SplitHorizList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1) + { + dLastDimension += m_SplitHorizList[SplitIndex].dDimension; + if (m_SplitHorizList.Last().MeasureType.Equals(MeasureTypes.ABSOLUTE)) + dLastDimension += m_ElemDimHorizList[SplitIndex - 1].dDimension; + m_SplitHorizList.RemoveAt(SplitIndex); + } + dLastDimension += m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension; + m_SplitHorizList[m_SplitHorizList.Count - 1].SetDimension(dLastDimension); + } + if (m_bSplitStartVert) + { + // Rimuovo da tutte le sottoaree degli element l'ultimo elemento + for (int subArea = 1; subArea <= ElemDimHorizList.Max(x => x.nSubArea); subArea++) + { + SplitElementDimension removeElem = ElemDimHorizList.Where(x => x.nSubArea == subArea).OrderByDescending(x => x.nIndex).FirstOrDefault(); + ElemDimHorizList.Remove(removeElem); + } + } + else + { + int deleteSubArea = ElemDimHorizList.Count + 1; + ElemDimHorizList.RemoveAt(ElemDimHorizList.Count - 1); + if(nSplitQtyVert > 0) + ElemDimVertList.RemoveAll(x => x.nSubArea == deleteSubArea); } } - } - // Ricalcolo dimensioni rimuovendo split - else - { - double dLastDimension = 0; - for (var SplitIndex = m_SplitHorizList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1) + // Controllo quanti split verticali ci sono + int nVert = m_SplitVertList.Count > 0 ? m_SplitVertList.Count : 1; + // Se aggiungo split devo aggiungere vetro nell'area splitted aggiunta + for (var SplitIndex = AreaList.Count; SplitIndex <= (m_SplitHorizList.Count * nVert) - 1; SplitIndex++) { - dLastDimension += m_SplitHorizList[SplitIndex].dDimension + m_ElemDimHorizList[SplitIndex - 1].dDimension; - m_SplitHorizList.RemoveAt(SplitIndex); + AreaList.Add(Splitted.CreateSplitted(this)); + Fill newFill = Fill.CreateFill(AreaList[SplitIndex], FillTypes.GLASS); + newFill.SetAreaType(AreaTypes.FILL); + AreaList[AreaList.Count - 1].AreaList.Add(newFill); } - dLastDimension += m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension; - m_SplitHorizList[m_SplitHorizList.Count - 1].SetDimension(dLastDimension); - if (m_bSplitStartVert) + // Se ho più di uno split, elimino l'ultimo + if (AreaList.Count > 2) { - // Rimuovo da tutte le sottoaree degli element l'ultimo elemento - for (int subArea = 1; subArea <= ElemDimHorizList.Max(x => x.nSubArea); subArea++) + int nAreaList = AreaList.Count - 1; + for (var SplitIndex = (m_SplitHorizList.Count * nVert); SplitIndex <= nAreaList; SplitIndex++) { - SplitElementDimension removeElem = ElemDimHorizList.Where(x => x.nSubArea == subArea).OrderByDescending(x => x.nIndex).FirstOrDefault(); - ElemDimHorizList.Remove(removeElem); + AreaList.Remove(AreaList[AreaList.Count - 1]); } } + // Se elimino l'unico split presente else { - int deleteSubArea = ElemDimHorizList.Count + 1; - ElemDimHorizList.RemoveAt(ElemDimHorizList.Count - 1); - if(nSplitQtyVert > 0) - ElemDimVertList.RemoveAll(x => x.nSubArea == deleteSubArea); + Splitted s = (Splitted)AreaList[0]; + s.SetParentArea(ParentArea); + ParentArea.AreaList.Add(s); + ParentArea.AreaList.Remove(this); } } - // Controllo quanti split verticali ci sono - int nVert = m_SplitVertList.Count > 0 ? m_SplitVertList.Count : 1; - // Se aggiungo split devo aggiungere vetro nell'area splitted aggiunta - for (var SplitIndex = AreaList.Count; SplitIndex <= (m_SplitHorizList.Count * nVert) - 1; SplitIndex++) - { - AreaList.Add(Splitted.CreateSplitted(this)); - Fill newFill = Fill.CreateFill(AreaList[SplitIndex], FillTypes.GLASS); - newFill.SetAreaType(AreaTypes.FILL); - AreaList[AreaList.Count - 1].AreaList.Add(newFill); - } - // Se ho più di uno split, elimino l'ultimo - if (AreaList.Count > 2) - { - int nAreaList = AreaList.Count - 1; - for (var SplitIndex = (m_SplitHorizList.Count * nVert); SplitIndex <= nAreaList; SplitIndex++) - { - AreaList.Remove(AreaList[AreaList.Count - 1]); - } - } - // Se elimino l'unico split presente - else - { - Splitted s = (Splitted)AreaList[0]; - s.SetParentArea(ParentArea); - ParentArea.AreaList.Add(s); - ParentArea.AreaList.Remove(this); - } + } + } + if (SplitHorizList.Count > 0) + { + for (int i = 0; i < AreaList.Count; i++) + { + if (i < SplitHorizList.Count) + AreaList.ElementAt(i).SearchAreaList(AreaList.ElementAt(i), SplitHorizList.ElementAt(i).dDimension, "Width"); + } + } + if (SplitVertList.Count > 0) + { + for (int i = 0; i < AreaList.Count; i++) + { + if (i < SplitVertList.Count) + AreaList.ElementAt(i).SearchAreaList(AreaList.ElementAt(i), SplitVertList.ElementAt(i).dDimension, "Height"); } } } @@ -216,7 +252,7 @@ namespace WebWindowComplex.Models Frame? frame = ParentWindow.AreaList.FirstOrDefault(); if (frame != null) { - double widthTot = CalculateWidthArea(frame, frame.DimensionList.Where(x => x.sName == "Width").First().dDimension); + double widthTot = CalculateWidthArea(frame, frame.AvailWidthArea()); // Ricalcolo dimensioni aggiungendo split if (value > m_SplitVertList.Count - 1) { @@ -226,7 +262,10 @@ namespace WebWindowComplex.Models if (m_SplitVertList.Count > 0) { dLastDimension = m_SplitVertList[m_SplitVertList.Count - 1].dDimension; - dNewDimension = (dLastDimension - ElemDimVertList.Last().dDimension) / (value + 1 - nSplitQtyVert); + if (m_SplitVertList.Last().MeasureType is MeasureTypes.ABSOLUTE) + dNewDimension = (dLastDimension - ElemDimVertList.Last().dDimension) / (value + 1 - nSplitQtyVert); + else + dNewDimension = dLastDimension / (value + 1 - nSplitQtyVert); if (m_SplitVertList[m_SplitVertList.Count - 1].MeasureType.Equals(MeasureTypes.PROPORTIONAL)) dNewDimension = 1; m_SplitVertList[m_SplitVertList.Count - 1].SetDimension(dNewDimension); @@ -277,7 +316,9 @@ namespace WebWindowComplex.Models double dLastDimension = 0; for (var SplitIndex = m_SplitVertList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1) { - dLastDimension += m_SplitVertList[SplitIndex].dDimension + ElemDimVertList[SplitIndex - 1].dDimension; + dLastDimension += m_SplitVertList[SplitIndex].dDimension; + if(m_SplitVertList.Last().MeasureType.Equals(MeasureTypes.ABSOLUTE)) + dLastDimension += ElemDimVertList[SplitIndex - 1].dDimension; m_SplitVertList.RemoveAt(SplitIndex); } dLastDimension += m_SplitVertList[m_SplitVertList.Count - 1].dDimension; @@ -684,27 +725,37 @@ namespace WebWindowComplex.Models internal double HeightFrame() { + double dim = 0; switch (ParentWindow.AreaList.First().SelShapeIndex) { case (int)Shapes.RECTANGLE: case (int)Shapes.TRIANGLE: case (int)Shapes.ARC_FULL: { - return ParentWindow.AreaList.FirstOrDefault()!.DimensionList.Where(x => x.sName == "Height").First().dDimension; + dim = ParentWindow.AreaList.FirstOrDefault()!.DimensionList.Where(x => x.sName == "Height").First().dDimension; + break; } case (int)Shapes.RIGHTCHAMFER: { - return ParentWindow.AreaList.FirstOrDefault()!.DimensionList.Where(x => x.sName == "Left Height").First().dDimension; + dim = ParentWindow.AreaList.FirstOrDefault()!.DimensionList.Where(x => x.sName == "Left Height").First().dDimension; + break; } case (int)Shapes.LEFTCHAMFER: { - return ParentWindow.AreaList.FirstOrDefault()!.DimensionList.Where(x => x.sName == "Right Height").First().dDimension; + dim = ParentWindow.AreaList.FirstOrDefault()!.DimensionList.Where(x => x.sName == "Right Height").First().dDimension; + break; } default: { - return ParentWindow.AreaList.FirstOrDefault()!.DimensionList.Where(x => x.sName == "Full Height").First().dDimension; + dim = ParentWindow.AreaList.FirstOrDefault()!.DimensionList.Where(x => x.sName == "Full Height").First().dDimension; + break; } } + foreach(var elem in ElemDimHorizList) + { + dim = dim - elem.dDimension; + } + return dim; } #endregion Internal Methods diff --git a/WebWindowComplex/WebWindowComplex.csproj b/WebWindowComplex/WebWindowComplex.csproj index 76d5b81..746a1cb 100644 --- a/WebWindowComplex/WebWindowComplex.csproj +++ b/WebWindowComplex/WebWindowComplex.csproj @@ -6,7 +6,7 @@ net8.0 enable enable - 3.1.2.1710 + 3.1.2.1713 Annamaria Sassi Egalware Componente gestione Configurazioni avanzate Window per LUX @@ -161,6 +161,16 @@ + + + + + + + + + + diff --git a/WebWindowConfigurator/WebWindowConfigurator.csproj b/WebWindowConfigurator/WebWindowConfigurator.csproj index 4a251c7..7c31a18 100644 --- a/WebWindowConfigurator/WebWindowConfigurator.csproj +++ b/WebWindowConfigurator/WebWindowConfigurator.csproj @@ -6,7 +6,7 @@ net8.0 enable enable - 3.1.2.1710 + 3.1.2.1713 Annamaria Sassi Egalware Componente gestione JWD per LUX @@ -148,6 +148,14 @@ + + + + + + + +