序列化调整中

This commit is contained in:
艾竹
2023-01-24 23:10:57 +08:00
parent 66d3a6685b
commit a5005ac083
47 changed files with 387 additions and 333 deletions

View File

@@ -177,7 +177,7 @@ DesignerItems.OfType<DesignerItemBase>()
public void AddItems(IEnumerable<SelectableDesignerItemViewModelBase> selectedDesignerItems) public void AddItems(IEnumerable<SelectableDesignerItemViewModelBase> selectedDesignerItems)
{ {
var items = selectedDesignerItems.OfType<DesignerItemViewModelBase>().Select(p => p.ToXmlObject()); var items = selectedDesignerItems.OfType<DesignerItemViewModelBase>().Select(p => p.GetSerializableObject());
foreach (var item in items) foreach (var item in items)
{ {
if (item is PersistDesignerItem persistDesignerItem) if (item is PersistDesignerItem persistDesignerItem)

View File

@@ -49,7 +49,7 @@ namespace AIStudio.Wpf.DiagramApp.Models
public DesignerItemToolBoxData(DesignerItemBase designerItemBase, string filename, Type type, double width = 32, double height = 32) : base(null, null, type, width, height) public DesignerItemToolBoxData(DesignerItemBase designerItemBase, string filename, Type type, double width = 32, double height = 32) : base(null, null, type, width, height)
{ {
Addition = designerItemBase; Addition = designerItemBase;
DesignerItemViewModel = (DesignerItemViewModelBase)Activator.CreateInstance(type, null, designerItemBase); DesignerItemViewModel = Activator.CreateInstance(type, null, designerItemBase) as DesignerItemViewModelBase;
FileName = filename; FileName = filename;
} }

View File

@@ -113,9 +113,6 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
public DiagramType DiagramType { get; set; } public DiagramType DiagramType { get; set; }
private double OffsetX = 10;
private double OffsetY = 10;
private ObservableCollection<IDiagramViewModel> _diagramViewModels; private ObservableCollection<IDiagramViewModel> _diagramViewModels;
public ObservableCollection<IDiagramViewModel> DiagramViewModels public ObservableCollection<IDiagramViewModel> DiagramViewModels
{ {

View File

@@ -102,7 +102,7 @@ namespace AIStudio.Wpf.Flowchart
ConnectionViewModel connector10 = new ConnectionViewModel(coend.BottomConnector, end.TopConnector, _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode); ConnectionViewModel connector10 = new ConnectionViewModel(coend.BottomConnector, end.TopConnector, _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode);
DiagramViewModel.DirectAddItemCommand.Execute(connector10); DiagramViewModel.DirectAddItemCommand.Execute(connector10);
DiagramViewModel.ClearSelectedItems(); DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
FlowchartService.InitData(DiagramViewModel.Items.OfType<FlowNode>().ToList(), DiagramViewModel.Items.OfType<ConnectionViewModel>().ToList(), DiagramViewModel); FlowchartService.InitData(DiagramViewModel.Items.OfType<FlowNode>().ToList(), DiagramViewModel.Items.OfType<ConnectionViewModel>().ToList(), DiagramViewModel);
} }

View File

@@ -270,7 +270,7 @@ namespace AIStudio.Wpf.Flowchart
DiagramViewModel.DirectAddItemCommand.Execute(conn8); DiagramViewModel.DirectAddItemCommand.Execute(conn8);
#endregion #endregion
DiagramViewModel.ClearSelectedItems(); DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
SFCService.InitData(DiagramViewModel.Items.OfType<SFCNode>().ToList(), DiagramViewModel.Items.OfType<ConnectionViewModel>().ToList(), DiagramViewModel); SFCService.InitData(DiagramViewModel.Items.OfType<SFCNode>().ToList(), DiagramViewModel.Items.OfType<ConnectionViewModel>().ToList(), DiagramViewModel);

View File

@@ -479,11 +479,11 @@ namespace AIStudio.Wpf.DiagramDesigner
DesignerItemViewModelBase itemBase = null; DesignerItemViewModelBase itemBase = null;
if (dragObject.DesignerItem != null) if (dragObject.DesignerItem != null)
{ {
itemBase = (DesignerItemViewModelBase)Activator.CreateInstance(dragObject.ContentType, _viewModel, dragObject.DesignerItem); itemBase = Activator.CreateInstance(dragObject.ContentType, _viewModel, dragObject.DesignerItem) as DesignerItemViewModelBase;
} }
else else
{ {
itemBase = (DesignerItemViewModelBase)Activator.CreateInstance(dragObject.ContentType); itemBase = Activator.CreateInstance(dragObject.ContentType) as DesignerItemViewModelBase;
itemBase.Icon = dragObject.Icon; itemBase.Icon = dragObject.Icon;
itemBase.ColorViewModel = CopyHelper.Mapper(dragObject.ColorViewModel); itemBase.ColorViewModel = CopyHelper.Mapper(dragObject.ColorViewModel);
if (dragObject.DesiredSize != null) if (dragObject.DesiredSize != null)

View File

@@ -1,6 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Text; using System.Text;
using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
namespace AIStudio.Wpf.DiagramDesigner namespace AIStudio.Wpf.DiagramDesigner
@@ -50,5 +52,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get; set; get; set;
} }
} }
} }

View File

@@ -1,9 +1,11 @@
using AIStudio.Wpf.DiagramDesigner; using AIStudio.Wpf.DiagramDesigner;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
namespace AIStudio.Wpf.DiagramDesigner namespace AIStudio.Wpf.DiagramDesigner
@@ -41,5 +43,7 @@ namespace AIStudio.Wpf.DiagramDesigner
[XmlAttribute] [XmlAttribute]
public ValueTypePoint ValueTypePoint { get; set; } public ValueTypePoint ValueTypePoint { get; set; }
} }
} }

