- 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:
+168
-10
@@ -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>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user