Aggiunto componente semplificato (per utente base)
This commit is contained in:
@@ -50,9 +50,18 @@ namespace WebWindowTest.Models
|
||||
public AGBOptionText(ParametriOpzioniParametri HdwOptionParam) : base(HdwOptionParam)
|
||||
{
|
||||
m_Type = HwOptionTypes.TEXT;
|
||||
foreach (var Value in HdwOptionParam.Opzioni)
|
||||
m_ValueList.Add(Value.Valore);
|
||||
m_sValue = m_ValueList.FirstOrDefault(x => x == HdwOptionParam.ValoreCorrente) ?? "";
|
||||
if(HdwOptionParam.Opzioni != null)
|
||||
{
|
||||
foreach (var Value in HdwOptionParam.Opzioni)
|
||||
m_ValueList.Add(Value.Valore);
|
||||
m_sValue = m_ValueList.FirstOrDefault(x => x == HdwOptionParam.ValoreCorrente);
|
||||
if (string.IsNullOrEmpty(m_sValue))
|
||||
m_sValue = m_ValueList.FirstOrDefault();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_sValue = HdwOptionParam.ValoreCorrente;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
+439
-13
@@ -1,4 +1,5 @@
|
||||
using WebWindowTest.Json;
|
||||
using System.ComponentModel.Design;
|
||||
using WebWindowTest.Json;
|
||||
using static WebWindowTest.Json.WindowConst;
|
||||
|
||||
namespace WebWindowTest.Models
|
||||
@@ -69,7 +70,6 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_nAreaId = value;
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,8 +108,15 @@ namespace WebWindowTest.Models
|
||||
SashArea.SetSelFamilyHardware("");
|
||||
// Inserisco hardware di default
|
||||
SashArea.SetSelHardwareFromId("000000");
|
||||
//if (ParentWindow.AreaList.First().SelShapeIndex == (int)Shapes.ARC ||
|
||||
// ParentWindow.AreaList.First().SelShapeIndex == (int)Shapes.DOUBLEARC ||
|
||||
// ParentWindow.AreaList.First().SelShapeIndex == (int)Shapes.ARC_FULL ||
|
||||
// ParentWindow.AreaList.First().SelShapeIndex == (int)Shapes.THREECENTERARC)
|
||||
// SashArea.SashArcElem = new SashArcElement(SashArea, ParentWindow, 10, true);
|
||||
//else
|
||||
// SashArea.SashArcElem = null;
|
||||
// Salvo gli oggetti già presenti e li cancello da AreaList
|
||||
List<Area> ContentArea = new List<Area>();
|
||||
List <Area> ContentArea = new List<Area>();
|
||||
ContentArea.Add(AreaList[0]);
|
||||
AreaList.Remove(AreaList[0]);
|
||||
// Aggiungo area
|
||||
@@ -117,8 +124,6 @@ namespace WebWindowTest.Models
|
||||
// Inserisco il riempimento precedente
|
||||
AreaList[0].AreaList.Add(ContentArea[0]);
|
||||
AreaList[0].AreaList[0].SetParentArea(AreaList[0]);
|
||||
// Richiesta SVG con hardware di default
|
||||
ParentWindow.OnUpdatePreview(ParentWindow.sSerialized());
|
||||
}
|
||||
|
||||
public void AddSplit()
|
||||
@@ -140,24 +145,23 @@ namespace WebWindowTest.Models
|
||||
List<Splitted> newSplittedList = new List<Splitted>();
|
||||
for (int i = 0; i < 2; i++)
|
||||
newSplittedList.Add(Splitted.CreateSplitted(SplitArea));
|
||||
// Inserisco nelle aree Splitted il Fill salvato e un Fill uguale (e setto ParentArea del fill)
|
||||
ContentArea[0].SetParentArea(newSplittedList[0]);
|
||||
newSplittedList[0].AreaList.Add(ContentArea[0]);
|
||||
// Inserisco nelle aree Splitted Fill e la struttura precedente (e setto ParentArea del fill)
|
||||
ContentArea[0].SetParentArea(newSplittedList[1]);
|
||||
newSplittedList[1].AreaList.Add(ContentArea[0]);
|
||||
if (ContentArea[0] is Fill)
|
||||
{
|
||||
Fill fill1 = (Fill)ContentArea[0];
|
||||
Fill fill2 = Fill.CreateFill(newSplittedList[1], fill1.FillType);
|
||||
newSplittedList[1].AreaList.Add(fill2);
|
||||
Fill fill2 = Fill.CreateFill(newSplittedList[0], fill1.FillType);
|
||||
newSplittedList[0].AreaList.Add(fill2);
|
||||
}
|
||||
else
|
||||
{
|
||||
Fill fill2 = Fill.CreateFill(newSplittedList[1], FillTypes.GLASS);
|
||||
newSplittedList[1].AreaList.Add(fill2);
|
||||
Fill fill2 = Fill.CreateFill(newSplittedList[0], FillTypes.GLASS);
|
||||
newSplittedList[0].AreaList.Add(fill2);
|
||||
}
|
||||
// All'area Split aggiunto le due aree Splitted
|
||||
for (int i = 0; i < 2; i++)
|
||||
AreaList[0].AreaList.Add(newSplittedList[i]);
|
||||
ParentWindow.OnUpdatePreview(ParentWindow.sSerialized());
|
||||
}
|
||||
|
||||
public abstract Area Copy(Area ParentArea);
|
||||
@@ -176,6 +180,202 @@ namespace WebWindowTest.Models
|
||||
AreaList[0] = AreaList[1];
|
||||
AreaList[1] = tempArea;
|
||||
}
|
||||
Frame frame = ParentWindow.AreaList.First();
|
||||
switch (frame.Shape)
|
||||
{
|
||||
case Shapes.RECTANGLE:
|
||||
case Shapes.ARC_FULL:
|
||||
case Shapes.TRIANGLE:
|
||||
{
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Width")).First().dDimension, "Width");
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Height")).First().dDimension, "Height");
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.RIGHTCHAMFER:
|
||||
{
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Width")).First().dDimension, "Width");
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Left Height")).First().dDimension, "Left Height");
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.LEFTCHAMFER:
|
||||
{
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Width")).First().dDimension, "Width");
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Right Height")).First().dDimension, "Right Height");
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.DOUBLECHAMFER:
|
||||
case Shapes.ARC:
|
||||
{
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Width")).First().dDimension, "Width");
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Full Height")).First().dDimension, "Full Height");
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.DOUBLEARC:
|
||||
{
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Width")).First().dDimension, "Width");
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Full Height")).First().dDimension, "Full Height");
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.THREECENTERARC:
|
||||
{
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Width")).First().dDimension, "Width");
|
||||
SearchAreaList(this, frame.DimensionList.Where(x => x.sName.Equals("Full Height")).First().dDimension, "Full Height");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cerca nell'albero gli oggetti Sash e Split per associare la larghezza
|
||||
/// </summary>
|
||||
/// <param name="node"></param>
|
||||
public void SearchAreaList(Area node, double dim, string nameDim)
|
||||
{
|
||||
if (node != null)
|
||||
{
|
||||
if (node.AreaType.Equals(AreaTypes.SASH))
|
||||
UpdateDimSubArea((Sash)node, dim, nameDim);
|
||||
else if (node.AreaType.Equals(AreaTypes.SPLIT))
|
||||
UpdateDimSubArea((Split)node, dim, nameDim);
|
||||
for (int i = 0; i < node.AreaList.Count; i++)
|
||||
{
|
||||
if (node.AreaType.Equals(AreaTypes.SASH))
|
||||
{
|
||||
Sash s = (Sash)node;
|
||||
List<AreaDimension> dimList = new List<AreaDimension>();
|
||||
foreach (var item in s.SashList)
|
||||
dimList.Add(new AreaDimension(item.dDimension, item.MeasureType));
|
||||
if(nameDim.Equals("Width"))
|
||||
SearchAreaList(node.AreaList.ElementAt(i), s.SashList.ElementAt(i).CalculateAbsoluteValue(dimList, dim), nameDim);
|
||||
else
|
||||
SearchAreaList(node.AreaList.ElementAt(i), dim, nameDim);
|
||||
}
|
||||
else if (node.AreaType.Equals(AreaTypes.SPLIT))
|
||||
{
|
||||
Split s = (Split)node;
|
||||
List<AreaDimension> dimList = new List<AreaDimension>();
|
||||
if (s.SplitHorizList.Count > 0 && i < s.SplitHorizList.Count)
|
||||
{
|
||||
foreach (var item in s.SplitHorizList)
|
||||
dimList.Add(new AreaDimension(item.dDimension, item.MeasureType));
|
||||
if(nameDim.Equals("Width"))
|
||||
SearchAreaList(node.AreaList.ElementAt(i), dim, nameDim);
|
||||
else
|
||||
SearchAreaList(node.AreaList.ElementAt(i), s.SplitHorizList.ElementAt(i).CalculateAbsoluteValue(dimList, dim), nameDim);
|
||||
}
|
||||
if (s.SplitVertList.Count > 0 && i < s.SplitVertList.Count)
|
||||
{
|
||||
foreach (var item in s.SplitVertList)
|
||||
dimList.Add(new AreaDimension(item.dDimension, item.MeasureType));
|
||||
if(nameDim.Equals("Width"))
|
||||
SearchAreaList(node.AreaList.ElementAt(i), s.SplitVertList.ElementAt(i).CalculateAbsoluteValue(dimList, dim), nameDim);
|
||||
else
|
||||
SearchAreaList(node.AreaList.ElementAt(i), dim, nameDim);
|
||||
}
|
||||
}
|
||||
else
|
||||
SearchAreaList(node.AreaList.ElementAt(i), dim, nameDim);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateDimSubArea(Area area, double dim, string nameDim)
|
||||
{
|
||||
if (area is Sash && nameDim.Equals("Width"))
|
||||
{
|
||||
Sash sash = (Sash)area;
|
||||
int countAbsolute = sash.SashList.Where(x => x.MeasureType.Equals(MeasureTypes.ABSOLUTE)).Count();
|
||||
int countProportional = sash.SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).Count();
|
||||
int countPercentage = sash.SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).Count();
|
||||
List<AreaDimension> dimList = new List<AreaDimension>();
|
||||
Split split = new Split(null, null);
|
||||
if (sash.ParentArea.ParentArea is Split)
|
||||
split = (Split)sash.ParentArea.ParentArea;
|
||||
if (sash.ParentArea is Frame || (sash.ParentArea.ParentArea is Split && split.SplitHorizList.Count > 0))
|
||||
{
|
||||
Frame frame = new Frame(null, null);
|
||||
if(split.SplitHorizList.Count > 0)
|
||||
frame = (Frame)sash.ParentArea.ParentArea.ParentArea;
|
||||
else
|
||||
frame = (Frame)sash.ParentArea;
|
||||
foreach (var i in frame.DimensionList)
|
||||
dimList.Add(new AreaDimension(i.dDimension, i.SelMeasureType));
|
||||
}
|
||||
else
|
||||
{
|
||||
//Split s = (Split)sash.ParentArea.ParentArea;
|
||||
foreach (var i in split.SplitVertList)
|
||||
dimList.Add(new AreaDimension(i.dDimension, i.SelMeasureType));
|
||||
}
|
||||
if (countAbsolute == sash.SashList.Count)
|
||||
{
|
||||
double sum = sash.SashList.Sum(x => x.dDimension);
|
||||
double res = dim - sum;
|
||||
if (res > 0)
|
||||
{
|
||||
foreach (var sashDim in sash.SashList)
|
||||
{
|
||||
sashDim.SetDimension(sashDim.dDimension + res / countAbsolute);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var sashDim in sash.SashList)
|
||||
{
|
||||
// Sommo perchè res è negativo
|
||||
sashDim.SetDimension(sashDim.dDimension + res / countAbsolute);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (countAbsolute < sash.SashList.Count && countPercentage != sash.SashList.Count && countProportional != sash.SashList.Count)
|
||||
{
|
||||
if (countPercentage > 0 && countPercentage <= sash.SashList.Count && countProportional == 0)
|
||||
{
|
||||
double sumAbsolute = sash.SashList.Where(x => x.MeasureType.Equals(MeasureTypes.ABSOLUTE)).Sum(x => x.dDimension);
|
||||
var percentageList = sash.SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).ToList();
|
||||
foreach (var i in percentageList)
|
||||
{
|
||||
i.SetDimension(i.ConvertIn(dimList, (dim - sumAbsolute) / countPercentage, i.MeasureType, dim));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (area is Split)
|
||||
{
|
||||
Split split = (Split)area;
|
||||
List<SplitDimension> splitList = new List<SplitDimension>();
|
||||
if (nameDim.Equals("Width"))
|
||||
splitList = split.SplitVertList;
|
||||
else
|
||||
splitList = split.SplitHorizList;
|
||||
int countAbsolute = splitList.Where(x => x.MeasureType.Equals(MeasureTypes.ABSOLUTE)).Count();
|
||||
if (countAbsolute != 0 && countAbsolute == splitList.Count)
|
||||
{
|
||||
double sum = splitList.Sum(x => x.dDimension);
|
||||
double res = 0;
|
||||
res = dim - sum;
|
||||
if (res > 0)
|
||||
{
|
||||
foreach (var item in splitList)
|
||||
{
|
||||
item.SetDimension(item.dDimension + res / countAbsolute);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var item in splitList)
|
||||
{
|
||||
// Sommo perchè res è negativo
|
||||
item.SetDimension(item.dDimension + res / countAbsolute);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
@@ -194,6 +394,232 @@ namespace WebWindowTest.Models
|
||||
m_ParentArea = ParentArea;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per convertire da misura proporzionale a misura assoluta o percentuale
|
||||
/// </summary>
|
||||
/// <param name="newType"></param>
|
||||
/// <returns></returns>
|
||||
internal double ConvertFromPropVal(Sash sashGroup, double sashDim, MeasureTypes newType, double widthTot)
|
||||
{
|
||||
double tot = widthTot;
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in sashGroup.SashList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
//Somma misura non proporzionali
|
||||
double sumNotProp = sashGroup.SashList
|
||||
.Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL && !m.Equals(this))
|
||||
.Sum(m => m.CalculateAbsoluteValue(adList, tot));
|
||||
//Calcolo residuo
|
||||
double res = tot - sumNotProp;
|
||||
if (res < 0) res = 0;
|
||||
//Misure proporzionali
|
||||
var proportionalList = sashGroup.SashList
|
||||
.Where(m => m.SelMeasureType == MeasureTypes.PROPORTIONAL)
|
||||
.ToList();
|
||||
|
||||
double sumPesi = proportionalList.Sum(p => p.dDimension);
|
||||
if (sumPesi == 0) sumPesi = 1;
|
||||
if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
{
|
||||
return res / sumPesi * sashDim;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (res / sumPesi * sashDim) / tot * 100;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per convertire da misura proporzionale a misura assoluta o percentuale
|
||||
/// </summary>
|
||||
/// <param name="newType"></param>
|
||||
/// <returns></returns>
|
||||
internal double ConvertFromPropVal(List<SplitDimension> splitList, double splitDim, MeasureTypes newType, double widthTot)
|
||||
{
|
||||
double tot = widthTot;
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in splitList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
//Somma misura non proporzionali
|
||||
double sumNotProp = splitList
|
||||
.Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL && !m.Equals(this))
|
||||
.Sum(m => m.CalculateAbsoluteValue(adList, tot));
|
||||
//Calcolo residuo
|
||||
double res = tot - sumNotProp;
|
||||
if (res < 0) res = 0;
|
||||
//Misure proporzionali
|
||||
var proportionalList = splitList
|
||||
.Where(m => m.SelMeasureType == MeasureTypes.PROPORTIONAL)
|
||||
.ToList();
|
||||
|
||||
double sumPesi = proportionalList.Sum(p => p.dDimension);
|
||||
if (sumPesi == 0)
|
||||
sumPesi = 1;
|
||||
return res / sumPesi * splitDim;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per calcolare larghezza area
|
||||
/// </summary>
|
||||
/// <param name="area"> area di partenza </param>
|
||||
/// <param name="width"> larghezza di partenza </param>
|
||||
/// <returns></returns>
|
||||
public double CalculateWidthArea(Area area, double width)
|
||||
{
|
||||
for (int i = 0; i < area.AreaList.Count; i++)
|
||||
{
|
||||
double risultato = -1;
|
||||
if (area.Equals(this))
|
||||
return width;
|
||||
Area item = area.AreaList[i];
|
||||
if (area is Split)
|
||||
{
|
||||
Split split = (Split)area;
|
||||
if (split.SplitVertList.Count > 0)
|
||||
{
|
||||
switch (split.SplitVertList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
risultato = CalculateWidthArea(item, split.SplitVertList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
risultato = CalculateWidthArea(item, ConvertFromPropVal(split.SplitVertList, split.SplitVertList.ElementAt(i).dDimension, MeasureTypes.ABSOLUTE, width));
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
risultato = CalculateWidthArea(item, split.SplitVertList.ElementAt(i).dDimension * width / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
risultato = CalculateWidthArea(item, width);
|
||||
}
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
else if (area is Sash)
|
||||
{
|
||||
Sash sash = (Sash)area;
|
||||
switch (sash.SashList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
risultato = CalculateWidthArea(item, sash.SashList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
risultato = CalculateWidthArea(item, ConvertFromPropVal(sash, sash.SashList.ElementAt(i).dDimension, MeasureTypes.ABSOLUTE, width));
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
risultato = CalculateWidthArea(item, sash.SashList.ElementAt(i).dDimension * width / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
else
|
||||
{
|
||||
risultato = CalculateWidthArea(item, width);
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
}
|
||||
return width;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per calcolare larghezza area
|
||||
/// </summary>
|
||||
/// <param name="area"> area di partenza </param>
|
||||
/// <param name="height"> altezza di partenza </param>
|
||||
/// <returns></returns>
|
||||
public double CalculateHeightArea(Area area, double height)
|
||||
{
|
||||
for (int i = 0; i < area.AreaList.Count; i++)
|
||||
{
|
||||
double risultato = -1;
|
||||
if (area.Equals(this))
|
||||
return height;
|
||||
Area item = area.AreaList[i];
|
||||
if (area is Split)
|
||||
{
|
||||
Split split = (Split)area;
|
||||
if (split.SplitHorizList.Count > 0)
|
||||
{
|
||||
switch (split.SplitHorizList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
risultato = CalculateHeightArea(item, split.SplitHorizList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
risultato = CalculateHeightArea(item, ConvertFromPropVal(split.SplitHorizList, split.SplitHorizList.ElementAt(i).dDimension, MeasureTypes.ABSOLUTE, height) );
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
risultato = CalculateHeightArea(item, split.SplitHorizList.ElementAt(i).dDimension * height / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
risultato = CalculateHeightArea(item, height);
|
||||
}
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
else if (area is Sash)
|
||||
{
|
||||
Sash sash = (Sash)area;
|
||||
switch (sash.SashList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
risultato = CalculateHeightArea(item, sash.SashList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
risultato = CalculateHeightArea(item, ConvertFromPropVal(sash, sash.SashList.ElementAt(i).dDimension, MeasureTypes.ABSOLUTE, height));
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
risultato = CalculateHeightArea(item, sash.SashList.ElementAt(i).dDimension * height / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
else
|
||||
{
|
||||
risultato = CalculateHeightArea(item, height);
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
}
|
||||
return height;
|
||||
}
|
||||
|
||||
#endregion Internal Methods
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
@@ -0,0 +1,350 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static WebWindowTest.Json.WindowConst;
|
||||
|
||||
namespace WebWindowTest.Models
|
||||
{
|
||||
public class AreaDimension
|
||||
{
|
||||
#region Public Constructors
|
||||
|
||||
public AreaDimension(double dDimension, MeasureTypes MeasureType)
|
||||
{
|
||||
m_dDimension = dDimension;
|
||||
m_SelMeasureType = MeasureType;
|
||||
//m_Parent = Parent;
|
||||
}
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Public Properties
|
||||
|
||||
public virtual double dDimension
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_dDimension;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
}
|
||||
|
||||
//public Area Parent
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_Parent;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// m_Parent = value;
|
||||
// }
|
||||
//}
|
||||
|
||||
public MeasureTypes MeasureType
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_SelMeasureType;
|
||||
}
|
||||
}
|
||||
|
||||
public List<IdNameStruct> MeasureTypeList
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_MeasureTypeList;
|
||||
}
|
||||
}
|
||||
|
||||
public MeasureTypes SelMeasureType
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_SelMeasureType;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_SelMeasureType = value;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual int SelMeasureTypeIndex
|
||||
{
|
||||
get
|
||||
{
|
||||
return (int)m_SelMeasureType;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (m_SelMeasureType != (MeasureTypes)value)
|
||||
{
|
||||
MeasureTypes newType = (MeasureTypes)value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Private Fields
|
||||
|
||||
protected double m_dDimension;
|
||||
|
||||
protected List<IdNameStruct> m_MeasureTypeList = new List<IdNameStruct>
|
||||
{
|
||||
new IdNameStruct((int)MeasureTypes.ABSOLUTE, "Absolute"),
|
||||
new IdNameStruct((int)MeasureTypes.PROPORTIONAL, "Proportional"),
|
||||
new IdNameStruct((int)MeasureTypes.PERCENTAGE, "Percentage"),
|
||||
};
|
||||
|
||||
protected MeasureTypes m_SelMeasureType;
|
||||
|
||||
// reference
|
||||
// protected Area m_Parent;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public void SetDimension(double dValue)
|
||||
{
|
||||
m_dDimension = dValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per convertire la dimensione dal vecchio tipo al nuovo tipo
|
||||
/// </summary>
|
||||
/// <param name="oldType"> Vecchio tipo </param>
|
||||
/// <param name="newType"> Nuovo tipo </param>
|
||||
/// <returns></returns>
|
||||
public double ConvertDimension(List<AreaDimension> itemList, MeasureTypes oldType, MeasureTypes newType, double widthTot, int indexSash)
|
||||
{
|
||||
switch (oldType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
if (newType.Equals(MeasureTypes.PERCENTAGE))
|
||||
{
|
||||
//return Double.Round((m_dDimension / m_Parent.Width) * 100, 1);
|
||||
return (dDimension / widthTot) * 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Double.Round(CalculatePropVal(itemList, indexSash, widthTot));
|
||||
}
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
{
|
||||
//return Double.Round(ConvertFromPropVal(newType), 2);
|
||||
return ConvertFromPropVal(itemList, newType, widthTot);
|
||||
}
|
||||
else
|
||||
{
|
||||
//return Double.Round(ConvertFromPropVal(newType), 1);
|
||||
return ConvertFromPropVal(itemList, newType, widthTot);
|
||||
}
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
{
|
||||
//return Double.Round((m_dDimension * m_Parent.Width) / 100, 2);
|
||||
return (dDimension * widthTot) / 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Double.Round(CalculatePropVal(itemList, indexSash, widthTot));
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
/// <summary>
|
||||
/// Calcolo MCD
|
||||
/// </summary>
|
||||
/// <param name="a"></param>
|
||||
/// <param name="b"></param>
|
||||
/// <returns></returns>
|
||||
internal double CalculateMCD(double a, double b)
|
||||
{
|
||||
while (b >= 0.01)
|
||||
{
|
||||
double temp = b;
|
||||
b = a % b;
|
||||
a = temp;
|
||||
}
|
||||
//return Double.Round(a,2);
|
||||
return a;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per ricalcolare i valori proporzionali a causa della modifica di uno
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
internal double CalculatePropVal(List<AreaDimension> itemList, int indexArea, double widthTot)
|
||||
{
|
||||
if (itemList.Where(m => m.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).ToList().Count == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
List<double> absoluteValue = new List<double>();
|
||||
foreach (var item in itemList)
|
||||
{
|
||||
absoluteValue.Add(item.CalculateAbsoluteValue(itemList, widthTot));
|
||||
}
|
||||
int numProportional = itemList.Where(x => x.SelMeasureType == MeasureTypes.PROPORTIONAL).Count();
|
||||
if(itemList.Count > 2 && numProportional == itemList.Count - 1)
|
||||
{
|
||||
int inedMin = absoluteValue.IndexOf(absoluteValue.Min());
|
||||
var mcd = CalculateMCD(absoluteValue.ElementAt(indexArea), absoluteValue.ElementAt(inedMin));
|
||||
itemList.ElementAt(inedMin).SetDimension(absoluteValue.ElementAt(inedMin) / mcd);
|
||||
itemList.ElementAt(indexArea).SetDimension(absoluteValue.ElementAt(indexArea) / mcd);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < itemList.Count; i++)
|
||||
{
|
||||
if (!itemList.ElementAt(i).Equals(this) &&
|
||||
itemList.ElementAt(i).MeasureType.Equals(MeasureTypes.PROPORTIONAL))
|
||||
{
|
||||
if (absoluteValue.ElementAt(indexArea) <= absoluteValue.ElementAt(i))
|
||||
{
|
||||
var mcd = CalculateMCD(absoluteValue.ElementAt(indexArea), absoluteValue.ElementAt(i));
|
||||
itemList.ElementAt(i).SetDimension(absoluteValue.ElementAt(i) / mcd);
|
||||
itemList.ElementAt(indexArea).SetDimension(absoluteValue.ElementAt(indexArea) / mcd);
|
||||
}
|
||||
else
|
||||
{
|
||||
var mcd = CalculateMCD(absoluteValue.ElementAt(indexArea), absoluteValue.ElementAt(i));
|
||||
itemList.ElementAt(i).SetDimension(absoluteValue.ElementAt(i) / mcd);
|
||||
itemList.ElementAt(indexArea).SetDimension(absoluteValue.ElementAt(indexArea) / mcd);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return itemList.ElementAt(indexArea).dDimension;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per trasformare una dimensione in valore assoluto rispetto alla larghezza totale
|
||||
/// </summary>
|
||||
/// <param name="widthTot"> Larghezza totale </param>
|
||||
/// <returns></returns>
|
||||
internal double CalculateAbsoluteValue(List<AreaDimension> itemList, double widthTot)
|
||||
{
|
||||
switch (SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
//return Double.Round(dDimension, 2);
|
||||
return dDimension;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
//return Double.Round(Proportional2AbsolutVal(), 2);
|
||||
return ProportionalToAbsoluteVal(itemList, dDimension, widthTot);
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
//return Double.Round((dDimension / 100) * widthTot, 1);
|
||||
return (dDimension / 100) * widthTot;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per convertire una dimensione da un valore assoluto al suo rispettivo tipo
|
||||
/// </summary>
|
||||
/// <param name="absoluteVal"> Valore assoluto </param>
|
||||
/// <param name="type"> Tipo di misura della dimensione </param>
|
||||
/// <param name="widthTot"> Larghezza totale </param>
|
||||
/// <returns></returns>
|
||||
internal double ConvertIn(List<AreaDimension> itemList, double absoluteVal, MeasureTypes type, double widthTot)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
return absoluteVal;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
return ProportionalToAbsoluteVal(itemList, absoluteVal, widthTot);
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
return (absoluteVal / widthTot) * 100;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per convertire da misura proporzionale a misura assoluta o percentuale
|
||||
/// </summary>
|
||||
/// <param name="newType"></param>
|
||||
/// <returns></returns>
|
||||
internal double ConvertFromPropVal(List<AreaDimension> itemList, MeasureTypes newType, double widthTot)
|
||||
{
|
||||
double tot = widthTot;
|
||||
//Somma misura non proporzionali
|
||||
double sumNotProp = itemList.Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL && !m.Equals(this))
|
||||
.Sum(m => m.CalculateAbsoluteValue(itemList, tot));
|
||||
//Calcolo residuo
|
||||
double res = tot - sumNotProp;
|
||||
if (res < 0) res = 0;
|
||||
//Misure proporzionali
|
||||
var proportionalList = itemList.Where(m => m.SelMeasureType == MeasureTypes.PROPORTIONAL)
|
||||
.ToList();
|
||||
|
||||
double sumPesi = proportionalList.Sum(p => p.dDimension);
|
||||
if (sumPesi == 0) sumPesi = 1;
|
||||
if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
{
|
||||
return res / sumPesi * dDimension;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (res / sumPesi * dDimension) / tot * 100;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per trasformare il valore proporzionale in assoluto
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
internal double ProportionalToAbsoluteVal(List<AreaDimension> itemList, double dimensionProp, double widthTot)
|
||||
{
|
||||
double tot = widthTot;
|
||||
//Somma misura non proporzionali
|
||||
double sumNotProp = itemList.Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL)
|
||||
.Sum(m => m.CalculateAbsoluteValue(itemList, tot));
|
||||
//Calcolo residuo
|
||||
double res = tot - sumNotProp;
|
||||
if (res < 0) res = 0;
|
||||
//Misure proporzionali
|
||||
var proportionalList = itemList.Where(m => m.SelMeasureType == MeasureTypes.PROPORTIONAL)
|
||||
.ToList();
|
||||
double sumPesi = proportionalList.Sum(p => p.dDimension);
|
||||
if (sumPesi == 0) sumPesi = 1;
|
||||
return res / sumPesi * dimensionProp;
|
||||
}
|
||||
|
||||
|
||||
#endregion Public Method
|
||||
}
|
||||
}
|
||||
@@ -52,7 +52,6 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_SelFillType = (FillTypes)IdNameStruct.IdFromInd(value, m_FillTypeList);
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,7 +96,6 @@ namespace WebWindowTest.Models
|
||||
internal void SetSelFillType(FillTypes value)
|
||||
{
|
||||
m_SelFillType = value;
|
||||
//m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
internal void SetFillType(FillTypes value)
|
||||
{
|
||||
|
||||
+209
-29
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Egw.Window.Data;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -10,6 +11,13 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
public class Frame : Area
|
||||
{
|
||||
#region Public Fields
|
||||
|
||||
// Lista hardware completa passata dal chiamante del componente
|
||||
public static Dictionary<string, List<Threshold>> m_AllThresholdList = new Dictionary<string, List<Threshold>>();
|
||||
|
||||
#endregion Public Fields
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
public Frame(Area ParentArea, Window ParentWindow) : base(ParentArea, ParentWindow)
|
||||
@@ -20,6 +28,18 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Public Properties
|
||||
|
||||
//public FrameArcElement? FrameArcElem
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_FrameArcElem;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// m_FrameArcElem = value!;
|
||||
// }
|
||||
//}
|
||||
|
||||
public bool BottomRail
|
||||
{
|
||||
get
|
||||
@@ -29,7 +49,42 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_bBottomRail = value;
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
public List<Threshold> ThresholdList
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_ThresholdList;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_ThresholdList = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Threshold SelThreshold
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_SelThreshold;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_SelThreshold = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int SelThresholdFromType
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_SelThreshold.Type;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_SelThreshold = m_ThresholdList.Where(x => x.Type.Equals(value)).First();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +108,6 @@ namespace WebWindowTest.Models
|
||||
m_bBottomRail = false;
|
||||
}
|
||||
}
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,12 +133,10 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
get
|
||||
{
|
||||
//return IdNameStruct.IndFromId((int)m_Shape, m_ShapeList);
|
||||
return (int)m_Shape;
|
||||
}
|
||||
set
|
||||
{
|
||||
//Shapes SelShape = (Shapes)IdNameStruct.IdFromInd(value, m_ShapeList);
|
||||
Shapes SelShape = (Shapes)value;
|
||||
if (m_Shape != SelShape)
|
||||
{
|
||||
@@ -92,7 +144,8 @@ namespace WebWindowTest.Models
|
||||
List<FrameDimension> oldDimensionList = new List<FrameDimension>(DimensionList);
|
||||
// verifico parametri Dimension
|
||||
DimensionList.Clear();
|
||||
double widthVal = oldDimensionList.Where(x => x.sName.Equals("Width")).Select(x => x.dValue).First();
|
||||
//double widthVal = oldDimensionList.Where(x => x.sName.Equals("Width")).Select(x => x.dValue).First();
|
||||
double widthVal = oldDimensionList.Where(x => x.sName.Equals("Width")).Select(x => x.dDimension).First();
|
||||
// aggiungo Dimensioni
|
||||
switch (SelShape)
|
||||
{
|
||||
@@ -100,7 +153,9 @@ namespace WebWindowTest.Models
|
||||
case Shapes.ARC_FULL:
|
||||
{
|
||||
DimensionList.Add(new FrameDimension(this, 1, "Width", widthVal, true));
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Height", 1800, true));
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Height", 1400, true));
|
||||
foreach (var dim in DimensionList)
|
||||
SearchAreaList(this, dim.dDimension, dim.sName);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -109,6 +164,8 @@ namespace WebWindowTest.Models
|
||||
DimensionList.Add(new FrameDimension(this, 1, "Width", widthVal, true));
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Left Height", 1800, true));
|
||||
DimensionList.Add(new FrameDimension(this, 3, "Right Height", 1500, true));
|
||||
SearchAreaList(this, widthVal, "Width");
|
||||
SearchAreaList(this, 1800, "Left Height");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -117,6 +174,8 @@ namespace WebWindowTest.Models
|
||||
DimensionList.Add(new FrameDimension(this, 1, "Width", widthVal, true));
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Left Height", 1500, true));
|
||||
DimensionList.Add(new FrameDimension(this, 3, "Right Height", 1800, true));
|
||||
SearchAreaList(this, widthVal, "Width");
|
||||
SearchAreaList(this, 1800, "Right Height");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -124,16 +183,20 @@ namespace WebWindowTest.Models
|
||||
case Shapes.ARC:
|
||||
{
|
||||
DimensionList.Add(new FrameDimension(this, 1, "Width", widthVal, true));
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Height", 1500, true));
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Height", 1800 - (0.4 * widthVal), true));
|
||||
DimensionList.Add(new FrameDimension(this, 3, "Full Height", 1800, true));
|
||||
SearchAreaList(this, widthVal, "Width");
|
||||
SearchAreaList(this, 1800, "Full Height");
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.DOUBLEARC:
|
||||
{
|
||||
DimensionList.Add(new FrameDimension(this, 1, "Width", widthVal, true));
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Height", 1500, true));
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Height", 2400 - (0.6 * widthVal), true));
|
||||
DimensionList.Add(new FrameDimension(this, 3, "Full Height", 2400, true));
|
||||
SearchAreaList(this, widthVal, "Width");
|
||||
SearchAreaList(this, 2400, "Full Height");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -143,6 +206,8 @@ namespace WebWindowTest.Models
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Height", 2400 - (0.4 * widthVal), true));
|
||||
DimensionList.Add(new FrameDimension(this, 3, "Full Height", 2400, true));
|
||||
DimensionList.Add(new FrameDimension(this, 4, "Radius", 200, true));
|
||||
SearchAreaList(this, 2000, "Width");
|
||||
SearchAreaList(this, 2400, "Full Height");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -151,6 +216,8 @@ namespace WebWindowTest.Models
|
||||
DimensionList.Add(new FrameDimension(this, 1, "Width", widthVal, true));
|
||||
DimensionList.Add(new FrameDimension(this, 2, "Height", 1500, true));
|
||||
DimensionList.Add(new FrameDimension(this, 3, "Height projection", 0, true));
|
||||
SearchAreaList(this, widthVal, "Width");
|
||||
SearchAreaList(this, 1500, "Height");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -162,6 +229,9 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
// salvo tipo Joint
|
||||
List<Joint> oldJointType = new List<Joint>(JointList);
|
||||
// salvo la lista di sash
|
||||
List<Sash> sashList = new List<Sash>();
|
||||
SearchSash(sashList, this);
|
||||
// aggiungo Joint
|
||||
m_JointList.Clear();
|
||||
switch (SelShape)
|
||||
@@ -170,25 +240,20 @@ namespace WebWindowTest.Models
|
||||
case Shapes.RIGHTCHAMFER:
|
||||
case Shapes.LEFTCHAMFER:
|
||||
case Shapes.DOUBLECHAMFER:
|
||||
case Shapes.ARC:
|
||||
case Shapes.DOUBLEARC:
|
||||
{
|
||||
JointList.Add(new Joint(this, 1, oldJointType[0].SelJointType));
|
||||
JointList.Add(new Joint(this, 2, oldJointType[1].SelJointType));
|
||||
JointList.Add(new Joint(this, 3, oldJointType[2].SelJointType));
|
||||
JointList.Add(new Joint(this, 4, oldJointType[3].SelJointType));
|
||||
if (oldJointType.Count > 3)
|
||||
JointList.Add(new Joint(this, 4, oldJointType[3].SelJointType));
|
||||
else
|
||||
JointList.Add(new Joint(this, 4, Joints.FULL_V));
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.ARC:
|
||||
case Shapes.ARC_FULL:
|
||||
{
|
||||
JointList.Add(new Joint(this, 1, oldJointType[0].SelJointType));
|
||||
JointList.Add(new Joint(this, 2, oldJointType[1].SelJointType));
|
||||
JointList.Add(new Joint(this, 3, Joints.ANGLED));
|
||||
JointList.Add(new Joint(this, 4, Joints.ANGLED));
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.DOUBLEARC:
|
||||
case Shapes.THREECENTERARC:
|
||||
{
|
||||
JointList.Add(new Joint(this, 1, oldJointType[0].SelJointType));
|
||||
@@ -197,26 +262,76 @@ namespace WebWindowTest.Models
|
||||
JointList.Add(new Joint(this, 4, Joints.ANGLED));
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.TRIANGLE:
|
||||
{
|
||||
JointList.Add(new Joint(this, 1, oldJointType[0].SelJointType));
|
||||
JointList.Add(new Joint(this, 2, oldJointType[1].SelJointType));
|
||||
JointList.Add(new Joint(this, 3, Joints.ANGLED));
|
||||
foreach (var s in sashList)
|
||||
{
|
||||
foreach (var sashDim in s.SashList)
|
||||
{
|
||||
sashDim.JointList.RemoveAt(sashDim.JointList.Count - 1);
|
||||
sashDim.JointList.Last().SelJointType = Joints.ANGLED;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case Shapes.CUSTOM:
|
||||
{
|
||||
JointList.Clear();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (JointList.Count > 3)
|
||||
{
|
||||
foreach (var s in sashList)
|
||||
{
|
||||
foreach (var sashDim in s.SashList)
|
||||
{
|
||||
if (sashDim.JointList.Count == 3)
|
||||
sashDim.JointList.Add(new Joint(s, 4, Joints.FULL_V));
|
||||
}
|
||||
}
|
||||
}
|
||||
//switch (SelShape)
|
||||
//{
|
||||
// case Shapes.RECTANGLE:
|
||||
// case Shapes.RIGHTCHAMFER:
|
||||
// case Shapes.LEFTCHAMFER:
|
||||
// case Shapes.DOUBLECHAMFER:
|
||||
// case Shapes.TRIANGLE:
|
||||
// {
|
||||
// FrameArcElem = null;
|
||||
// foreach (var s in sashList)
|
||||
// s.SashArcElem = null;
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
m_Shape = SelShape;
|
||||
}
|
||||
//m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
protected List<Sash> SearchSash(List<Sash> sashList, Area node)
|
||||
{
|
||||
if (node != null)
|
||||
{
|
||||
if (node.AreaType.Equals(AreaTypes.SASH))
|
||||
{
|
||||
sashList.Add((Sash)node);
|
||||
//Sash s = (Sash)node;
|
||||
//s.SashArcElem = null;
|
||||
}
|
||||
foreach (var item in node.AreaList)
|
||||
{
|
||||
SearchSash(sashList, item);
|
||||
}
|
||||
}
|
||||
return sashList;
|
||||
}
|
||||
|
||||
public Shapes Shape
|
||||
{
|
||||
get
|
||||
@@ -237,6 +352,37 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public void RefreshThresholdList()
|
||||
{
|
||||
m_ThresholdList.Clear();
|
||||
m_ThresholdList = m_AllThresholdList.GetValueOrDefault(ParentWindow.sProfilePath);
|
||||
}
|
||||
|
||||
public double HeightFrame()
|
||||
{
|
||||
switch (SelShapeIndex)
|
||||
{
|
||||
case (int)Shapes.RECTANGLE:
|
||||
case (int)Shapes.TRIANGLE:
|
||||
case (int)Shapes.ARC_FULL:
|
||||
{
|
||||
return DimensionList.Where(x => x.sName == "Height").First().dDimension;
|
||||
}
|
||||
case (int)Shapes.RIGHTCHAMFER:
|
||||
{
|
||||
return DimensionList.Where(x => x.sName == "Left Height").First().dDimension;
|
||||
}
|
||||
case (int)Shapes.LEFTCHAMFER:
|
||||
{
|
||||
return DimensionList.Where(x => x.sName == "Right Height").First().dDimension;
|
||||
}
|
||||
default:
|
||||
{
|
||||
return DimensionList.Where(x => x.sName == "Full Height").First().dDimension;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override Frame Copy(Area ParentArea)
|
||||
{
|
||||
return null;
|
||||
@@ -246,14 +392,25 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
//internal void SetFrameArcElem(FrameArcElement arcElement)
|
||||
//{
|
||||
// m_FrameArcElem = arcElement;
|
||||
//}
|
||||
|
||||
internal static Area CreateFrame(Window Window)
|
||||
{
|
||||
Frame NewFrame = new Frame(null, Window);
|
||||
NewFrame.SetAreaType(AreaTypes.FRAME);
|
||||
NewFrame.SetSelShape(Shapes.RECTANGLE);
|
||||
NewFrame.SetBottomRail(false);
|
||||
NewFrame.SetBottomRailQty(0);
|
||||
return NewFrame;
|
||||
Frame newFrame = new Frame(null, Window);
|
||||
newFrame.SetAreaType(AreaTypes.FRAME);
|
||||
newFrame.SetSelShape(Shapes.RECTANGLE);
|
||||
newFrame.SetBottomRail(false);
|
||||
newFrame.SetBottomRailQty(0);
|
||||
newFrame.RefreshThresholdList();
|
||||
if (m_AllThresholdList != null && m_AllThresholdList.Any())
|
||||
{
|
||||
newFrame.SetSelThresholdFromName(m_AllThresholdList.GetValueOrDefault(Window.sProfilePath)?.FirstOrDefault()?.Name ?? "");
|
||||
}
|
||||
//newFrame.FrameArcElem = null;
|
||||
return newFrame;
|
||||
}
|
||||
|
||||
internal override JsonArea Serialize(bool hideHw)
|
||||
@@ -261,7 +418,11 @@ namespace WebWindowTest.Models
|
||||
Area.nCounterGroup = 0;
|
||||
if (nCounterGroup < GroupId)
|
||||
Area.nCounterGroup = GroupId;
|
||||
JsonFrame JsonFrame = new JsonFrame(m_Shape, m_bBottomRail, m_nBottomRailQty, GroupId);
|
||||
JsonFrame JsonFrame = new JsonFrame(m_Shape, m_SelThreshold.Name, m_bBottomRail, m_nBottomRailQty, GroupId);
|
||||
//if (FrameArcElem != null)
|
||||
// JsonFrame.ArcElement = FrameArcElem.Serialize();
|
||||
//else
|
||||
// JsonFrame.ArcElement = null;
|
||||
foreach (var Dimension in DimensionList)
|
||||
JsonFrame.DimensionList.Add(Dimension.Serialize());
|
||||
foreach (var Joint in JointList)
|
||||
@@ -396,12 +557,31 @@ namespace WebWindowTest.Models
|
||||
m_Shape = Value;
|
||||
}
|
||||
|
||||
internal void SetSelThresholdFromName(string? value)
|
||||
{
|
||||
// verifica ci sia un valore...
|
||||
if (!string.IsNullOrEmpty(value))
|
||||
{
|
||||
m_SelThreshold = m_ThresholdList.Where(x => x.Name.Equals(value)).First();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_SelThreshold = m_ThresholdList.FirstOrDefault() ?? new Threshold(1, "Bottom");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Internal Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
//private FrameArcElement m_FrameArcElem = new FrameArcElement();
|
||||
|
||||
private bool m_bBottomRail;
|
||||
|
||||
private Threshold m_SelThreshold;
|
||||
|
||||
private List<Threshold> m_ThresholdList = new List<Threshold>();
|
||||
|
||||
private List<FrameDimension> m_DimensionList = new List<FrameDimension>();
|
||||
|
||||
private List<Joint> m_JointList = new List<Joint>();
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using WebWindowTest.Json;
|
||||
using static WebWindowTest.Json.WindowConst;
|
||||
|
||||
namespace WebWindowTest.Models
|
||||
{
|
||||
public class FrameArcElement
|
||||
{
|
||||
#region Public Constructors
|
||||
|
||||
public FrameArcElement() { }
|
||||
|
||||
public FrameArcElement(Area ParentArea, Window ParentWindow, double nSection, bool bCutEdge, bool bIsAlign)
|
||||
{
|
||||
m_ParentArea = ParentArea;
|
||||
m_ParentWindow = ParentWindow;
|
||||
m_nSection = nSection;
|
||||
m_bCutEdge = bCutEdge;
|
||||
m_bIsAlign = bIsAlign;
|
||||
}
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Public Properties
|
||||
|
||||
public int nQty
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_nQty;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_nQty = value;
|
||||
}
|
||||
}
|
||||
|
||||
public double nSection
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_nSection;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_nSection = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool bCutEdge
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_bCutEdge;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_bCutEdge = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool bIsAlign
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_bIsAlign;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_bIsAlign = value;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
internal void SetQty(int Qty)
|
||||
{
|
||||
m_nQty = Qty;
|
||||
}
|
||||
|
||||
internal void SetSection(double Section)
|
||||
{
|
||||
m_nSection = Section;
|
||||
}
|
||||
|
||||
//internal JsonFrameArcElement Serialize()
|
||||
//{
|
||||
// JsonFrameArcElement jArcElement = new JsonFrameArcElement(nSection, bCutEdge, bIsAlign);
|
||||
// return jArcElement;
|
||||
//}
|
||||
|
||||
#endregion Internal Methods
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
protected Area m_ParentArea;
|
||||
protected Window m_ParentWindow;
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private double m_nSection;
|
||||
|
||||
private int m_nQty;
|
||||
|
||||
private bool m_bCutEdge = false;
|
||||
|
||||
private bool m_bIsAlign = false;
|
||||
|
||||
#endregion Private Fields
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WebWindowTest.Json;
|
||||
using static WebWindowTest.Json.WindowConst;
|
||||
|
||||
namespace WebWindowTest.Models
|
||||
{
|
||||
public class FrameDimension
|
||||
public class FrameDimension:AreaDimension
|
||||
{
|
||||
#region Public Constructors
|
||||
|
||||
public FrameDimension(Frame ParentFrame, int nIndex, string sName, double dValue, bool bIsLen)
|
||||
public FrameDimension(Frame ParentFrame, int nIndex, string sName, double dDimension, bool bIsLen) : base(dDimension, MeasureTypes.ABSOLUTE)
|
||||
{
|
||||
m_ParentFrame = ParentFrame;
|
||||
m_nIndex = nIndex;
|
||||
m_sName = sName;
|
||||
m_dValue = dValue;
|
||||
m_bIsLen = bIsLen;
|
||||
}
|
||||
|
||||
@@ -24,24 +25,109 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Public Properties
|
||||
|
||||
public double dValue
|
||||
public override double dDimension
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_dValue;
|
||||
return m_dDimension;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_dValue = value;
|
||||
if (value > MaxDim)
|
||||
if(dDimension != value)
|
||||
{
|
||||
m_dValue = MaxDim;
|
||||
if (ParentFrame.SelShapeIndex == (int)Shapes.RECTANGLE ||
|
||||
ParentFrame.SelShapeIndex == (int)Shapes.RIGHTCHAMFER ||
|
||||
ParentFrame.SelShapeIndex == (int)Shapes.LEFTCHAMFER ||
|
||||
ParentFrame.SelShapeIndex == (int)Shapes.DOUBLECHAMFER ||
|
||||
ParentFrame.SelShapeIndex == (int)Shapes.TRIANGLE)
|
||||
{
|
||||
if (value > MaxDim)
|
||||
{
|
||||
m_dDimension = MaxDim;
|
||||
}
|
||||
else if (value < MinDim && !m_sName.Equals("Radius") && !m_sName.Equals("Height projection"))
|
||||
{
|
||||
m_dDimension = MinDim;
|
||||
}
|
||||
else
|
||||
m_dDimension = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
var widthArea = (ParentFrame.DimensionList.First(x => x.sName.Equals("Width"))).m_dDimension;
|
||||
if (ParentFrame.SelShapeIndex == (int)Shapes.ARC_FULL)
|
||||
{
|
||||
var height = ParentFrame.DimensionList.First(x => x.sName.Equals("Height")).m_dDimension;
|
||||
if (sName.Equals("Height") && value > 0.5 * widthArea && value < MaxDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
else if (sName.Equals("Width") && height > 0.5 * value && value > MinDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
}
|
||||
else if (ParentFrame.SelShapeIndex == (int)Shapes.ARC)
|
||||
{
|
||||
var height = ParentFrame.DimensionList.First(x => x.sName.Equals("Height")).m_dDimension;
|
||||
var fullHeight = ParentFrame.DimensionList.First(x => x.sName.Equals("Full Height")).m_dDimension;
|
||||
if (sName.Equals("Full Height") && (value - height) < 0.5 * widthArea && value < MaxDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
else if (sName.Equals("Height") && (fullHeight - value) < 0.5 * widthArea && value < MaxDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
else if (sName.Equals("Width") && (fullHeight - height) < 0.5 * value && value < MaxDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
}
|
||||
else if (ParentFrame.SelShapeIndex == (int)Shapes.THREECENTERARC)
|
||||
{
|
||||
var height = ParentFrame.DimensionList.First(x => x.sName.Equals("Height")).m_dDimension;
|
||||
var fullHeight = ParentFrame.DimensionList.First(x => x.sName.Equals("Full Height")).m_dDimension;
|
||||
if (sName.Equals("Full Height") && (value - height) < 0.5 * widthArea && value < MaxDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
else if (sName.Equals("Height") && (fullHeight - value) < 0.5 * widthArea && value < MaxDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
else if (sName.Equals("Width") && (fullHeight - height) < 0.5 * value)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
else if (sName.Equals("Radius") && value < 0.5 * widthArea)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
}
|
||||
else if (ParentFrame.SelShapeIndex == (int)Shapes.DOUBLEARC)
|
||||
{
|
||||
var height = ParentFrame.DimensionList.First(x => x.sName.Equals("Height")).m_dDimension;
|
||||
var fullHeight = ParentFrame.DimensionList.First(x => x.sName.Equals("Full Height")).m_dDimension;
|
||||
if (sName.Equals("Full Height") && (value - height) > 0.5 * widthArea && value < MaxDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
else if (sName.Equals("Height") && (fullHeight - value) > 0.5 * widthArea && value < MaxDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
else if (sName.Equals("Width") && (fullHeight - height) > 0.5 * value && value > MinDim)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ParentFrame.AreaList.Count > 0 && sName.Equals("Width"))
|
||||
ParentFrame.SearchAreaList(ParentFrame, dDimension, "Width");
|
||||
else
|
||||
ParentFrame.SearchAreaList(ParentFrame, dDimension, "Height");
|
||||
}
|
||||
else if (value < MinDim && !m_sName.Equals("Radius"))
|
||||
{
|
||||
m_dValue = MinDim;
|
||||
}
|
||||
m_ParentFrame.ParentWindow.OnUpdatePreview(m_ParentFrame.ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +161,7 @@ namespace WebWindowTest.Models
|
||||
|
||||
internal JsonFrameDimension Serialize()
|
||||
{
|
||||
JsonFrameDimension JsonFrameDimension = new JsonFrameDimension(m_nIndex, m_sName, m_dValue);
|
||||
JsonFrameDimension JsonFrameDimension = new JsonFrameDimension(m_nIndex, m_sName, m_dDimension);
|
||||
return JsonFrameDimension;
|
||||
}
|
||||
|
||||
@@ -91,7 +177,7 @@ namespace WebWindowTest.Models
|
||||
|
||||
private bool m_bIsLen = false;
|
||||
|
||||
private double m_dValue;
|
||||
//private double m_dDimension;
|
||||
|
||||
private int m_nIndex;
|
||||
|
||||
|
||||
@@ -63,14 +63,11 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
get
|
||||
{
|
||||
//return IdNameStruct.IndFromId((int)m_SelJointType, m_JointTypeList);
|
||||
return (int)m_SelJointType;
|
||||
}
|
||||
set
|
||||
{
|
||||
//m_SelJointType = (Joints)IdNameStruct.IdFromInd(value, m_JointTypeList);
|
||||
m_SelJointType = (Joints)value;
|
||||
m_ParentArea.ParentWindow.OnUpdatePreview(m_ParentArea.ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,196 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace WebWindowTest.Models
|
||||
{
|
||||
public partial class ParametriOpzioni
|
||||
{
|
||||
private ParametriOpzioniParametri[] itemsField;
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement("Parametri", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public ParametriOpzioniParametri[] Items
|
||||
{
|
||||
get
|
||||
{
|
||||
return itemsField;
|
||||
}
|
||||
set
|
||||
{
|
||||
itemsField = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public partial class ParametriOpzioniParametri
|
||||
{
|
||||
private string nomeParametroField;
|
||||
|
||||
private string descrizioneParametroField;
|
||||
|
||||
private string valoreCorrenteField;
|
||||
|
||||
private string tipoField;
|
||||
|
||||
private string visibleField;
|
||||
|
||||
private string ricalcolaSeModificatoField;
|
||||
|
||||
private ParametriOpzioniParametriOpzioni[] opzioniField;
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public string NomeParametro
|
||||
{
|
||||
get
|
||||
{
|
||||
return nomeParametroField;
|
||||
}
|
||||
set
|
||||
{
|
||||
nomeParametroField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public string DescrizioneParametro
|
||||
{
|
||||
get
|
||||
{
|
||||
return descrizioneParametroField;
|
||||
}
|
||||
set
|
||||
{
|
||||
descrizioneParametroField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public string ValoreCorrente
|
||||
{
|
||||
get
|
||||
{
|
||||
return valoreCorrenteField;
|
||||
}
|
||||
set
|
||||
{
|
||||
valoreCorrenteField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public string Tipo
|
||||
{
|
||||
get
|
||||
{
|
||||
return tipoField;
|
||||
}
|
||||
set
|
||||
{
|
||||
tipoField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public string Visible
|
||||
{
|
||||
get
|
||||
{
|
||||
return visibleField;
|
||||
}
|
||||
set
|
||||
{
|
||||
visibleField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public string RicalcolaSeModificato
|
||||
{
|
||||
get
|
||||
{
|
||||
return ricalcolaSeModificatoField;
|
||||
}
|
||||
set
|
||||
{
|
||||
ricalcolaSeModificatoField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement("Opzioni", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public ParametriOpzioniParametriOpzioni[] Opzioni
|
||||
{
|
||||
get
|
||||
{
|
||||
return opzioniField;
|
||||
}
|
||||
set
|
||||
{
|
||||
opzioniField = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public partial class ParametriOpzioniParametriOpzioni
|
||||
{
|
||||
private string nomeParametroField;
|
||||
|
||||
private string descrizioneOpzioneField;
|
||||
|
||||
private string valoreField;
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public string NomeParametro
|
||||
{
|
||||
get
|
||||
{
|
||||
return nomeParametroField;
|
||||
}
|
||||
set
|
||||
{
|
||||
nomeParametroField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public string DescrizioneOpzione
|
||||
{
|
||||
get
|
||||
{
|
||||
return descrizioneOpzioneField;
|
||||
}
|
||||
set
|
||||
{
|
||||
descrizioneOpzioneField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Xml.Serialization.XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
|
||||
public string Valore
|
||||
{
|
||||
get
|
||||
{
|
||||
return valoreField;
|
||||
}
|
||||
set
|
||||
{
|
||||
valoreField = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
+128
-131
@@ -19,7 +19,7 @@ namespace WebWindowTest.Models
|
||||
// Lista hardware completa passata dal chiamante del componente
|
||||
public static List<Hardware> m_HardwareCompleteList = new List<Hardware>();
|
||||
|
||||
// Lista hardware completa passata dal chiamante del componente
|
||||
// Lista famiglia hardware completa passata dal chiamante del componente
|
||||
public static List<string> s_FamilyHardwareList = new List<string>();
|
||||
|
||||
#endregion Public Fields
|
||||
@@ -34,26 +34,6 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Public Properties
|
||||
|
||||
public bool bIsMeasureGlass
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_bIsMeasureGlass;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_bIsMeasureGlass = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool bIsPercentage
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_bIsPercentage;
|
||||
}
|
||||
}
|
||||
|
||||
public bool bIsSashVertical
|
||||
{
|
||||
get
|
||||
@@ -66,6 +46,18 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
}
|
||||
|
||||
//public SashArcElement? SashArcElem
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_SashArcElement;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// m_SashArcElement = value!;
|
||||
// }
|
||||
//}
|
||||
|
||||
public List<Hardware> HardwareList
|
||||
{
|
||||
get
|
||||
@@ -90,18 +82,6 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
}
|
||||
|
||||
public List<Joint> JointList
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_JointList;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_JointList = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int nSashQty
|
||||
{
|
||||
get
|
||||
@@ -110,17 +90,20 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value >= 0 && value <= 3)
|
||||
if (value > 0 && value <= 3)
|
||||
{
|
||||
double widthTot = CalculateWidthArea(ParentWindow.AreaList.First(), ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Width").First().dDimension);
|
||||
if (value > m_SashList.Count)
|
||||
{
|
||||
// recupero larghezza ultimo
|
||||
double dLastDimension = 100;
|
||||
double dNewDimension = 100;
|
||||
double dLastDimension = widthTot;
|
||||
double dNewDimension = widthTot;
|
||||
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;
|
||||
m_SashList[m_SashList.Count - 1].SetDimension(dNewDimension);
|
||||
}
|
||||
else
|
||||
@@ -128,7 +111,12 @@ namespace WebWindowTest.Models
|
||||
// aggiungo area Sash di default
|
||||
for (var SplitIndex = m_SashList.Count; SplitIndex <= value - 1; SplitIndex++)
|
||||
{
|
||||
SashList.Add(new SashDimension(dNewDimension, true, this, SplitIndex + 1));
|
||||
var addSashDim = new SashDimension(dNewDimension, m_SashList[m_SashList.Count - 1].MeasureType, this, SplitIndex + 1);
|
||||
for(int i = 1; i <= 4; i++)
|
||||
{
|
||||
addSashDim.JointList.Add(new Joint(this, i, Joints.FULL_V));
|
||||
}
|
||||
SashList.Add(addSashDim);
|
||||
}
|
||||
}
|
||||
else if (value < m_SashList.Count)
|
||||
@@ -136,12 +124,29 @@ namespace WebWindowTest.Models
|
||||
if (value > 0)
|
||||
{
|
||||
double dLastDimension = 0;
|
||||
SashDimension itemDelete = null;
|
||||
double deleteDim;
|
||||
for (var SplitIndex = m_SashList.Count - 1; SplitIndex >= value; SplitIndex += -1)
|
||||
{
|
||||
dLastDimension += m_SashList[SplitIndex].dDimension;
|
||||
//dLastDimension += m_SashList[SplitIndex].dDimension;
|
||||
itemDelete = m_SashList[SplitIndex];
|
||||
SashList.RemoveAt(SplitIndex);
|
||||
}
|
||||
dLastDimension += m_SashList[SashList.Count - 1].dDimension;
|
||||
if (!itemDelete.SelMeasureType.Equals(m_SashList[SashList.Count - 1].SelMeasureType))
|
||||
{
|
||||
AreaDimension ad = new AreaDimension(itemDelete.dDimension, itemDelete.SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in SashList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
deleteDim = ad.ConvertDimension(adList, itemDelete.SelMeasureType, m_SashList[SashList.Count - 1].SelMeasureType, widthTot, m_SashList.IndexOf(itemDelete));
|
||||
}
|
||||
//deleteDim = Convert.ConvertDimension(itemDelete, itemDelete.SelMeasureType, m_SashList[SashList.Count - 1].SelMeasureType, itemDelete.dDimension, widthTot);
|
||||
else
|
||||
deleteDim = itemDelete.dDimension;
|
||||
//dLastDimension += m_SashList[SashList.Count - 1].dDimension;
|
||||
dLastDimension = deleteDim + m_SashList[SashList.Count - 1].dDimension;
|
||||
SashList[SashList.Count - 1].SetDimension(dLastDimension);
|
||||
if (value == 1)
|
||||
SashList.First().SetHasHandle(true);
|
||||
@@ -219,13 +224,12 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < AreaList.Count; i++)
|
||||
AreaList.ElementAt(i).SearchAreaList(AreaList.ElementAt(i), SashList.ElementAt(i).dDimension, "Width");
|
||||
}
|
||||
RefreshHardwareList();
|
||||
RefreshHardwareOptionList();
|
||||
ClearHardwareOptionList();
|
||||
SetFirstHardware();
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
ReqRefreshHwOption();
|
||||
//m_ParentWindow.OnReqHwOptionPreview(m_ParentWindow.sSerialized(), GroupId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,7 +269,6 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
set
|
||||
{
|
||||
// Controllo che il valore inserito sia positivo
|
||||
if (value >= 0)
|
||||
{
|
||||
m_nSashBottomRailQty = value;
|
||||
@@ -277,7 +280,6 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
m_bSashBottomRail = false;
|
||||
}
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -315,7 +317,6 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
SetSelFamilyHardware(value);
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,7 +329,10 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_SelHardware = value;
|
||||
ReqRefreshHwOption();
|
||||
if (HwOptionList.Count != 0)
|
||||
{
|
||||
ClearHardwareOptionList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -341,13 +345,19 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_SelHardware = m_HardwareList.FirstOrDefault(x => !string.IsNullOrEmpty(value) && x.Id.Equals(value)) ?? new Hardware(CustomHwId, "", "", Enums.OpeningTypes.Null, "", 0, 0);
|
||||
HwOptionList.Clear();
|
||||
if (SelHardware.Id == CustomHwId)
|
||||
{
|
||||
HwOptionList.Clear();
|
||||
SelHwOptionList.Clear();
|
||||
}
|
||||
//ReqRefreshHwOption();
|
||||
//ParentWindow.OnUpdatePreview(ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
public string GetHardwareDescription
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_SelHardware.Description;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,12 +377,10 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
get
|
||||
{
|
||||
//return IdNameStruct.IndFromId((int)m_SelOrientationSashType, m_OrientationSashTypeList);
|
||||
return (int)m_SelOrientationSashType;
|
||||
}
|
||||
set
|
||||
{
|
||||
//m_SelOrientationSashType = (OrientationSash)IdNameStruct.IdFromInd(value, m_OrientationSashTypeList);
|
||||
m_SelOrientationSashType = (OrientationSash)value;
|
||||
if (value == 0)
|
||||
{
|
||||
@@ -382,7 +390,6 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
m_bIsSashVertical = false;
|
||||
}
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -407,10 +414,6 @@ namespace WebWindowTest.Models
|
||||
newSash.SetIsSashVertical(bIsSashVertical);
|
||||
newSash.SetOrientationSashType(OrientationSashType);
|
||||
newSash.SetSashBottomRailQty(SashBottomRailQty);
|
||||
newSash.SetSelFamilyHardwareFromIndex(m_SelHardware.Id);
|
||||
newSash.ReqRefreshShape();
|
||||
newSash.RefreshHardwareOptionList();
|
||||
newSash.SetSelHardware(m_SelHardware);
|
||||
for (int i = 0; i < SashList.Count; i++)
|
||||
{
|
||||
//Cancello SashDimension di default e aggiungo la copia
|
||||
@@ -418,16 +421,20 @@ namespace WebWindowTest.Models
|
||||
SashDimension newSashDim = SashList[i].Copy();
|
||||
newSash.SashList.Insert(i, newSashDim);
|
||||
}
|
||||
foreach (var item in JointList)
|
||||
{
|
||||
Joint newJoint = item.Copy();
|
||||
newSash.JointList.Add(newJoint);
|
||||
}
|
||||
foreach (var item in AreaList)
|
||||
{
|
||||
Area newArea = item.Copy(newSash);
|
||||
newSash.AreaList.Add(newArea);
|
||||
}
|
||||
newSash.SetSelFamilyHardwareFromIndex(m_SelHardware.Id);
|
||||
newSash.SetSelHardwareFromId(CustomHwId);
|
||||
//if (ParentWindow.AreaList.First().SelShapeIndex == (int)Shapes.ARC ||
|
||||
// ParentWindow.AreaList.First().SelShapeIndex == (int)Shapes.DOUBLEARC ||
|
||||
// ParentWindow.AreaList.First().SelShapeIndex == (int)Shapes.ARC_FULL ||
|
||||
// ParentWindow.AreaList.First().SelShapeIndex == (int)Shapes.THREECENTERARC)
|
||||
// newSash.SashArcElem = new SashArcElement(newSash, ParentWindow, 10, true);
|
||||
//else
|
||||
// newSash.SashArcElem = null;
|
||||
return newSash;
|
||||
}
|
||||
|
||||
@@ -440,6 +447,11 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
m_HardwareList.Clear();
|
||||
Enums.OpeningTypes sOpeningType = ConvertOpeningType();
|
||||
if (string.IsNullOrEmpty(m_SelFamilyHardware))
|
||||
m_SelFamilyHardware = s_FamilyHardwareList.FirstOrDefault();
|
||||
int sashPosition = 1;
|
||||
if (nSashQty > 2 && !(SashList.First().bHasHandle || SashList.Last().bHasHandle))
|
||||
sashPosition = 2;
|
||||
var iComp = StringComparison.InvariantCultureIgnoreCase;
|
||||
var rawList = m_HardwareCompleteList
|
||||
.Where(x => x.Id == "000000" ||
|
||||
@@ -447,53 +459,28 @@ namespace WebWindowTest.Models
|
||||
x.FamilyName.Equals(m_SelFamilyHardware, iComp) &&
|
||||
x.SashQty == nSashQty &&
|
||||
x.Shape.Equals(m_CurrShape, iComp) &&
|
||||
x.OpeningType == sOpeningType)
|
||||
x.OpeningType == sOpeningType &&
|
||||
x.SashPosition == sashPosition)
|
||||
)
|
||||
.ToList() ?? new List<Hardware>();
|
||||
if(rawList.Count == 0 || rawList == null)
|
||||
{
|
||||
Hardware hw = new Hardware(CustomHwId, m_SelFamilyHardware, "Custom", sOpeningType, m_CurrShape, nSashQty, 1);
|
||||
rawList.Add(hw);
|
||||
}
|
||||
m_HardwareList = new List<Hardware>(rawList);
|
||||
//if (rawList != null && rawList.Count > 0)
|
||||
//{
|
||||
// m_HardwareList = new List<Hardware>(rawList);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// m_HardwareList = new List<Hardware>();
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per rimuovere l'intero sash group
|
||||
/// </summary>
|
||||
public void Remove()
|
||||
{
|
||||
ParentArea.AreaList.Remove(this);
|
||||
Fill newFill = Fill.CreateFill(ParentArea, FillTypes.GLASS);
|
||||
newFill.SetAreaType(AreaTypes.FILL);
|
||||
ParentArea.AreaList.Add(newFill);
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Richiesta calcolo shape corrente
|
||||
/// </summary>
|
||||
public void ReqRefreshShape()
|
||||
{
|
||||
if (m_HardwareCompleteList != null && m_HardwareCompleteList.Count > 0)
|
||||
{
|
||||
m_HardwareList.Clear();
|
||||
// reset shape corrente
|
||||
m_CurrShape = "";
|
||||
// chiamata evento calcolo shape: gruppo da calcolare
|
||||
m_ParentWindow.OnReqShapePreview(m_ParentWindow.sSerialized(), GroupId);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Richiesta calcolo hardware option list
|
||||
/// </summary>
|
||||
public void ReqRefreshHwOption()
|
||||
{
|
||||
HwOptionList.Clear();
|
||||
// chiamata evento calcolo opzioni hardware
|
||||
m_ParentWindow.OnReqHwOptionPreview(m_ParentWindow.sSerialized(), GroupId);
|
||||
}
|
||||
|
||||
public void SetSelFamilyHardware(string sFamilyHw)
|
||||
@@ -505,6 +492,8 @@ namespace WebWindowTest.Models
|
||||
RefreshHardwareList();
|
||||
}
|
||||
SetFirstHardware();
|
||||
if (HwOptionList.Count != 0)
|
||||
ClearHardwareOptionList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -514,43 +503,43 @@ namespace WebWindowTest.Models
|
||||
public void UpdateShape(string newShape)
|
||||
{
|
||||
m_CurrShape = newShape;
|
||||
bool noHwValid = false;
|
||||
// la famiglia hw è vuota seleziono il primo hardware valido e utilizzo la sua famiglia
|
||||
if(string.IsNullOrEmpty(m_SelFamilyHardware) || m_SelFamilyHardware == "")
|
||||
{
|
||||
var listHwValid = Sash.m_HardwareCompleteList
|
||||
.Where(x => x.Shape == m_CurrShape &&
|
||||
x.SashQty == nSashQty &&
|
||||
x.OpeningType == ConvertOpeningType()
|
||||
)
|
||||
.FirstOrDefault();
|
||||
.FirstOrDefault(x => x.Shape == m_CurrShape &&
|
||||
x.SashQty == nSashQty &&
|
||||
x.OpeningType == ConvertOpeningType()
|
||||
);
|
||||
if(listHwValid == null)
|
||||
{
|
||||
noHwValid = true;
|
||||
var familyHwValid = Sash.m_HardwareCompleteList
|
||||
.Select(x => x.FamilyName)
|
||||
.First();
|
||||
SelHardwareFromId = "000000";
|
||||
ClearHardwareOptionList();
|
||||
}
|
||||
else
|
||||
{
|
||||
SetSelFamilyHardware(listHwValid.FamilyName);
|
||||
}
|
||||
if (noHwValid)
|
||||
{
|
||||
SelHardwareFromId = "000000";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RefreshHardwareList();
|
||||
// se il vecchio hw selezionato non va più bene viene selezionato il primo della lista
|
||||
if (!HardwareList.Contains(m_SelHardware) || m_SelHardware.Shape != m_CurrShape)
|
||||
{
|
||||
SetFirstHardware();
|
||||
ClearHardwareOptionList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
|
||||
internal static Sash CreateSash(Area Area)
|
||||
{
|
||||
Sash newSash = new Sash(Area, Area.ParentWindow);
|
||||
@@ -560,13 +549,17 @@ namespace WebWindowTest.Models
|
||||
newSash.SetSashQty(1);
|
||||
newSash.SetOrientationSashType(OrientationSash.VERTICAL);
|
||||
newSash.SetIsSashVertical(true);
|
||||
for (var JointIndex = 0; JointIndex <= 3; JointIndex++)
|
||||
newSash.JointList.Add(new Joint(newSash, JointIndex + 1, Joints.FULL_H));
|
||||
foreach(var sashDim in newSash.SashList)
|
||||
{
|
||||
for (var JointIndex = 0; JointIndex <= 3; JointIndex++)
|
||||
sashDim.JointList.Add(new Joint(newSash, JointIndex + 1, Joints.FULL_V));
|
||||
}
|
||||
newSash.SetSashBottomRail(false);
|
||||
newSash.SetSashBottomRailQty(0);
|
||||
newSash.SetSelFamilyHardware(Sash.s_FamilyHardwareList.First());
|
||||
newSash.RefreshHardwareOptionList();
|
||||
newSash.ClearHardwareOptionList();
|
||||
newSash.SetFirstHardware();
|
||||
//newSash.SashArcElem = null;
|
||||
return newSash;
|
||||
}
|
||||
|
||||
@@ -650,10 +643,9 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal void RefreshHardwareOptionList()
|
||||
internal void ClearHardwareOptionList()
|
||||
{
|
||||
m_HwOptionList.Clear();
|
||||
//ReqRefreshHwOption();
|
||||
}
|
||||
|
||||
internal override JsonArea Serialize(bool hideHw)
|
||||
@@ -664,8 +656,6 @@ namespace WebWindowTest.Models
|
||||
JsonSash JsonSash = new JsonSash(m_bIsSashVertical, m_SashType, m_bSashBottomRail, m_nSashBottomRailQty, currHwId, GroupId);
|
||||
foreach (var SashDimension in SashList)
|
||||
JsonSash.SashList.Add(SashDimension.Serialize());
|
||||
foreach (var Joint in JointList)
|
||||
JsonSash.JointList.Add(Joint.Serialize());
|
||||
if(HwOptionList.Count > 0)
|
||||
{
|
||||
foreach (var HwOption in HwOptionList)
|
||||
@@ -676,17 +666,25 @@ namespace WebWindowTest.Models
|
||||
foreach (var HwOption in SelHwOptionList)
|
||||
JsonSash.HwOptionList.Add(new JsonHwOption(HwOption.Key, HwOption.Value));
|
||||
}
|
||||
//if (SashArcElem != null)
|
||||
// JsonSash.ArcElement = SashArcElem.Serialize();
|
||||
//else
|
||||
// JsonSash.ArcElement = null;
|
||||
foreach (var Area in AreaList)
|
||||
JsonSash.AreaList.Add(Area.Serialize(hideHw));
|
||||
return JsonSash;
|
||||
}
|
||||
|
||||
//internal void SetSashArcElem(SashArcElement arcElement)
|
||||
//{
|
||||
// m_SashArcElement = arcElement;
|
||||
//}
|
||||
|
||||
internal void SetFirstHardware()
|
||||
{
|
||||
if (m_HardwareList.Count > 0)
|
||||
{
|
||||
m_SelHardware = m_HardwareList.First();
|
||||
//ReqRefreshHwOption();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -750,14 +748,18 @@ namespace WebWindowTest.Models
|
||||
case HwOptionTypes.COMBO:
|
||||
{
|
||||
AGBOptionCombo OptCombo = (AGBOptionCombo)HwOption;
|
||||
var selValue = OptCombo.ValueList.Where(x => x.sValue == selHwOption).First();
|
||||
OptCombo.sValue = selValue;
|
||||
var selValue = OptCombo.ValueList.Where(x => x.sValue == selHwOption).FirstOrDefault();
|
||||
if (selValue != null)
|
||||
OptCombo.sValue = selValue;
|
||||
else
|
||||
OptCombo.sValue = OptCombo.ValueList.First();
|
||||
break;
|
||||
}
|
||||
case HwOptionTypes.TEXT:
|
||||
{
|
||||
AGBOptionText OptText = (AGBOptionText)HwOption;
|
||||
OptText.sValue = selHwOption;
|
||||
if(OptText.ValueList.FirstOrDefault(x => x.Equals(selHwOption)) != null || OptText.sName.Equals("HMan"))
|
||||
OptText.sValue = selHwOption;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -804,7 +806,10 @@ namespace WebWindowTest.Models
|
||||
dNewDimension = dLastDimension / (Qty + 1 - nSashQty);
|
||||
// aggiungo area Sash di default
|
||||
for (var SplitIndex = m_SashList.Count; SplitIndex <= Qty - 1; SplitIndex++)
|
||||
SashList.Add(new SashDimension(dNewDimension, true, this, SplitIndex + 1));
|
||||
{
|
||||
SashDimension newSashDim = new SashDimension(dNewDimension, MeasureTypes.PERCENTAGE, this, SplitIndex + 1);
|
||||
SashList.Add(newSashDim);
|
||||
}
|
||||
}
|
||||
else if (Qty < m_SashList.Count)
|
||||
{
|
||||
@@ -833,11 +838,6 @@ namespace WebWindowTest.Models
|
||||
return SelFamilyHardware;
|
||||
}
|
||||
|
||||
internal void SetSelHardware(Hardware value)
|
||||
{
|
||||
SelHardware = value;
|
||||
}
|
||||
|
||||
internal void SetSelHardwareFromId(string sId)
|
||||
{
|
||||
if (m_HardwareList.Count == 0)
|
||||
@@ -864,8 +864,6 @@ namespace WebWindowTest.Models
|
||||
|
||||
private bool m_bIsMeasureGlass;
|
||||
|
||||
private bool m_bIsPercentage = true;
|
||||
|
||||
private bool m_bIsSashVertical;
|
||||
|
||||
private bool m_bSashBottomRail;
|
||||
@@ -876,8 +874,6 @@ namespace WebWindowTest.Models
|
||||
private List<AGBOption> m_HwOptionList = new List<AGBOption>();
|
||||
private Dictionary<string, string> m_SelHwOptionList = new Dictionary<string, string>();
|
||||
|
||||
private List<Joint> m_JointList = new List<Joint>();
|
||||
|
||||
private int m_nSashBottomRailQty;
|
||||
|
||||
private List<IdNameStruct> m_OrientationSashTypeList = new List<IdNameStruct>
|
||||
@@ -888,9 +884,10 @@ namespace WebWindowTest.Models
|
||||
|
||||
private List<SashDimension> m_SashList = new List<SashDimension>();
|
||||
private SashTypes m_SashType;
|
||||
private string m_SelFamilyHardware;
|
||||
private string m_SelFamilyHardware = "";
|
||||
private Hardware m_SelHardware;
|
||||
private OrientationSash m_SelOrientationSashType;
|
||||
//private SashArcElement m_SashArcElement;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using WebWindowTest.Json;
|
||||
using static WebWindowTest.Json.WindowConst;
|
||||
|
||||
namespace WebWindowTest.Models
|
||||
{
|
||||
public class SashArcElement
|
||||
{
|
||||
#region Public Constructors
|
||||
|
||||
public SashArcElement() { }
|
||||
|
||||
public SashArcElement(Area ParentArea, Window ParentWindow, double nSection, bool bCutEdge)
|
||||
{
|
||||
m_ParentArea = ParentArea;
|
||||
m_ParentWindow = ParentWindow;
|
||||
m_nSection = nSection;
|
||||
m_bCutEdge = bCutEdge;
|
||||
}
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Public Properties
|
||||
|
||||
public int nQty
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_nQty;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_nQty = value;
|
||||
}
|
||||
}
|
||||
|
||||
public double nSection
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_nSection;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_nSection = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool bCutEdge
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_bCutEdge;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_bCutEdge = value;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
//internal JsonSashArcElement Serialize()
|
||||
//{
|
||||
// JsonSashArcElement jArcElement = new JsonSashArcElement(nSection, bCutEdge);
|
||||
// return jArcElement;
|
||||
//}
|
||||
|
||||
#endregion Internal Methods
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
protected Area m_ParentArea;
|
||||
protected Window m_ParentWindow;
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private double m_nSection;
|
||||
|
||||
private int m_nQty;
|
||||
|
||||
private bool m_bCutEdge = false;
|
||||
|
||||
#endregion Private Fields
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Principal;
|
||||
using WebWindowTest.Json;
|
||||
using static WebWindowTest.Json.WindowConst;
|
||||
|
||||
namespace WebWindowTest.Models
|
||||
{
|
||||
public class SashDimension
|
||||
public class SashDimension : AreaDimension
|
||||
{
|
||||
#region Public Constructors
|
||||
|
||||
public SashDimension(double dDimension, bool bIsRelative, Sash Parent, int nSashId)
|
||||
public SashDimension(double dDimension, MeasureTypes MeasureType, Sash Parent, int nSashId):base(dDimension, MeasureType)
|
||||
{
|
||||
m_dDimension = dDimension;
|
||||
m_bIsRelative = bIsRelative;
|
||||
m_Parent = Parent;
|
||||
m_nSashId = nSashId;
|
||||
m_Parent = Parent;
|
||||
SetMeasureType(MeasureType);
|
||||
// assengno maniglia
|
||||
if (Parent.SashList.Count == 0 || !Parent.SashList.Any(x => x.bHasHandle))
|
||||
m_bHasHandle = true;
|
||||
@@ -106,19 +103,34 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_bHasHandle = value;
|
||||
//m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
public bool bIsRelative
|
||||
public Sash Parent
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_bIsRelative;
|
||||
return m_Parent;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_Parent = value;
|
||||
}
|
||||
}
|
||||
|
||||
public double dDimension
|
||||
public List<Joint> JointList
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_JointList;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_JointList = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override double dDimension
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -126,72 +138,167 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
set
|
||||
{
|
||||
// Controllo che il valore inserito sia compreso tra 0 e 100
|
||||
if (value > 0 && value < 100)
|
||||
double widthTot = CalculateWidthSashGroup(m_Parent.ParentWindow.AreaList.FirstOrDefault(), m_Parent.ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Width").First().dDimension);
|
||||
double valMinAbsolute = 200;
|
||||
double valMaxAbsolute = widthTot - valMinAbsolute * (m_Parent.SashList.Count - 1);
|
||||
bool valueAccept = false;
|
||||
switch (MeasureType)
|
||||
{
|
||||
// se sono in percentuale
|
||||
if (m_bIsRelative)
|
||||
{
|
||||
// verifico se ci sono assoluti
|
||||
List<SashDimension> RelativeDimList = m_Parent.SashList.Where(x => x.bIsRelative).ToList();
|
||||
if (RelativeDimList.Count > 0)
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
if (m_Parent.bIsPercentage)
|
||||
valueAccept = (value < valMaxAbsolute && value > valMinAbsolute) ? true : false;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
valMaxAbsolute = 20;
|
||||
valueAccept = (value >= 1) ? true : false;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
valMaxAbsolute = valMaxAbsolute / widthTot * 100;
|
||||
valMinAbsolute = valMinAbsolute / widthTot * 100;
|
||||
valueAccept = (value < valMaxAbsolute && value > valMinAbsolute) ? true : false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (valueAccept)
|
||||
{
|
||||
List<SashDimension> dimensions = m_Parent.SashList;
|
||||
List<double> absoluteValList = new List<double>();
|
||||
AreaDimension ad = new AreaDimension(m_dDimension, SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in m_Parent.SashList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.m_dDimension, it.SelMeasureType));
|
||||
}
|
||||
int index = 0;
|
||||
foreach (var item in m_Parent.SashList)
|
||||
{
|
||||
absoluteValList.Add(adList.ElementAt(index).CalculateAbsoluteValue(adList, widthTot));
|
||||
index++;
|
||||
}
|
||||
int nIndex = dimensions.IndexOf(this);
|
||||
int proportionalCount = dimensions.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).ToList().Count;
|
||||
int percentageCount = dimensions.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).ToList().Count;
|
||||
// Le dimensioni sono solo in proporzionale
|
||||
if (proportionalCount == absoluteValList.Count || SelMeasureType.Equals(MeasureTypes.PROPORTIONAL) ||
|
||||
(SelMeasureType.Equals(MeasureTypes.ABSOLUTE) && proportionalCount == absoluteValList.Count -1))
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
// Le dimensioni sono solo in percentuale
|
||||
else if (percentageCount == dimensions.Count)
|
||||
{
|
||||
if (value < m_dDimension)
|
||||
{
|
||||
// L'anta modificata non è l'ultima
|
||||
if (nIndex < dimensions.Count - 1)
|
||||
dimensions[nIndex + 1].SetDimension(dimensions[nIndex + 1].m_dDimension + (m_dDimension - value));
|
||||
else if (dimensions.Count > 1)
|
||||
dimensions[nIndex - 1].SetDimension(dimensions[nIndex - 1].m_dDimension + (m_dDimension - value));
|
||||
else
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
//for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++)
|
||||
// dRes += RelativeDimList[Ind].dDimension;
|
||||
dRes = (100 - dRes);
|
||||
RelativeDimList[nIndex - 1].SetDimension(dRes);
|
||||
//for (var nInd = 0; nInd <= nIndex - 1; nInd++)
|
||||
// RelativeDimList[nInd].SetDimension(dRes);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_dDimension = 100;
|
||||
return;
|
||||
}
|
||||
}
|
||||
m_dDimension = 100;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
double dRes = value;
|
||||
// se non ultima anta
|
||||
if (nIndex < dimensions.Count - 1)
|
||||
{
|
||||
for (var nInd = 0; nInd <= nIndex - 1; nInd++)
|
||||
dRes += dimensions[nInd].m_dDimension;
|
||||
dRes = (100 - dRes) / (dimensions.Count - nIndex - 1);
|
||||
for (var Ind = nIndex + 1; Ind <= dimensions.Count - 1; Ind++)
|
||||
dimensions[Ind].SetDimension(dRes);
|
||||
}
|
||||
// se ultima anta
|
||||
else if (dimensions.Count > 1)
|
||||
{
|
||||
if (dimensions.Count > 2)
|
||||
{
|
||||
for (var Ind = 0; Ind <= nIndex - 2; Ind++)
|
||||
dRes += dimensions[Ind].m_dDimension;
|
||||
}
|
||||
dRes = (100 - dRes);
|
||||
dimensions[nIndex - 1].SetDimension(dRes);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_dDimension = 100;
|
||||
return;
|
||||
}
|
||||
}
|
||||
m_dDimension = value;
|
||||
}
|
||||
m_dDimension = value;
|
||||
m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
|
||||
// Le dimensioni sono miste o solo in assoluto
|
||||
else
|
||||
{
|
||||
double valueInAbsolute = 0;
|
||||
switch (MeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
valueInAbsolute = value;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
var pesi = value + dimensions.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL) && !x.Equals(this))
|
||||
.Sum(x => x.m_dDimension);
|
||||
valueInAbsolute = widthTot / pesi * value;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
valueInAbsolute = (value / 100) * widthTot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (value < m_dDimension)
|
||||
{
|
||||
// L'anta modificata non è l'ultima
|
||||
if (nIndex < absoluteValList.Count - 1)
|
||||
{
|
||||
absoluteValList[nIndex + 1] = absoluteValList[nIndex + 1] + (absoluteValList[nIndex] - valueInAbsolute);
|
||||
absoluteValList[nIndex] = valueInAbsolute;
|
||||
}
|
||||
// L'anta modificata è l'ultima
|
||||
else if (dimensions.Count > 1)
|
||||
{
|
||||
absoluteValList[nIndex - 1] = absoluteValList[nIndex - 1] + (absoluteValList[nIndex] - valueInAbsolute);
|
||||
absoluteValList[nIndex] = valueInAbsolute;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// L'anta modificata non è l'ultima
|
||||
if (nIndex < absoluteValList.Count - 1)
|
||||
{
|
||||
absoluteValList[nIndex + 1] = absoluteValList[nIndex + 1] - (valueInAbsolute - absoluteValList[nIndex]);
|
||||
absoluteValList[nIndex] = valueInAbsolute;
|
||||
}
|
||||
// L'anta modificata è l'ultima
|
||||
else if (dimensions.Count > 1)
|
||||
{
|
||||
absoluteValList[nIndex - 1] = absoluteValList[nIndex - 1] - (valueInAbsolute - absoluteValList[nIndex]);
|
||||
absoluteValList[nIndex] = valueInAbsolute;
|
||||
}
|
||||
}
|
||||
if (MeasureType.Equals(MeasureTypes.PROPORTIONAL))
|
||||
m_dDimension = value;
|
||||
for (int i = 0; i < absoluteValList.Count; i++)
|
||||
{
|
||||
var item = m_Parent.SashList.ElementAt(i);
|
||||
item.SetDimension(ad.ConvertIn(adList, absoluteValList[i], (MeasureTypes)item.SelMeasureTypeIndex, widthTot));
|
||||
}
|
||||
}
|
||||
foreach(var item in m_Parent.AreaList)
|
||||
item.SearchAreaList(item, dDimension, "Width");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -208,7 +315,7 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
get
|
||||
{
|
||||
return (Openings)m_SelOpeningType;
|
||||
return m_SelOpeningType;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,8 +336,7 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_SelOpeningType = value;
|
||||
m_Parent.ReqRefreshShape();
|
||||
m_Parent.RefreshHardwareOptionList();
|
||||
m_Parent.ClearHardwareOptionList();
|
||||
m_Parent.SetFirstHardware();
|
||||
}
|
||||
}
|
||||
@@ -239,22 +345,72 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
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.ClearHardwareOptionList();
|
||||
m_Parent.RefreshHardwareList();
|
||||
m_Parent.SetFirstHardware();
|
||||
m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//public MeasureTypes MeasureType
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_SelMeasureType;
|
||||
// }
|
||||
//}
|
||||
|
||||
//public List<IdNameStruct> MeasureTypeList
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_MeasureTypeList;
|
||||
// }
|
||||
//}
|
||||
|
||||
//public MeasureTypes SelMeasureType
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_SelMeasureType;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// m_SelMeasureType = value;
|
||||
// }
|
||||
//}
|
||||
|
||||
public override int SelMeasureTypeIndex
|
||||
{
|
||||
get
|
||||
{
|
||||
return (int)SelMeasureType;
|
||||
}
|
||||
set
|
||||
{
|
||||
if(SelMeasureType != (MeasureTypes)value)
|
||||
{
|
||||
MeasureTypes newType = (MeasureTypes)value;
|
||||
double widthTot = CalculateWidthSashGroup(m_Parent.ParentWindow.AreaList.FirstOrDefault(), m_Parent.ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Width").First().dDimension);
|
||||
AreaDimension ad = new AreaDimension(m_dDimension, SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in m_Parent.SashList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.m_dDimension, it.SelMeasureType));
|
||||
}
|
||||
m_dDimension = ad.ConvertDimension(adList, SelMeasureType, newType, widthTot, nSashId-1);
|
||||
//m_dDimension = Convert.ConvertDimension(this, m_SelMeasureType, newType, m_dDimension, widthTot);
|
||||
SelMeasureType = (MeasureTypes)value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -263,11 +419,72 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per convertire la dimensione dal vecchio tipo al nuovo tipo
|
||||
/// </summary>
|
||||
/// <param name="oldType"> Vecchio tipo </param>
|
||||
/// <param name="newType"> Nuovo tipo </param>
|
||||
/// <returns></returns>
|
||||
//public double ConvertDimension(MeasureTypes oldType, MeasureTypes newType, double widthTot)
|
||||
//{
|
||||
// switch (oldType)
|
||||
// {
|
||||
// case MeasureTypes.ABSOLUTE:
|
||||
// {
|
||||
// if (newType.Equals(MeasureTypes.PERCENTAGE))
|
||||
// {
|
||||
// //return Double.Round((m_dDimension / m_Parent.Width) * 100, 1);
|
||||
// return (m_dDimension / widthTot) * 100;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return CalculatePropVal(widthTot);
|
||||
// }
|
||||
// }
|
||||
// case MeasureTypes.PROPORTIONAL:
|
||||
// {
|
||||
// if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
// {
|
||||
// //return Double.Round(ConvertFromPropVal(newType), 2);
|
||||
// return ConvertFromPropVal(newType, widthTot, dDimension);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //return Double.Round(ConvertFromPropVal(newType), 1);
|
||||
// return ConvertFromPropVal(newType, widthTot, dDimension);
|
||||
// }
|
||||
// }
|
||||
// case MeasureTypes.PERCENTAGE:
|
||||
// {
|
||||
// if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
// {
|
||||
// //return Double.Round((m_dDimension * m_Parent.Width) / 100, 2);
|
||||
// return (m_dDimension * widthTot) / 100;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return CalculatePropVal(widthTot);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return -1;
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per copiare l'intero oggetto
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public SashDimension Copy()
|
||||
{
|
||||
SashDimension newSashDim = new SashDimension(dDimension, bIsRelative, m_Parent, m_nSashId);
|
||||
SashDimension newSashDim = new SashDimension(m_dDimension, MeasureType, m_Parent, m_nSashId);
|
||||
newSashDim.SetMeasureType(MeasureType);
|
||||
newSashDim.SetOpeningType(SelOpeningType);
|
||||
newSashDim.SetHasHandle(bHasHandle);
|
||||
foreach (var item in JointList)
|
||||
{
|
||||
Joint newJoint = item.Copy();
|
||||
newSashDim.JointList.Add(newJoint);
|
||||
}
|
||||
return newSashDim;
|
||||
}
|
||||
|
||||
@@ -275,16 +492,277 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per calcolare larghezza intera sash group
|
||||
/// </summary>
|
||||
/// <param name="area"> area di partenza </param>
|
||||
/// <param name="width"> larghezza di partenza </param>
|
||||
/// <returns></returns>
|
||||
internal double CalculateWidthSashGroup(Area area, double width)
|
||||
{
|
||||
for(int i = 0; i < area.AreaList.Count; i++)
|
||||
{
|
||||
double risultato = -1;
|
||||
if (area.Equals(m_Parent))
|
||||
return width;
|
||||
Area item = area.AreaList[i];
|
||||
if (area is Split)
|
||||
{
|
||||
Split split = (Split)area;
|
||||
if (split.SplitVertList.Count > 0)
|
||||
{
|
||||
switch (split.SplitVertList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
risultato = CalculateWidthSashGroup(item, split.SplitVertList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
AreaDimension ad = new AreaDimension(split.SplitVertList.ElementAt(i).dDimension, split.SplitVertList.ElementAt(i).SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach(var it in split.SplitVertList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
risultato = CalculateWidthSashGroup(item, ad.ConvertFromPropVal(adList, MeasureTypes.ABSOLUTE, width));
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
risultato = CalculateWidthSashGroup(item, split.SplitVertList.ElementAt(i).dDimension * width / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
else
|
||||
{
|
||||
risultato = CalculateWidthSashGroup(item, width);
|
||||
}
|
||||
}
|
||||
else if (area is Sash)
|
||||
{
|
||||
Sash sash = (Sash)area;
|
||||
switch (sash.SashList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
risultato = CalculateWidthSashGroup(item, sash.SashList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
//risultato = CalculateWidthSashGroup(item, ConvertFromPropVal(MeasureTypes.ABSOLUTE, width, sash.SashList.ElementAt(i).dDimension));
|
||||
AreaDimension ad = new AreaDimension(sash.SashList.ElementAt(i).dDimension, sash.SashList.ElementAt(i).SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in sash.SashList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
risultato = CalculateWidthSashGroup(item, ad.ConvertFromPropVal(adList, MeasureTypes.ABSOLUTE, width));
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
risultato = CalculateWidthSashGroup(item, sash.SashList.ElementAt(i).dDimension * width / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
else
|
||||
{
|
||||
risultato = CalculateWidthSashGroup(item, width);
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
}
|
||||
return width;
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// Calcolo MCD
|
||||
///// </summary>
|
||||
///// <param name="a"></param>
|
||||
///// <param name="b"></param>
|
||||
///// <returns></returns>
|
||||
//internal static double CalculateMCD(double a, double b)
|
||||
//{
|
||||
// while (b >= 0.01)
|
||||
// {
|
||||
// double temp = b;
|
||||
// b = a % b;
|
||||
// a = temp;
|
||||
// }
|
||||
// //return Double.Round(a,2);
|
||||
// return a;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per ricalcolare i valori proporzionali a causa della modifica di uno
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//internal double CalculatePropVal(double widthTot)
|
||||
//{
|
||||
// if (m_Parent.SashList.Where(m => m.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).ToList().Count == 0)
|
||||
// {
|
||||
// return 1;
|
||||
// }
|
||||
// List<double> absoluteValue = new List<double>();
|
||||
// foreach (var item in m_Parent.SashList)
|
||||
// {
|
||||
// absoluteValue.Add(item.CalculateAbsoluteValue(widthTot));
|
||||
// }
|
||||
// for (int i = 0; i < m_Parent.SashList.Count; i++)
|
||||
// {
|
||||
// if (!m_Parent.SashList.ElementAt(i).Equals(this) &&
|
||||
// m_Parent.SashList.ElementAt(i).MeasureType.Equals(MeasureTypes.PROPORTIONAL))
|
||||
// {
|
||||
// int nIndex = m_Parent.SashList.IndexOf(this);
|
||||
// if (absoluteValue.ElementAt(nIndex) <= absoluteValue.ElementAt(i))
|
||||
// {
|
||||
// var mcd = CalculateMCD(absoluteValue.ElementAt(nIndex), absoluteValue.ElementAt(i));
|
||||
// m_Parent.SashList.ElementAt(i).m_dDimension = absoluteValue.ElementAt(i) / mcd;
|
||||
// m_dDimension = absoluteValue.ElementAt(nIndex) / mcd;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// var mcd = CalculateMCD(absoluteValue.ElementAt(nIndex), absoluteValue.ElementAt(i));
|
||||
// m_Parent.SashList.ElementAt(i).m_dDimension = absoluteValue.ElementAt(i) / mcd;
|
||||
// m_dDimension = absoluteValue.ElementAt(nIndex) / mcd;
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// return m_dDimension;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per trasformare una dimensione in valore assoluto rispetto alla larghezza totale
|
||||
///// </summary>
|
||||
///// <param name="widthTot"> Larghezza totale </param>
|
||||
///// <returns></returns>
|
||||
//internal double CalculateAbsoluteValue(double widthTot)
|
||||
//{
|
||||
// switch (MeasureType)
|
||||
// {
|
||||
// case MeasureTypes.ABSOLUTE:
|
||||
// {
|
||||
// //return Double.Round(dDimension, 2);
|
||||
// return dDimension;
|
||||
// }
|
||||
// case MeasureTypes.PROPORTIONAL:
|
||||
// {
|
||||
// //return Double.Round(Proportional2AbsolutVal(), 2);
|
||||
// return ProportionalFromAbsoluteVal(widthTot);
|
||||
// }
|
||||
// case MeasureTypes.PERCENTAGE:
|
||||
// {
|
||||
// //return Double.Round((dDimension / 100) * widthTot, 1);
|
||||
// return (dDimension / 100) * widthTot;
|
||||
// }
|
||||
// }
|
||||
// return 0;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per convertire una dimensione da un valore assoluto al suo rispettivo tipo
|
||||
///// </summary>
|
||||
///// <param name="absoluteVal"> Valore assoluto </param>
|
||||
///// <param name="type"> Tipo di misura della dimensione </param>
|
||||
///// <param name="widthTot"> Larghezza totale </param>
|
||||
///// <returns></returns>
|
||||
//internal double ConvertIn(double absoluteVal, MeasureTypes type, double widthTot)
|
||||
//{
|
||||
// switch (type)
|
||||
// {
|
||||
// case MeasureTypes.ABSOLUTE:
|
||||
// {
|
||||
// return absoluteVal;
|
||||
// }
|
||||
// case MeasureTypes.PROPORTIONAL:
|
||||
// {
|
||||
// return ProportionalFromAbsoluteVal(widthTot);
|
||||
// }
|
||||
// case MeasureTypes.PERCENTAGE:
|
||||
// {
|
||||
// return (absoluteVal / widthTot) * 100;
|
||||
// }
|
||||
// }
|
||||
// return -1;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per convertire da misura proporzionale a misura assoluta o percentuale
|
||||
///// </summary>
|
||||
///// <param name="newType"></param>
|
||||
///// <returns></returns>
|
||||
//internal double ConvertFromPropVal(MeasureTypes newType, double widthTot, double dim)
|
||||
//{
|
||||
// double tot = widthTot;
|
||||
// //Somma misura non proporzionali
|
||||
// double sumNotProp = m_Parent.SashList
|
||||
// .Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL && !m.Equals(this))
|
||||
// .Sum(m => m.CalculateAbsoluteValue(tot));
|
||||
// //Calcolo residuo
|
||||
// double res = tot - sumNotProp;
|
||||
// if (res < 0) res = 0;
|
||||
// //Misure proporzionali
|
||||
// var proportionalList = m_Parent.SashList
|
||||
// .Where(m => m.SelMeasureType == MeasureTypes.PROPORTIONAL)
|
||||
// .ToList();
|
||||
|
||||
// double sumPesi = proportionalList.Sum(p => p.dDimension);
|
||||
// if (sumPesi == 0) sumPesi = 1;
|
||||
// if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
// {
|
||||
// return res / sumPesi * dim;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return (res / sumPesi * dim) / tot * 100;
|
||||
// }
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per trasformare il valore proporzionale in assoluto
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//internal double ProportionalFromAbsoluteVal(double widthTot)
|
||||
//{
|
||||
// double tot = widthTot;
|
||||
// //Somma misura non proporzionali
|
||||
// double sumNotProp = m_Parent.SashList
|
||||
// .Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL)
|
||||
// .Sum(m => m.CalculateAbsoluteValue(tot));
|
||||
// //Calcolo residuo
|
||||
// double res = tot - sumNotProp;
|
||||
// if (res < 0) res = 0;
|
||||
// //Misure proporzionali
|
||||
// var proportionalList = m_Parent.SashList
|
||||
// .Where(m => m.SelMeasureType == MeasureTypes.PROPORTIONAL)
|
||||
// .ToList();
|
||||
// double sumPesi = proportionalList.Sum(p => p.dDimension);
|
||||
// if (sumPesi == 0) sumPesi = 1;
|
||||
// return res / sumPesi * dDimension;
|
||||
//}
|
||||
|
||||
internal JsonSashDimension Serialize()
|
||||
{
|
||||
JsonSashDimension JsonSashDimension = new JsonSashDimension(OpeningType, m_bHasHandle, m_dDimension, m_nSashId);
|
||||
JsonSashDimension JsonSashDimension = new JsonSashDimension(OpeningType, MeasureType, m_bHasHandle, dDimension, m_nSashId);
|
||||
foreach (var Joint in JointList)
|
||||
JsonSashDimension.JointList.Add(Joint.Serialize());
|
||||
return JsonSashDimension;
|
||||
}
|
||||
|
||||
internal void SetDimension(double dValue)
|
||||
{
|
||||
m_dDimension = dValue;
|
||||
}
|
||||
//internal void SetDimension(double dValue)
|
||||
//{
|
||||
// m_dDimension = dValue;
|
||||
//}
|
||||
|
||||
internal void SetHasHandle(bool value)
|
||||
{
|
||||
@@ -296,15 +774,40 @@ namespace WebWindowTest.Models
|
||||
m_SelOpeningType = value;
|
||||
}
|
||||
|
||||
internal void SetMeasureType(MeasureTypes value)
|
||||
{
|
||||
SelMeasureType = value;
|
||||
}
|
||||
|
||||
internal void SetSelMeasureType(MeasureTypes value, int indexSash)
|
||||
{
|
||||
if (SelMeasureType != (MeasureTypes)value)
|
||||
{
|
||||
MeasureTypes newType = (MeasureTypes)value;
|
||||
double widthTot = CalculateWidthSashGroup(m_Parent.ParentWindow.AreaList.FirstOrDefault(), m_Parent.ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Width").First().dDimension);
|
||||
AreaDimension ad = new AreaDimension(dDimension, SelMeasureType);
|
||||
List<AreaDimension> newDimensions = new List<AreaDimension>();
|
||||
foreach(var item in m_Parent.SashList)
|
||||
{
|
||||
newDimensions.Add(new AreaDimension(item.dDimension, item.SelMeasureType));
|
||||
}
|
||||
m_dDimension = ad.ConvertDimension(newDimensions, SelMeasureType, newType, widthTot, indexSash);
|
||||
if(newType is MeasureTypes.PROPORTIONAL)
|
||||
{
|
||||
for (int i = 0; i < newDimensions.Count; i++)
|
||||
m_Parent.SashList.ElementAt(i).SetDimension(newDimensions.ElementAt(i).dDimension);
|
||||
}
|
||||
SelMeasureType = (MeasureTypes)value;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Internal Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private bool m_bHasHandle;
|
||||
|
||||
private bool m_bIsRelative = false;
|
||||
|
||||
private double m_dDimension;
|
||||
//private double m_dDimension;
|
||||
|
||||
private int m_nSashId;
|
||||
|
||||
@@ -337,11 +840,23 @@ namespace WebWindowTest.Models
|
||||
//new IdNameStruct((int)Openings.LIFTSLIDE_RIGHT, "←┐")
|
||||
};
|
||||
|
||||
//private List<IdNameStruct> m_MeasureTypeList = new List<IdNameStruct>
|
||||
//{
|
||||
// new IdNameStruct((int)MeasureTypes.ABSOLUTE, "Absolute"),
|
||||
// new IdNameStruct((int)MeasureTypes.PROPORTIONAL, "Proportional"),
|
||||
// new IdNameStruct((int)MeasureTypes.PERCENTAGE, "Percentage"),
|
||||
//};
|
||||
|
||||
// reference
|
||||
private Sash m_Parent;
|
||||
|
||||
private List<Joint> m_JointList = new List<Joint>();
|
||||
|
||||
private Openings m_SelOpeningType;
|
||||
|
||||
//private MeasureTypes m_SelMeasureType;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
}
|
||||
}
|
||||
+220
-153
@@ -20,13 +20,13 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Public Properties
|
||||
|
||||
public bool bIsPercentage
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_bIsPercentage;
|
||||
}
|
||||
}
|
||||
//public bool bIsPercentage
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_bIsPercentage;
|
||||
// }
|
||||
//}
|
||||
|
||||
public bool bSplitStartVert
|
||||
{
|
||||
@@ -37,7 +37,6 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_bSplitStartVert = value;
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,81 +48,86 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value == 0)
|
||||
if(value >= 0 && value < 6)
|
||||
{
|
||||
for (var SplitIndex = m_SplitHorizList.Count - 1; SplitIndex >= value; SplitIndex += -1)
|
||||
m_SplitHorizList.RemoveAt(SplitIndex);
|
||||
if (nSplitQtyVert == 0)
|
||||
if (value == 0)
|
||||
{
|
||||
ParentArea.AreaList.Remove(this);
|
||||
Fill newFill = Fill.CreateFill(ParentArea, FillTypes.GLASS);
|
||||
newFill.SetAreaType(AreaTypes.FILL);
|
||||
ParentArea.AreaList.Add(newFill);
|
||||
}
|
||||
else
|
||||
SetSplitShape(SplitShapes.VERTICAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ricalcolo dimensioni aggiungendo split
|
||||
if (value > m_SplitHorizList.Count - 1)
|
||||
{
|
||||
// recupero larghezza ultimo
|
||||
double dLastDimension = 100;
|
||||
double dNewDimension = 100;
|
||||
if (m_SplitHorizList.Count > 0)
|
||||
for (var SplitIndex = m_SplitHorizList.Count - 1; SplitIndex >= value; SplitIndex += -1)
|
||||
m_SplitHorizList.RemoveAt(SplitIndex);
|
||||
if (nSplitQtyVert == 0)
|
||||
{
|
||||
dLastDimension = m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension;
|
||||
dNewDimension = dLastDimension / (value + 1 - nSplitQtyHoriz);
|
||||
m_SplitHorizList[m_SplitHorizList.Count - 1].SetDimension(dNewDimension);
|
||||
ParentArea.AreaList.Remove(this);
|
||||
Fill newFill = Fill.CreateFill(ParentArea, FillTypes.GLASS);
|
||||
newFill.SetAreaType(AreaTypes.FILL);
|
||||
ParentArea.AreaList.Add(newFill);
|
||||
}
|
||||
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, true, this, false));
|
||||
SetSplitShape(SplitShapes.VERTICAL);
|
||||
}
|
||||
// Ricalcolo dimensioni rimuovendo split
|
||||
else
|
||||
{
|
||||
double dLastDimension = 0;
|
||||
for (var SplitIndex = m_SplitHorizList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1)
|
||||
double heightTot = CalculateHeightArea(ParentWindow.AreaList.First(), HeightFrame());
|
||||
// Ricalcolo dimensioni aggiungendo split
|
||||
if (value > m_SplitHorizList.Count - 1)
|
||||
{
|
||||
dLastDimension += m_SplitHorizList[SplitIndex].dDimension;
|
||||
m_SplitHorizList.RemoveAt(SplitIndex);
|
||||
// recupero larghezza ultimo
|
||||
double dLastDimension = heightTot;
|
||||
double dNewDimension = heightTot;
|
||||
if (m_SplitHorizList.Count > 0)
|
||||
{
|
||||
dLastDimension = m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension;
|
||||
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));
|
||||
}
|
||||
dLastDimension += m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension;
|
||||
m_SplitHorizList[m_SplitHorizList.Count - 1].SetDimension(dLastDimension);
|
||||
}
|
||||
// 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++)
|
||||
// Ricalcolo dimensioni rimuovendo split
|
||||
else
|
||||
{
|
||||
AreaList.Remove(AreaList[AreaList.Count - 1]);
|
||||
double dLastDimension = 0;
|
||||
for (var SplitIndex = m_SplitHorizList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1)
|
||||
{
|
||||
dLastDimension += m_SplitHorizList[SplitIndex].dDimension;
|
||||
m_SplitHorizList.RemoveAt(SplitIndex);
|
||||
}
|
||||
dLastDimension += m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension;
|
||||
m_SplitHorizList[m_SplitHorizList.Count - 1].SetDimension(dLastDimension);
|
||||
}
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
// Se elimino l'unico split presente
|
||||
else
|
||||
{
|
||||
Splitted s = (Splitted)AreaList[0];
|
||||
s.SetParentArea(ParentArea);
|
||||
ParentArea.AreaList.Add(s);
|
||||
ParentArea.AreaList.Remove(this);
|
||||
}
|
||||
}
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,86 +139,116 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value == 0)
|
||||
if (value >= 0 && value < 6)
|
||||
{
|
||||
for (var SplitIndex = m_SplitVertList.Count - 1; SplitIndex >= value; SplitIndex += -1)
|
||||
m_SplitVertList.RemoveAt(SplitIndex);
|
||||
if (nSplitQtyHoriz == 0)
|
||||
if (value == 0)
|
||||
{
|
||||
ParentArea.AreaList.Remove(this);
|
||||
Fill newFill = Fill.CreateFill(ParentArea, FillTypes.GLASS);
|
||||
newFill.SetAreaType(AreaTypes.FILL);
|
||||
ParentArea.AreaList.Add(newFill);
|
||||
}
|
||||
else
|
||||
SetSplitShape(SplitShapes.HORIZONTAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ricalcolo dimensioni aggiungendo split
|
||||
if (value > m_SplitVertList.Count - 1)
|
||||
{
|
||||
// recupero larghezza ultimo
|
||||
double dLastDimension = 100;
|
||||
double dNewDimension = 100;
|
||||
if (m_SplitVertList.Count > 0)
|
||||
for (var SplitIndex = m_SplitVertList.Count - 1; SplitIndex >= value; SplitIndex += -1)
|
||||
m_SplitVertList.RemoveAt(SplitIndex);
|
||||
if (nSplitQtyHoriz == 0)
|
||||
{
|
||||
dLastDimension = m_SplitVertList[m_SplitVertList.Count - 1].dDimension;
|
||||
dNewDimension = dLastDimension / (value + 1 - nSplitQtyVert);
|
||||
m_SplitVertList[m_SplitVertList.Count - 1].SetDimension(dNewDimension);
|
||||
ParentArea.AreaList.Remove(this);
|
||||
Fill newFill = Fill.CreateFill(ParentArea, FillTypes.GLASS);
|
||||
newFill.SetAreaType(AreaTypes.FILL);
|
||||
ParentArea.AreaList.Add(newFill);
|
||||
}
|
||||
else
|
||||
dNewDimension = dLastDimension / (value + 1 - nSplitQtyVert);
|
||||
// aggiungo area Split di default
|
||||
for (var SplitIndex = m_SplitVertList.Count; SplitIndex <= value; SplitIndex++)
|
||||
m_SplitVertList.Add(new SplitDimension(dNewDimension, true, this, true));
|
||||
SetSplitShape(SplitShapes.HORIZONTAL);
|
||||
}
|
||||
else if (value == 0)
|
||||
{
|
||||
m_SplitVertList.RemoveAt(1);
|
||||
m_SplitVertList.RemoveAt(0);
|
||||
}
|
||||
// Ricalcolo dimensioni rimuovendo split
|
||||
else
|
||||
{
|
||||
double dLastDimension = 0;
|
||||
for (var SplitIndex = m_SplitVertList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1)
|
||||
double widthTot = CalculateWidthArea(ParentWindow.AreaList.First(), ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Width").First().dDimension);
|
||||
// Ricalcolo dimensioni aggiungendo split
|
||||
if (value > m_SplitVertList.Count - 1)
|
||||
{
|
||||
dLastDimension += m_SplitVertList[SplitIndex].dDimension;
|
||||
m_SplitVertList.RemoveAt(SplitIndex);
|
||||
// recupero larghezza ultimo
|
||||
double dLastDimension = widthTot;
|
||||
double dNewDimension = widthTot;
|
||||
if (m_SplitVertList.Count > 0)
|
||||
{
|
||||
dLastDimension = m_SplitVertList[m_SplitVertList.Count - 1].dDimension;
|
||||
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);
|
||||
}
|
||||
else
|
||||
dNewDimension = dLastDimension / (value + 1 - nSplitQtyVert);
|
||||
// aggiungo area Split di default
|
||||
for (var SplitIndex = m_SplitVertList.Count; SplitIndex <= value; SplitIndex++)
|
||||
m_SplitVertList.Add(new SplitDimension(dNewDimension, m_SplitVertList[m_SplitVertList.Count - 1].MeasureType, true, this, true));
|
||||
}
|
||||
dLastDimension += m_SplitVertList[m_SplitVertList.Count - 1].dDimension;
|
||||
m_SplitVertList[m_SplitVertList.Count - 1].SetDimension(dLastDimension);
|
||||
}
|
||||
// Controllo quanti split orizzontali ci sono
|
||||
int nHoriz = m_SplitHorizList.Count > 0 ? m_SplitHorizList.Count : 1;
|
||||
// Se aggiungo split devo aggiungere vetro nell'area splitted aggiunta
|
||||
for (var SplitIndex = AreaList.Count; SplitIndex <= (m_SplitVertList.Count * nHoriz) - 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_SplitVertList.Count * nHoriz); SplitIndex <= nAreaList; SplitIndex++)
|
||||
else if (value == 0)
|
||||
{
|
||||
AreaList.Remove(AreaList[AreaList.Count - 1]);
|
||||
m_SplitVertList.RemoveAt(1);
|
||||
m_SplitVertList.RemoveAt(0);
|
||||
}
|
||||
// Ricalcolo dimensioni rimuovendo split
|
||||
else
|
||||
{
|
||||
int countProportional = m_SplitVertList.Count(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL));
|
||||
if(m_SplitVertList.Last().MeasureType.Equals(MeasureTypes.PROPORTIONAL) && countProportional - 1 == 1)
|
||||
{
|
||||
m_SplitVertList.RemoveAt(m_SplitVertList.Count() - 1);
|
||||
m_SplitVertList.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).FirstOrDefault().SetDimension(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
double dLastDimension = 0;
|
||||
for (var SplitIndex = m_SplitVertList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1)
|
||||
{
|
||||
dLastDimension += m_SplitVertList[SplitIndex].dDimension;
|
||||
m_SplitVertList.RemoveAt(SplitIndex);
|
||||
}
|
||||
dLastDimension += m_SplitVertList[m_SplitVertList.Count - 1].dDimension;
|
||||
m_SplitVertList[m_SplitVertList.Count - 1].SetDimension(dLastDimension);
|
||||
}
|
||||
}
|
||||
// Controllo quanti split orizzontali ci sono
|
||||
int nHoriz = m_SplitHorizList.Count > 0 ? m_SplitHorizList.Count : 1;
|
||||
// Se aggiungo split devo aggiungere vetro nell'area splitted aggiunta
|
||||
for (var SplitIndex = AreaList.Count; SplitIndex <= (m_SplitVertList.Count * nHoriz) - 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_SplitVertList.Count * nHoriz); 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);
|
||||
}
|
||||
}
|
||||
// Se elimino l'unico split presente
|
||||
else
|
||||
if(SplitHorizList.Count > 0)
|
||||
{
|
||||
Splitted s = (Splitted)AreaList[0];
|
||||
s.SetParentArea(ParentArea);
|
||||
ParentArea.AreaList.Add(s);
|
||||
ParentArea.AreaList.Remove(this);
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,15 +256,13 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
get
|
||||
{
|
||||
//return IdNameStruct.IndFromId((int)m_SelSplitShape, m_SplitShapeList);
|
||||
return (int)m_SelSplitShape;
|
||||
}
|
||||
set
|
||||
{
|
||||
//m_SelSplitShape = (SplitShapes)IdNameStruct.IdFromInd(value, m_SplitShapeList);
|
||||
SplitShapes OldSelShapeSplit = m_SelSplitShape;
|
||||
m_SelSplitShape = (SplitShapes)value;
|
||||
// Cancello elementi nello split e azzero quantità orizzontale e verticale
|
||||
AreaList.Clear();
|
||||
// Azzero quantità orizzontale e verticale
|
||||
SetSplitQtyVert(0);
|
||||
SetSplitQtyHoriz(0);
|
||||
if (m_SelSplitShape == SplitShapes.VERTICAL)
|
||||
@@ -252,17 +284,21 @@ namespace WebWindowTest.Models
|
||||
SetSplitQtyHoriz(1);
|
||||
SetSplitStartVert(true);
|
||||
}
|
||||
// Aggiungo area Splitted e vetro
|
||||
int nVert = m_SplitVertList.Count > 0 ? m_SplitVertList.Count : 1;
|
||||
int nHoriz = m_SplitHorizList.Count > 0 ? m_SplitHorizList.Count : 1;
|
||||
for (var SplitIndex = 0; SplitIndex <= (nVert * nHoriz) - 1; SplitIndex++)
|
||||
if(OldSelShapeSplit == SplitShapes.GRID || m_SelSplitShape == SplitShapes.GRID)
|
||||
{
|
||||
AreaList.Add(Splitted.CreateSplitted(this));
|
||||
Fill newFill = Fill.CreateFill(AreaList[SplitIndex], FillTypes.GLASS);
|
||||
newFill.SetAreaType(AreaTypes.FILL);
|
||||
AreaList[SplitIndex].AreaList.Add(newFill);
|
||||
// Cancello vecchio contenuto dello split
|
||||
AreaList.Clear();
|
||||
// Aggiungo area Splitted e vetro
|
||||
int nVert = m_SplitVertList.Count > 0 ? m_SplitVertList.Count : 1;
|
||||
int nHoriz = m_SplitHorizList.Count > 0 ? m_SplitHorizList.Count : 1;
|
||||
for (var SplitIndex = 0; SplitIndex <= (nVert * nHoriz) - 1; SplitIndex++)
|
||||
{
|
||||
AreaList.Add(Splitted.CreateSplitted(this));
|
||||
Fill newFill = Fill.CreateFill(AreaList[SplitIndex], FillTypes.GLASS);
|
||||
newFill.SetAreaType(AreaTypes.FILL);
|
||||
AreaList[SplitIndex].AreaList.Add(newFill);
|
||||
}
|
||||
}
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,12 +356,16 @@ namespace WebWindowTest.Models
|
||||
AddCounterGroup();
|
||||
newSplit.SetGroupId(nCounterGroup);
|
||||
newSplit.SetSplitStartVert(bSplitStartVert);
|
||||
newSplit.SetSplitQtyVert(nSplitQtyVert);
|
||||
for (int i = 0; i < SplitVertList.Count; i++)
|
||||
newSplit.SplitVertList.ElementAt(i).SetDimension(SplitVertList.ElementAt(i).dDimension);
|
||||
newSplit.SetSplitQtyHoriz(nSplitQtyHoriz);
|
||||
newSplit.SplitVertList.Add(SplitVertList[i].Copy());
|
||||
for (int i = 0; i < SplitHorizList.Count; i++)
|
||||
newSplit.SplitHorizList.ElementAt(i).SetDimension(SplitHorizList.ElementAt(i).dDimension);
|
||||
newSplit.SplitHorizList.Add(SplitHorizList[i].Copy());
|
||||
//newSplit.SetSplitQtyVert(nSplitQtyVert);
|
||||
//for (int i = 0; i < SplitVertList.Count; i++)
|
||||
// newSplit.SplitVertList.ElementAt(i).SetDimension(SplitVertList.ElementAt(i).dDimension);
|
||||
//newSplit.SetSplitQtyHoriz(nSplitQtyHoriz);
|
||||
//for (int i = 0; i < SplitHorizList.Count; i++)
|
||||
// newSplit.SplitHorizList.ElementAt(i).SetDimension(SplitHorizList.ElementAt(i).dDimension);
|
||||
newSplit.SetSplitShape(SelSplitShape);
|
||||
newSplit.SetAreaType(AreaType);
|
||||
foreach (var item in AreaList)
|
||||
@@ -342,7 +382,7 @@ namespace WebWindowTest.Models
|
||||
Fill newFill = Fill.CreateFill(ParentArea, FillTypes.GLASS);
|
||||
newFill.SetAreaType(AreaTypes.FILL);
|
||||
ParentArea.AreaList.Add(newFill);
|
||||
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
//m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
@@ -405,7 +445,7 @@ namespace WebWindowTest.Models
|
||||
dNewDimension = dLastDimension / (QtyHoriz + 1 - nSplitQtyHoriz);
|
||||
// aggiungo area Split di default
|
||||
for (var SplitIndex = m_SplitHorizList.Count; SplitIndex <= QtyHoriz; SplitIndex++)
|
||||
m_SplitHorizList.Add(new SplitDimension(dNewDimension, true, this, false));
|
||||
m_SplitHorizList.Add(new SplitDimension(dNewDimension, MeasureTypes.PERCENTAGE, true, this, false));
|
||||
}
|
||||
else if (QtyHoriz < m_SplitHorizList.Count)
|
||||
{
|
||||
@@ -431,7 +471,7 @@ namespace WebWindowTest.Models
|
||||
dNewDimension = dLastDimension / (QtyVert + 1 - nSplitQtyVert);
|
||||
// aggiungo area Split di default
|
||||
for (var SplitIndex = m_SplitVertList.Count; SplitIndex <= QtyVert; SplitIndex++)
|
||||
m_SplitVertList.Add(new SplitDimension(dNewDimension, true, this, true));
|
||||
m_SplitVertList.Add(new SplitDimension(dNewDimension, MeasureTypes.PERCENTAGE, true, this, true));
|
||||
}
|
||||
else if (QtyVert < m_SplitVertList.Count)
|
||||
{
|
||||
@@ -450,6 +490,31 @@ namespace WebWindowTest.Models
|
||||
m_bSplitStartVert = SplitStartVert;
|
||||
}
|
||||
|
||||
internal double HeightFrame()
|
||||
{
|
||||
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;
|
||||
}
|
||||
case (int)Shapes.RIGHTCHAMFER:
|
||||
{
|
||||
return ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Left Height").First().dDimension;
|
||||
}
|
||||
case (int)Shapes.LEFTCHAMFER:
|
||||
{
|
||||
return ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Right Height").First().dDimension;
|
||||
}
|
||||
default:
|
||||
{
|
||||
return ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Full Height").First().dDimension;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Internal Methods
|
||||
|
||||
#region Private Fields
|
||||
@@ -472,6 +537,8 @@ namespace WebWindowTest.Models
|
||||
|
||||
private List<SplitDimension> m_SplitVertList = new List<SplitDimension>();
|
||||
|
||||
//private double m_Width = 0;
|
||||
|
||||
#endregion Private Fields
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,19 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WebWindowTest.Json;
|
||||
using static WebWindowTest.Json.WindowConst;
|
||||
|
||||
namespace WebWindowTest.Models
|
||||
{
|
||||
public class SplitDimension
|
||||
public class SplitDimension:AreaDimension
|
||||
{
|
||||
#region Public Constructors
|
||||
|
||||
public SplitDimension(double dDimension, bool bIsRelative, Split Parent, bool IsVertList)
|
||||
public SplitDimension(double dDimension, MeasureTypes MeasureType, bool bIsRelative, Split Parent, bool IsVertList):base(dDimension, MeasureType)
|
||||
{
|
||||
m_dDimension = dDimension;
|
||||
m_bIsRelative = bIsRelative;
|
||||
@@ -39,7 +41,7 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
}
|
||||
|
||||
public double dDimension
|
||||
public override double dDimension
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -47,79 +49,182 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
set
|
||||
{
|
||||
// Controllo che il valore inserito sia compreso tra 0 e 100
|
||||
if (value > 0 && value < 100)
|
||||
double dimensionTot = 0;
|
||||
List<SplitDimension> dimensions = null;
|
||||
Frame frame = m_Parent.ParentWindow.AreaList.FirstOrDefault();
|
||||
if (bIsVertListDim)
|
||||
{
|
||||
// se sono in percentuale
|
||||
if (m_bIsRelative)
|
||||
{
|
||||
List<SplitDimension> RelativeDimList = new List<SplitDimension>();
|
||||
if (bIsVertListDim)
|
||||
RelativeDimList = m_Parent.SplitVertList.Where(x => x.bIsRelative).ToList();
|
||||
else
|
||||
RelativeDimList = m_Parent.SplitHorizList.Where(x => x.bIsRelative).ToList();
|
||||
// verifico se ci sono assoluti
|
||||
//List<SplitDimension> RelativeDimList = m_Parent.SplitPositionList.Where(x => x.bIsRelative).ToList();
|
||||
if (RelativeDimList.Count > 0)
|
||||
dimensions = m_Parent.SplitVertList;
|
||||
dimensionTot = CalculateWidthSplitGroup(frame, frame.DimensionList.Where(x => x.sName == "Width").First().dDimension, new AreaFound(-1, false)).m_Dimension;
|
||||
}
|
||||
else
|
||||
{
|
||||
dimensions = m_Parent.SplitHorizList;
|
||||
//dimensionTot = (CalculateHeightSplitGroup(m_Parent, HeightTot(), new AreaFound(-1, false))).m_Dimension;
|
||||
dimensionTot = (CalculateHeightSplitGroup(frame, frame.HeightFrame(), new AreaFound(-1, false))).m_Dimension;
|
||||
}
|
||||
double valMinAbsolute = 100;
|
||||
double valMaxAbsolute = dimensionTot - valMinAbsolute * (dimensions.Count - 1);
|
||||
bool valueAccept = false;
|
||||
switch (MeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
if (m_Parent.bIsPercentage)
|
||||
valueAccept = (value < valMaxAbsolute && value > valMinAbsolute) ? true : false;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
valMaxAbsolute = 20;
|
||||
valueAccept = (value >= 1) ? true : false;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
valMaxAbsolute = valMaxAbsolute / dimensionTot * 100;
|
||||
valMinAbsolute = valMinAbsolute / dimensionTot * 100;
|
||||
valueAccept = (value < valMaxAbsolute && value > valMinAbsolute) ? true : false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (valueAccept)
|
||||
{
|
||||
List<double> absoluteValList = new List<double>();
|
||||
AreaDimension ad = new AreaDimension(dDimension, SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in dimensions)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
foreach (var item in dimensions)
|
||||
{
|
||||
absoluteValList.Add(item.CalculateAbsoluteValue(adList, dimensionTot));
|
||||
}
|
||||
int nIndex = dimensions.IndexOf(this);
|
||||
int proportionalCount = dimensions.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).ToList().Count;
|
||||
int percentageCount = dimensions.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).ToList().Count;
|
||||
// Le dimensioni sono solo in proporzionale
|
||||
if (proportionalCount == absoluteValList.Count)
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
// Le dimensioni sono solo in percentuale
|
||||
else if (percentageCount == dimensions.Count)
|
||||
{
|
||||
if (value < dDimension)
|
||||
{
|
||||
// L'anta modificata non è l'ultima
|
||||
if (nIndex < dimensions.Count - 1)
|
||||
dimensions[nIndex + 1].SetDimension(dimensions[nIndex + 1].dDimension + (m_dDimension - value));
|
||||
else if (dimensions.Count > 1)
|
||||
dimensions[nIndex - 1].SetDimension(dimensions[nIndex - 1].dDimension + (m_dDimension - value));
|
||||
else
|
||||
{
|
||||
int nIndex = RelativeDimList.IndexOf(this);
|
||||
if (value < m_dDimension)
|
||||
m_dDimension = 100;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
double dRes = value;
|
||||
// se non ultima anta
|
||||
if (nIndex < dimensions.Count - 1)
|
||||
{
|
||||
for (var nInd = 0; nInd <= nIndex - 1; nInd++)
|
||||
dRes += dimensions[nInd].dDimension;
|
||||
dRes = (100 - dRes) / (dimensions.Count - nIndex - 1);
|
||||
for (var Ind = nIndex + 1; Ind <= dimensions.Count - 1; Ind++)
|
||||
dimensions[Ind].SetDimension(dRes);
|
||||
}
|
||||
// se ultima anta
|
||||
else if (dimensions.Count > 1)
|
||||
{
|
||||
if (dimensions.Count > 2)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
double dRes = value;
|
||||
if (nIndex < RelativeDimList.Count - 1)
|
||||
{
|
||||
for (var nInd = 0; nInd <= nIndex - 1; nInd++)
|
||||
dRes += RelativeDimList[nInd].dDimension;
|
||||
dRes = (100 - dRes) / (RelativeDimList.Count - nIndex - 1);
|
||||
if (dRes != 0)
|
||||
{
|
||||
for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++)
|
||||
RelativeDimList[Ind].SetDimension(dRes);
|
||||
}
|
||||
else
|
||||
return;
|
||||
}
|
||||
else if (RelativeDimList.Count > 1)
|
||||
{
|
||||
if (RelativeDimList.Count > 2)
|
||||
{
|
||||
for (var Ind = 0; Ind <= nIndex - 2; Ind++)
|
||||
dRes += RelativeDimList[Ind].dDimension;
|
||||
}
|
||||
dRes = (100 - dRes);
|
||||
if (dRes != 0)
|
||||
RelativeDimList[nIndex - 1].SetDimension(dRes);
|
||||
else
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_dDimension = 100;
|
||||
return;
|
||||
}
|
||||
for (var Ind = 0; Ind <= nIndex - 2; Ind++)
|
||||
dRes += dimensions[Ind].dDimension;
|
||||
}
|
||||
dRes = (100 - dRes);
|
||||
dimensions[nIndex - 1].SetDimension(dRes);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_dDimension = 100;
|
||||
return;
|
||||
}
|
||||
}
|
||||
m_dDimension = value;
|
||||
}
|
||||
// Le dimensioni sono miste o solo in assoluto
|
||||
else
|
||||
{
|
||||
double valueInAbsolute = 0;
|
||||
switch (MeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
valueInAbsolute = value;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
var pesi = value + dimensions
|
||||
.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL) && !x.Equals(this))
|
||||
.Sum(x => x.m_dDimension);
|
||||
valueInAbsolute = dimensionTot / pesi * value;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
valueInAbsolute = (value / 100) * dimensionTot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (value < dDimension)
|
||||
{
|
||||
// L'anta modificata non è l'ultima
|
||||
if (nIndex < absoluteValList.Count - 1)
|
||||
{
|
||||
absoluteValList[nIndex + 1] = absoluteValList[nIndex + 1] + (absoluteValList[nIndex] - valueInAbsolute);
|
||||
absoluteValList[nIndex] = valueInAbsolute;
|
||||
}
|
||||
// L'anta modificata è l'ultima
|
||||
else if (dimensions.Count > 1)
|
||||
{
|
||||
absoluteValList[nIndex - 1] = absoluteValList[nIndex - 1] + (absoluteValList[nIndex] - valueInAbsolute);
|
||||
absoluteValList[nIndex] = valueInAbsolute;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// L'anta modificata non è l'ultima
|
||||
if (nIndex < absoluteValList.Count - 1)
|
||||
{
|
||||
absoluteValList[nIndex + 1] = absoluteValList[nIndex + 1] - (valueInAbsolute - absoluteValList[nIndex]);
|
||||
absoluteValList[nIndex] = valueInAbsolute;
|
||||
}
|
||||
// L'anta modificata è l'ultima
|
||||
else if (dimensions.Count > 1)
|
||||
{
|
||||
absoluteValList[nIndex - 1] = absoluteValList[nIndex - 1] - (valueInAbsolute - absoluteValList[nIndex]);
|
||||
absoluteValList[nIndex] = valueInAbsolute;
|
||||
}
|
||||
}
|
||||
if (MeasureType.Equals(MeasureTypes.PROPORTIONAL))
|
||||
m_dDimension = value;
|
||||
for (int i = 0; i < absoluteValList.Count; i++)
|
||||
{
|
||||
var item = dimensions.ElementAt(i);
|
||||
item.SetDimension(ad.ConvertIn(adList, absoluteValList[i], (MeasureTypes)item.SelMeasureTypeIndex, dimensionTot));
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < m_Parent.AreaList.Count; i++)
|
||||
{
|
||||
if (m_Parent.SplitHorizList.Count > 0 && i < m_Parent.SplitHorizList.Count)
|
||||
m_Parent.AreaList.ElementAt(i).SearchAreaList(m_Parent.AreaList.ElementAt(i), m_Parent.SplitHorizList.ElementAt(i).dDimension, "Height");
|
||||
if (m_Parent.SplitVertList.Count > 0 && i < m_Parent.SplitVertList.Count)
|
||||
m_Parent.AreaList.ElementAt(i).SearchAreaList(m_Parent.AreaList.ElementAt(i), m_Parent.SplitVertList.ElementAt(i).dDimension, "Width");
|
||||
}
|
||||
m_dDimension = value;
|
||||
m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -136,13 +241,128 @@ namespace WebWindowTest.Models
|
||||
}
|
||||
}
|
||||
|
||||
//public MeasureTypes MeasureType
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_SelMeasureType;
|
||||
// }
|
||||
//}
|
||||
|
||||
//public List<IdNameStruct> MeasureTypeList
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_MeasureTypeList;
|
||||
// }
|
||||
//}
|
||||
|
||||
//public MeasureTypes SelMeasureType
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_SelMeasureType;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// m_SelMeasureType = value;
|
||||
// }
|
||||
//}
|
||||
|
||||
public override int SelMeasureTypeIndex
|
||||
{
|
||||
get
|
||||
{
|
||||
return (int)m_SelMeasureType;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (m_SelMeasureType != (MeasureTypes)value)
|
||||
{
|
||||
MeasureTypes newType = (MeasureTypes)value;
|
||||
List<SplitDimension> splitList = null;
|
||||
Frame frame = m_Parent.ParentWindow.AreaList.FirstOrDefault();
|
||||
double tot = 0;
|
||||
if (bIsVertListDim)
|
||||
{
|
||||
splitList = m_Parent.SplitVertList;
|
||||
tot = CalculateWidthSplitGroup(frame, frame.DimensionList.Where(x => x.sName == "Width").First().dDimension, new AreaFound(-1, false)).m_Dimension;
|
||||
}
|
||||
else
|
||||
{
|
||||
splitList = m_Parent.SplitHorizList;
|
||||
tot = (CalculateHeightSplitGroup(frame, frame.HeightFrame(), new AreaFound(-1, false))).m_Dimension;
|
||||
}
|
||||
AreaDimension ad = new AreaDimension(dDimension, SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in splitList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
m_dDimension = ad.ConvertDimension(adList, m_SelMeasureType, newType, tot, splitList.IndexOf(this));
|
||||
m_SelMeasureType = (MeasureTypes)value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Public Methods
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per convertire la dimensione dal vecchio tipo al nuovo tipo
|
||||
///// </summary>
|
||||
///// <param name="oldType"> Vecchio tipo </param>
|
||||
///// <param name="newType"> Nuovo tipo </param>
|
||||
///// <returns></returns>
|
||||
//public double ConvertDimension(MeasureTypes oldType, MeasureTypes newType, double widthTot, List<SplitDimension> splitList)
|
||||
//{
|
||||
// switch (oldType)
|
||||
// {
|
||||
// case MeasureTypes.ABSOLUTE:
|
||||
// {
|
||||
// if (newType.Equals(MeasureTypes.PERCENTAGE))
|
||||
// {
|
||||
// //return Double.Round((m_dDimension / m_Parent.Width) * 100, 1);
|
||||
// return (m_dDimension / widthTot) * 100;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return CalculatePropVal(widthTot, splitList);
|
||||
// }
|
||||
// }
|
||||
// case MeasureTypes.PROPORTIONAL:
|
||||
// {
|
||||
// if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
// {
|
||||
// //return Double.Round(ConvertFromPropVal(newType), 2);
|
||||
// return ConvertFromPropVal(newType, widthTot, splitList);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //return Double.Round(ConvertFromPropVal(newType), 1);
|
||||
// return ConvertFromPropVal(newType, widthTot, splitList);
|
||||
// }
|
||||
// }
|
||||
// case MeasureTypes.PERCENTAGE:
|
||||
// {
|
||||
// if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
// {
|
||||
// //return Double.Round((m_dDimension * m_Parent.Width) / 100, 2);
|
||||
// return (m_dDimension * widthTot) / 100;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return CalculatePropVal(widthTot, splitList);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return -1;
|
||||
//}
|
||||
|
||||
public SplitDimension Copy()
|
||||
{
|
||||
SplitDimension newSplitDim = new SplitDimension(dDimension, bIsRelative, m_Parent, bIsVertListDim);
|
||||
SplitDimension newSplitDim = new SplitDimension(dDimension, MeasureType, bIsRelative, m_Parent, bIsVertListDim);
|
||||
return newSplitDim;
|
||||
}
|
||||
|
||||
@@ -150,16 +370,356 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per calcolare larghezza intero split group
|
||||
/// </summary>
|
||||
/// <param name="area"> area di partenza </param>
|
||||
/// <param name="width"> larghezza di partenza </param>
|
||||
/// <param name="res"> area di ritorno </param>
|
||||
/// <returns></returns>
|
||||
internal AreaFound CalculateWidthSplitGroup(Area area, double width, AreaFound res)
|
||||
{
|
||||
for (int i = 0; i < area.AreaList.Count; i++)
|
||||
{
|
||||
if (area.Equals(m_Parent))
|
||||
{
|
||||
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)
|
||||
{
|
||||
int index = i;
|
||||
if (split.SelSplitShape is SplitShapes.GRID)
|
||||
index = i % split.SplitHorizList.Count;
|
||||
switch (split.SplitVertList.ElementAt(index).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
res = CalculateWidthSplitGroup(item, split.SplitVertList.ElementAt(index).dDimension, res);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
AreaDimension ad = new AreaDimension(split.SplitVertList.ElementAt(index).dDimension, split.SplitVertList.ElementAt(index).SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in split.SplitVertList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
res = CalculateWidthSplitGroup(item, ad.ConvertFromPropVal(adList, MeasureTypes.ABSOLUTE, width), res);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
res = CalculateWidthSplitGroup(item, split.SplitVertList.ElementAt(index).dDimension * width / 100, res);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (res.m_Dimension != -1 && res.m_Found)
|
||||
return res;
|
||||
}
|
||||
else
|
||||
{
|
||||
res = CalculateWidthSplitGroup(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 = CalculateWidthSplitGroup(item, sash.SashList.ElementAt(i).dDimension, res);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
AreaDimension ad = new AreaDimension(sash.SashList.ElementAt(i).dDimension, sash.SashList.ElementAt(i).SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in sash.SashList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
res = CalculateWidthSplitGroup(item, ad.ConvertFromPropVal(adList, MeasureTypes.ABSOLUTE, width), res);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
res = CalculateWidthSplitGroup(item, sash.SashList.ElementAt(i).dDimension * width / 100, res);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (res.m_Dimension != -1 && res.m_Found)
|
||||
return res;
|
||||
}
|
||||
else
|
||||
{
|
||||
res = CalculateWidthSplitGroup(item, width, res);
|
||||
if (res.m_Dimension != -1 && res.m_Found)
|
||||
return res;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Metodo per calcolare altezza intero split group
|
||||
/// </summary>
|
||||
/// <param name="area"> area di partenza </param>
|
||||
/// <param name="height"> altezza di partenza </param>
|
||||
/// <param name="res"> area di ritorno </param>
|
||||
/// <returns></returns>
|
||||
internal AreaFound CalculateHeightSplitGroup(Area area, double height, AreaFound res)
|
||||
{
|
||||
for (int i = 0; i < area.AreaList.Count; i++)
|
||||
{
|
||||
if (area.Equals(m_Parent))
|
||||
{
|
||||
res.m_Dimension = height;
|
||||
res.m_Found = true;
|
||||
return res;
|
||||
}
|
||||
Area item = area.AreaList[i];
|
||||
if (area is Split)
|
||||
{
|
||||
Split split = (Split)area;
|
||||
if (split.SplitHorizList.Count > 0)
|
||||
{
|
||||
int index = i;
|
||||
if (split.SelSplitShape is SplitShapes.GRID)
|
||||
index = i % split.SplitHorizList.Count;
|
||||
switch (split.SplitHorizList.ElementAt(index).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUTE:
|
||||
{
|
||||
double heightItemGroup = split.SplitHorizList.ElementAt(index).dDimension;
|
||||
res = CalculateHeightSplitGroup(item, heightItemGroup, res);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
AreaDimension ad = new AreaDimension(split.SplitHorizList.ElementAt(index).dDimension, split.SplitHorizList.ElementAt(index).SelMeasureType);
|
||||
List<AreaDimension> adList = new List<AreaDimension>();
|
||||
foreach (var it in split.SplitHorizList)
|
||||
{
|
||||
adList.Add(new AreaDimension(it.dDimension, it.SelMeasureType));
|
||||
}
|
||||
double heightItemGroup = ad.ConvertFromPropVal(adList, MeasureTypes.ABSOLUTE, height);
|
||||
res = CalculateHeightSplitGroup(item, heightItemGroup, res);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
double heightItemGroup = split.SplitHorizList.ElementAt(index).dDimension * height / 100;
|
||||
res = CalculateHeightSplitGroup(item, heightItemGroup, res);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (res.m_Dimension != -1 && res.m_Found)
|
||||
return res;
|
||||
}
|
||||
else
|
||||
{
|
||||
res = CalculateHeightSplitGroup(item, height, res);
|
||||
if (res.m_Dimension != -1 && res.m_Found)
|
||||
return res;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res = CalculateHeightSplitGroup(item, height, res);
|
||||
if (res.m_Dimension != -1 && res.m_Found)
|
||||
return res;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// Calcolo MCD
|
||||
///// </summary>
|
||||
///// <param name="a"></param>
|
||||
///// <param name="b"></param>
|
||||
///// <returns></returns>
|
||||
//internal static double CalculateMCD(double a, double b)
|
||||
//{
|
||||
// while (b >= 0.01)
|
||||
// {
|
||||
// double temp = b;
|
||||
// b = a % b;
|
||||
// a = temp;
|
||||
// }
|
||||
// //return Double.Round(a,2);
|
||||
// return a;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per ricalcolare i valori proporzionali a causa della modifica di uno
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//internal double CalculatePropVal(double widthTot, List<SplitDimension> splitList)
|
||||
//{
|
||||
// if (splitList.Where(m => m.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).ToList().Count == 0)
|
||||
// {
|
||||
// return 1;
|
||||
// }
|
||||
// List<double> absoluteValue = new List<double>();
|
||||
// foreach (var item in splitList)
|
||||
// {
|
||||
// absoluteValue.Add(item.CalculateAbsoluteValue(widthTot, splitList));
|
||||
// }
|
||||
// for (int i = 0; i < splitList.Count; i++)
|
||||
// {
|
||||
// if (!splitList.ElementAt(i).Equals(this) &&
|
||||
// splitList.ElementAt(i).MeasureType.Equals(MeasureTypes.PROPORTIONAL))
|
||||
// {
|
||||
// int nIndex = splitList.IndexOf(this);
|
||||
// if (absoluteValue.ElementAt(nIndex) <= absoluteValue.ElementAt(i))
|
||||
// {
|
||||
// var mcd = CalculateMCD(absoluteValue.ElementAt(nIndex), absoluteValue.ElementAt(i));
|
||||
// splitList.ElementAt(i).m_dDimension = absoluteValue.ElementAt(i) / mcd;
|
||||
// m_dDimension = absoluteValue.ElementAt(nIndex) / mcd;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// var mcd = CalculateMCD(absoluteValue.ElementAt(nIndex), absoluteValue.ElementAt(i));
|
||||
// splitList.ElementAt(i).m_dDimension = absoluteValue.ElementAt(i) / mcd;
|
||||
// m_dDimension = absoluteValue.ElementAt(nIndex) / mcd;
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// return m_dDimension;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per trasformare una dimensione in valore assoluto rispetto alla larghezza totale
|
||||
///// </summary>
|
||||
///// <param name="widthTot"> Larghezza totale </param>
|
||||
///// <returns></returns>
|
||||
//internal double CalculateAbsoluteValue(double widthTot, List<SplitDimension> splitList)
|
||||
//{
|
||||
// switch (MeasureType)
|
||||
// {
|
||||
// case MeasureTypes.ABSOLUTE:
|
||||
// {
|
||||
// //return Double.Round(dDimension, 2);
|
||||
// return dDimension;
|
||||
// }
|
||||
// case MeasureTypes.PROPORTIONAL:
|
||||
// {
|
||||
// //return Double.Round(Proportional2AbsolutVal(), 2);
|
||||
// return Proportional2AbsoluteVal(widthTot, splitList);
|
||||
// }
|
||||
// case MeasureTypes.PERCENTAGE:
|
||||
// {
|
||||
// //return Double.Round((dDimension / 100) * widthTot, 1);
|
||||
// return (dDimension / 100) * widthTot;
|
||||
// }
|
||||
// }
|
||||
// return 0;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per convertire una dimensione da un valore assoluto al suo rispettivo tipo
|
||||
///// </summary>
|
||||
///// <param name="absoluteVal"> Valore assoluto </param>
|
||||
///// <param name="type"> Tipo di misura della dimensione </param>
|
||||
///// <param name="widthTot"> Larghezza totale </param>
|
||||
///// <returns></returns>
|
||||
//internal double ConvertIn(double absoluteVal, MeasureTypes type, double widthTot, List<SplitDimension> splitList)
|
||||
//{
|
||||
// switch (type)
|
||||
// {
|
||||
// case MeasureTypes.ABSOLUTE:
|
||||
// {
|
||||
// return absoluteVal;
|
||||
// }
|
||||
// case MeasureTypes.PROPORTIONAL:
|
||||
// {
|
||||
// return Proportional2AbsoluteVal(widthTot, splitList);
|
||||
// }
|
||||
// case MeasureTypes.PERCENTAGE:
|
||||
// {
|
||||
// return (absoluteVal / widthTot) * 100;
|
||||
// }
|
||||
// }
|
||||
// return -1;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per convertire da misura proporzionale a misura assoluta o percentuale
|
||||
///// </summary>
|
||||
///// <param name="newType"></param>
|
||||
///// <returns></returns>
|
||||
//internal double ConvertFromPropVal(MeasureTypes newType, double widthTot, List<SplitDimension> splitList)
|
||||
//{
|
||||
// double tot = widthTot;
|
||||
// //Somma misura non proporzionali
|
||||
// double sumNotProp = splitList
|
||||
// .Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL && !m.Equals(this))
|
||||
// .Sum(m => m.CalculateAbsoluteValue(tot, splitList));
|
||||
// //Calcolo residuo
|
||||
// double res = tot - sumNotProp;
|
||||
// if (res < 0) res = 0;
|
||||
// //Misure proporzionali
|
||||
// var proportionalList = splitList
|
||||
// .Where(m => m.SelMeasureType == MeasureTypes.PROPORTIONAL)
|
||||
// .ToList();
|
||||
|
||||
// double sumPesi = proportionalList.Sum(p => p.dDimension);
|
||||
// if (sumPesi == 0) sumPesi = 1;
|
||||
// if (newType.Equals(MeasureTypes.ABSOLUTE))
|
||||
// {
|
||||
// return res / sumPesi * dDimension;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return (res / sumPesi * dDimension) / tot * 100;
|
||||
// }
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// Metodo per trasformare il valore proporzionale in assoluto
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//internal double Proportional2AbsoluteVal(double widthTot, List<SplitDimension> splitList)
|
||||
//{
|
||||
// double tot = widthTot;
|
||||
// //Somma misura non proporzionali
|
||||
// double sumNotProp = splitList
|
||||
// .Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL)
|
||||
// .Sum(m => m.CalculateAbsoluteValue(tot, splitList));
|
||||
// //Calcolo residuo
|
||||
// double res = tot - sumNotProp;
|
||||
// if (res < 0) res = 0;
|
||||
// //Misure proporzionali
|
||||
// var proportionalList = splitList
|
||||
// .Where(m => m.SelMeasureType == MeasureTypes.PROPORTIONAL)
|
||||
// .ToList();
|
||||
// double sumPesi = proportionalList.Sum(p => p.dDimension);
|
||||
// if (sumPesi == 0) sumPesi = 1;
|
||||
// return res / sumPesi * dDimension;
|
||||
//}
|
||||
|
||||
internal JsonSplitDimension Serialize()
|
||||
{
|
||||
JsonSplitDimension JsonSplitDimension = new JsonSplitDimension(m_bIsRelative, m_dDimension);
|
||||
JsonSplitDimension JsonSplitDimension = new JsonSplitDimension(m_bIsRelative, m_dDimension, MeasureType);
|
||||
return JsonSplitDimension;
|
||||
}
|
||||
|
||||
internal void SetDimension(double dValue)
|
||||
{
|
||||
m_dDimension = dValue;
|
||||
}
|
||||
//internal void SetDimension(double dValue)
|
||||
//{
|
||||
// m_dDimension = dValue;
|
||||
//}
|
||||
|
||||
internal void SetIsRelative(bool value)
|
||||
{
|
||||
@@ -171,6 +731,58 @@ namespace WebWindowTest.Models
|
||||
m_bIsVertListDim = value;
|
||||
}
|
||||
|
||||
internal void SetMeasureType(MeasureTypes value)
|
||||
{
|
||||
m_SelMeasureType = value;
|
||||
}
|
||||
|
||||
internal void SetSelMeasureType(MeasureTypes value)
|
||||
{
|
||||
if (m_SelMeasureType != (MeasureTypes)value)
|
||||
{
|
||||
MeasureTypes newType = (MeasureTypes)value;
|
||||
Frame frame = m_Parent.ParentWindow.AreaList.FirstOrDefault();
|
||||
double dimSplitGroup = 0;
|
||||
if (bIsVertListDim)
|
||||
{
|
||||
dimSplitGroup = (CalculateWidthSplitGroup(frame, frame.DimensionList.Where(x => x.sName == "Width").First().dDimension, new AreaFound(-1, false))).m_Dimension;
|
||||
AreaDimension ad = new AreaDimension(dDimension, SelMeasureType);
|
||||
List<AreaDimension> newDimensions = new List<AreaDimension>();
|
||||
foreach (var item in m_Parent.SplitVertList)
|
||||
{
|
||||
newDimensions.Add(new AreaDimension(item.dDimension, item.SelMeasureType));
|
||||
}
|
||||
m_dDimension = ad.ConvertDimension(newDimensions, m_SelMeasureType, newType, dimSplitGroup, m_Parent.SplitVertList.IndexOf(this));
|
||||
if (newType is MeasureTypes.PROPORTIONAL)
|
||||
{
|
||||
for (int i = 0; i < m_Parent.SplitVertList.Count; i++)
|
||||
{
|
||||
m_Parent.SplitVertList.ElementAt(i).SetDimension(newDimensions.ElementAt(i).dDimension);
|
||||
}
|
||||
} }
|
||||
else
|
||||
{
|
||||
//tot = (CalculateHeightSplitGroup(m_Parent, HeightTot(), new AreaFound(-1, false))).m_Dimension;
|
||||
dimSplitGroup = (CalculateHeightSplitGroup(frame, frame.HeightFrame(), new AreaFound(-1, false))).m_Dimension;
|
||||
AreaDimension ad = new AreaDimension(dDimension, SelMeasureType);
|
||||
List<AreaDimension> newDimensions = new List<AreaDimension>();
|
||||
foreach (var item in m_Parent.SplitHorizList)
|
||||
{
|
||||
newDimensions.Add(new AreaDimension(item.dDimension, item.SelMeasureType));
|
||||
}
|
||||
m_dDimension = ad.ConvertDimension(newDimensions, m_SelMeasureType, newType, dimSplitGroup, m_Parent.SplitHorizList.IndexOf(this));
|
||||
if(newType is MeasureTypes.PROPORTIONAL)
|
||||
{
|
||||
for(int i = 0; i < m_Parent.SplitHorizList.Count; i++)
|
||||
{
|
||||
m_Parent.SplitHorizList.ElementAt(i).SetDimension(newDimensions.ElementAt(i).dDimension);
|
||||
}
|
||||
}
|
||||
}
|
||||
m_SelMeasureType = (MeasureTypes)value;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Internal Methods
|
||||
|
||||
#region Private Fields
|
||||
@@ -179,11 +791,32 @@ namespace WebWindowTest.Models
|
||||
|
||||
private bool m_bIsVertListDim = false;
|
||||
|
||||
private double m_dDimension;
|
||||
//private double m_dDimension;
|
||||
|
||||
//private List<IdNameStruct> m_MeasureTypeList = new List<IdNameStruct>
|
||||
//{
|
||||
// new IdNameStruct((int)MeasureTypes.ABSOLUTE, "Absolute"),
|
||||
// new IdNameStruct((int)MeasureTypes.PROPORTIONAL, "Proportional"),
|
||||
// new IdNameStruct((int)MeasureTypes.PERCENTAGE, "Percentage"),
|
||||
//};
|
||||
|
||||
//private MeasureTypes m_SelMeasureType;
|
||||
|
||||
// reference
|
||||
private Split m_Parent;
|
||||
|
||||
#endregion Private Fields
|
||||
}
|
||||
|
||||
public class AreaFound
|
||||
{
|
||||
public AreaFound(double dimension, bool found)
|
||||
{
|
||||
m_Dimension = dimension;
|
||||
m_Found = found;
|
||||
}
|
||||
|
||||
public double m_Dimension { get; set; } = -1;
|
||||
public bool m_Found { get; set; } = false;
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ using System.Xml.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using WebWindowTest.Json;
|
||||
using static WebWindowTest.Json.WindowConst;
|
||||
using static WebWindowTest.ParametriOpzioni;
|
||||
using static WebWindowTest.Models.ParametriOpzioni;
|
||||
|
||||
namespace WebWindowTest.Models
|
||||
{
|
||||
@@ -19,9 +19,9 @@ namespace WebWindowTest.Models
|
||||
{
|
||||
#region Public Events
|
||||
|
||||
public event EventHandler<OnPreviewEventArgs> OnPreview = delegate { };
|
||||
public event EventHandler<OnReqShapeEventArgs> OnReqShape = delegate { };
|
||||
public event EventHandler<OnReqHwOptEventArgs> OnReqHwOption = delegate { };
|
||||
//public event EventHandler<OnPreviewEventArgs> OnPreview = delegate { };
|
||||
//public event EventHandler<OnReqShapeEventArgs> OnReqShape = delegate { };
|
||||
//public event EventHandler<OnReqHwOptEventArgs> OnReqHwOption = delegate { };
|
||||
|
||||
#endregion Public Events
|
||||
|
||||
@@ -48,7 +48,6 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_sColorMaterial = value;
|
||||
OnUpdatePreview(sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +60,6 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_sGlass = value;
|
||||
OnUpdatePreview(sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +72,6 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_sMaterial = value;
|
||||
OnUpdatePreview(sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +84,6 @@ namespace WebWindowTest.Models
|
||||
set
|
||||
{
|
||||
m_sProfilePath = value;
|
||||
OnUpdatePreview(sSerialized());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,35 +91,35 @@ namespace WebWindowTest.Models
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
internal void OnUpdatePreview(string sJwd)
|
||||
{
|
||||
OnPreviewEventArgs e = new OnPreviewEventArgs(sJwd);
|
||||
EventHandler<OnPreviewEventArgs> handler = OnPreview;
|
||||
if (handler != null)
|
||||
{
|
||||
handler(this, e);
|
||||
}
|
||||
}
|
||||
//internal void OnUpdatePreview(string sJwd)
|
||||
//{
|
||||
// OnPreviewEventArgs e = new OnPreviewEventArgs(sJwd);
|
||||
// EventHandler<OnPreviewEventArgs> handler = OnPreview;
|
||||
// if (handler != null)
|
||||
// {
|
||||
// handler(this, e);
|
||||
// }
|
||||
//}
|
||||
|
||||
internal void OnReqShapePreview(string sJwd, int groupId)
|
||||
{
|
||||
OnReqShapeEventArgs e = new OnReqShapeEventArgs(sJwd, groupId);
|
||||
EventHandler<OnReqShapeEventArgs> handler = OnReqShape;
|
||||
if (handler != null)
|
||||
{
|
||||
handler(this, e);
|
||||
}
|
||||
}
|
||||
//internal void OnReqShapePreview(string sJwd, int groupId)
|
||||
//{
|
||||
// OnReqShapeEventArgs e = new OnReqShapeEventArgs(sJwd, groupId);
|
||||
// EventHandler<OnReqShapeEventArgs> handler = OnReqShape;
|
||||
// if (handler != null)
|
||||
// {
|
||||
// handler(this, e);
|
||||
// }
|
||||
//}
|
||||
|
||||
internal void OnReqHwOptionPreview(string sJwd, int groupId)
|
||||
{
|
||||
OnReqHwOptEventArgs e = new OnReqHwOptEventArgs(sJwd, groupId);
|
||||
EventHandler<OnReqHwOptEventArgs> handler = OnReqHwOption;
|
||||
if (handler != null)
|
||||
{
|
||||
handler(this, e);
|
||||
}
|
||||
}
|
||||
//internal void OnReqHwOptionPreview(string sJwd, int groupId)
|
||||
//{
|
||||
// OnReqHwOptEventArgs e = new OnReqHwOptEventArgs(sJwd, groupId);
|
||||
// EventHandler<OnReqHwOptEventArgs> handler = OnReqHwOption;
|
||||
// if (handler != null)
|
||||
// {
|
||||
// handler(this, e);
|
||||
// }
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// Serializzazione dell'oggetto windows
|
||||
|
||||
Reference in New Issue
Block a user