View File

@@ -3,11 +3,13 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.ComponentModel; using System.ComponentModel;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Media; using System.Windows.Media;
using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
namespace AIStudio.Wpf.DiagramDesigner namespace AIStudio.Wpf.DiagramDesigner
@@ -73,8 +75,7 @@ namespace AIStudio.Wpf.DiagramDesigner
public FontItem FontItem public FontItem FontItem
{ {
get; set; get; set;
} }
} }
public class ColorItem : IColorViewModel public class ColorItem : IColorViewModel
@@ -487,8 +488,49 @@ namespace AIStudio.Wpf.DiagramDesigner
string[] pieces = size.Split(new char[] { ',' }); string[] pieces = size.Split(new char[] { ',' });
return new Size(double.Parse(pieces[0]), double.Parse(pieces[1])); return new Size(double.Parse(pieces[0]), double.Parse(pieces[1]));
} }
}
public static string SerializeObject(object obj, string serializableType)
{
if (serializableType?.ToLower() == "xml")
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new UnicodeEncoding(false, false); // no BOM in a .NET string
settings.Indent = true;
settings.OmitXmlDeclaration = true;
using (StringWriter textWriter = new StringWriter())
{
using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings))
{
serializer.Serialize(xmlWriter, obj);
}
return textWriter.ToString(); //This is the output as a string
}
}
else
{
return JsonConvert.SerializeObject(obj);
}
}
public static SelectableItemBase DeserializeObject(Type type, string serializableString, string serializableType)
{
if (serializableType?.ToLower() == "xml")
{
using (StringReader sr = new StringReader(serializableString))
{
XmlSerializer serializer = new XmlSerializer(type);
return serializer.Deserialize(sr) as SelectableItemBase;
}
}
else
{
return JsonConvert.DeserializeObject(serializableString, type) as SelectableItemBase;
}
}
}
public struct XmlFont public struct XmlFont
{ {
@@ -655,6 +697,8 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get; set; get; set;
} }
} }
} }

View File

@@ -22,7 +22,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Models
} }
[XmlAttribute] [XmlAttribute]
public string ObjectJson public string SerializableString
{ {
get; set; get; set;
} }

View File

@@ -75,7 +75,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
if (IsFullConnection) if (IsFullConnection)
{ {
@@ -89,7 +89,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(ConnectionItem); return typeof(ConnectionItem);
} }

View File

@@ -20,7 +20,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
public ConnectorInfoBase(IDiagramViewModel root, string json) : base(root, json) public ConnectorInfoBase(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -49,12 +49,12 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new ConnectorInfoItemBase(this); return new ConnectorInfoItemBase(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(ConnectorInfoBase); return typeof(ConnectorInfoBase);
} }

View File

@@ -20,7 +20,7 @@ namespace AIStudio.Wpf.DiagramDesigner
Parent = connector; Parent = connector;
} }
public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, string json) : base(root, json) public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
Parent = connector; Parent = connector;
} }
@@ -43,12 +43,12 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new ConnectorLabelItem(this); return new ConnectorLabelItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(ConnectorLabelItem); return typeof(ConnectorLabelItem);
} }

View File

@@ -32,7 +32,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
public ConnectorPointModel(IDiagramViewModel root, string json) : base(root, json) public ConnectorPointModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -60,12 +60,12 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new ConnectorPointItem(this); return new ConnectorPointItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(ConnectorPointItem); return typeof(ConnectorPointItem);
} }

View File

@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.DiagramDesigner
Parent = connector; Parent = connector;
} }
public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, string json) : base(root, json) public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
Parent = connector; Parent = connector;
} }
@@ -40,12 +40,12 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new ConnectorVertexItem(this); return new ConnectorVertexItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(ConnectorVertexModel); return typeof(ConnectorVertexModel);
} }

View File

@@ -30,7 +30,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, string json) : base(root, json) public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
this.DataItem = dataItem; this.DataItem = dataItem;
if (IsInnerPoint == true) if (IsInnerPoint == true)
@@ -62,12 +62,12 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new FullyCreatedConnectorInfoItem(this); return new FullyCreatedConnectorInfoItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(FullyCreatedConnectorInfo); return typeof(FullyCreatedConnectorInfo);
} }

View File

@@ -23,7 +23,7 @@ namespace AIStudio.Wpf.DiagramDesigner
ShapeDefiner = Shapes.Rectangle; ShapeDefiner = Shapes.Rectangle;
} }
public DesignerItemViewModelBase(IDiagramViewModel root, string json) : base(root, json) public DesignerItemViewModelBase(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
ShapeDefiner = Shapes.Rectangle; ShapeDefiner = Shapes.Rectangle;
} }
@@ -52,12 +52,12 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new DesignerItemBase(this); return new DesignerItemBase(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(DesignerItemBase); return typeof(DesignerItemBase);
} }

View File

