Files
Annamaria Sassi 396cecf492 - Correzione per eliminazione inglesina
- Correzione associazione famiglia hardware
2026-04-29 10:19:54 +02:00

469 lines
24 KiB
C#

using WebWindowComplex.Json;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Models
{
public class Inglesina : Split
{
public Inglesina(Area ParentArea, Window ParentWindow) : base(ParentArea, ParentWindow)
{
}
public int SelSideIndex
{
get
{
return (int)m_SelSide;
}
set
{
m_SelSide = (SideInglesina)value;
}
}
internal override JsonArea Serialize(bool hideHw)
{
if (nCounterGroup < GroupId)
Area.nCounterGroup = GroupId;
JsonInglesina JsonInglesina = new JsonInglesina(m_SelSide, SelSplitShape, GroupId);
JsonInglesina.SplitStartVert = bSplitStartVert;
foreach (var SplitVert in SplitVertList)
JsonInglesina.SplitVertList.Add(SplitVert.Serialize());
foreach (var SplitHoriz in SplitHorizList)
JsonInglesina.SplitHorizList.Add(SplitHoriz.Serialize());
if (ElemDimHorizList != null && ElemDimHorizList.Count > 0)
{
int subAreaMinHoriz = ElemDimHorizList.Min(x => x.nSubArea);
List<SplitElementDimension> horizList = ElemDimHorizList.Where(x => x.nSubArea == subAreaMinHoriz).ToList();
foreach (var Elem in horizList)
JsonInglesina.ElementDimHorizList.Add(Elem.Serialize());
}
if (ElemDimVertList != null && ElemDimVertList.Count > 0)
{
int subAreaMinVert = ElemDimVertList.Min(x => x.nSubArea);
List<SplitElementDimension> vertList = ElemDimVertList.Where(x => x.nSubArea == subAreaMinVert).ToList();
foreach (var Elem in vertList.ToList())
JsonInglesina.ElementDimVertList.Add(Elem.Serialize());
}
foreach (var Area in AreaList)
JsonInglesina.AreaList.Add(Area.Serialize(hideHw));
return JsonInglesina;
}
internal static Inglesina CreateInglesina(Area Area, SplitShapes SplitShape)
{
Inglesina inglesina = new Inglesina(Area, Area.ParentWindow);
AddCounterGroup();
inglesina.SetGroupId(nCounterGroup);
inglesina.SetAreaType(AreaTypes.INGLESINA);
inglesina.SetSplitShape(SplitShape);
inglesina.SetSelSide(SideInglesina.BOTH);
return inglesina;
}
public override Inglesina Copy(Area newParentArea)
{
Inglesina newInglesina = new Inglesina(newParentArea, m_ParentWindow);
AddCounterGroup();
newInglesina.SetGroupId(nCounterGroup);
newInglesina.SetSelSide(m_SelSide);
newInglesina.SetSplitStartVert(bSplitStartVert);
for (int i = 0; i < SplitVertList.Count; i++)
newInglesina.SplitVertList.Add(SplitVertList[i].Copy());
for (int i = 0; i < SplitHorizList.Count; i++)
newInglesina.SplitHorizList.Add(SplitHorizList[i].Copy());
newInglesina.SetSplitShape(SelSplitShape);
newInglesina.SetAreaType(AreaType);
foreach (var item in ElemDimHorizList)
{
SplitElementDimension newElementDimension = item.Copy();
newInglesina.ElemDimHorizList.Add(newElementDimension);
}
foreach (var item in ElemDimVertList)
{
SplitElementDimension newElementDimension = item.Copy();
newInglesina.ElemDimVertList.Add(newElementDimension);
}
if (AreaList != null && AreaList.Count > 0)
{
foreach (var item in AreaList)
{
Area a = item.Copy(newInglesina);
newInglesina.AreaList.Add(a);
}
}
return newInglesina;
}
internal void SetSelSide(SideInglesina side)
{
m_SelSide = side;
}
public List<IdNameStruct> SideList
{
get
{
return m_SideList;
}
}
public override int nSplitQtyHoriz
{
get
{
return SplitHorizList.Count > 0 ? SplitHorizList.Count - 1 : 0;
}
set
{
if (value >= 0 && value < 6)
{
if (value == 0)
{
for (var SplitIndex = SplitHorizList.Count - 1; SplitIndex >= value; SplitIndex += -1)
SplitHorizList.RemoveAt(SplitIndex);
if (nSplitQtyVert == 0)
{
ParentArea.AreaList.Remove(this);
}
else
{
ElemDimHorizList.Clear();
SetSplitShape(SplitShapes.VERTICAL);
SetSplitStartVert(true);
// Controllo quanti split orizzontali ci sono
int nVert = SplitVertList.Count > 0 ? SplitVertList.Count : 1;
// Cancello aree di troppo
for (var SplitIndex = nVert; SplitIndex <= AreaList.Count; SplitIndex++)
AreaList.RemoveAt(AreaList.Count - 1);
}
}
else
{
Frame? frame = ParentWindow.AreaList.FirstOrDefault();
if (frame != null)
{
double heightTot = CalculateHeightSplitGroup(frame, frame.AvailHeightArea(), new AreaFound(-1, false)).m_Dimension;
// Ricalcolo dimensioni aggiungendo split
if (value > SplitHorizList.Count - 1)
{
// recupero larghezza ultimo
double dLastDimension = heightTot;
double dNewDimension = heightTot;
if (SplitHorizList.Count > 0)
{
dLastDimension = SplitHorizList[SplitHorizList.Count - 1].dDimension;
if (SplitHorizList.Last().MeasureType is MeasureTypes.ABSOLUTE)
dNewDimension = (dLastDimension - ElemDimHorizList.Last().dDimension) / (value + 1 - nSplitQtyHoriz);
else
dNewDimension = dLastDimension / (value + 1 - nSplitQtyHoriz);
if (SplitHorizList[SplitHorizList.Count - 1].MeasureType.Equals(MeasureTypes.PROPORTIONAL))
dNewDimension = 1;
SplitHorizList[SplitHorizList.Count - 1].SetDimension(dNewDimension);
}
else
dNewDimension = dLastDimension / (value + 1 - nSplitQtyHoriz);
// aggiungo area Split di default
for (var SplitIndex = SplitHorizList.Count; SplitIndex <= value; SplitIndex++)
SplitHorizList.Add(new SplitDimension(dNewDimension, SplitHorizList[SplitHorizList.Count - 1].MeasureType, true, this, false));
double thickness = SetThickness();
if (!bSplitStartVert)
{
//Aggiungo un elemento alla sottoarea principale
SplitElementDimension newElemDim = ElemDimHorizList.First().Copy();
newElemDim.SetElement(ElemDimHorizList.Max(x => x.nIndex) + 1, thickness, 0);
ElemDimHorizList.Add(newElemDim);
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++)
{
newElemDim = ElemDimVertList.First().Copy();
newElemDim.SetElement(i, thickness, subArea);
ElemDimVertList.Add(newElemDim);
}
}
}
else
{
// Aggiungo a tutte le sottoaree degli element
for (int i = 1; i <= ElemDimHorizList.Max(x => x.nSubArea); i++)
{
int index = ElemDimHorizList.Where(x => x.nSubArea == i).Max(x => x.nIndex);
SplitElementDimension newElemDim = ElemDimVertList.First().Copy();
newElemDim.SetElement(index + 1, thickness, i);
ElemDimHorizList.Insert(index * i + (i - 1), newElemDim);
}
}
}
// Ricalcolo dimensioni rimuovendo split
else
{
int countProportional = SplitHorizList.Count(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL));
if (SplitHorizList.Last().MeasureType.Equals(MeasureTypes.PROPORTIONAL) && countProportional - 1 == 1)
{
SplitHorizList.RemoveAt(SplitVertList.Count() - 1);
SplitHorizList.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).FirstOrDefault()?.SetDimension(1);
}
else
{
double dLastDimension = 0;
for (var SplitIndex = SplitHorizList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1)
{
dLastDimension += SplitHorizList[SplitIndex].dDimension;
if (SplitHorizList.Last().MeasureType.Equals(MeasureTypes.ABSOLUTE))
dLastDimension += ElemDimHorizList[SplitIndex - 1].dDimension;
SplitHorizList.RemoveAt(SplitIndex);
}
dLastDimension += SplitHorizList[SplitHorizList.Count - 1].dDimension;
SplitHorizList[SplitHorizList.Count - 1].SetDimension(dLastDimension);
}
if (bSplitStartVert)
{
// Rimuovo da tutte le sottoaree gli element
for (int subArea = 1; subArea <= ElemDimHorizList.Max(x => x.nSubArea); subArea++)
{
List<SplitElementDimension> elemDimList = ElemDimHorizList.Where(x => x.nSubArea == subArea).OrderByDescending(x => x.nIndex).ToList();
for (var SplitIndex = elemDimList.Count - 1; SplitIndex >= value; SplitIndex += -1)
{
ElemDimHorizList.Remove(elemDimList.ElementAt(elemDimList.Count - 1));
}
}
}
else
{
int deleteSubArea = ElemDimHorizList.Count + 1;
for (var SplitIndex = ElemDimHorizList.Count - 1; SplitIndex >= value; SplitIndex += -1)
{
ElemDimHorizList.RemoveAt(ElemDimHorizList.Count - 1);
}
if (nSplitQtyVert > 0)
ElemDimVertList.RemoveAll(x => x.nSubArea == deleteSubArea);
}
}
}
}
}
}
}
public override int nSplitQtyVert
{
get
{
return SplitVertList.Count > 0 ? SplitVertList.Count - 1 : 0;
}
set
{
if (value >= 0 && value < 6)
{
if (value == 0)
{
for (var SplitIndex = SplitVertList.Count - 1; SplitIndex >= value; SplitIndex += -1)
SplitVertList.RemoveAt(SplitIndex);
if (nSplitQtyHoriz == 0)
{
ParentArea.AreaList.Remove(this);
}
else
{
ElemDimVertList.Clear();
SetSplitShape(SplitShapes.HORIZONTAL);
SetSplitStartVert(false);
// Controllo quanti split orizzontali ci sono
int nHoriz = SplitHorizList.Count > 0 ? SplitHorizList.Count : 1;
// Cancello aree di troppo
for (var SplitIndex = nHoriz; SplitIndex <= AreaList.Count; SplitIndex++)
AreaList.RemoveAt(AreaList.Count - 1);
}
}
else
{
Frame? frame = ParentWindow.AreaList.FirstOrDefault();
if (frame != null)
{
double widthTot = CalculateWidthSplitGroup(frame, frame.AvailWidthArea(), new AreaFound(-1, false)).m_Dimension;
// Ricalcolo dimensioni aggiungendo split
if (value > SplitVertList.Count - 1)
{
// recupero larghezza ultimo
double dLastDimension = widthTot;
double dNewDimension = widthTot;
if (SplitVertList.Count > 0)
{
dLastDimension = SplitVertList[SplitVertList.Count - 1].dDimension;
if (SplitVertList.Last().MeasureType is MeasureTypes.ABSOLUTE)
dNewDimension = (dLastDimension - ElemDimVertList.Last().dDimension) / (value + 1 - nSplitQtyVert);
else
dNewDimension = dLastDimension / (value + 1 - nSplitQtyVert);
if (SplitVertList[SplitVertList.Count - 1].MeasureType.Equals(MeasureTypes.PROPORTIONAL))
dNewDimension = 1;
SplitVertList[SplitVertList.Count - 1].SetDimension(dNewDimension);
}
else
dNewDimension = dLastDimension / (value + 1 - nSplitQtyVert);
// aggiungo area Split di default
for (var SplitIndex = SplitVertList.Count; SplitIndex <= value; SplitIndex++)
SplitVertList.Add(new SplitDimension(dNewDimension, SplitVertList[SplitVertList.Count - 1].MeasureType, true, this, true));
double thickness = SetThickness();
if (bSplitStartVert)
{
//Aggiungo un elemento alla sottoarea principale
SplitElementDimension newElemDim = ElemDimVertList.First().Copy();
newElemDim.SetElement(ElemDimVertList.Max(x => x.nIndex) + 1, thickness, 0);
ElemDimVertList.Add(newElemDim);
if (nSplitQtyHoriz > 0)
{
// Aggiungo a tutte le sottoaree degli element
int subArea = ElemDimHorizList.Max(x => x.nSubArea) + 1;
for (int i = 1; i <= ElemDimHorizList.Max(x => x.nIndex); i++)
{
newElemDim = ElemDimHorizList.First().Copy();
newElemDim.SetElement(i, thickness, subArea);
ElemDimHorizList.Add(newElemDim);
}
}
}
else
{
// Aggiungo a tutte le sottoaree un elemento
for (int i = 1; i <= ElemDimVertList.Max(x => x.nSubArea); i++)
{
int index = ElemDimVertList.Where(x => x.nSubArea == i).Max(x => x.nIndex);
SplitElementDimension newElemDim = ElemDimVertList.First().Copy();
newElemDim.SetElement(index + 1, thickness, i);
ElemDimVertList.Insert(index * i + (i - 1), newElemDim);
}
}
}
else if (value == 0)
{
SplitVertList.RemoveAt(1);
SplitVertList.RemoveAt(0);
}
// Ricalcolo dimensioni rimuovendo split
else
{
int countProportional = SplitVertList.Count(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL));
if (SplitVertList.Last().MeasureType.Equals(MeasureTypes.PROPORTIONAL) && countProportional - 1 == 1)
{
SplitVertList.RemoveAt(SplitVertList.Count() - 1);
SplitVertList.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).FirstOrDefault()?.SetDimension(1);
}
else
{
double dLastDimension = 0;
for (var SplitIndex = SplitVertList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1)
{
dLastDimension += SplitVertList[SplitIndex].dDimension;
if (SplitVertList.Last().MeasureType.Equals(MeasureTypes.ABSOLUTE))
dLastDimension += ElemDimVertList[SplitIndex - 1].dDimension;
SplitVertList.RemoveAt(SplitIndex);
}
dLastDimension += SplitVertList[SplitVertList.Count - 1].dDimension;
SplitVertList[SplitVertList.Count - 1].SetDimension(dLastDimension);
}
if (bSplitStartVert)
{
int deleteSubArea = ElemDimVertList.Count + 1;
for(var SplitIndex = ElemDimVertList.Count - 1; SplitIndex >= value; SplitIndex += -1)
{
ElemDimVertList.RemoveAt(ElemDimVertList.Count - 1);
}
if (nSplitQtyHoriz > 0)
ElemDimHorizList.RemoveAll(x => x.nSubArea == deleteSubArea);
}
else
{
// Rimuovo da tutte le sottoaree degli element l'ultimo elemento
for (int subArea = 1; subArea <= ElemDimVertList.Max(x => x.nSubArea); subArea++)
{
List<SplitElementDimension> elemDimList = ElemDimVertList.Where(x => x.nSubArea == subArea).OrderByDescending(x => x.nIndex).ToList();
ElemDimVertList.Remove(elemDimList.ElementAt(elemDimList.Count - 1));
}
}
}
}
}
}
}
}
public override int SelSplitShapeIndex
{
get
{
return (int)SelSplitShape;
}
set
{
SplitShapes OldSelShapeSplit = SelSplitShape;
SelSplitShape = (SplitShapes)value;
// Azzero quantità orizzontale e verticale
SetSplitQtyVert(0, 0);
SetSplitQtyHoriz(0, 0);
if (SelSplitShape == SplitShapes.VERTICAL)
{
// Inserisco valori di default
SetSplitStartVert(true);
SetSplitQtyVert(1, 0);
}
else if (SelSplitShape == SplitShapes.HORIZONTAL)
{
// Inserisco valori di default
SetSplitStartVert(false);
SetSplitQtyHoriz(1, 0);
}
else
{
// Inserisco valori di default
SetSplitStartVert(true);
SetSplitQtyVert(1, 1);
SetSplitQtyHoriz(1, 1);
}
UpdateSubAreaSplit();
}
}
internal override double SetThickness()
{
double thickness = Window.m_ParameterList.GetValueOrDefault("Fill_Fill_Split_In_DimStd");
if (ParentArea.ParentArea.ParentArea is Sash sash)
{
SashDimension anta = sash.SashList[0];
if (anta.SelOpeningType is Openings.COMPLANARSLIDE_LEFT ||
anta.SelOpeningType is Openings.COMPLANARSLIDE_RIGHT ||
anta.SelOpeningType is Openings.LIFTSLIDE_LEFT ||
anta.SelOpeningType is Openings.COMPLANARSLIDE_RIGHT)
{
if (m_SelSide is SideInglesina.INTERNAL)
thickness = Window.m_ParameterList.GetValueOrDefault("Fill_Slide_Fill_Split_In_DimStd");
else
thickness = Window.m_ParameterList.GetValueOrDefault("Fill_Slide_Fill_Split_Out_DimStd");
}
else
{
if (m_SelSide is SideInglesina.INTERNAL)
thickness = Window.m_ParameterList.GetValueOrDefault("Fill_Fill_Split_In_DimStd");
else
thickness = Window.m_ParameterList.GetValueOrDefault("Fill_Fill_Split_Out_DimStd");
}
}
else
{
if (m_SelSide is SideInglesina.EXTERNAL)
thickness = Window.m_ParameterList.GetValueOrDefault("Fill_Fill_Split_Out_DimStd");
}
return thickness;
}
private List<IdNameStruct> m_SideList = new List<IdNameStruct>
{
new IdNameStruct((int)SideInglesina.INTERNAL, "Internal"),
new IdNameStruct((int)SideInglesina.EXTERNAL, "External"),
new IdNameStruct((int)SideInglesina.BOTH, "Both")
};
private SideInglesina m_SelSide;
}
}