- Gestita dimensione standard e solo luce per i cambi di tipologie di misure per sash e split

- Aggiornato metodo per cambiare numero di split
- Aggiornato metodo che calcola larghezza sashGroup e splitGroup
This commit is contained in:
Annamaria Sassi
2026-02-12 18:26:13 +01:00
parent a898ccced5
commit 44b1b8bbd3
16 changed files with 457 additions and 285 deletions
+168 -10
View File
@@ -267,8 +267,17 @@ namespace WebWindowComplex.Models
{
if (value > 0 && value <= 3)
{
double widthTot = CalculateWidthArea(ParentWindow.AreaList.First(), ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Width").First().dDimension); // TODO: width se anta è in un'area di split
//double widthTot = ((Frame)ParentArea).AvailArea();
Frame frame = (Frame)ParentWindow.AreaList.First();
double widthTot = 0;
if (bIsDimensionLight)
{
foreach (var item in m_SashList)
widthTot = widthTot + item.dDimension;
}
else
{
widthTot = CalculateWidthSashGroup(frame, frame.DimensionList.Where(x => x.sName == "Width").First().dDimension, new AreaFound(-1, false)).m_Dimension;
}
if (value > m_SashList.Count)
{
// recupero larghezza ultimo
@@ -277,9 +286,20 @@ namespace WebWindowComplex.Models
if (m_SashList.Count > 0)
{
dLastDimension = m_SashList[m_SashList.Count - 1].dDimension;
dNewDimension = dLastDimension / (value + 1 - nSashQty);
if (m_SashList[m_SashList.Count - 1].MeasureType.Equals(MeasureTypes.PROPORTIONAL))
dNewDimension = 1;
else if (m_SashList[m_SashList.Count - 1].MeasureType is MeasureTypes.PERCENTAGE)
dNewDimension = dLastDimension / (value + 1 - nSashQty);
else
{
if (bIsDimensionLight)
dNewDimension = (dLastDimension - m_SashList.Last().ElementDimensionList.ElementAt(1).dDimension
- m_SashList.Last().ElementDimensionList.Last().dDimension
+ m_SashList.Last().ElementDimensionList.Last().dOverlap) / 2;
else
dNewDimension = dLastDimension / (value + 1 - nSashQty)
+ (m_SashList.Last().ElementDimensionList.Last().dOverlap / 2);
}
m_SashList[m_SashList.Count - 1].SetDimension(dNewDimension);
}
else
@@ -301,28 +321,37 @@ namespace WebWindowComplex.Models
{
double dLastDimension = 0;
SashDimension itemDelete = new SashDimension(0, MeasureTypes.NULL, this, 0);
double deleteDim;
double deleteDim = 0;
double splitDelete = 0;
for (var SplitIndex = m_SashList.Count - 1; SplitIndex >= value; SplitIndex += -1)
{
//dLastDimension += m_SashList[SplitIndex].dDimension;
itemDelete = m_SashList[SplitIndex];
if(itemDelete.SelMeasureType is MeasureTypes.ABSOLUTE)
{
if (bIsDimensionLight)
splitDelete = m_SashList[m_SashList.Count - 2].ElementDimensionList.ElementAt(1).dDimension
+ m_SashList.Last().ElementDimensionList.Last().dDimension
- m_SashList.Last().ElementDimensionList.Last().dOverlap;
else
splitDelete = - m_SashList.Last().ElementDimensionList.Last().dOverlap;
}
SashList.RemoveAt(SplitIndex);
}
if (!itemDelete.SelMeasureType.Equals(m_SashList[SashList.Count - 1].SelMeasureType))
{
AreaDimension ad = new AreaDimension(itemDelete.dDimension, itemDelete.SelMeasureType);
AreaDimension ad = new AreaDimension(itemDelete.dDimension, itemDelete.SelMeasureType, itemDelete.Parent);
List<AreaDimension> adList = new List<AreaDimension>();
foreach (var it in SashList)
{
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType, it.Parent));
}
deleteDim = ad.ConvertDimension(adList, itemDelete.SelMeasureType, m_SashList[SashList.Count - 1].SelMeasureType, widthTot, m_SashList.IndexOf(itemDelete));
deleteDim = ad.ConvertDimension(adList, itemDelete.SelMeasureType, m_SashList[SashList.Count - 1].SelMeasureType, widthTot, m_SashList.IndexOf(itemDelete), SashList.Last().ElementDimensionList.Last().dOverlap);
}
else
{
deleteDim = itemDelete.dDimension;
}
dLastDimension = deleteDim + m_SashList[SashList.Count - 1].dDimension;
dLastDimension = deleteDim + m_SashList[SashList.Count - 1].dDimension + splitDelete;
SashList[SashList.Count - 1].SetDimension(dLastDimension);
if (value == 1)
SashList.First().SetHasHandle(true);
@@ -741,6 +770,7 @@ namespace WebWindowComplex.Models
{
m_IsbDimensionLight = DimensionLight;
}
internal static Sash CreateSash(Area Area)
{
Sash newSash = new Sash(Area, Area.ParentWindow);
@@ -1056,6 +1086,135 @@ namespace WebWindowComplex.Models
}
}
internal AreaFound CalculateWidthSashGroup(Area area, double width, AreaFound res)
{
for (int i = 0; i < area.AreaList.Count; i++)
{
if (area.Equals(this))
{
res.m_Dimension = width;
res.m_Found = true;
return res;
}
Area item = area.AreaList[i];
if (area is Split)
{
Split split = (Split)area;
if (split.SplitVertList.Count > 0)
{
double dim = width;
switch (split.SplitVertList.ElementAt(i).SelMeasureType)
{
case MeasureTypes.ABSOLUTE:
{
dim = split.SplitVertList.ElementAt(i).dDimension;
break;
}
case MeasureTypes.PROPORTIONAL:
{
double widthGlass = width;
AreaDimension ad = new AreaDimension(split.SplitVertList.ElementAt(i).dDimension, split.SplitVertList.ElementAt(i).SelMeasureType, split.SplitVertList.ElementAt(i).Parent);
List<AreaDimension> adList = new List<AreaDimension>();
foreach (var it in split.SplitVertList)
{
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType, it.Parent));
}
foreach (var elem in split.ElemDimVertList)
{
widthGlass = widthGlass - elem.dDimension;
}
dim = ad.ConvertFromPropVal(adList, MeasureTypes.ABSOLUTE, widthGlass);
break;
}
case MeasureTypes.PERCENTAGE:
{
foreach (var elem in split.ElemDimVertList)
{
dim = dim - elem.dDimension;
}
dim = split.SplitVertList.ElementAt(i).dDimension * dim / 100;
break;
}
}
if (split.ParentArea is Frame && split.AreaList.ElementAt(i).AreaList.First() is Sash)
{
Frame frame = (Frame)split.ParentArea;
string overlapName = string.Join("_", split.ElemDimVertList.First().sName.Split('_').Skip(1)) + "_Top_Overlap";
if (i == 0)
{
dim = dim + frame.ElementDimensionList.Last().dOverlap
+ Window.m_ParameterList.GetValueOrDefault(overlapName);
}
else if (i == split.SplitVertList.Count - 1)
{
dim = dim + frame.ElementDimensionList.ElementAt(1).dOverlap
+ Window.m_ParameterList.GetValueOrDefault(overlapName);
}
else
{
dim = dim + Window.m_ParameterList.GetValueOrDefault(overlapName)
+ Window.m_ParameterList.GetValueOrDefault(overlapName);
}
}
res = CalculateWidthSashGroup(item, dim, res);
if (res.m_Dimension != -1 && res.m_Found)
return res;
}
else
{
res = CalculateWidthSashGroup(item, width, res);
if (res.m_Dimension != -1 && res.m_Found)
return res;
}
}
else if (area is Sash)
{
Sash sash = (Sash)area;
switch (sash.SashList.ElementAt(i).SelMeasureType)
{
case MeasureTypes.ABSOLUTE:
{
res = CalculateWidthSashGroup(item, sash.SashList.ElementAt(i).dDimension, res);
break;
}
case MeasureTypes.PROPORTIONAL:
{
SashDimension anta = sash.SashList.ElementAt(i);
AreaDimension ad = new AreaDimension(anta.dDimension, anta.SelMeasureType, anta.Parent);
List<AreaDimension> adList = new List<AreaDimension>();
foreach (var it in sash.SashList)
{
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType, it.Parent));
}
res = CalculateWidthSashGroup(item, ad.ConvertFromPropVal(adList, MeasureTypes.ABSOLUTE, width), res);
break;
}
case MeasureTypes.PERCENTAGE:
{
res = CalculateWidthSashGroup(item, sash.SashList.ElementAt(i).dDimension * width / 100, res);
break;
}
}
if (res.m_Dimension != -1 && res.m_Found)
return res;
}
else if (area is Frame)
{
Frame f = (Frame)area;
res = CalculateWidthSashGroup(item, f.AvailWidthArea(), res);
if (res.m_Dimension != -1 && res.m_Found)
return res;
}
else
{
res = CalculateWidthSashGroup(item, width, res);
if (res.m_Dimension != -1 && res.m_Found)
return res;
}
}
return res;
}
#endregion Internal Methods
#region Private Fields
@@ -1079,7 +1238,6 @@ namespace WebWindowComplex.Models
private int m_nSashBottomRailQty;
private List<ElementDimension> m_ElementDimensionList = new List<ElementDimension>();
private List<ElementDimension> m_BottomRailElemDimList = new List<ElementDimension>();
private List<IdNameStruct> m_OrientationSashTypeList = new List<IdNameStruct>
{