Update settings & altro
This commit is contained in:
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WebWindowComplex.Json;
|
||||
using static WebWindowComplex.Json.WindowConst;
|
||||
|
||||
namespace WebWindowComplex.Models
|
||||
{
|
||||
@@ -41,6 +42,8 @@ namespace WebWindowComplex.Models
|
||||
{
|
||||
m_dValue = MinDim;
|
||||
}
|
||||
//if(ParentFrame.AreaList.Count > 0)
|
||||
// SearchAreaList(ParentFrame);
|
||||
m_ParentFrame.ParentWindow.OnUpdatePreview(m_ParentFrame.ParentWindow.sSerialized());
|
||||
}
|
||||
}
|
||||
@@ -73,6 +76,115 @@ namespace WebWindowComplex.Models
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
/// <summary>
|
||||
/// Cerca nell'albero gli oggetti Sash e Split per associare la larghezza
|
||||
/// </summary>
|
||||
/// <param name="node"></param>
|
||||
//protected void SearchAreaList(Area node)
|
||||
//{
|
||||
// if (node != null)
|
||||
// {
|
||||
// if(node.AreaType.Equals(AreaTypes.SASH))
|
||||
// calculateWidth((Sash)node);
|
||||
// else if(node.AreaType.Equals(AreaTypes.SPLIT))
|
||||
// calculateWidth((Split)node);
|
||||
// foreach (var item in node.AreaList)
|
||||
// {
|
||||
// SearchAreaList(item);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// Ricalcolo larghezza Sash e SPlit
|
||||
/// </summary>
|
||||
/// <param name="area"></param>
|
||||
//protected void calculateWidth(Area area)
|
||||
//{
|
||||
// if (area is Sash)
|
||||
// {
|
||||
// Sash sash = (Sash)area;
|
||||
// if (area.ParentArea is Frame)
|
||||
// {
|
||||
// Frame frame = (Frame)area.ParentArea;
|
||||
// sash.Width = (frame.DimensionList.Where(x => x.sName == "Width").FirstOrDefault())!.dValue;
|
||||
// }
|
||||
// else if (sash.ParentArea.ParentArea is Split)
|
||||
// {
|
||||
// Split split = (Split)sash.ParentArea.ParentArea;
|
||||
// if (split.SplitVertList.Count > 0)
|
||||
// {
|
||||
// int indexSplit = 0;
|
||||
// for (int i = 0; i < split.AreaList.Count; i++)
|
||||
// {
|
||||
// if (split.AreaList.ElementAt(i).AreaList.First().Equals(sash))
|
||||
// indexSplit = i;
|
||||
// }
|
||||
// switch (split.SplitVertList.ElementAt(indexSplit).MeasureType)
|
||||
// {
|
||||
// case MeasureTypes.ABSOLUT:
|
||||
// {
|
||||
// sash.Width = split.SplitVertList.ElementAt(indexSplit).dDimension;
|
||||
// break;
|
||||
// }
|
||||
// case MeasureTypes.PROPORTIONAL:
|
||||
// {
|
||||
// /// TO DO!!!!!
|
||||
// break;
|
||||
// }
|
||||
// case MeasureTypes.PERCENTAGE:
|
||||
// {
|
||||
// sash.Width = split.SplitVertList.ElementAt(indexSplit).dDimension / 100 * split.Width;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Frame frame = (Frame)sash.ParentWindow.AreaList[0];
|
||||
// sash.Width = (frame.DimensionList.Where(x => x.sName == "Width").FirstOrDefault())!.dValue;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else if (area is Split)
|
||||
// {
|
||||
// Split split = (Split)area;
|
||||
// if (area.ParentArea is Frame)
|
||||
// {
|
||||
// Frame frame = (Frame)area.ParentArea;
|
||||
// split.Width = (frame.DimensionList.Where(x => x.sName == "Width").FirstOrDefault())!.dValue;
|
||||
// }
|
||||
// else if (split.ParentArea.ParentArea is Sash)
|
||||
// {
|
||||
// Sash sash = (Sash)split.ParentArea.ParentArea;
|
||||
// int indexSash = 0;
|
||||
// for (int i = 0; i < sash.AreaList.Count; i++)
|
||||
// {
|
||||
// if (sash.AreaList.ElementAt(i).AreaList.First().Equals(split))
|
||||
// indexSash = i;
|
||||
// }
|
||||
// switch (sash.SashList.ElementAt(indexSash).MeasureType)
|
||||
// {
|
||||
// case MeasureTypes.ABSOLUT:
|
||||
// {
|
||||
// split.Width = sash.SashList.ElementAt(indexSash).dDimension;
|
||||
// break;
|
||||
// }
|
||||
// case MeasureTypes.PROPORTIONAL:
|
||||
// {
|
||||
// /// TO DO!!!!!
|
||||
// break;
|
||||
// }
|
||||
// case MeasureTypes.PERCENTAGE:
|
||||
// {
|
||||
// split.Width = sash.SashList.ElementAt(indexSash).dDimension / 100 * sash.Width;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
internal JsonFrameDimension Serialize()
|
||||
{
|
||||
JsonFrameDimension JsonFrameDimension = new JsonFrameDimension(m_nIndex, m_sName, m_dValue);
|
||||
|
||||
+105
-18
@@ -34,20 +34,51 @@ namespace WebWindowComplex.Models
|
||||
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
/// Larghezza gruppo ante
|
||||
/// </summary>
|
||||
public double Width
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Width;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_Width = value;
|
||||
}
|
||||
}
|
||||
///// <summary>
|
||||
///// Larghezza gruppo ante
|
||||
///// </summary>
|
||||
//public double Width
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_Width;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// if (m_Width != value && m_Width != 0)
|
||||
// {
|
||||
// // Se larghezza aumentata
|
||||
// if (SashList.Sum(x => x.CalculateAbsolutValue(m_Width)) < value)
|
||||
// {
|
||||
// if (SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).ToList().Count == 0 &&
|
||||
// SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).ToList().Count != SashList.Count)
|
||||
// {
|
||||
// double res = value - m_Width;
|
||||
// foreach (var item in SashList)
|
||||
// item.SetDimension(item.ConvertIn(item.CalculateAbsolutValue(m_Width) + res / SashList.Count, (MeasureTypes)item.SelMeasureTypeIndex, value));
|
||||
// }
|
||||
// }
|
||||
// // Larghezza diminuita
|
||||
// else if (SashList.Sum(x => x.CalculateAbsolutValue(m_Width)) > value)
|
||||
// {
|
||||
// if (SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).ToList().Count == 0 &&
|
||||
// SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).ToList().Count != SashList.Count)
|
||||
// {
|
||||
// double res = m_Width - value;
|
||||
// foreach (var item in SashList)
|
||||
// item.SetDimension(item.ConvertIn(item.CalculateAbsolutValue(m_Width) - res / SashList.Count, (MeasureTypes)item.SelMeasureTypeIndex, value));
|
||||
// }
|
||||
// }
|
||||
// m_Width = value;
|
||||
// m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// m_Width = value;
|
||||
// m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
public bool bIsMeasureGlass
|
||||
{
|
||||
@@ -158,7 +189,8 @@ namespace WebWindowComplex.Models
|
||||
itemDelete = m_SashList[SplitIndex];
|
||||
SashList.RemoveAt(SplitIndex);
|
||||
}
|
||||
double deleteDim = itemDelete.ConvertDimension(itemDelete.SelMeasureType, m_SashList[SashList.Count - 1].SelMeasureType);
|
||||
double widthTot = CalculateWidthSashGroup(ParentWindow.AreaList.First(), ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Width").First().dValue);
|
||||
double deleteDim = itemDelete.ConvertDimension(itemDelete.SelMeasureType, m_SashList[SashList.Count - 1].SelMeasureType, widthTot);
|
||||
//dLastDimension += m_SashList[SashList.Count - 1].dDimension;
|
||||
dLastDimension = deleteDim + m_SashList[SashList.Count - 1].dDimension;
|
||||
SashList[SashList.Count - 1].SetDimension(dLastDimension);
|
||||
@@ -570,7 +602,64 @@ namespace WebWindowComplex.Models
|
||||
#endregion Public Methods
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
internal double CalculateWidthSashGroup(Area area, double width)
|
||||
{
|
||||
if (area.Equals(this))
|
||||
return width;
|
||||
for (int i = 0; i < area.AreaList.Count; i++)
|
||||
{
|
||||
Area item = area.AreaList[i];
|
||||
if (area is Split)
|
||||
{
|
||||
Split split = (Split)area;
|
||||
switch (split.SplitVertList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUT:
|
||||
{
|
||||
CalculateWidthSashGroup(item, split.SplitVertList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
//CalculateWidthSashGroup(item, split.SplitVertList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
CalculateWidthSashGroup(item, split.SplitVertList.ElementAt(i).dDimension * width / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (area is Sash)
|
||||
{
|
||||
Sash sash = (Sash)area;
|
||||
switch (sash.SashList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUT:
|
||||
{
|
||||
CalculateWidthSashGroup(item, sash.SashList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
//CalculateWidthSashGroup(item, sash.SashList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
CalculateWidthSashGroup(item, sash.SashList.ElementAt(i).dDimension * width / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CalculateWidthSashGroup(item, width);
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
internal static Sash CreateSash(Area Area)
|
||||
{
|
||||
Sash newSash = new Sash(Area, Area.ParentWindow);
|
||||
@@ -909,8 +998,6 @@ namespace WebWindowComplex.Models
|
||||
private Hardware m_SelHardware;
|
||||
private OrientationSash m_SelOrientationSashType;
|
||||
|
||||
private double m_Width = 0;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Methods
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using WebWindowComplex.Json;
|
||||
using System.Security.Principal;
|
||||
using WebWindowComplex.Json;
|
||||
using static WebWindowComplex.Json.WindowConst;
|
||||
|
||||
namespace WebWindowComplex.Models
|
||||
@@ -113,42 +114,96 @@ namespace WebWindowComplex.Models
|
||||
}
|
||||
set
|
||||
{
|
||||
double valMax = 0;
|
||||
double widthTot = CalculateWidthSashGroup(m_Parent.ParentWindow.AreaList.FirstOrDefault(), m_Parent.ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Width").First().dValue);
|
||||
double valMinAbsolut = 100;
|
||||
double valMaxAbsolut = widthTot - valMinAbsolut * (m_Parent.SashList.Count - 1);
|
||||
bool valueAccept = false;
|
||||
switch (MeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUT:
|
||||
{
|
||||
valMax = m_Parent.Width;
|
||||
valueAccept = (value < valMax && value > 0) ? true : false;
|
||||
valueAccept = (value < valMaxAbsolut && value > valMinAbsolut) ? true : false;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
valMax = 20;
|
||||
valueAccept = true ;
|
||||
valMaxAbsolut = 20;
|
||||
valueAccept = (value > 1) ? true : false;
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
valMax = 100;
|
||||
valueAccept = (value < valMax && value > 0) ? true : false;
|
||||
valMaxAbsolut = valMaxAbsolut / widthTot * 100;
|
||||
valMinAbsolut = valMinAbsolut / widthTot * 100;
|
||||
valueAccept = (value < valMaxAbsolut && value > valMinAbsolut) ? true : false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (valueAccept)
|
||||
{
|
||||
double widthTot = m_Parent.Width;
|
||||
List <SashDimension> dimensions = m_Parent.SashList;
|
||||
List<SashDimension> dimensions = m_Parent.SashList;
|
||||
List<double> absolutValList = new List<double>();
|
||||
foreach(var item in m_Parent.SashList)
|
||||
foreach (var item in m_Parent.SashList)
|
||||
{
|
||||
absolutValList.Add(item.CalculateAbsolutValue(widthTot));
|
||||
}
|
||||
int nIndex = dimensions.IndexOf(this);
|
||||
int proportionalCount = dimensions.Where(x => x.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).ToList().Count;
|
||||
// Le altre dimensioni non sono solo in proporzionale
|
||||
if ( proportionalCount == 0 || proportionalCount < absolutValList.Count - 1)
|
||||
int percentageCount = dimensions.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).ToList().Count;
|
||||
// Le dimensioni sono solo in proporzionale
|
||||
if (proportionalCount == absolutValList.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
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
@@ -204,78 +259,75 @@ namespace WebWindowComplex.Models
|
||||
}
|
||||
if (MeasureType.Equals(MeasureTypes.PROPORTIONAL))
|
||||
m_dDimension = value;
|
||||
for(int i = 0; i < absolutValList.Count; i++)
|
||||
for (int i = 0; i < absolutValList.Count; i++)
|
||||
{
|
||||
var item = m_Parent.SashList.ElementAt(i);
|
||||
item.SetDimension(ConvertIn(absolutValList[i], (MeasureTypes)item.SelMeasureTypeIndex, widthTot));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_dDimension = value;
|
||||
}
|
||||
|
||||
m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
|
||||
}
|
||||
|
||||
//// se sono in percentuale
|
||||
//if (m_MeasureType.Equals(MeasureTypes.PERCENTAGE))
|
||||
//{
|
||||
// // Controllo che il valore inserito sia compreso tra 0 e 100
|
||||
// if (value > 0 && value < 100)
|
||||
// {
|
||||
// // verifico se ci sono altri in percentuale
|
||||
// List<SashDimension> RelativeDimList = m_Parent.SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).ToList();
|
||||
// if (RelativeDimList.Count > 0)
|
||||
// {
|
||||
// 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;
|
||||
// }
|
||||
// dRes = (100 - dRes);
|
||||
// RelativeDimList[nIndex - 1].SetDimension(dRes);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// m_dDimension = 100;
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// m_dDimension = value;
|
||||
// m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
|
||||
//}
|
||||
//// se sono in percentuale
|
||||
//if (m_MeasureType.Equals(MeasureTypes.PERCENTAGE))
|
||||
//{
|
||||
// // Controllo che il valore inserito sia compreso tra 0 e 100
|
||||
// if (value > 0 && value < 100)
|
||||
// {
|
||||
// // verifico se ci sono altri in percentuale
|
||||
// List<SashDimension> RelativeDimList = m_Parent.SashList.Where(x => x.MeasureType.Equals(MeasureTypes.PERCENTAGE)).ToList();
|
||||
// if (RelativeDimList.Count > 0)
|
||||
// {
|
||||
// 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;
|
||||
// }
|
||||
// dRes = (100 - dRes);
|
||||
// RelativeDimList[nIndex - 1].SetDimension(dRes);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// m_dDimension = 100;
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// m_dDimension = value;
|
||||
// m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -381,7 +433,8 @@ namespace WebWindowComplex.Models
|
||||
if(m_SelMeasureType != (MeasureTypes)value)
|
||||
{
|
||||
MeasureTypes newType = (MeasureTypes)value;
|
||||
m_dDimension = ConvertDimension(m_SelMeasureType, newType);
|
||||
double widthTot = CalculateWidthSashGroup(m_Parent.ParentWindow.AreaList.FirstOrDefault(), m_Parent.ParentWindow.AreaList.FirstOrDefault().DimensionList.Where(x => x.sName == "Width").First().dValue);
|
||||
m_dDimension = ConvertDimension(m_SelMeasureType, newType, widthTot);
|
||||
m_SelMeasureType = (MeasureTypes)value;
|
||||
m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
|
||||
}
|
||||
@@ -398,7 +451,7 @@ namespace WebWindowComplex.Models
|
||||
/// <param name="oldType"> Vecchio tipo </param>
|
||||
/// <param name="newType"> Nuovo tipo </param>
|
||||
/// <returns></returns>
|
||||
public double ConvertDimension(MeasureTypes oldType, MeasureTypes newType)
|
||||
public double ConvertDimension(MeasureTypes oldType, MeasureTypes newType, double widthTot)
|
||||
{
|
||||
switch (oldType)
|
||||
{
|
||||
@@ -406,33 +459,37 @@ namespace WebWindowComplex.Models
|
||||
{
|
||||
if (newType.Equals(MeasureTypes.PERCENTAGE))
|
||||
{
|
||||
return Double.Round((m_dDimension / m_Parent.Width) * 100, 0);
|
||||
//return Double.Round((m_dDimension / m_Parent.Width) * 100, 1);
|
||||
return (m_dDimension / widthTot) * 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
return ricalculatePropVal();
|
||||
return CalculatePropVal(widthTot);
|
||||
}
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
if (newType.Equals(MeasureTypes.ABSOLUT))
|
||||
{
|
||||
return Double.Round(convertFromPropVal(newType), 2);
|
||||
//return Double.Round(ConvertFromPropVal(newType), 2);
|
||||
return ConvertFromPropVal(newType, widthTot);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Double.Round(convertFromPropVal(newType));
|
||||
//return Double.Round(ConvertFromPropVal(newType), 1);
|
||||
return ConvertFromPropVal(newType, widthTot);
|
||||
}
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
if (newType.Equals(MeasureTypes.ABSOLUT))
|
||||
{
|
||||
return Double.Round((m_dDimension * m_Parent.Width) / 100);
|
||||
//return Double.Round((m_dDimension * m_Parent.Width) / 100, 2);
|
||||
return (m_dDimension * widthTot) / 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Double.Round(ricalculatePropVal());
|
||||
return CalculatePropVal(widthTot);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -456,6 +513,72 @@ namespace WebWindowComplex.Models
|
||||
|
||||
#region Internal Methods
|
||||
|
||||
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;
|
||||
switch (split.SplitVertList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUT:
|
||||
{
|
||||
risultato = CalculateWidthSashGroup(item, split.SplitVertList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
//risultato = CalculateWidthSashGroup(item, split.SplitVertList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
risultato = CalculateWidthSashGroup(item, split.SplitVertList.ElementAt(i).dDimension * width / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (risultato != -1)
|
||||
return risultato;
|
||||
}
|
||||
else if (area is Sash)
|
||||
{
|
||||
Sash sash = (Sash)area;
|
||||
switch (sash.SashList.ElementAt(i).SelMeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUT:
|
||||
{
|
||||
risultato = CalculateWidthSashGroup(item, sash.SashList.ElementAt(i).dDimension);
|
||||
break;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
//risultato = CalculateWidthSashGroup(item, sash.SashList.ElementAt(i).dDimension);
|
||||
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;
|
||||
}
|
||||
|
||||
internal JsonSashDimension Serialize()
|
||||
{
|
||||
JsonSashDimension JsonSashDimension = new JsonSashDimension(OpeningType, MeasureType, m_bHasHandle, m_dDimension, m_nSashId);
|
||||
@@ -487,20 +610,23 @@ namespace WebWindowComplex.Models
|
||||
/// </summary>
|
||||
/// <param name="widthTot"> Larghezza totale </param>
|
||||
/// <returns></returns>
|
||||
internal double CalculateAbsolutValue(double widthTot)
|
||||
public double CalculateAbsolutValue(double widthTot)
|
||||
{
|
||||
switch (MeasureType)
|
||||
{
|
||||
case MeasureTypes.ABSOLUT:
|
||||
{
|
||||
//return Double.Round(dDimension, 2);
|
||||
return dDimension;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
return calculatePropVal();
|
||||
//return Double.Round(Proportional2AbsolutVal(), 2);
|
||||
return Proportional2AbsolutVal(widthTot);
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
//return Double.Round((dDimension / 100) * widthTot, 1);
|
||||
return (dDimension / 100) * widthTot;
|
||||
}
|
||||
}
|
||||
@@ -514,20 +640,23 @@ namespace WebWindowComplex.Models
|
||||
/// <param name="type"> Tipo di misura della dimensione </param>
|
||||
/// <param name="widthTot"> Larghezza totale </param>
|
||||
/// <returns></returns>
|
||||
internal double ConvertIn(double absolutVal, MeasureTypes type, double widthTot)
|
||||
public double ConvertIn(double absolutVal, MeasureTypes type, double widthTot)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case MeasureTypes.ABSOLUT:
|
||||
{
|
||||
//return Double.Round(absolutVal, 2);
|
||||
return absolutVal;
|
||||
}
|
||||
case MeasureTypes.PROPORTIONAL:
|
||||
{
|
||||
return calculatePropVal();
|
||||
//return Proportional2AbsolutVal();
|
||||
return Proportional2AbsolutVal(widthTot);
|
||||
}
|
||||
case MeasureTypes.PERCENTAGE:
|
||||
{
|
||||
//return Double.Round((absolutVal / widthTot) * 100, 1);
|
||||
return (absolutVal / widthTot) * 100;
|
||||
}
|
||||
}
|
||||
@@ -539,9 +668,9 @@ namespace WebWindowComplex.Models
|
||||
/// </summary>
|
||||
/// <param name="newType"></param>
|
||||
/// <returns></returns>
|
||||
internal double convertFromPropVal(MeasureTypes newType)
|
||||
internal double ConvertFromPropVal(MeasureTypes newType, double widthTot)
|
||||
{
|
||||
double tot = m_Parent.Width;
|
||||
double tot = widthTot;
|
||||
//Somma misura non proporzionali
|
||||
double sumNotProp = m_Parent.SashList
|
||||
.Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL && !m.Equals(this))
|
||||
@@ -570,9 +699,9 @@ namespace WebWindowComplex.Models
|
||||
/// Metodo per calcolare il valore proporzionale
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
internal double calculatePropVal()
|
||||
internal double Proportional2AbsolutVal(double widthTot)
|
||||
{
|
||||
double tot = m_Parent.Width;
|
||||
double tot = widthTot;
|
||||
//Somma misura non proporzionali
|
||||
double sumNotProp = m_Parent.SashList
|
||||
.Where(m => m.MeasureType != MeasureTypes.PROPORTIONAL)
|
||||
@@ -595,14 +724,15 @@ namespace WebWindowComplex.Models
|
||||
/// <param name="a"></param>
|
||||
/// <param name="b"></param>
|
||||
/// <returns></returns>
|
||||
public static double CalcolaMCD(double a, double b)
|
||||
internal static double CalcolaMCD(double a, double b)
|
||||
{
|
||||
while (b != 0)
|
||||
while (b >= 0.01)
|
||||
{
|
||||
double temp = b;
|
||||
b = a % b;
|
||||
a = temp;
|
||||
}
|
||||
//return Double.Round(a,2);
|
||||
return a;
|
||||
}
|
||||
|
||||
@@ -610,7 +740,7 @@ namespace WebWindowComplex.Models
|
||||
/// Metodo per ricalcolare i valori proporzionali a causa della modifica di uno
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
internal double ricalculatePropVal()
|
||||
internal double CalculatePropVal(double widthTot)
|
||||
{
|
||||
if(m_Parent.SashList.Where(m => m.MeasureType.Equals(MeasureTypes.PROPORTIONAL)).ToList().Count == 0)
|
||||
{
|
||||
@@ -619,7 +749,7 @@ namespace WebWindowComplex.Models
|
||||
List<double> absolutValue = new List<double>();
|
||||
foreach (var item in m_Parent.SashList)
|
||||
{
|
||||
absolutValue.Add(item.CalculateAbsolutValue(m_Parent.Width));
|
||||
absolutValue.Add(item.CalculateAbsolutValue(widthTot));
|
||||
}
|
||||
for(int i = 0; i < m_Parent.SashList.Count; i++)
|
||||
{
|
||||
@@ -630,12 +760,16 @@ namespace WebWindowComplex.Models
|
||||
if (absolutValue.ElementAt(nIndex) <= absolutValue.ElementAt(i))
|
||||
{
|
||||
var mcd = CalcolaMCD(absolutValue.ElementAt(nIndex), absolutValue.ElementAt(i));
|
||||
//m_Parent.SashList.ElementAt(i).m_dDimension = Double.Round(absolutValue.ElementAt(i) / mcd, 2);
|
||||
//m_dDimension = Double.Round(absolutValue.ElementAt(nIndex) / mcd, 2);
|
||||
m_Parent.SashList.ElementAt(i).m_dDimension = absolutValue.ElementAt(i) / mcd;
|
||||
m_dDimension = absolutValue.ElementAt(nIndex) / mcd;
|
||||
}
|
||||
else
|
||||
{
|
||||
var mcd = CalcolaMCD(absolutValue.ElementAt(nIndex), absolutValue.ElementAt(i));
|
||||
//m_Parent.SashList.ElementAt(i).m_dDimension = Double.Round(absolutValue.ElementAt(i) / mcd, 2);
|
||||
//m_dDimension = Double.Round(absolutValue.ElementAt(nIndex) / mcd, 2);
|
||||
m_Parent.SashList.ElementAt(i).m_dDimension = absolutValue.ElementAt(i) / mcd;
|
||||
m_dDimension = absolutValue.ElementAt(nIndex) / mcd;
|
||||
}
|
||||
|
||||
@@ -23,17 +23,17 @@ namespace WebWindowComplex.Models
|
||||
/// <summary>
|
||||
/// Larghezza gruppo split
|
||||
/// </summary>
|
||||
public double Width
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Width;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_Width = value;
|
||||
}
|
||||
}
|
||||
//public double Width
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return m_Width;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// m_Width = value;
|
||||
// }
|
||||
//}
|
||||
|
||||
public bool bIsPercentage
|
||||
{
|
||||
@@ -487,7 +487,7 @@ namespace WebWindowComplex.Models
|
||||
|
||||
private List<SplitDimension> m_SplitVertList = new List<SplitDimension>();
|
||||
|
||||
private double m_Width = 0;
|
||||
//private double m_Width = 0;
|
||||
|
||||
#endregion Private Fields
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user