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 CardSplit { /// /// Split corrente rispetto alla lista split /// [Parameter] public Split CurrSplit { get; set; } = null!; /// /// Lista di sash /// [Parameter] public List SashList { get; set; } = null!; /// /// Lista di split /// [Parameter] public List SplitList { get; set; } = null!; /// /// Frame /// [Parameter] public Frame FrameWindow { get; set; } = null!; /// /// Livello di accesso (utente base) /// [CascadingParameter(Name = "User")] public bool User { get; set; } = false!; /// /// Evento per richiedere reset dizionario /// [Parameter] public EventCallback EC_ReqResetDict { get; set; } /// /// Evento per aggiornare Split /// [Parameter] public EventCallback EC_UpdateSplit { get; set; } /// /// Evento per aggiornare Frame /// [Parameter] public EventCallback EC_UpdateFrame { get; set; } /// /// Evento per tornare nella pagine Tree /// [Parameter] public EventCallback EC_ReqClose { get; set; } /// /// Metodo per scambiare le aree di uno split (solo se si hanno due aree) /// /// split corrente /// protected async Task SwapTwoAree() { CurrSplit.SwapAree(); var args = new DataUpdateSplit(){ currSplit = CurrSplit, svgNoHw = true }; await EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDictShape }); await EC_UpdateSplit.InvokeAsync(args); } /// /// Metodo per rimuovere split /// /// split corrente /// protected async Task RemoveArea() { CurrSplit.Remove(); var args = new DataUpdateFrame() { currFrame = FrameWindow }; // richiesta reset dict shape await EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDictShape }); await EC_UpdateFrame.InvokeAsync(args); await EC_ReqClose.InvokeAsync(true); } /// /// Proprietà per selezionare shape split /// /// protected int SplitShapeIndex { get => CurrSplit.SelSplitShapeIndex; set { if (CurrSplit.SelSplitShapeIndex != value) { CurrSplit.SelSplitShapeIndex = value; var args = new DataUpdateSplit() { currSplit = CurrSplit }; // Se la shape selezionata è grid o custom, richiede reset shape if(value > 2) _ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDictShape }); if (SearchSash(CurrSplit)) _ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetHwOpt }); _ = EC_UpdateSplit.InvokeAsync(args); } } } private bool SearchSash(Area area) { if (area is Sash) return true; foreach (var item in area.AreaList) return SearchSash(item); return false; } /// /// Proprietà per selezionare numero di split verticali /// /// protected int SplitQtyVert { get => CurrSplit.nSplitQtyVert; set { if (CurrSplit.nSplitQtyVert != value) { CurrSplit.nSplitQtyVert = value; var args = new DataUpdateSplit() { currSplit = CurrSplit }; _ = EC_UpdateSplit.InvokeAsync(args); } } } /// /// Proprietà per selezionare numero di split verticali /// /// protected int SplitQtyHoriz { get => CurrSplit.nSplitQtyHoriz; set { if (CurrSplit.nSplitQtyHoriz != value) { CurrSplit.nSplitQtyHoriz = value; var args = new DataUpdateSplit() { currSplit = CurrSplit }; _ = EC_UpdateSplit.InvokeAsync(args); } } } /// /// Metodo per aggiornare la dimensione dello split /// /// /// protected async Task UpdateDimension(DataUpdateSplitDimension updRec) { SplitDimension currSplitDim = updRec.currSplit; SplitDimension currRec = null; // cerco il record if (currSplitDim.bIsVertListDim) currRec = CurrSplit.SplitVertList.ElementAt(updRec.index); else currRec = CurrSplit.SplitHorizList.ElementAt(updRec.index); // lo aggiorno if (currSplitDim != null) { currRec = currSplitDim; var args = new DataUpdateSplit() { currSplit = CurrSplit, noSvg = updRec.noSvg }; //await EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDictShape }); await EC_UpdateSplit.InvokeAsync(args); } } /// /// Metodo per rimuovere split /// /// /// protected async Task ChangeStartVert(ChangeEventArgs e) { foreach (Split s in SplitList) { if (s.Equals(CurrSplit)) { s.SetSplitStartVert((bool)e.Value); } } var args = new DataUpdateSplit() { currSplit = CurrSplit }; await EC_UpdateSplit.InvokeAsync(args); } /// /// Metodo per determinare la descrizione del parent dello split corrente /// /// protected string descParentSplit() { if ((CurrSplit.ParentArea is Splitted || CurrSplit.ParentArea is Sash) && SashList.Count > 0) { for (int j = 0; j < SashList.Count; j++) { if (SashList[j].Equals(CurrSplit.ParentArea)) { return "Sash " + (j + 1); } else if (SashList[j].Equals(CurrSplit.ParentArea.ParentArea)) { for (int k = 0; k < SashList[j].AreaList.Count; k++) { if (SashList[j].AreaList[k].AreaList[0].Equals(CurrSplit)) { return "Sash group " + (j + 1) + " - sash " + (k + 1); } } } } } else { return "Frame"; } return ""; } /// /// Sollevo evento per tornare alla pagina Tree /// private void ReqClose() { _ = EC_ReqClose.InvokeAsync(true); } private bool isOpen = false; private void ToggleDropdown() { isOpen = !isOpen; } /// /// Metodo per cambiare il tipo di misura di tutti gli SplitDimension /// /// nuovo tipo /// protected async Task SetMeasureType(MeasureTypes type) { isOpen = !isOpen; foreach (var item in CurrSplit.SplitVertList) { item.SetSelMeasureType(type); } foreach (var item in CurrSplit.SplitHorizList) { item.SetSelMeasureType(type); } var args = new DataUpdateSplit() { currSplit = CurrSplit, noSvg = true }; await EC_UpdateSplit.InvokeAsync(args); } } /// /// Classe per raggruppare oggetti che servono per aggiornare split /// public class DataUpdateSplit { public Split currSplit { get; set; } = null!; public bool svgNoHw { get; set; } = false; public bool noSvg { get; set; } = false; } }