using Microsoft.AspNetCore.Components; using Newtonsoft.Json; using System.Collections.ObjectModel; using System.Reflection.Metadata; using System.Runtime.Intrinsics.X86; using System.Text.Json.Serialization; using WebWindowJWD.DTO; using WebWindowJWD.Json; using static WebWindowJWD.Json.WindowConst; namespace WebWindowJWD { public partial class WebWindowJWDInput : IDisposable { #region Public Properties [Parameter] public string CssSvg { get; set; } = "responsive-svg"; [Parameter] public string CurrJwd { get => m_CurrJwd; set { if (m_CurrJwd != value) { m_CurrJwd = value; JsonWindow WindowFromJson = JsonConvert.DeserializeObject(m_CurrJwd, new PolymorphicJsonConverter()) ?? new JsonWindow(""); if (m_CurrWindow != null) { m_CurrWindow.OnPreview -= M_CurrWindow_OnPreview; m_CurrWindow = null; } m_CurrWindow = WindowFromJson.Deserialize(); m_CurrWindow.OnPreview += M_CurrWindow_OnPreview; m_FillList = new List(); m_SashList = new List(); m_SplitList = new List(); SearchInAreaList(m_CurrWindow.AreaList[0]); Dictionary Args = new Dictionary(); Args.Add("Jwd", m_CurrJwd); Args.Add("Mode", 1.ToString()); EC_OnUpdate.InvokeAsync(Args); } if (m_CurrWindow != null) { m_FillList = new List(); m_SashList = new List(); m_SplitList = new List(); SearchInAreaList(m_CurrWindow.AreaList[0]); } } } [Parameter] public EventCallback EC_OnClose { get; set; } [Parameter] public EventCallback> EC_OnUpdate { get; set; } public List FillList { get => m_FillList; } [Parameter] public string LiveSVG { get => m_SelSVG; set => m_SelSVG = value; } #endregion Public Properties #region Public Methods public void Dispose() { if (m_CurrWindow != null) { m_CurrWindow.OnPreview -= M_CurrWindow_OnPreview; m_CurrWindow = null; } } #endregion Public Methods #region Protected Enums protected enum CompileStep { Frame = 0, Split = 1, Sash, Fill } #endregion Protected Enums #region Protected Properties protected Frame Frame { get => m_Frame; set => m_Frame = value; } protected string m_CurrJwd { get; set; } protected string m_SelSVG { get; set; } = ""; /// /// Componente SVG da mostrare /// protected MarkupString outSvg { get { // aggiunta gestione classe svg per posizionamento con costraints var newSvg = LiveSVG.Replace(" SashList { get => m_SashList; } protected List SplitList { get => m_SplitList; } #endregion Protected Properties #region Protected Methods protected async Task DoClose() { await EC_OnClose.InvokeAsync(true); } protected async Task DoPreviewSvg() { if(m_CurrWindow != null) { var CurrJwd = JsonConvert.SerializeObject(m_CurrWindow.Serialize(), Formatting.Indented); Dictionary Args = new Dictionary(); Args.Add("Jwd", CurrJwd); Args.Add("Mode", 1.ToString()); await EC_OnUpdate.InvokeAsync(Args); } } protected async Task DoSave() { //manca salvataggio JWD await EC_OnClose.InvokeAsync(true); } protected async void DoSelectAndPreview(CompileStep newStep) { currStep = newStep; await DoPreviewSvg(); } protected void SearchInAreaList(Area node) { if (node != null) { switch (node.AreaType) { case AreaTypes.FRAME: { m_Frame = (Frame)node; break; } case AreaTypes.SASH: { m_SashList.Add((Sash)node); break; } case AreaTypes.FILL: { m_FillList.Add((Fill)node); break; } case AreaTypes.SPLIT: { m_SplitList.Add((Split)node); break; } } foreach (var item in node.AreaList) { SearchInAreaList(item); } } } #endregion Protected Methods #region Private Fields private CompileStep currStep = CompileStep.Frame; private List m_FillList = new List(); private Frame m_Frame; private List m_SashList = new List(); private List m_SplitList = new List(); #endregion Private Fields #region Private Properties private Window? m_CurrWindow { get; set; } = null; #endregion Private Properties #region Private Methods private void AdvStep(CompileStep newStep) { currStep = newStep; } private void M_CurrWindow_OnPreview(object? sender, OnPreviewEventArgs e) { Dictionary Args = new Dictionary(); Args.Add("Jwd", e.sJwd); Args.Add("Mode", 1.ToString()); EC_OnUpdate.InvokeAsync(Args); } /// /// Calcola il css del tab selezionato /// /// /// private string tabNavCss(CompileStep testStep) { return testStep.Equals(currStep) ? "nav-link active fw-bold" : "nav-link text-secondary"; } #endregion Private Methods } }