@@ -18,6 +18,27 @@ namespace AIStudio.Wpf.DiagramDesigner
public class DiagramViewModel : BindableBase, IDiagramViewModel public class DiagramViewModel : BindableBase, IDiagramViewModel
{ {
#region #region
public ObservableCollection<SelectableDesignerItemViewModelBase> Items { get; set; } = new ObservableCollection<SelectableDesignerItemViewModelBase>();
public List<SelectableDesignerItemViewModelBase> SelectedItems
{
get
{
return Items.Where(x => x.IsSelected).ToList();
}
}
private SelectionService selectionService;
public SelectionService SelectionService
{
get
{
if (selectionService == null)
selectionService = new SelectionService(this);
return selectionService;
}
}
private bool _isReadOnly; private bool _isReadOnly;
public bool IsReadOnly public bool IsReadOnly
{ {
@@ -61,7 +82,6 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
private Size _pageSize = new Size(1000, 600); private Size _pageSize = new Size(1000, 600);
public Size PageSize public Size PageSize
{ {
get get
@@ -388,145 +408,7 @@ namespace AIStudio.Wpf.DiagramDesigner
private double OffsetY = 10; private double OffsetY = 10;
#endregion #endregion
private DoCommandManager DoCommandManager = new DoCommandManager(); #region
public DiagramViewModel()
{
CreateNewDiagramCommand = new SimpleCommand(ExecuteEnable, ExecuteCreateNewDiagramCommand);
AddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteAddItemCommand);
DirectAddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectAddItemCommand);
RemoveItemCommand = new SimpleCommand(ExecuteEnable, ExecuteRemoveItemCommand);
DirectRemoveItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectRemoveItemCommand);
ClearSelectedItemsCommand = new SimpleCommand(ExecuteEnable, ExecuteClearSelectedItemsCommand);
AlignTopCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignTopCommand);
AlignVerticalCentersCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignVerticalCentersCommand);
AlignBottomCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignBottomCommand);
AlignLeftCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignLeftCommand);
AlignHorizontalCentersCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignHorizontalCentersCommand);
AlignRightCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignRightCommand);
BringForwardCommand = new SimpleCommand(ExecuteEnable, ExecuteBringForwardCommand);
BringToFrontCommand = new SimpleCommand(ExecuteEnable, ExecuteBringToFrontCommand);
SendBackwardCommand = new SimpleCommand(ExecuteEnable, ExecuteSendBackwardCommand);
SendToBackCommand = new SimpleCommand(ExecuteEnable, ExecuteSendToBackCommand);
DistributeHorizontalCommand = new SimpleCommand(ExecuteEnable, ExecuteDistributeHorizontalCommand);
DistributeVerticalCommand = new SimpleCommand(ExecuteEnable, ExecuteDistributeVerticalCommand);
SelectAllCommand = new SimpleCommand(ExecuteEnable, ExecuteSelectAllCommand);
CopyCommand = new SimpleCommand(ExecuteEnable, ExecuteCopyCommand);
PasteCommand = new SimpleCommand(ExecuteEnable, ExecutePasteCommand);
CutCommand = new SimpleCommand(ExecuteEnable, ExecuteCutCommand);
DeleteCommand = new SimpleCommand(ExecuteEnable, ExecuteDeleteCommand);
LeftMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteLeftMoveCommand);
RightMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteRightMoveCommand);
UpMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteUpMoveCommand);
DownMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteDownMoveCommand);
CenterMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteCenterMoveCommand);
SameSizeCommand = new SimpleCommand(ExecuteEnable, ExecuteSameSizeCommand);
SameWidthCommand = new SimpleCommand(ExecuteEnable, ExecuteSameWidthCommand);
SameHeightCommand = new SimpleCommand(ExecuteEnable, ExecuteSameHeightCommand);
SameAngleCommand = new SimpleCommand(ExecuteEnable, ExecuteSameAngleCommand);
GroupCommand = new SimpleCommand(ExecuteEnable, ExecuteGroupCommand);
UngroupCommand = new SimpleCommand(ExecuteEnable, ExecuteUngroupCommand);
LockCommand = new SimpleCommand(ExecuteEnable, ExecuteLockCommand);
UnlockCommand = new SimpleCommand(ExecuteEnable, ExecuteUnlockCommand);
Mediator.Instance.Register(this);
Items.CollectionChanged += Items_CollectionChanged;
}
public bool ExecuteEnable(object para)
{
return IsReadOnly == false;
}
#region UnDo ReDo
private void Do(object sender, string propertyName, object newvalue)
{
sender.SetPropertyValue(propertyName, newvalue);
}
private void UnDo(object sender, string propertyName, object oldvalue)
{
sender.SetPropertyValue(propertyName, oldvalue);
}
private bool _undoing;
private void UndoExecuted(object para)
{
_undoing = true;
DoCommandManager.UnDo();
_undoing = false;
}
private void RedoExecuted(object para)
{
_undoing = true;
DoCommandManager.ReDo();
_undoing = false;
}
private bool Undo_Enabled(object para)
{
return DoCommandManager.CanUnDo;
}
private bool Redo_Enabled(object para)
{
return DoCommandManager.CanReDo;
}
#endregion
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.OldItems != null)
{
foreach (var item in e.OldItems.OfType<SelectableDesignerItemViewModelBase>())
{
item.PropertyChanged -= Item_PropertyChanged;
item.Dispose();
}
}
if (e.NewItems != null)
{
foreach (var item in e.NewItems.OfType<SelectableDesignerItemViewModelBase>())
{
item.PropertyChanged += Item_PropertyChanged;
}
}
RaisePropertyChanged("Items");
}
private void Item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
RaisePropertyChanged(sender, e.PropertyName);
if (_undoing == true) return;
//连续改变需要特殊处理不单独触发属性改变ReDo
if (sender is DesignerItemViewModelBase designer)
{
if (designer.BeginDo) return;
}
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
var property = sender.GetType().GetProperty(e.PropertyName);
var attr = property.GetCustomAttributes(typeof(CanDoAttribute), true);
if (attr != null && attr.Length != 0)
{
DoCommandManager.DoNewCommand(sender.ToString() + e.PropertyName, () => Do(sender, e.PropertyName, valuePropertyChangedEventArgs.NewValue), () => UnDo(sender, e.PropertyName, valuePropertyChangedEventArgs.OldValue), null, false);
}
}
}
[MediatorMessageSink("DoneDrawingMessage")]
public void OnDoneDrawingMessage(bool dummy)
{
foreach (var item in Items.OfType<DesignerItemViewModelBase>())
{
item.ShowConnectors = false;
}
}
public SimpleCommand CreateNewDiagramCommand public SimpleCommand CreateNewDiagramCommand
{ {
get; private set; get; private set;
@@ -699,28 +581,144 @@ namespace AIStudio.Wpf.DiagramDesigner
return this._redoCommand ?? (this._redoCommand = new SimpleCommand(Redo_Enabled, this.RedoExecuted)); return this._redoCommand ?? (this._redoCommand = new SimpleCommand(Redo_Enabled, this.RedoExecuted));
} }
} }
#endregion
private DoCommandManager DoCommandManager = new DoCommandManager();
public ObservableCollection<SelectableDesignerItemViewModelBase> Items { get; set; } = new ObservableCollection<SelectableDesignerItemViewModelBase>(); public DiagramViewModel()
public List<SelectableDesignerItemViewModelBase> SelectedItems
{ {
get CreateNewDiagramCommand = new SimpleCommand(ExecuteEnable, ExecuteCreateNewDiagramCommand);
AddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteAddItemCommand);
DirectAddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectAddItemCommand);
RemoveItemCommand = new SimpleCommand(ExecuteEnable, ExecuteRemoveItemCommand);
DirectRemoveItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectRemoveItemCommand);
ClearSelectedItemsCommand = new SimpleCommand(ExecuteEnable, ExecuteClearSelectedItemsCommand);
AlignTopCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignTopCommand);
AlignVerticalCentersCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignVerticalCentersCommand);
AlignBottomCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignBottomCommand);
AlignLeftCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignLeftCommand);
AlignHorizontalCentersCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignHorizontalCentersCommand);
AlignRightCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignRightCommand);
BringForwardCommand = new SimpleCommand(ExecuteEnable, ExecuteBringForwardCommand);
BringToFrontCommand = new SimpleCommand(ExecuteEnable, ExecuteBringToFrontCommand);
SendBackwardCommand = new SimpleCommand(ExecuteEnable, ExecuteSendBackwardCommand);
SendToBackCommand = new SimpleCommand(ExecuteEnable, ExecuteSendToBackCommand);
DistributeHorizontalCommand = new SimpleCommand(ExecuteEnable, ExecuteDistributeHorizontalCommand);
DistributeVerticalCommand = new SimpleCommand(ExecuteEnable, ExecuteDistributeVerticalCommand);
SelectAllCommand = new SimpleCommand(ExecuteEnable, ExecuteSelectAllCommand);
CopyCommand = new SimpleCommand(ExecuteEnable, ExecuteCopyCommand);
PasteCommand = new SimpleCommand(ExecuteEnable, ExecutePasteCommand);
CutCommand = new SimpleCommand(ExecuteEnable, ExecuteCutCommand);
DeleteCommand = new SimpleCommand(ExecuteEnable, ExecuteDeleteCommand);
LeftMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteLeftMoveCommand);
RightMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteRightMoveCommand);
UpMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteUpMoveCommand);
DownMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteDownMoveCommand);
CenterMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteCenterMoveCommand);
SameSizeCommand = new SimpleCommand(ExecuteEnable, ExecuteSameSizeCommand);
SameWidthCommand = new SimpleCommand(ExecuteEnable, ExecuteSameWidthCommand);
SameHeightCommand = new SimpleCommand(ExecuteEnable, ExecuteSameHeightCommand);
SameAngleCommand = new SimpleCommand(ExecuteEnable, ExecuteSameAngleCommand);
GroupCommand = new SimpleCommand(ExecuteEnable, ExecuteGroupCommand);
UngroupCommand = new SimpleCommand(ExecuteEnable, ExecuteUngroupCommand);
LockCommand = new SimpleCommand(ExecuteEnable, ExecuteLockCommand);
UnlockCommand = new SimpleCommand(ExecuteEnable, ExecuteUnlockCommand);
Mediator.Instance.Register(this);
Items.CollectionChanged += Items_CollectionChanged;
}
public bool ExecuteEnable(object para)
{
return IsReadOnly == false;
}
#region UnDo ReDo
private void Do(object sender, string propertyName, object newvalue)
{
sender.SetPropertyValue(propertyName, newvalue);
}
private void UnDo(object sender, string propertyName, object oldvalue)
{
sender.SetPropertyValue(propertyName, oldvalue);
}
private bool _undoing;
private void UndoExecuted(object para)
{
_undoing = true;
DoCommandManager.UnDo();
_undoing = false;
}
private void RedoExecuted(object para)
{
_undoing = true;
DoCommandManager.ReDo();
_undoing = false;
}
private bool Undo_Enabled(object para)
{
return DoCommandManager.CanUnDo;
}
private bool Redo_Enabled(object para)
{
return DoCommandManager.CanReDo;
}
#endregion
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.OldItems != null)
{ {
return Items.Where(x => x.IsSelected).ToList(); foreach (var item in e.OldItems.OfType<SelectableDesignerItemViewModelBase>())
{
item.PropertyChanged -= Item_PropertyChanged;
item.Dispose();
}
}
if (e.NewItems != null)
{
foreach (var item in e.NewItems.OfType<SelectableDesignerItemViewModelBase>())
{
item.PropertyChanged += Item_PropertyChanged;
}
}
RaisePropertyChanged("Items");
}
private void Item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
RaisePropertyChanged(sender, e.PropertyName);
if (_undoing == true) return;
//连续改变需要特殊处理不单独触发属性改变ReDo
if (sender is DesignerItemViewModelBase designer)
{
if (designer.BeginDo) return;
}
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
var property = sender.GetType().GetProperty(e.PropertyName);
var attr = property.GetCustomAttributes(typeof(CanDoAttribute), true);
if (attr != null && attr.Length != 0)
{
DoCommandManager.DoNewCommand(sender.ToString() + e.PropertyName, () => Do(sender, e.PropertyName, valuePropertyChangedEventArgs.NewValue), () => UnDo(sender, e.PropertyName, valuePropertyChangedEventArgs.OldValue), null, false);
}
} }
} }
[MediatorMessageSink("DoneDrawingMessage")]
private SelectionService selectionService; public void OnDoneDrawingMessage(bool dummy)
public SelectionService SelectionService
{ {
get foreach (var item in Items.OfType<DesignerItemViewModelBase>())
{ {
if (selectionService == null) item.ShowConnectors = false;
selectionService = new SelectionService(this);
return selectionService;
} }
} }
@@ -728,8 +726,6 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get; set; get; set;
} }
public bool AddVerify(SelectableDesignerItemViewModelBase item) public bool AddVerify(SelectableDesignerItemViewModelBase item)
{ {
if (item.InitData() == false) if (item.InitData() == false)
@@ -741,11 +737,11 @@ namespace AIStudio.Wpf.DiagramDesigner
return true; return true;
} }
#region ,
private void ExecuteCreateNewDiagramCommand(object parameter) private void ExecuteCreateNewDiagramCommand(object parameter)
{ {
this.Items.Clear(); this.Items.Clear();
} }
private void ExecuteDirectAddItemCommand(object parameter) private void ExecuteDirectAddItemCommand(object parameter)
{ {
if (parameter is SelectableDesignerItemViewModelBase ite) if (parameter is SelectableDesignerItemViewModelBase ite)
@@ -766,7 +762,6 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
} }
private void Add(SelectableDesignerItemViewModelBase item) private void Add(SelectableDesignerItemViewModelBase item)
{ {
item.Root = this; item.Root = this;
@@ -791,7 +786,6 @@ namespace AIStudio.Wpf.DiagramDesigner
Items.Add(item); Items.Add(item);
item.IsSelected = true; item.IsSelected = true;
} }
private void ExecuteAddItemCommand(object parameter) private void ExecuteAddItemCommand(object parameter)
{ {
if (parameter is SelectableDesignerItemViewModelBase ite) if (parameter is SelectableDesignerItemViewModelBase ite)
@@ -824,7 +818,6 @@ namespace AIStudio.Wpf.DiagramDesigner
}); });
} }
} }
private void ExecuteDirectRemoveItemCommand(object parameter) private void ExecuteDirectRemoveItemCommand(object parameter)
{ {
if (parameter is SelectableDesignerItemViewModelBase ite) if (parameter is SelectableDesignerItemViewModelBase ite)
@@ -878,7 +871,6 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
ClearSelectedItems(); ClearSelectedItems();
} }
public void ClearSelectedItems() public void ClearSelectedItems()
{ {
foreach (var item in this.Items.ToList()) foreach (var item in this.Items.ToList())
@@ -886,6 +878,14 @@ namespace AIStudio.Wpf.DiagramDesigner
item.IsSelected = false; item.IsSelected = false;
} }
} }
private void ExecuteSelectAllCommand(object parameter)
{
foreach (var item in Items)
{
item.IsSelected = true;
}
}
#endregion
#region #region
private void ExecuteAlignTopCommand(object parameter) private void ExecuteAlignTopCommand(object parameter)
@@ -1079,7 +1079,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}); });
} }
} }
#endregion
private void ExecuteBringForwardCommand(object parameter) private void ExecuteBringForwardCommand(object parameter)
{ {
@@ -1316,7 +1316,6 @@ namespace AIStudio.Wpf.DiagramDesigner
}); });
} }
} }
private void ExecuteDistributeVerticalCommand(object parameter) private void ExecuteDistributeVerticalCommand(object parameter)
{ {
var selectedItems = from item in this.SelectedItems.OfType<DesignerItemViewModelBase>() var selectedItems = from item in this.SelectedItems.OfType<DesignerItemViewModelBase>()
@@ -1373,15 +1372,9 @@ namespace AIStudio.Wpf.DiagramDesigner
}); });
} }
} }
#endregion
private void ExecuteSelectAllCommand(object parameter) #region
{
foreach (var item in Items)
{
item.IsSelected = true;
}
}
private void ExecuteCopyCommand(object parameter) private void ExecuteCopyCommand(object parameter)
{ {
List<DesignerItemViewModelBase> selectedDesignerItems = List<DesignerItemViewModelBase> selectedDesignerItems =
@@ -1413,8 +1406,8 @@ namespace AIStudio.Wpf.DiagramDesigner
string json = new SerializableObject string json = new SerializableObject
{ {
DesignerItems = selectedDesignerItems.Select(p => p.ToSerializabObject()).Where(p => p != null).ToList(), DesignerItems = selectedDesignerItems.Select(p => p.ToSerializableItem("json")).Where(p => p != null).ToList(),
Connections = selectedConnections.Select(p => p.ToSerializabObject()).Where(p => p != null).ToList(), Connections = selectedConnections.Select(p => p.ToSerializableItem("json")).Where(p => p != null).ToList(),
}.ToJson(); }.ToJson();
OffsetX = 10; OffsetX = 10;
@@ -1436,7 +1429,6 @@ namespace AIStudio.Wpf.DiagramDesigner
List<SelectableDesignerItemViewModelBase> items = new List<SelectableDesignerItemViewModelBase>(); List<SelectableDesignerItemViewModelBase> items = new List<SelectableDesignerItemViewModelBase>();
SerializableObject copyitem = JsonConvert.DeserializeObject<SerializableObject>(clipboardData); SerializableObject copyitem = JsonConvert.DeserializeObject<SerializableObject>(clipboardData);
Dictionary<Guid, Guid> mappingOldToNewIDs = new Dictionary<Guid, Guid>(); Dictionary<Guid, Guid> mappingOldToNewIDs = new Dictionary<Guid, Guid>();
foreach (var diagramItemData in copyitem.DesignerItems) foreach (var diagramItemData in copyitem.DesignerItems)
@@ -1445,7 +1437,7 @@ namespace AIStudio.Wpf.DiagramDesigner
Type type = TypeHelper.GetType(diagramItemData.TypeName); Type type = TypeHelper.GetType(diagramItemData.TypeName);
DesignerItemViewModelBase itemBase = (DesignerItemViewModelBase)Activator.CreateInstance(type, this, diagramItemData.ObjectJson); DesignerItemViewModelBase itemBase = Activator.CreateInstance(type, this, diagramItemData.SerializableString, "json") as DesignerItemViewModelBase;
Guid newID = Guid.NewGuid(); Guid newID = Guid.NewGuid();
mappingOldToNewIDs.Add(itemBase.Id, newID); mappingOldToNewIDs.Add(itemBase.Id, newID);
itemBase.Id = newID; itemBase.Id = newID;
@@ -1467,7 +1459,7 @@ namespace AIStudio.Wpf.DiagramDesigner
List<SelectableDesignerItemViewModelBase> connectors = new List<SelectableDesignerItemViewModelBase>(); List<SelectableDesignerItemViewModelBase> connectors = new List<SelectableDesignerItemViewModelBase>();
foreach (var connection in copyitem.Connections) foreach (var connection in copyitem.Connections)
{ {
var connectionItem = JsonConvert.DeserializeObject<ConnectionItem>(connection.ObjectJson); var connectionItem = JsonConvert.DeserializeObject<ConnectionItem>(connection.SerializableString);
Guid newID = Guid.NewGuid(); Guid newID = Guid.NewGuid();
mappingOldToNewIDs.Add(connectionItem.Id, newID); mappingOldToNewIDs.Add(connectionItem.Id, newID);
@@ -1549,7 +1541,6 @@ namespace AIStudio.Wpf.DiagramDesigner
return false; return false;
} }
private void ExecuteCutCommand(object parameter) private void ExecuteCutCommand(object parameter)
{ {
ExecutePasteCommand(null); ExecutePasteCommand(null);
@@ -1580,7 +1571,9 @@ namespace AIStudio.Wpf.DiagramDesigner
RemoveItemCommand.Execute(itemsToRemove); RemoveItemCommand.Execute(itemsToRemove);
} }
#endregion
#region
private void ExecuteLeftMoveCommand(object parameter) private void ExecuteLeftMoveCommand(object parameter)
{ {
foreach (var item in SelectedItems.OfType<DesignerItemViewModelBase>()) foreach (var item in SelectedItems.OfType<DesignerItemViewModelBase>())
@@ -1622,6 +1615,20 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public void UpdateZIndex()
{
List<SelectableDesignerItemViewModelBase> ordered = Items.OrderBy(p => p.ZIndex).ToList();
for (int i = 0; i < ordered.Count; i++)
{
ordered[i].ZIndex = i;
}
}
#endregion
#region
private void ExecuteSameSizeCommand(object parameter) private void ExecuteSameSizeCommand(object parameter)
{ {
if (parameter is DesignerItemViewModelBase designerItem) if (parameter is DesignerItemViewModelBase designerItem)
@@ -1667,6 +1674,9 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
#endregion
#region
private void ExecuteGroupCommand(object parameter) private void ExecuteGroupCommand(object parameter)
{ {
var items = from item in SelectedItems.OfType<DesignerItemViewModelBase>() var items = from item in SelectedItems.OfType<DesignerItemViewModelBase>()
@@ -1713,6 +1723,15 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public bool BelongToSameGroup(IGroupable item1, IGroupable item2)
{
IGroupable root1 = SelectionService.GetGroupRoot(item1);
IGroupable root2 = SelectionService.GetGroupRoot(item2);
return (root1.Id == root2.Id);
}
#endregion
private void ExecuteLockCommand(object parameter) private void ExecuteLockCommand(object parameter)
{ {
@@ -1722,25 +1741,10 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
} }
public bool BelongToSameGroup(IGroupable item1, IGroupable item2)
{
IGroupable root1 = SelectionService.GetGroupRoot(item1);
IGroupable root2 = SelectionService.GetGroupRoot(item2);
return (root1.Id == root2.Id);
}
public void UpdateZIndex()
{
List<SelectableDesignerItemViewModelBase> ordered = Items.OrderBy(p => p.ZIndex).ToList();
for (int i = 0; i < ordered.Count; i++)
{
ordered[i].ZIndex = i;
}
}
public RectangleBase GetBoundingRectangle(IEnumerable<DesignerItemViewModelBase> items) public RectangleBase GetBoundingRectangle(IEnumerable<DesignerItemViewModelBase> items)
{ {

View File

@@ -33,7 +33,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
public SelectableDesignerItemViewModelBase(IDiagramViewModel root, string json) : base(root, json) public SelectableDesignerItemViewModelBase(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -33,24 +33,21 @@ namespace AIStudio.Wpf.DiagramDesigner
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged; (FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
} }
public SelectableViewModelBase(IDiagramViewModel root, string json) public SelectableViewModelBase(IDiagramViewModel root, string serializableString, string serializableType)
{ {
Init(); Init();
LoadDesignerItemViewModel(root, JsonConvert.DeserializeObject(json, ToXmlType()) as SelectableItemBase);
SelectableItemBase obj = SerializeHelper.DeserializeObject(GetSerializableType(), serializableString, serializableType);
LoadDesignerItemViewModel(root, obj);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged; (FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
} }
public virtual SelectableItemBase ToXmlObject() public virtual SerializableItem ToSerializableItem(string serializableType)
{ {
return null; var obj = GetSerializableObject();
}
public virtual SerializableItem ToSerializabObject()
{
var obj = ToXmlObject();
if (obj != null) if (obj != null)
{ {
return new SerializableItem() { TypeName = this.GetType().FullName, ObjectJson = obj.ToJson() }; return new SerializableItem() { TypeName = this.GetType().FullName, SerializableString = SerializeHelper.SerializeObject(obj, serializableType) };
} }
else else
{ {
@@ -58,8 +55,12 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public virtual SelectableItemBase GetSerializableObject()
{
return null;
}
public virtual Type ToXmlType() public virtual Type GetSerializableType()
{ {
return null; return null;
} }

View File

@@ -187,10 +187,10 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get; set; get; set;
} }
void ClearSelectedItems(); //void ClearSelectedItems();
//bool BelongToSameGroup(IGroupable item1, IGroupable item2); //bool BelongToSameGroup(IGroupable item1, IGroupable item2);
//Rectangle GetBoundingRectangle(IEnumerable<DesignerItemViewModelBase> items); //Rectangle GetBoundingRectangle(IEnumerable<DesignerItemViewModelBase> items);
void UpdateZIndex(); //void UpdateZIndex();
bool IsReadOnly bool IsReadOnly
{ {

View File

@@ -30,17 +30,17 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
public GifImageItemViewModel(IDiagramViewModel root, string json) : base(root, json) public GifImageItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new MediaDesignerItem(this); return new MediaDesignerItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(MediaDesignerItem); return typeof(MediaDesignerItem);
} }

View File

@@ -25,17 +25,17 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
public ImageItemViewModel(IDiagramViewModel root, string json) : base(root, json) public ImageItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new ImageDesignerItem(this); return new ImageDesignerItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(ImageDesignerItem); return typeof(ImageDesignerItem);
} }

View File

@@ -78,17 +78,17 @@ namespace AIStudio.Wpf.DiagramDesigner
BuildMenuOptions(); BuildMenuOptions();
} }
public LogicalGateItemViewModelBase(IDiagramViewModel root, string json) : base(root, json) public LogicalGateItemViewModelBase(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
BuildMenuOptions(); BuildMenuOptions();
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new LogicalGateDesignerItemBase(this); return new LogicalGateDesignerItemBase(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(LogicalGateDesignerItemBase); return typeof(LogicalGateDesignerItemBase);
} }

View File

@@ -19,17 +19,17 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
public MediaItemViewModel(IDiagramViewModel root, string json) : base(root, json) public MediaItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new MediaDesignerItem(this); return new MediaDesignerItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(MediaDesignerItem); return typeof(MediaDesignerItem);
} }

View File

@@ -15,13 +15,13 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
public TextDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json) public TextDesignerItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new TextDesignerItem(this); return new TextDesignerItem(this);
} }

View File

@@ -19,7 +19,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
public VideoItemViewModel(IDiagramViewModel root, string json) : base(root, json) public VideoItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -19,11 +19,11 @@ namespace AIStudio.Wpf.DiagramHelper.Extensions.ViewModels
} }
public BarcodeDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json) public BarcodeDesignerItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new DesignerItemBase(this, Format.ToString()); return new DesignerItemBase(this, Format.ToString());
} }

