diff --git a/Test.UI/Components/Pages/EditJWD.razor.cs b/Test.UI/Components/Pages/EditJWD.razor.cs index adf65ad..6450d53 100644 --- a/Test.UI/Components/Pages/EditJWD.razor.cs +++ b/Test.UI/Components/Pages/EditJWD.razor.cs @@ -309,9 +309,9 @@ namespace Test.UI.Components.Pages Random random = new Random(); CalcUid = Convert.ToString(random.Next(1000, 10000)); windowUid = CalcUid; - //InitialJwd = File.ReadAllText("Data\\FinestraSplitVert.jwd"); + InitialJwd = File.ReadAllText("Data\\FinestraSplitGrid.jwd"); //InitialJwd = File.ReadAllText("Data\\FinestraSplitHoriz.jwd"); - InitialJwd = File.ReadAllText("Data\\AntaDoppia.jwd"); + //InitialJwd = File.ReadAllText("Data\\AntaDoppia.jwd"); //InitialJwd = File.ReadAllText("Data\\ArcoAntaDoppia.jwd"); currJwd = InitialJwd; // rileggo altri dati diff --git a/Test.UI/Data/FinestraSplitGrid.jwd b/Test.UI/Data/FinestraSplitGrid.jwd index 5bc0f69..4542c92 100644 --- a/Test.UI/Data/FinestraSplitGrid.jwd +++ b/Test.UI/Data/FinestraSplitGrid.jwd @@ -94,13 +94,30 @@ "ElementDimVertList": [ { "Index": 1, - "Value": 78.0 + "Value": 78.0, + "Area": 0 } ], "ElementDimHorizList": [ { "Index": 1, - "Value": 78.0 + "Value": 78.0, + "Area": 1 + }, + { + "Index": 2, + "Value": 78.0, + "Area": 1 + }, + { + "Index": 1, + "Value": 78.0, + "Area": 2 + }, + { + "Index": 2, + "Value": 78.0, + "Area": 2 } ], "GroupId": 2, diff --git a/WebWindowComplex/Compo/CardSplit.razor b/WebWindowComplex/Compo/CardSplit.razor index 828d599..cd01539 100644 --- a/WebWindowComplex/Compo/CardSplit.razor +++ b/WebWindowComplex/Compo/CardSplit.razor @@ -173,15 +173,24 @@ } +
- @foreach (var element in CurrSplit.ElemDimHorizList) - { - - } +
+
Element vert
+
@foreach (var element in CurrSplit.ElemDimVertList) { - + + } +
+
+
+
Element horiz
+
+ @foreach (var element in CurrSplit.ElemDimHorizList) + { + }
diff --git a/WebWindowComplex/Compo/CardSplit.razor.cs b/WebWindowComplex/Compo/CardSplit.razor.cs index f00e05d..e88d074 100644 --- a/WebWindowComplex/Compo/CardSplit.razor.cs +++ b/WebWindowComplex/Compo/CardSplit.razor.cs @@ -179,7 +179,7 @@ namespace WebWindowComplex.Compo /// /// /// - private async Task UpdateElement(ElementDimension updRec) + private async Task UpdateElement(SplitElementDimension updRec) { // cerco il record var currRec = CurrSplit.ElemDimHorizList.FirstOrDefault(x => x.ParentArea == updRec.ParentArea && x.nIndex == updRec.nIndex); @@ -235,7 +235,8 @@ namespace WebWindowComplex.Compo { if (s.Equals(CurrSplit) && e.Value != null) { - s.SetSplitStartVert((bool)e.Value); + s.bSplitStartVert = (bool)e.Value; + //s.SetSplitStartVert((bool)e.Value); } } var args = new DataUpdateSplit() diff --git a/WebWindowComplex/Compo/EditSplitElement.razor b/WebWindowComplex/Compo/EditSplitElement.razor new file mode 100644 index 0000000..ceef888 --- /dev/null +++ b/WebWindowComplex/Compo/EditSplitElement.razor @@ -0,0 +1,16 @@ +@using static WebWindowComplex.LayoutConst +
+ @if (CurrRec.nSubArea > 0) + { + A:@(CurrRec.nSubArea) + } + N:@(CurrRec.nIndex) + @if (User) + { + + } + else + { + + } +
\ No newline at end of file diff --git a/WebWindowComplex/Compo/EditSplitElement.razor.cs b/WebWindowComplex/Compo/EditSplitElement.razor.cs new file mode 100644 index 0000000..4dd56a1 --- /dev/null +++ b/WebWindowComplex/Compo/EditSplitElement.razor.cs @@ -0,0 +1,48 @@ +using Microsoft.AspNetCore.Components; +using WebWindowComplex.Models; + +namespace WebWindowComplex.Compo +{ + public partial class EditSplitElement + { + #region Public Properties + + /// + /// Joint corrente + /// + [Parameter] + public SplitElementDimension CurrRec { get; set; } = null!; + + + [Parameter] + public EventCallback EC_Update { get; set; } + + /// + /// Livello di accesso (utente base) + /// + [CascadingParameter(Name = "User")] + public bool User { get; set; } = false!; + + #endregion Public Properties + + #region Private Properties + + /// + /// Metodo per aggiornare element corrente + /// + private double updateVal + { + get => CurrRec.dDimension; + set + { + if (CurrRec.dDimension != value) + { + CurrRec.dDimension = value; + _ = EC_Update.InvokeAsync(CurrRec); + } + } + } + + #endregion Private Properties + } +} \ No newline at end of file diff --git a/WebWindowComplex/Json/JsonUtility.cs b/WebWindowComplex/Json/JsonUtility.cs index a2de8bb..cb59d14 100644 --- a/WebWindowComplex/Json/JsonUtility.cs +++ b/WebWindowComplex/Json/JsonUtility.cs @@ -544,9 +544,9 @@ namespace WebWindowComplex.Json } - private List m_ElemDimVertList = new List(); + private List m_ElemDimVertList = new List(); [JsonProperty] - public List ElementDimVertList + public List ElementDimVertList { get { @@ -554,9 +554,9 @@ namespace WebWindowComplex.Json } } - private List m_ElemDimHorizList = new List(); + private List m_ElemDimHorizList = new List(); [JsonProperty] - public List ElementDimHorizList + public List ElementDimHorizList { get { @@ -581,10 +581,10 @@ namespace WebWindowComplex.Json split.SetSplitShape(m_SplitShape); split.SetSplitStartVert(m_SplitStartVert); if (m_SplitVertList.Count == 0) - split.SetSplitQtyVert(0); + split.SetSplitQtyVert(0, m_SplitHorizList.Count - 1); else { - split.SetSplitQtyVert(m_SplitVertList.Count - 1); + split.SetSplitQtyVert(m_SplitVertList.Count - 1, m_SplitHorizList.Count); for (var SplitIndex = 0; SplitIndex <= m_SplitVertList.Count - 1; SplitIndex++) { split.SplitVertList[SplitIndex].SetIsRelative(m_SplitVertList[SplitIndex].IsRelative); @@ -592,13 +592,17 @@ namespace WebWindowComplex.Json split.SplitVertList[SplitIndex].SetMeasureType(m_SplitVertList[SplitIndex].MeasureType); } for (int index = 0; index < ElementDimVertList.Count; index++) + { + split.ElemDimVertList.ElementAt(index).SetSubArea(m_ElemDimVertList[index].Area); + split.ElemDimVertList.ElementAt(index).SetIndex(m_ElemDimVertList[index].Index); split.ElemDimVertList.ElementAt(index).SetDimension(m_ElemDimVertList[index].Value); + } } if (m_SplitHorizList.Count == 0) - split.SetSplitQtyHoriz(0); + split.SetSplitQtyHoriz(0, m_SplitVertList.Count); else { - split.SetSplitQtyHoriz(m_SplitHorizList.Count - 1); + split.SetSplitQtyHoriz(m_SplitHorizList.Count - 1, m_SplitVertList.Count); for (var SplitIndex = 0; SplitIndex <= m_SplitHorizList.Count - 1; SplitIndex++) { split.SplitHorizList[SplitIndex].SetIsRelative(m_SplitHorizList[SplitIndex].IsRelative); @@ -606,7 +610,11 @@ namespace WebWindowComplex.Json split.SplitHorizList[SplitIndex].SetMeasureType(m_SplitHorizList[SplitIndex].MeasureType); } for (int index = 0; index < ElementDimHorizList.Count; index++) + { + split.ElemDimHorizList.ElementAt(index).SetSubArea(m_ElemDimHorizList[index].Area); + split.ElemDimHorizList.ElementAt(index).SetIndex(m_ElemDimHorizList[index].Index); split.ElemDimHorizList.ElementAt(index).SetDimension(m_ElemDimHorizList[index].Value); + } } foreach (var Area in AreaList) { @@ -918,7 +926,59 @@ namespace WebWindowComplex.Json return newElementDimension; } } + public class JsonSplitElementDimension + { + private int m_nIndex; + [JsonProperty] + public int Index + { + get + { + return m_nIndex; + } + } + private double m_dValue; + [JsonProperty] + public double Value + { + get + { + return m_dValue; + } + set + { + m_dValue = value; + } + } + + private int m_nSubArea; + [JsonProperty] + public int Area + { + get + { + return m_nSubArea; + } + set + { + m_nSubArea = value; + } + } + + public JsonSplitElementDimension(int Index, double Value, int SubArea) + { + m_nIndex = Index; + m_dValue = Value; + m_nSubArea = SubArea; + } + + internal SplitElementDimension Deserialize(Area newArea) + { + SplitElementDimension newSplitElementDimension = new SplitElementDimension(newArea, m_nIndex, m_dValue, m_nSubArea); + return newSplitElementDimension; + } + } public class JsonFrameDimension { private int m_nIndex; diff --git a/WebWindowComplex/Models/Area.cs b/WebWindowComplex/Models/Area.cs index e01f3e4..54d7a03 100644 --- a/WebWindowComplex/Models/Area.cs +++ b/WebWindowComplex/Models/Area.cs @@ -137,7 +137,7 @@ namespace WebWindowComplex.Models // Aggiungo Area split di default Split SplitArea = Split.CreateSplit(this, SplitShapes.HORIZONTAL); // imposto i parametri di default - SplitArea.SetSplitQtyHoriz(1); + SplitArea.SetSplitQtyHoriz(1, 0); SplitArea.SetSplitStartVert(false); // Aggiungo area AreaList.Add(SplitArea); diff --git a/WebWindowComplex/Models/ElementDimension.cs b/WebWindowComplex/Models/ElementDimension.cs index a42f9e1..1acf7ce 100644 --- a/WebWindowComplex/Models/ElementDimension.cs +++ b/WebWindowComplex/Models/ElementDimension.cs @@ -88,6 +88,11 @@ namespace WebWindowComplex.Models m_dDimension = dValue; } + public void SetIndex(int nIndex) + { + m_nIndex = nIndex; + } + public void SetMaxDimension(double dValue) { m_dMax = dValue; diff --git a/WebWindowComplex/Models/Split.cs b/WebWindowComplex/Models/Split.cs index d77a156..076f90a 100644 --- a/WebWindowComplex/Models/Split.cs +++ b/WebWindowComplex/Models/Split.cs @@ -30,6 +30,32 @@ namespace WebWindowComplex.Models set { m_bSplitStartVert = value; + m_ElemDimVertList.Clear(); + m_ElemDimHorizList.Clear(); + if (value) + { + for (int i = 0; i < nSplitQtyVert; i++) + { + m_ElemDimVertList.Add(new SplitElementDimension(this, i + 1, 78, 0)); + } + for (int subArea = 0; subArea < m_SplitVertList.Count; subArea++) + { + for (int index = 0; index < nSplitQtyHoriz; index++) + m_ElemDimHorizList.Add(new SplitElementDimension(this, index + 1, 78, subArea + 1)); + } + } + else + { + for (int i = 0; i < nSplitQtyHoriz; i++) + { + m_ElemDimHorizList.Add(new SplitElementDimension(this, i + 1, 78, 0)); + } + for (int subArea = 0; subArea < m_SplitHorizList.Count; subArea++) + { + for (int index = 0; index < nSplitQtyVert; index++) + m_ElemDimVertList.Add(new SplitElementDimension(this, index + 1, 78, subArea + 1)); + } + } } } @@ -79,7 +105,27 @@ namespace WebWindowComplex.Models // aggiungo area Split di default for (var SplitIndex = m_SplitHorizList.Count; SplitIndex <= value; SplitIndex++) m_SplitHorizList.Add(new SplitDimension(dNewDimension, m_SplitHorizList[m_SplitHorizList.Count - 1].MeasureType, true, this, false)); - ElemDimHorizList.Add(new ElementDimension(this, ElemDimHorizList.Count, 78)); + //ElemDimHorizList.Add(new SplitElementDimension(this, ElemDimHorizList.Count, 78)); + if (!m_bSplitStartVert) + { + //Aggiungo un elemento alla sottoarea principale + ElemDimHorizList.Add(new SplitElementDimension(this, ElemDimHorizList.Max(x => x.nIndex) + 1, 78, 0)); + // Aggiungo a tutte le sottoaree degli element + int subArea = ElemDimVertList.Max(x => x.nSubArea) + 1; + for (int i = 1; i <= ElemDimVertList.Max(x => x.nIndex); i++) + { + ElemDimVertList.Add(new SplitElementDimension(this, i, 78, subArea)); + } + } + else + { + // Aggiungo a tutte le sottoaree degli element + for (int i = 1; i <= ElemDimHorizList.Max(x => x.nSubArea); i++) + { + int index = ElemDimHorizList.Where(x => x.nSubArea == i).Max(x => x.nIndex); + ElemDimHorizList.Insert(index * i + (i - 1), new SplitElementDimension(this, index + 1, 78, i)); + } + } } // Ricalcolo dimensioni rimuovendo split else @@ -92,7 +138,21 @@ namespace WebWindowComplex.Models } dLastDimension += m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension; m_SplitHorizList[m_SplitHorizList.Count - 1].SetDimension(dLastDimension); - ElemDimHorizList.RemoveAt(ElemDimHorizList.Count-1); + if (m_bSplitStartVert) + { + // Rimuovo da tutte le sottoaree degli element l'ultimo elemento + for (int subArea = 1; subArea <= ElemDimHorizList.Max(x => x.nSubArea); subArea++) + { + SplitElementDimension removeElem = ElemDimHorizList.Where(x => x.nSubArea == subArea).OrderByDescending(x => x.nIndex).FirstOrDefault(); + ElemDimHorizList.Remove(removeElem); + } + } + else + { + int deleteSubArea = ElemDimHorizList.Count + 1; + ElemDimHorizList.RemoveAt(ElemDimHorizList.Count - 1); + ElemDimVertList.RemoveAll(x => x.nSubArea == deleteSubArea); + } } // Controllo quanti split verticali ci sono int nVert = m_SplitVertList.Count > 0 ? m_SplitVertList.Count : 1; @@ -174,6 +234,26 @@ namespace WebWindowComplex.Models // aggiungo area Split di default for (var SplitIndex = m_SplitVertList.Count; SplitIndex <= value; SplitIndex++) m_SplitVertList.Add(new SplitDimension(dNewDimension, m_SplitVertList[m_SplitVertList.Count - 1].MeasureType, true, this, true)); + if (m_bSplitStartVert) + { + //Aggiungo un elemento alla sottoarea principale + ElemDimVertList.Add(new SplitElementDimension(this, ElemDimVertList.Max(x => x.nIndex) + 1, 78, 0)); + // Aggiungo a tutte le sottoaree degli element + int subArea = ElemDimHorizList.Max(x => x.nSubArea) + 1; + for (int i = 1; i <= ElemDimHorizList.Max(x => x.nIndex); i++) + { + ElemDimHorizList.Add(new SplitElementDimension(this, i, 78, subArea)); + } + } + else + { + // Aggiungo a tutte le sottoaree un elemento + for (int i = 1; i <= ElemDimVertList.Max(x => x.nSubArea); i++) + { + int index = ElemDimVertList.Where(x => x.nSubArea == i).Max(x => x.nIndex); + ElemDimVertList.Insert(index * i + (i - 1), new SplitElementDimension(this, index + 1, 78, i)); + } + } } else if (value == 0) { @@ -200,8 +280,21 @@ namespace WebWindowComplex.Models dLastDimension += m_SplitVertList[m_SplitVertList.Count - 1].dDimension; m_SplitVertList[m_SplitVertList.Count - 1].SetDimension(dLastDimension); } - ElemDimVertList.RemoveAt(ElemDimVertList.Count - 1); - + if (m_bSplitStartVert) + { + int deleteSubArea = ElemDimVertList.Count + 1; + ElemDimVertList.RemoveAt(ElemDimVertList.Count - 1); + ElemDimHorizList.RemoveAll(x=>x.nSubArea == deleteSubArea); + } + else + { + // Rimuovo da tutte le sottoaree degli element l'ultimo elemento + for (int subArea = 1; subArea <= ElemDimVertList.Max(x => x.nSubArea); subArea++) + { + SplitElementDimension removeElem = ElemDimVertList.Where(x => x.nSubArea == subArea).OrderByDescending(x => x.nIndex).FirstOrDefault(); + ElemDimVertList.Remove(removeElem); + } + } } // Controllo quanti split orizzontali ci sono int nHoriz = m_SplitHorizList.Count > 0 ? m_SplitHorizList.Count : 1; @@ -263,25 +356,25 @@ namespace WebWindowComplex.Models SplitShapes OldSelShapeSplit = m_SelSplitShape; m_SelSplitShape = (SplitShapes)value; // Azzero quantità orizzontale e verticale - SetSplitQtyVert(0); - SetSplitQtyHoriz(0); + SetSplitQtyVert(0, 0); + SetSplitQtyHoriz(0,0); if (m_SelSplitShape == SplitShapes.VERTICAL) { // Inserisco valori di default - SetSplitQtyVert(1); + SetSplitQtyVert(1, 0); SetSplitStartVert(true); } else if (m_SelSplitShape == SplitShapes.HORIZONTAL) { // Inserisco valori di default - SetSplitQtyHoriz(1); + SetSplitQtyHoriz(1,0); SetSplitStartVert(false); } else { // Inserisco valori di default - SetSplitQtyVert(1); - SetSplitQtyHoriz(1); + SetSplitQtyVert(1, 1); + SetSplitQtyHoriz(1, 1); SetSplitStartVert(true); } if(OldSelShapeSplit == SplitShapes.GRID || m_SelSplitShape == SplitShapes.GRID) @@ -313,7 +406,7 @@ namespace WebWindowComplex.Models m_SplitHorizList = value; } } - public List ElemDimHorizList + public List ElemDimHorizList { get { @@ -325,7 +418,7 @@ namespace WebWindowComplex.Models } } - public List ElemDimVertList + public List ElemDimVertList { get { @@ -392,12 +485,12 @@ namespace WebWindowComplex.Models newSplit.SetAreaType(AreaType); foreach (var item in ElemDimHorizList) { - ElementDimension newElementDimension = item.Copy(); + SplitElementDimension newElementDimension = item.Copy(); newSplit.ElemDimHorizList.Add(newElementDimension); } foreach (var item in ElemDimVertList) { - ElementDimension newElementDimension = item.Copy(); + SplitElementDimension newElementDimension = item.Copy(); newSplit.ElemDimVertList.Add(newElementDimension); } foreach (var item in AreaList) @@ -492,7 +585,7 @@ namespace WebWindowComplex.Models return JsonSplit; } - internal void SetSplitQtyHoriz(int QtyHoriz) + internal void SetSplitQtyHoriz(int QtyHoriz, int QtyVert) { if (QtyHoriz > m_SplitHorizList.Count) { @@ -520,14 +613,25 @@ namespace WebWindowComplex.Models { ElemDimHorizList.Clear(); } - else + else { - for (int i = 0; i < QtyHoriz; i++) - ElemDimHorizList.Add(new ElementDimension(this, i + 1, 78)); + if (bSplitStartVert) + { + for(int subArea = 0; subArea < QtyVert; subArea++) + { + for (int i = 0; i < QtyHoriz; i++) + ElemDimHorizList.Add(new SplitElementDimension(this, i + 1, 78, subArea+1)); + } + } + else + { + for (int i = 0; i < QtyHoriz; i++) + ElemDimHorizList.Add(new SplitElementDimension(this, i + 1, 78, 0)); + } } } - internal void SetSplitQtyVert(int QtyVert) + internal void SetSplitQtyVert(int QtyVert, int QtyHoriz) { if (QtyVert > m_SplitVertList.Count) { @@ -557,8 +661,19 @@ namespace WebWindowComplex.Models } else { - for (int i = 0; i < QtyVert; i++) - ElemDimVertList.Add(new ElementDimension(this, i + 1, 78)); + if (bSplitStartVert) + { + for (int i = 0; i < QtyVert; i++) + ElemDimVertList.Add(new SplitElementDimension(this, i + 1, 78, 0)); + } + else + { + for(int subArea = 0; subArea< QtyHoriz; subArea++) + { + for (int i = 0; i < QtyVert; i++) + ElemDimVertList.Add(new SplitElementDimension(this, i+1, 78, subArea + 1)); + } + } } } @@ -606,8 +721,8 @@ namespace WebWindowComplex.Models private SplitShapes m_SelSplitShape; private List m_SplitHorizList = new List(); - private List m_ElemDimHorizList = new List(); - private List m_ElemDimVertList = new List(); + private List m_ElemDimHorizList = new List(); + private List m_ElemDimVertList = new List(); private List m_SplitPositionList = new List(); private List m_SplitShapeList = new List diff --git a/WebWindowComplex/Models/SplitElementDimension.cs b/WebWindowComplex/Models/SplitElementDimension.cs new file mode 100644 index 0000000..7c6e903 --- /dev/null +++ b/WebWindowComplex/Models/SplitElementDimension.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WebWindowComplex.Json; +using static WebWindowComplex.Json.WindowConst; + +namespace WebWindowComplex.Models +{ + public class SplitElementDimension:ElementDimension + { + #region Public Constructors + + public SplitElementDimension(Area ParentArea, int nIndex, double dDimension, int subArea = -1):base(ParentArea, nIndex, dDimension) + { + m_nSubArea = subArea; + } + + #endregion Public Constructors + + #region Public Properties + + public int nSubArea + { + get + { + return m_nSubArea; + } + set + { + m_nSubArea = value; + } + } + + #endregion Public Properties + + #region Public Methods + + public void SetSubArea(int nSubArea) + { + m_nSubArea = nSubArea; + } + + public SplitElementDimension Copy() + { + SplitElementDimension newSplitElementDimension = new SplitElementDimension(ParentArea, nIndex, dDimension, nSubArea); + return newSplitElementDimension; + } + + #endregion Public Methods + + #region Internal Methods + + internal JsonSplitElementDimension Serialize() + { + JsonSplitElementDimension JsonElementDimension = new JsonSplitElementDimension(base.nIndex, base.dDimension, m_nSubArea); + return JsonElementDimension; + } + + #endregion Internal Methods + + #region Private Fields + + private int m_nSubArea = -1; + + #endregion Private Fields + } +} \ No newline at end of file diff --git a/WebWindowComplex/WebWindowComplex.csproj b/WebWindowComplex/WebWindowComplex.csproj index 268bbde..1859b13 100644 --- a/WebWindowComplex/WebWindowComplex.csproj +++ b/WebWindowComplex/WebWindowComplex.csproj @@ -6,7 +6,7 @@ net8.0 enable enable - 2.8.1.2816 + 2.8.1.2912 Annamaria Sassi Egalware Componente gestione Configurazioni avanzate Window per LUX @@ -154,5 +154,6 @@ + diff --git a/WebWindowConfigurator/WebWindowConfigurator.csproj b/WebWindowConfigurator/WebWindowConfigurator.csproj index c263807..bafec4a 100644 --- a/WebWindowConfigurator/WebWindowConfigurator.csproj +++ b/WebWindowConfigurator/WebWindowConfigurator.csproj @@ -6,7 +6,7 @@ net8.0 enable enable - 2.8.1.2816 + 2.8.1.2912 Annamaria Sassi Egalware Componente gestione JWD per LUX @@ -189,6 +189,9 @@ + + +