501 lines
18 KiB
C#
501 lines
18 KiB
C#
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
|
||
}
|
||
} |