View File

@@ -19,7 +19,7 @@ namespace AIStudio.Wpf.DiagramHelper.Extensions.ViewModels
} }
public OutLineTextDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json) public OutLineTextDesignerItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -17,17 +17,17 @@ namespace AIStudio.Wpf.DiagramHelper.Extensions.ViewModels
} }
public PathItemViewModel(IDiagramViewModel root, string json) : base(root, json) public PathItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new PathDesignerItem(this); return new PathDesignerItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(PathDesignerItem); return typeof(PathDesignerItem);
} }

View File

@@ -19,18 +19,18 @@ namespace AIStudio.Wpf.DiagramHelper.Extensions.ViewModels
} }
public PersistDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json) public PersistDesignerItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new PersistDesignerItem(this); return new PersistDesignerItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(PersistDesignerItem); return typeof(PersistDesignerItem);
} }

View File

@@ -19,17 +19,17 @@ namespace AIStudio.Wpf.DiagramHelper.Extensions.ViewModels
} }
public SettingsDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json) public SettingsDesignerItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new SettingsDesignerItem(this); return new SettingsDesignerItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(SettingsDesignerItem); return typeof(SettingsDesignerItem);
} }

View File

@@ -15,7 +15,7 @@ namespace AIStudio.Wpf.DiagramHelper.Extensions.ViewModels
} }
public SvgDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json) public SvgDesignerItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -22,17 +22,17 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
} }
public FlowNode(IDiagramViewModel root, string json) : base(root, json) public FlowNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new FlowNodeDesignerItem(this); return new FlowNodeDesignerItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(FlowNodeDesignerItem); return typeof(FlowNodeDesignerItem);
} }
@@ -139,7 +139,7 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
} }
public StartFlowNode(IDiagramViewModel root, string json) : base(root, json) public StartFlowNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -157,7 +157,7 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
} }
public EndFlowNode(IDiagramViewModel root, string json) : base(root, json) public EndFlowNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -175,7 +175,7 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
} }
public DecideFlowNode(IDiagramViewModel root, string json) : base(root, json) public DecideFlowNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -193,7 +193,7 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
} }
public COBeginFlowNode(IDiagramViewModel root, string json) : base(root, json) public COBeginFlowNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -211,7 +211,7 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
} }
public COEndFlowNode(IDiagramViewModel root, string json) : base(root, json) public COEndFlowNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -18,7 +18,7 @@ namespace AIStudio.Wpf.Flowchart.ViewModels
} }
public MiddleFlowNode(IDiagramViewModel root, string json) : base(root, json) public MiddleFlowNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -20,7 +20,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public LogicalGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public LogicalGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -74,7 +74,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
{ {
} }
public AddGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public AddGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -90,7 +90,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
{ {
} }
public SubtractGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public SubtractGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -106,7 +106,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
{ {
} }
public MultiplyGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public MultiplyGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -123,7 +123,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
{ {
} }
public DivideGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public DivideGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -141,7 +141,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public AverageGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public AverageGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -159,7 +159,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public MODGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public MODGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -177,7 +177,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public ANDGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public ANDGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -195,7 +195,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public ORGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public ORGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -213,7 +213,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public XORGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public XORGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -231,7 +231,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public NOTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public NOTGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -249,7 +249,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public SHLGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public SHLGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -267,7 +267,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public SHRGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public SHRGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -285,7 +285,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public ROLGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public ROLGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -303,7 +303,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public RORGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public RORGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -321,7 +321,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public SELGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public SELGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -339,7 +339,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public MAXGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public MAXGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -357,7 +357,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public MINGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public MINGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -375,7 +375,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public LIMITGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public LIMITGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -393,7 +393,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public GTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public GTGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -411,7 +411,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public LTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public LTGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -429,7 +429,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public GEGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public GEGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -447,7 +447,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public LEGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public LEGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -465,7 +465,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public EQGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public EQGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -483,7 +483,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public NEGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public NEGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -501,7 +501,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public ABSGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public ABSGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -519,7 +519,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public SQRTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public SQRTGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -537,7 +537,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public LNGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public LNGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -555,7 +555,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public LOGGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public LOGGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -573,7 +573,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public EXPGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public EXPGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -591,7 +591,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public SINGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public SINGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -609,7 +609,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public COSGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public COSGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -627,7 +627,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public TANGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public TANGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -645,7 +645,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public ASINGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public ASINGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -663,7 +663,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public ACOSGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public ACOSGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -681,7 +681,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public ATANGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public ATANGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -699,7 +699,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public EXPTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json) public EXPTGateItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -717,7 +717,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public ConstantDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json) public ConstantDesignerItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -735,7 +735,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public InputItemViewModel(IDiagramViewModel root, string json) : base(root, json) public InputItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -794,7 +794,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
} }
public OutputItemViewModel(IDiagramViewModel root, string json) : base(root, json) public OutputItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
@@ -861,7 +861,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
BuildMenuOptions(); BuildMenuOptions();
} }
public TimerDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json) public TimerDesignerItemViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
BuildMenuOptions(); BuildMenuOptions();
} }

