Files
webwindowconfigurator/WebWindowComplex/Models/SashDimension.cs
T

501 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using WebWindowComplex.Json;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Models
{
public class SashDimension
{
#region Public Constructors
public SashDimension(double dDimension, MeasureTypes MeasureType, Sash Parent, int nSashId)
{
m_dDimension = dDimension;
m_Parent = Parent;
m_nSashId = nSashId;
SetMeasureType(MeasureType);
// assengno maniglia
if (Parent.SashList.Count == 0 || !Parent.SashList.Any(x => x.bHasHandle))
m_bHasHandle = true;
// assegno tipo di anta
if (Parent.SashList.Count == 0)
SetOpeningType(Openings.TILTTURN_LEFT);
else if (Parent.SashList.Count == 1)
{
switch (Parent.SashList[0].OpeningType)
{
case Openings.TURNONLY_LEFT:
{
SetOpeningType(Openings.TURNONLY_RIGHT);
break;
}
case Openings.TURNONLY_RIGHT:
{
SetOpeningType(Openings.TURNONLY_LEFT);
break;
}
case Openings.TILTTURN_LEFT:
{
SetOpeningType(Openings.TURNONLY_RIGHT);
break;
}
case Openings.TILTTURN_RIGHT:
{
SetOpeningType(Openings.TURNONLY_LEFT);
break;
}
case Openings.TILTONLY_TOP:
{
SetOpeningType(Openings.TILTONLY_BOTTOM);
break;
}
case Openings.TILTONLY_BOTTOM:
{
SetOpeningType(Openings.TILTONLY_TOP);
break;
}
case Openings.COMPLANARSLIDE_LEFT:
{
SetOpeningType(Openings.COMPLANARSLIDE_RIGHT);
break;
}
case Openings.COMPLANARSLIDE_RIGHT:
{
SetOpeningType(Openings.COMPLANARSLIDE_LEFT);
break;
}
case Openings.LIFTSLIDE_LEFT:
{
SetOpeningType(Openings.LIFTSLIDE_RIGHT);
break;
}
case Openings.LIFTSLIDE_RIGHT:
{
SetOpeningType(Openings.LIFTSLIDE_LEFT);
break;
}
}
}
else
SetOpeningType(Parent.SashList[Parent.SashList.Count - 1].OpeningType);
}
#endregion Public Constructors
#region Public Properties
public bool bHasHandle
{
get
{
return m_bHasHandle;
}
set
{
m_bHasHandle = value;
//m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
}
}
public double dDimension
{
get
{
return m_dDimension;
}
set
{
double valMax = 0;
bool valueAccept = false;
switch (MeasureType)
{
case MeasureTypes.ABSOLUT:
{
valMax = m_Parent.SashList.Sum(x => x.dDimension);
valueAccept = (value < valMax && value > 0) ? true: false;
break;
}
case MeasureTypes.PROPORTIONAL:
{
valMax = m_Parent.SashList.Sum(x => x.dDimension);
break;
}
case MeasureTypes.PERCENTAGE:
{
valMax = 100;
valueAccept = (value < valMax && value > 0) ? true : false;
break;
}
}
if (!MeasureType.Equals(MeasureTypes.PROPORTIONAL))
{
if (valueAccept)
{
// verifico se ci sono altri in percentuale
List<SashDimension> DimList = m_Parent.SashList.Where(x => x.MeasureType.Equals(MeasureType)).ToList();
if (DimList.Count > 0)
{
int nIndex = DimList.IndexOf(this);
// se diminuisce dimensione
if (value < m_dDimension)
{
if (nIndex < DimList.Count - 1)
DimList[nIndex + 1].SetDimension(DimList[nIndex + 1].dDimension + (m_dDimension - value));
else if (DimList.Count > 1)
DimList[nIndex - 1].SetDimension(DimList[nIndex - 1].dDimension + (m_dDimension - value));
else
{
m_dDimension = valMax;
return;
}
}
// se aumenta dimensione
else
{
double dRes = value;
// se non ultima anta
if (nIndex < DimList.Count - 1)
{
for (var nInd = 0; nInd <= nIndex - 1; nInd++)
dRes += DimList[nInd].dDimension;
dRes = (100 - dRes) / (DimList.Count - nIndex - 1);
for (var Ind = nIndex + 1; Ind <= DimList.Count - 1; Ind++)
DimList[Ind].SetDimension(dRes);
}
// se ultima anta
else if (DimList.Count > 1)
{
if (DimList.Count > 2)
{
for (var Ind = 0; Ind <= nIndex - 2; Ind++)
dRes += DimList[Ind].dDimension;
}
dRes = (valMax - dRes);
DimList[nIndex - 1].SetDimension(dRes);
}
else
{
m_dDimension = valMax;
return;
}
}
}
m_dDimension = value;
m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
}
}
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());
//}
}
}
public int nSashId
{
get
{
return m_nSashId;
}
}
public Openings OpeningType
{
get
{
return m_SelOpeningType;
}
}
public List<IdNameStruct> OpeningTypeList
{
get
{
return m_OpeningTypeList;
}
}
public Openings SelOpeningType
{
get
{
return m_SelOpeningType;
}
set
{
m_SelOpeningType = value;
m_Parent.ReqRefreshShape();
m_Parent.RefreshHardwareOptionList();
m_Parent.SetFirstHardware();
}
}
public int SelOpeningTypeIndex
{
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.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 int SelMeasureTypeIndex
{
get
{
return (int)m_SelMeasureType;
}
set
{
m_SelMeasureType = (MeasureTypes)value;
}
}
#endregion Public Properties
#region Public Methods
public SashDimension Copy()
{
SashDimension newSashDim = new SashDimension(dDimension, MeasureType, m_Parent, m_nSashId);
newSashDim.SetMeasureType(MeasureType);
newSashDim.SetOpeningType(SelOpeningType);
newSashDim.SetHasHandle(bHasHandle);
return newSashDim;
}
#endregion Public Methods
#region Internal Methods
internal JsonSashDimension Serialize()
{
JsonSashDimension JsonSashDimension = new JsonSashDimension(OpeningType, m_bHasHandle, m_dDimension, m_nSashId);
return JsonSashDimension;
}
internal void SetDimension(double dValue)
{
m_dDimension = dValue;
}
internal void SetHasHandle(bool value)
{
m_bHasHandle = value;
}
internal void SetOpeningType(Openings value)
{
m_SelOpeningType = value;
}
internal void SetMeasureType(MeasureTypes value)
{
m_SelMeasureType = value;
}
#endregion Internal Methods
#region Private Fields
private bool m_bHasHandle;
private double m_dDimension;
private int m_nSashId;
private List<IdNameStruct> m_OpeningTypeList = new List<IdNameStruct>
{
new IdNameStruct((int)Openings.TURNONLY_LEFT, "A bandiera sinistra"),
new IdNameStruct((int)Openings.TURNONLY_RIGHT, "A bandiera destra"),
new IdNameStruct((int)Openings.TILTTURN_LEFT, "Ad anta-ribalta sinistra"),
new IdNameStruct((int)Openings.TILTTURN_RIGHT, "Ad anta-ribalta destra"),
new IdNameStruct((int)Openings.TILTONLY_TOP, "Solo verso alto"),
new IdNameStruct((int)Openings.TILTONLY_BOTTOM, "Solo verso basso"),
new IdNameStruct((int)Openings.PIVOT, "Pivot"),
new IdNameStruct((int)Openings.FIXED, "Fissa"),
new IdNameStruct((int)Openings.COMPLANARSLIDE_LEFT, "Complanare sinistra"),
new IdNameStruct((int)Openings.COMPLANARSLIDE_RIGHT, "Complanare destra"),
new IdNameStruct((int)Openings.LIFTSLIDE_LEFT, "Scorrevole sinistra"),
new IdNameStruct((int)Openings.LIFTSLIDE_RIGHT, "Scorrevole destra")
//new IdNameStruct((int)Openings.TURNONLY_LEFT, ">"),
//new IdNameStruct((int)Openings.TURNONLY_RIGHT, "<"),
//new IdNameStruct((int)Openings.TILTTURN_LEFT, ">*"),
//new IdNameStruct((int)Openings.TILTTURN_RIGHT, "<*"),
//new IdNameStruct((int)Openings.TILTONLY_TOP, "˄"),
//new IdNameStruct((int)Openings.TILTONLY_BOTTOM, "˅"),
//new IdNameStruct((int)Openings.PIVOT, "◊"),
//new IdNameStruct((int)Openings.FIXED, "X"),
//new IdNameStruct((int)Openings.COMPLANARSLIDE_LEFT, "-→"),
//new IdNameStruct((int)Openings.COMPLANARSLIDE_RIGHT, "←-"),
//new IdNameStruct((int)Openings.LIFTSLIDE_LEFT, "┌→"),
//new IdNameStruct((int)Openings.LIFTSLIDE_RIGHT, "←┐")
};
private List<IdNameStruct> m_MeasureTypeList = new List<IdNameStruct>
{
new IdNameStruct((int)MeasureTypes.ABSOLUT, "Absolut"),
new IdNameStruct((int)MeasureTypes.PROPORTIONAL, "Proportional"),
new IdNameStruct((int)MeasureTypes.PERCENTAGE, "Percentage"),
};
// reference
private Sash m_Parent;
private Openings m_SelOpeningType;
private MeasureTypes m_SelMeasureType;
#endregion Private Fields
#region Private Methods
/// <summary>
/// Recupero della larghezza del frame
/// </summary>
/// <returns></returns>
private double GetWidth()
{
double width = 0;
int indexSash = 0;
if (m_Parent.ParentArea != null && m_Parent.ParentArea.ParentArea != null && m_Parent.ParentArea.ParentArea is Split)
{
Split splitParent = (Split)m_Parent.ParentArea.ParentArea;
if(splitParent.SplitVertList.Count > 0)
{
for(int i = 0; i < splitParent.AreaList.Count; i++)
{
if (splitParent.AreaList[i].AreaList[0].Equals(this))
{
indexSash = i;
}
}
}
//int indexSash = splitParent.AreaList.Where(x => x.AreaList[0].Equals(this));
}
else
{
Frame a = m_Parent.ParentWindow.AreaList[0];
FrameDimension? fd = a.DimensionList.Where(x => x.sName == "Width").SingleOrDefault();
width = fd.dValue;
}
return width;
}
#endregion Private Methods
}
}