251 lines
7.0 KiB
C#
251 lines
7.0 KiB
C#
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<JsonWindow>(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<Fill>();
|
|
m_SashList = new List<Sash>();
|
|
m_SplitList = new List<Split>();
|
|
SearchInAreaList(m_CurrWindow.AreaList[0]);
|
|
Dictionary<string,string> Args = new Dictionary<string,string>();
|
|
Args.Add("Jwd", m_CurrJwd);
|
|
Args.Add("Mode", 1.ToString());
|
|
EC_OnUpdate.InvokeAsync(Args);
|
|
}
|
|
if (m_CurrWindow != null)
|
|
{
|
|
m_FillList = new List<Fill>();
|
|
m_SashList = new List<Sash>();
|
|
m_SplitList = new List<Split>();
|
|
SearchInAreaList(m_CurrWindow.AreaList[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Parameter]
|
|
public EventCallback<bool> EC_OnClose { get; set; }
|
|
|
|
[Parameter]
|
|
public EventCallback<Dictionary<string,string>> EC_OnUpdate { get; set; }
|
|
|
|
public List<Fill> 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; } = "";
|
|
|
|
/// <summary>
|
|
/// Componente SVG da mostrare
|
|
/// </summary>
|
|
protected MarkupString outSvg
|
|
{
|
|
get
|
|
{
|
|
// aggiunta gestione classe svg per posizionamento con costraints
|
|
var newSvg = LiveSVG.Replace("<svg", $"<svg class=\"{CssSvg}\"");
|
|
return (MarkupString)newSvg;
|
|
}
|
|
}
|
|
|
|
protected List<Sash> SashList
|
|
{
|
|
get => m_SashList;
|
|
}
|
|
|
|
protected List<Split> 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<string, string> Args = new Dictionary<string, string>();
|
|
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<Fill> m_FillList = new List<Fill>();
|
|
|
|
private Frame m_Frame;
|
|
|
|
private List<Sash> m_SashList = new List<Sash>();
|
|
|
|
private List<Split> m_SplitList = new List<Split>();
|
|
|
|
#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<string, string> Args = new Dictionary<string, string>();
|
|
Args.Add("Jwd", e.sJwd);
|
|
Args.Add("Mode", 1.ToString());
|
|
EC_OnUpdate.InvokeAsync(Args);
|
|
}
|
|
/// <summary>
|
|
/// Calcola il css del tab selezionato
|
|
/// </summary>
|
|
/// <param name="testStep"></param>
|
|
/// <returns></returns>
|
|
private string tabNavCss(CompileStep testStep)
|
|
{
|
|
return testStep.Equals(currStep) ? "nav-link active fw-bold" : "nav-link text-secondary";
|
|
}
|
|
|
|
#endregion Private Methods
|
|
}
|
|
} |