Files
Annamaria Sassi f2ad83fd09 Correzioni
2026-04-16 17:53:16 +02:00

447 lines
16 KiB
C#

using Microsoft.AspNetCore.Components;
using Newtonsoft.Json.Linq;
using WebWindowComplex.Models;
using static WebWindowComplex.Json.WindowConst;
using static WebWindowComplex.LayoutConst;
namespace WebWindowComplex.Compo
{
public partial class CardInglesina
{
/// <summary>
/// Inglesina corrente
/// </summary>
[Parameter]
public Inglesina CurrInglesina { get; set; } = null!;
/// <summary>
/// Lista di sash
/// </summary>
[Parameter]
public List<Sash> SashGroupList { get; set; } = null!;
/// <summary>
/// Lista di inglesine
/// </summary>
[Parameter]
public List<Inglesina> InglesinaList { get; set; } = null!;
/// <summary>
/// Frame
/// </summary>
[Parameter]
public Frame FrameWindow { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
/// <summary>
/// Evento per richiedere reset dizionario
/// </summary>
[Parameter]
public EventCallback<DataUpdateRes> EC_ReqResetDict { get; set; }
/// <summary>
/// Evento per aggiornare Inglesina
/// </summary>
[Parameter]
public EventCallback<DataUpdateInglesina> EC_UpdateInglesina { get; set; }
/// <summary>
/// Evento per aggiornare Frame
/// </summary>
[Parameter]
public EventCallback<DataUpdateFrame> EC_UpdateFrame { get; set; }
/// <summary>
/// Evento per richiesta profili degli Element
/// </summary>
[Parameter]
public EventCallback<Inglesina> EC_ReqElement { get; set; }
/// <summary>
/// Evento per tornare nella pagine Tree
/// </summary>
[Parameter]
public EventCallback<bool> EC_ReqClose { get; set; }
/// <summary>
/// Metodo per rimuovere Inglesina
/// </summary>
/// <param name="item"> Inglesina corrente </param>
/// <returns></returns>
protected async Task RemoveArea()
{
CurrInglesina.Remove();
var args = new DataUpdateFrame()
{
currFrame = FrameWindow
};
// richiesta reset dict shape
await EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDictShape });
await EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDictShape });
await EC_UpdateFrame.InvokeAsync(args);
await EC_ReqClose.InvokeAsync(true);
}
/// <summary>
/// Proprietà per selezionare shape Inglesina
/// </summary>
/// <returns></returns>
protected int InglesinaShapeIndex
{
get => CurrInglesina.SelSplitShapeIndex;
set
{
if (CurrInglesina.SelSplitShapeIndex != value)
{
CurrInglesina.SelSplitShapeIndex = value;
var args = new DataUpdateInglesina()
{
currInglesina = CurrInglesina
};
_ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = LayoutConst.DataAction.ResetDimElem });
if(!(CurrInglesina.ParentArea.ParentArea is Sash))
{
// Se la shape selezionata è grid o custom, richiede reset shape
if (value == (int)SplitShapes.GRID || value == (int)SplitShapes.CUSTOM)
_ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDictShape });
if (SearchSash(CurrInglesina))
_ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetHwOpt });
}
_ = EC_ReqElement.InvokeAsync(CurrInglesina);
_ = EC_UpdateInglesina.InvokeAsync(args);
}
}
}
/// <summary>
/// Proprietà per selezionare shape Inglesina
/// </summary>
/// <returns></returns>
protected int SideIndex
{
get => CurrInglesina.SelSideIndex;
set
{
if (CurrInglesina.SelSideIndex != value)
{
CurrInglesina.SelSideIndex = value;
var args = new DataUpdateInglesina()
{
currInglesina = CurrInglesina
};
_ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = LayoutConst.DataAction.ResetDimElem });
_ = EC_ReqElement.InvokeAsync(CurrInglesina);
_ = EC_UpdateInglesina.InvokeAsync(args);
}
}
}
private bool SearchSash(Area area)
{
if (area is Sash)
return true;
foreach (var item in area.AreaList)
return SearchSash(item);
return false;
}
/// <summary>
/// Proprietà per selezionare numero di Inglesina verticali
/// </summary>
/// <returns></returns>
protected int InglesinaQtyVert
{
get => CurrInglesina.nSplitQtyVert;
set
{
if (CurrInglesina.nSplitQtyVert != value)
{
CurrInglesina.nSplitQtyVert = value;
_ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDimElem });
var args = new DataUpdateInglesina()
{
currInglesina = CurrInglesina
};
_ = EC_ReqElement.InvokeAsync(CurrInglesina);
_ = EC_UpdateInglesina.InvokeAsync(args);
}
}
}
/// <summary>
/// Proprietà per selezionare numero di Inglesina verticali
/// </summary>
/// <returns></returns>
protected int InglesinaQtyHoriz
{
get => CurrInglesina.nSplitQtyHoriz;
set
{
if (CurrInglesina.nSplitQtyHoriz != value)
{
CurrInglesina.nSplitQtyHoriz = value;
_ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = LayoutConst.DataAction.ResetDimElem });
var args = new DataUpdateInglesina()
{
currInglesina = CurrInglesina
};
_ = EC_ReqElement.InvokeAsync(CurrInglesina);
_ = EC_UpdateInglesina.InvokeAsync(args);
}
}
}
/// <summary>
/// Aggiornamento element
/// </summary>
/// <param name="updRec"></param>
/// <returns></returns>
private async Task UpdateElement(SplitElementDimension updRec)
{
if (updRec != null)
{
SplitElementDimension? currRec = new SplitElementDimension(updRec.ParentArea, 0,0,-1);
if (updRec.nSubArea != 0)
{
List<SplitElementDimension> ElemIndexList = new List<SplitElementDimension>();
if (CurrInglesina.bSplitStartVert)
ElemIndexList = CurrInglesina.ElemDimHorizList
.Where(x => x.nSubArea != updRec.nSubArea && x.nIndex == updRec.nIndex)
.ToList();
else
ElemIndexList = CurrInglesina.ElemDimVertList
.Where(x => x.nSubArea == updRec.nSubArea && x.nIndex == updRec.nIndex)
.ToList();
foreach (var item in ElemIndexList)
{
item.SetDimension(updRec.dDimension);
}
}
else
{
if(CurrInglesina.bSplitStartVert)
currRec = CurrInglesina.ElemDimVertList.FirstOrDefault(x => x.ParentArea == updRec.ParentArea && x.nIndex == updRec.nIndex);
else
currRec = CurrInglesina.ElemDimHorizList.FirstOrDefault(x => x.ParentArea == updRec.ParentArea && x.nIndex == updRec.nIndex);
// lo aggiorno
currRec = updRec;
}
var args = new DataUpdateInglesina()
{
currInglesina = CurrInglesina
};
await EC_UpdateInglesina.InvokeAsync(args);
}
}
/// <summary>
/// Metodo per aggiornare la dimensione dell'3Inglesina
/// </summary>
/// <param name="updRec"></param>
/// <returns></returns>
protected async Task UpdateDimension(DataUpdateSplitDimension updRec)
{
SplitDimension currSplitDim = updRec.currSplit;
SplitDimension currRec = new SplitDimension(0, MeasureTypes.NULL, false, updRec.currSplit.Parent, false);
// cerco il record
if (currSplitDim.bIsVertListDim)
currRec = CurrInglesina.SplitVertList.ElementAt(updRec.index);
else
currRec = CurrInglesina.SplitHorizList.ElementAt(updRec.index);
// lo aggiorno
if (currSplitDim != null)
{
currRec = currSplitDim;
var args = new DataUpdateInglesina()
{
currInglesina = CurrInglesina,
noSvg = updRec.noSvg
};
//await EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDictShape });
await EC_UpdateInglesina.InvokeAsync(args);
}
}
/// <summary>
/// Metodo per cambiare la dimensione principale
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
protected async Task ChangeStartVert(ChangeEventArgs e)
{
foreach (Split s in InglesinaList)
{
if (s.Equals(CurrInglesina) && e.Value != null)
{
s.bSplitStartVert = (bool)e.Value;
//s.SetSplitStartVert((bool)e.Value);
}
}
await EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDimElem });
var args = new DataUpdateInglesina()
{
currInglesina = CurrInglesina
};
await EC_ReqElement.InvokeAsync(CurrInglesina);
await EC_UpdateInglesina.InvokeAsync(args);
}
/// <summary>
/// Metodo per determinare la descrizione del parent dello Inglesina corrente
/// </summary>
/// <returns></returns>
protected string descParentInglesina()
{
if ((CurrInglesina.ParentArea.ParentArea is Splitted || CurrInglesina.ParentArea.ParentArea.ParentArea is Sash) && SashGroupList.Count > 0)
{
for (int j = 0; j < SashGroupList.Count; j++)
{
if (SashGroupList[j].Equals(CurrInglesina.ParentArea.ParentArea))
{
return "Sash " + (j + 1);
}
else if (SashGroupList[j].Equals(CurrInglesina.ParentArea.ParentArea.ParentArea))
{
for (int k = 0; k < SashGroupList[j].AreaList.Count; k++)
{
if (SashGroupList[j].AreaList[k].AreaList[0].AreaList.Count > 0 && SashGroupList[j].AreaList[k].AreaList[0].AreaList[0].Equals(CurrInglesina))
{
return "Sash group " + (j + 1) + " - sash " + (k + 1);
}
}
}
}
}
else
{
return "Frame";
}
return "";
}
/// <summary>
/// Sollevo evento per tornare alla pagina Tree
/// </summary>
private void ReqClose()
{
_ = EC_ReqClose.InvokeAsync(true);
}
private bool isOpen = false;
private void ToggleDropdown()
{
isOpen = !isOpen;
}
protected MeasureTypes MeasureType
{
get
{
MeasureTypes type = MeasureTypes.NULL;
if (CurrInglesina.SplitVertList.Count > 0)
type = CurrInglesina.SplitVertList.First().SelMeasureType;
else
type = CurrInglesina.SplitHorizList.First().SelMeasureType;
for (int i = 1; i < CurrInglesina.SplitVertList.Count; i++)
{
if (CurrInglesina.SplitVertList.ElementAt(i).SelMeasureType != type)
return MeasureTypes.NULL;
}
for (int i = 1; i < CurrInglesina.SplitHorizList.Count; i++)
{
if (CurrInglesina.SplitHorizList.ElementAt(i).SelMeasureType != type)
return MeasureTypes.NULL;
}
return type;
}
set
{
foreach (var item in CurrInglesina.SplitVertList)
{
item.SelMeasureTypeIndex = (int)value;
//item.SetSelMeasureType(value);
}
foreach (var item in CurrInglesina.SplitHorizList)
{
item.SelMeasureTypeIndex = (int)value;
//item.SetSelMeasureType(value);
}
var args = new DataUpdateInglesina()
{
currInglesina = CurrInglesina,
noSvg = true
};
_ = EC_UpdateInglesina.InvokeAsync(args);
}
}
/// <summary>
/// Metodo per cambiare il tipo di misura di tutti gli SplitDimension
/// </summary>
/// <param name="type"> nuovo tipo </param>
/// <returns></returns>
protected Task SetMeasureType(MeasureTypes type)
{
isOpen = !isOpen;
foreach (var item in CurrInglesina.SplitVertList)
{
item.SelMeasureTypeIndex = (int)type;
//item.SetSelMeasureType(type);
}
foreach (var item in CurrInglesina.SplitHorizList)
{
item.SelMeasureTypeIndex = (int)type;
//item.SetSelMeasureType(type);
}
var args = new DataUpdateInglesina()
{
currInglesina = CurrInglesina,
noSvg = true
};
return EC_UpdateInglesina.InvokeAsync(args);
}
private List<SplitElementDimension> horizList()
{
int subAreaMin = CurrInglesina.ElemDimHorizList.Min(x => x.nSubArea);
return CurrInglesina.ElemDimHorizList.Where(x => x.nSubArea == subAreaMin).ToList();
}
private List<SplitElementDimension> vertList()
{
int subAreaMin = CurrInglesina.ElemDimVertList.Min(x => x.nSubArea);
return CurrInglesina.ElemDimVertList.Where(x => x.nSubArea == subAreaMin).ToList();
}
private string MeasureTypeCss(MeasureTypes type)
{
for (int i = 0; i < CurrInglesina.SplitVertList.Count; i++)
{
if (!CurrInglesina.SplitVertList.ElementAt(i).MeasureType.Equals(type))
return "btn btn-outline-secondary";
}
for (int i = 0; i < CurrInglesina.SplitHorizList.Count; i++)
{
if (!CurrInglesina.SplitHorizList.ElementAt(i).MeasureType.Equals(type))
return "btn btn-outline-secondary";
}
return "btn btn-secondary";
}
}
/// <summary>
/// Classe per raggruppare oggetti che servono per aggiornare Inglesina
/// </summary>
public class DataUpdateInglesina
{
public Inglesina currInglesina { get; set; } = null!;
public bool svgNoHw { get; set; } = false;
public bool noSvg { get; set; } = false;
}
}