diff --git a/Test.UI/Components/Pages/EditJWD.razor b/Test.UI/Components/Pages/EditJWD.razor index 023ae55..8f31649 100644 --- a/Test.UI/Components/Pages/EditJWD.razor +++ b/Test.UI/Components/Pages/EditJWD.razor @@ -4,8 +4,8 @@ EditJWD -
- @*
+@*
+
FamilyHw
-
*@ +
Color @@ -65,13 +65,12 @@
-
+
*@ @if (doEdit) { - /// Configurazione selezionati - /// - protected SelectPayload SelectList = new SelectPayload(); - /// /// Configurazione elenchi anagrafiche /// @@ -253,7 +248,7 @@ namespace Test.UI.Components.Pages } else { - string fullPath = Path.Combine("Data", "PortafineestraTreAnte.jwd"); + string fullPath = Path.Combine("Data", "AntaDoppia.jwd"); return File.ReadAllText(fullPath); //return File.ReadAllText("Data\\AntaDoppia.jwd"); } diff --git a/Test.UI/Components/Pages/TestError.razor b/Test.UI/Components/Pages/TestError.razor index 96a47b0..f8ed734 100644 --- a/Test.UI/Components/Pages/TestError.razor +++ b/Test.UI/Components/Pages/TestError.razor @@ -10,7 +10,6 @@ protected BaseListPayload SetupList = new BaseListPayload(); - /// - /// Configurazione selezionati - /// - protected SelectPayload SelectList = new SelectPayload(); - #endregion Protected Fields #region Protected Properties diff --git a/Test.UI/Data/PortafineestraTreAnte.jwd b/Test.UI/Data/PortafinestraTreAnte.jwd similarity index 100% rename from Test.UI/Data/PortafineestraTreAnte.jwd rename to Test.UI/Data/PortafinestraTreAnte.jwd diff --git a/WebWindowComplex/Compo/CardInglesina.razor b/WebWindowComplex/Compo/CardInglesina.razor new file mode 100644 index 0000000..141aca2 --- /dev/null +++ b/WebWindowComplex/Compo/CardInglesina.razor @@ -0,0 +1,209 @@ +@using static WebWindowComplex.Json.WindowConst + +
+
+
+
+
@(descParentSplit())
+
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
Inglesina
+ @if (!User) + { +
+ +
+ } +
+
+
+
+ @if (User) + { + Shape + + } + else + { + + + } +
+
+
+
+ @if (User) + { + Side + + } + else + { + + + } +
+
+
+
+ @if (CurrInglesina.nSplitQtyVert > 0) + { +
+
+ QtyVert + @if (User) + { + + } + else + { + + } +
+
+ } + @if (CurrInglesina.nSplitQtyHoriz > 0) + { +
+
+ QtyHoriz + @if (User) + { + + } + else + { + + } +
+
+ } +
+
+ @if (CurrInglesina.SplitVertList.Count > 0 && CurrInglesina.SplitHorizList.Count > 0) + { +
+ @for (int i = 0; i < CurrInglesina.SplitVertList.Count; i++) + { + + + } +
+
+ @for (int i = 0; i < CurrInglesina.SplitHorizList.Count; i++) + { + + + } +
+ } + else if (CurrInglesina.SplitHorizList.Count > 0) + { + @for (int i = 0; i < CurrInglesina.SplitHorizList.Count; i++) + { + + + } + } + else if (CurrInglesina.SplitVertList.Count > 0) + { + @for (int i = 0; i < CurrInglesina.SplitVertList.Count; i++) + { + + + } + } +
+ @if (CurrInglesina.SelSplitShape == Json.WindowConst.SplitShapes.GRID) + { +
+
+
+
+ @if (User) + { + + } + else + { + + } +
+
+ +
+
+
+
+ } +
+
+ @if (CurrInglesina.nSplitQtyVert > 0) + { +
+
+
Element vert
+
+ @foreach (var element in vertList()) + { + + } +
+ } + @if (CurrInglesina.nSplitQtyHoriz > 0) + { +
+
+
Element horiz
+
+ @foreach (var element in horizList()) + { + + } +
+ } +
+
+
diff --git a/WebWindowComplex/Compo/CardInglesina.razor.cs b/WebWindowComplex/Compo/CardInglesina.razor.cs new file mode 100644 index 0000000..739e74c --- /dev/null +++ b/WebWindowComplex/Compo/CardInglesina.razor.cs @@ -0,0 +1,463 @@ +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 + { + + /// + /// Inglesina corrente rispetto alla lista inglesine + /// + [Parameter] + public Inglesina CurrInglesina { get; set; } = null!; + + /// + /// Lista di sash + /// + [Parameter] + public List SashGroupList { get; set; } = null!; + + /// + /// Lista di inglesine + /// + [Parameter] + public List InglesinaList { 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 Inglesina + /// + [Parameter] + public EventCallback EC_UpdateInglesina { get; set; } + + /// + /// Evento per aggiornare Frame + /// + [Parameter] + public EventCallback EC_UpdateFrame { get; set; } + + /// + /// Evento per richiesta profili degli Element + /// + [Parameter] + public EventCallback EC_ReqElement { get; set; } + + /// + /// Evento per tornare nella pagine Tree + /// + [Parameter] + public EventCallback EC_ReqClose { get; set; } + + /// + /// Metodo per rimuovere split + /// + /// split corrente + /// + 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); + } + + /// + /// Proprietà per selezionare shape split + /// + /// + protected int SplitShapeIndex + { + 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); + } + } + } + + /// + /// Proprietà per selezionare shape split + /// + /// + 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; + } + + /// + /// Proprietà per selezionare numero di split verticali + /// + /// + protected int SplitQtyVert + { + 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); + } + } + } + + /// + /// Proprietà per selezionare numero di split verticali + /// + /// + protected int SplitQtyHoriz + { + 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); + } + } + } + + /// + /// Aggiornamento element + /// + /// + /// + private async Task UpdateElement(SplitElementDimension updRec) + { + if (updRec != null) + { + SplitElementDimension? currRec = new SplitElementDimension(updRec.ParentArea, 0,0,-1); + if (updRec.nSubArea != 0) + { + List ElemIndexList = new List(); + 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, + svgNoHw = true + }; + await EC_UpdateInglesina.InvokeAsync(args); + } + } + + /// + /// Metodo per aggiornare la dimensione dello split + /// + /// + /// + 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); + } + } + + protected async Task UpdateInglesina(DataUpdateInglesina updRec) + { + if (updRec.currInglesina != null) + { + CurrInglesina = updRec.currInglesina; + var args = new DataUpdateInglesina() + { + currInglesina = CurrInglesina, + noSvg = updRec.noSvg + }; + //await EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = DataAction.ResetDictShape }); + await EC_UpdateInglesina.InvokeAsync(args); + } + } + + /// + /// Metodo per cambiare la dimensione principale + /// + /// + /// + 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); + } + + /// + /// Metodo per determinare la descrizione del parent dello split corrente + /// + /// + protected string descParentSplit() + { + 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[0].Equals(CurrInglesina)) + { + 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; + } + + 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); + } + } + + /// + /// Metodo per cambiare il tipo di misura di tutti gli SplitDimension + /// + /// nuovo tipo + /// + 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 horizList() + { + int subAreaMin = CurrInglesina.ElemDimHorizList.Min(x => x.nSubArea); + return CurrInglesina.ElemDimHorizList.Where(x => x.nSubArea == subAreaMin).ToList(); + } + + private List 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"; + } + } + + /// + /// Classe per raggruppare oggetti che servono per aggiornare split + /// + public class DataUpdateInglesina + { + public Inglesina currInglesina { get; set; } = null!; + public bool svgNoHw { get; set; } = false; + public bool noSvg { get; set; } = false; + } +} \ No newline at end of file diff --git a/WebWindowComplex/Compo/CardTree.razor b/WebWindowComplex/Compo/CardTree.razor index 60c188b..a41b7b7 100644 --- a/WebWindowComplex/Compo/CardTree.razor +++ b/WebWindowComplex/Compo/CardTree.razor @@ -50,6 +50,12 @@ ind = ItemTableList[i].IndexItem; s = s + cs.ToString() + ((ind + 1) > 0 ? (ind + 1) : ""); } + else if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.INGLESINA) + { + cs = CompileStep.Inglesina; + ind = ItemTableList[i].IndexItem; + s = s + cs.ToString() + ((ind + 1) > 0 ? (ind + 1) : ""); + } @*
*@
@@ -66,7 +72,8 @@ } @if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.SASH || - ItemTableList[i].Type is Json.WindowConst.AreaTypes.SPLIT) + ItemTableList[i].Type is Json.WindowConst.AreaTypes.SPLIT || + ItemTableList[i].Type is Json.WindowConst.AreaTypes.INGLESINA) {