using AIStudio.Wpf.DiagramDesigner; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Xml.Serialization; using AIStudio.Wpf.Flowchart; using AIStudio.Wpf.DiagramHelper.Extensions.ViewModels; using AIStudio.Wpf.DiagramHelper.Extensions.Models; using Newtonsoft.Json; using AIStudio.Wpf.Flowchart.Models; using AIStudio.Wpf.Flowchart.ViewModels; using AIStudio.Wpf.SFC.Models; using AIStudio.Wpf.SFC.ViewModels; using System.Windows; using System.Windows.Media; namespace AIStudio.Wpf.DiagramApp.Models { [Serializable] public class DiagramItem { public DiagramItem() { this.ConnectionIds = new List(); this.Connections = new List(); } [XmlAttribute] public string Name { get; set; } [XmlAttribute] public DiagramType DiagramType { get; set; } [XmlAttribute] public bool ShowGrid { get; set; } [XmlIgnore] public Size GridCellSize { get; set; } [JsonIgnore] [XmlAttribute("GridCellSize")] public string XmlGridCellSize { get { return SerializeHelper.SerializeSize(GridCellSize); } set { GridCellSize = SerializeHelper.DeserializeSize(value); } } [XmlAttribute] public CellHorizontalAlignment CellHorizontalAlignment { get; set; } [XmlAttribute] public CellVerticalAlignment CellVerticalAlignment { get; set; } [XmlAttribute] public PageSizeOrientation PageSizeOrientation { get; set; } [XmlIgnore] public Size PageSize { get; set; } [JsonIgnore] [XmlAttribute("PageSize")] public string XmlPageSize { get { return SerializeHelper.SerializeSize(PageSize); } set { PageSize = SerializeHelper.DeserializeSize(value); } } [XmlAttribute] public PageSizeType PageSizeType { get; set; } [XmlAttribute] public double GridMargin { get; set; } [XmlIgnore] public Color GridColor { get; set; } [JsonIgnore] [XmlAttribute("GridColor")] public string XmlGridColor { get { return SerializeHelper.SerializeColor(GridColor); } set { GridColor = SerializeHelper.DeserializeColor(value); } } [XmlArray] public List DesignerItems { get; set; } = new List(); [XmlArray] public List PersistDesignerItems { get; set; } = new List(); [XmlArray] public List SettingsDesignerItems { get; set; } = new List(); [XmlArray] public List PathDesignerItems { get; set; } = new List(); [XmlArray] public List MediaDesignerItems { get; set; } = new List(); [XmlArray] public List ImageDesignerItems { get; set; } = new List(); [XmlArray] public List TextDesignerItems { get; set; } = new List(); [XmlArray] public List LogicalGateItems { get; set; } = new List(); [XmlArray] public List FlowNodeDesignerItems { get; set; } = new List(); [XmlArray] public List SFCNodeDesignerItems { get; set; } = new List(); [JsonIgnore] [XmlIgnore] public List AllDesignerItems { get { return DesignerItems.OfType() .Union(TextDesignerItems.OfType()) .Union(LogicalGateItems.OfType()) .Union(MediaDesignerItems.OfType()) .Union(ImageDesignerItems.OfType()) .Union(PathDesignerItems.OfType()) .Union(PersistDesignerItems.OfType()) .Union(SettingsDesignerItems.OfType()) .Union(FlowNodeDesignerItems.OfType()) .Union(SFCNodeDesignerItems.OfType()) .ToList(); } } [XmlArray] public List ConnectionIds { get; set; } [XmlArray] public List Connections { get; set; } public void AddItems(IEnumerable selectedDesignerItems) { var items = selectedDesignerItems.OfType().Select(p => p.ToXmlObject()); foreach (var item in items) { if (item is PersistDesignerItem persistDesignerItem) { PersistDesignerItems.Add(persistDesignerItem); } else if (item is SettingsDesignerItem settingsDesignerItem) { SettingsDesignerItems.Add(settingsDesignerItem); } else if (item is PathDesignerItem pathDesignerItem) { PathDesignerItems.Add(pathDesignerItem); } else if (item is MediaDesignerItem mediaDesignerItem) { MediaDesignerItems.Add(mediaDesignerItem); } else if (item is ImageDesignerItem imageDesignerItem) { ImageDesignerItems.Add(imageDesignerItem); } else if (item is TextDesignerItem textDesignerItem) { TextDesignerItems.Add(textDesignerItem); } else if (item is LogicalGateDesignerItemBase logicalGateDesignerItemBase) { LogicalGateItems.Add(logicalGateDesignerItemBase); } else if (item is FlowNodeDesignerItem flowNodeDesignerItem) { FlowNodeDesignerItems.Add(flowNodeDesignerItem); } else if (item is SFCNodeDesignerItem sFCNodeDesignerItem) { SFCNodeDesignerItems.Add(sFCNodeDesignerItem); } else if (item is DesignerItemBase designerItemBase) { DesignerItems.Add(designerItemBase); } } } } }