View File

@@ -21,7 +21,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
} }
public SFCActionNode(IDiagramViewModel root, string json) : base(root, json) public SFCActionNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -21,7 +21,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
{ {
} }
public SFCCOBeginNode(IDiagramViewModel root, string json) : base(root, json) public SFCCOBeginNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -21,7 +21,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
{ {
} }
public SFCCOEndNode(IDiagramViewModel root, string json) : base(root, json) public SFCCOEndNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -24,7 +24,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
{ {
} }
public SFCConditionNode(IDiagramViewModel root, string json) : base(root, json) public SFCConditionNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -26,17 +26,17 @@ namespace AIStudio.Wpf.SFC.ViewModels
} }
public SFCNode(IDiagramViewModel root, string json) : base(root, json) public SFCNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }
public override SelectableItemBase ToXmlObject() public override SelectableItemBase GetSerializableObject()
{ {
return new SFCNodeDesignerItem(this); return new SFCNodeDesignerItem(this);
} }
public override Type ToXmlType() public override Type GetSerializableType()
{ {
return typeof(SFCNodeDesignerItem); return typeof(SFCNodeDesignerItem);
} }

View File

@@ -18,7 +18,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
{ {
} }
public SFCNodeNode(IDiagramViewModel root, string json) : base(root, json) public SFCNodeNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
{ {
} }
public SFCStartNode(IDiagramViewModel root, string json) : base(root, json) public SFCStartNode(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -18,7 +18,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
{ {
} }
public Simulate_ListViewModel(IDiagramViewModel root, string json) : base(root, json) public Simulate_ListViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -23,7 +23,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
{ {
} }
public Simulate_SolenoidViewModel(IDiagramViewModel root, string json) : base(root, json) public Simulate_SolenoidViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -20,7 +20,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
{ {
} }
public Simulate_StartViewModel(IDiagramViewModel root, string json) : base(root, json) public Simulate_StartViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }

View File

@@ -23,7 +23,7 @@ namespace AIStudio.Wpf.SFC.ViewModels
{ {
} }
public Simulate_TankViewModel(IDiagramViewModel root, string json) : base(root, json) public Simulate_TankViewModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{ {
} }