序列化继续整理

This commit is contained in:
艾竹
2023-01-24 17:53:04 +08:00
parent 8dbe05636d
commit 1a291411e6
72 changed files with 653 additions and 462 deletions

View File

@@ -13,9 +13,9 @@ using SvgPathProperties;
namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectorViewModel : SelectableDesignerItemViewModelBase
public class ConnectionViewModel : SelectableDesignerItemViewModelBase
{
public ConnectorViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode, RouterMode routerMode)
public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode, RouterMode routerMode)
{
Root = root;
PathMode = drawMode.ToString();
@@ -23,16 +23,15 @@ namespace AIStudio.Wpf.DiagramDesigner
Init(sourceConnectorInfo, sinkConnectorInfo);
}
public ConnectorViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, FullyCreatedConnectorInfo sinkConnectorInfo, ConnectionItem designer) : base(root, designer)
public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, FullyCreatedConnectorInfo sinkConnectorInfo, ConnectionItem designer) : base(root, designer)
{
PathMode = designer.PathMode;
RouterMode = designer.RouterMode;
Init(sourceConnectorInfo, sinkConnectorInfo);
LoadDesignerItemViewModel(designer);
}
public ConnectorViewModel(FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode, RouterMode routerMode) : this(null, sourceConnectorInfo, sinkConnectorInfo, drawMode, routerMode)
public ConnectionViewModel(FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode, RouterMode routerMode) : this(null, sourceConnectorInfo, sinkConnectorInfo, drawMode, routerMode)
{
}
@@ -65,11 +64,15 @@ namespace AIStudio.Wpf.DiagramDesigner
AddLabelCommand = new SimpleCommand(AddLabel);
}
protected void LoadDesignerItemViewModel(SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
{
ConnectionItem designer = designerbase as ConnectionItem;
Vertices = new ObservableCollection<ConnectorVertexModel>(designer.Vertices.Select(p => new ConnectorVertexModel(this, new PointBase(p.X, p.Y))));
base.LoadDesignerItemViewModel(root, designerbase);
if (designerbase is ConnectionItem designer)
{
Vertices = new ObservableCollection<ConnectorVertexModel>(designer.Vertices.Select(p => new ConnectorVertexModel(this.Root, this, designer)));
Labels = new ObservableCollection<ConnectorLabelModel>(designer.Labels.Select(p => new ConnectorLabelModel(this.Root, this, designer)));
}
}
public override SelectableItemBase ToXmlObject()
@@ -364,11 +367,11 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public PartCreatedConnectionInfo SinkConnectorInfoPart
public PartCreatedConnectorInfo SinkConnectorInfoPart
{
get
{
return SinkConnectorInfo as PartCreatedConnectionInfo;
return SinkConnectorInfo as PartCreatedConnectorInfo;
}
}
@@ -410,7 +413,7 @@ namespace AIStudio.Wpf.DiagramDesigner
private void ConnectorViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (sender is ConnectorViewModel)
if (sender is ConnectionViewModel)
{
switch (e.PropertyName)
{

View File

@@ -15,6 +15,16 @@ namespace AIStudio.Wpf.DiagramDesigner
this.Orientation = orientation;
}
public ConnectorInfoBase(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
public ConnectorInfoBase(IDiagramViewModel root, string json) : base(root, json)
{
}
protected override void Init()
{
base.Init();
@@ -26,6 +36,29 @@ namespace AIStudio.Wpf.DiagramDesigner
};
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
if (designerbase is ConnectorInfoItemBase designer)
{
ConnectorWidth = designer.ConnectorWidth;
ConnectorHeight = designer.ConnectorHeight;
Orientation = designer.Orientation;
ConnectorValue = designer.ConnectorValue;
}
}
public override SelectableItemBase ToXmlObject()
{
return new ConnectorInfoItemBase(this);
}
public override Type ToXmlType()
{
return typeof(ConnectorInfoBase);
}
#region
public virtual PointBase Position
{

View File

@@ -1,4 +1,5 @@
using System.Linq;
using System;
using System.Linq;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using SvgPathProperties;
@@ -6,7 +7,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectorLabelModel : ConnectorPointModel, ISelectable
{
public ConnectorLabelModel(ConnectorViewModel connector, string content, double? distance = null, PointBase? offset = null)
public ConnectorLabelModel(ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null)
{
Parent = connector;
Text = content;
@@ -14,6 +15,16 @@ namespace AIStudio.Wpf.DiagramDesigner
Offset = offset ?? new PointBase();
}
public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, SelectableItemBase designer) : base(root, designer)
{
Parent = connector;
}
public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, string json) : base(root, json)
{
Parent = connector;
}
protected override void Init()
{
base.Init();
@@ -21,12 +32,33 @@ namespace AIStudio.Wpf.DiagramDesigner
DeleteLabelCommand = new SimpleCommand(DeleteLabel);
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
if (designerbase is ConnectorLabelItem designer)
{
Distance = designer.Distance;
Offset = designer.Offset;
}
}
public override SelectableItemBase ToXmlObject()
{
return new ConnectorLabelItem(this);
}
public override Type ToXmlType()
{
return typeof(ConnectorLabelItem);
}
#region
public ConnectorViewModel Connector
public ConnectionViewModel Connector
{
get
{
return Parent as ConnectorViewModel;
return Parent as ConnectionViewModel;
}
}

View File

@@ -27,6 +27,16 @@ namespace AIStudio.Wpf.DiagramDesigner
Y = y;
}
public ConnectorPointModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
public ConnectorPointModel(IDiagramViewModel root, string json) : base(root, json)
{
}
protected override void Init()
{
base.Init();
@@ -37,6 +47,29 @@ namespace AIStudio.Wpf.DiagramDesigner
};
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
if (designerbase is ConnectorPointItem designer)
{
X = designer.X;
Y = designer.Y;
ConnectorWidth = designer.ConnectorWidth;
ConnectorHeight = designer.ConnectorHeight;
}
}
public override SelectableItemBase ToXmlObject()
{
return new ConnectorPointItem(this);
}
public override Type ToXmlType()
{
return typeof(ConnectorPointItem);
}
/// <summary>
/// 中间X
/// </summary>

View File

@@ -1,16 +1,27 @@
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using System;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectorVertexModel : ConnectorPointModel
{
public ConnectorVertexModel(ConnectorViewModel connector, PointBase? position = null)
public ConnectorVertexModel(ConnectionViewModel connector, PointBase? position = null)
{
Parent = connector;
X = position?.X ?? 0;
Y = position?.Y ?? 0;
}
public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, SelectableItemBase designer) : base(root, designer)
{
Parent = connector;
}
public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, string json) : base(root, json)
{
Parent = connector;
}
protected override void Init()
{
base.Init();
@@ -22,13 +33,28 @@ namespace AIStudio.Wpf.DiagramDesigner
{
base.LoadDesignerItemViewModel(root, designerbase);
if (designerbase is ConnectorVertexItem designer)
{
}
}
public ConnectorViewModel Connector
public override SelectableItemBase ToXmlObject()
{
return new ConnectorVertexItem(this);
}
public override Type ToXmlType()
{
return typeof(ConnectorVertexModel);
}
public ConnectionViewModel Connector
{
get
{
return Parent as ConnectorViewModel;
return Parent as ConnectionViewModel;
}
}

View File

@@ -9,6 +9,70 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class FullyCreatedConnectorInfo : ConnectorInfoBase
{
public FullyCreatedConnectorInfo(DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0)
: base(orientation)
{
this.DataItem = dataItem;
this.IsInnerPoint = isInnerPoint;
this.ValueTypePoint = valueTypePoint;
if (IsInnerPoint == true)
{
BuildMenuOptions();
}
}
public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, SelectableItemBase designer) : base(root, designer)
{
this.DataItem = dataItem;
if (IsInnerPoint == true)
{
BuildMenuOptions();
}
}
public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, string json) : base(root, json)
{
this.DataItem = dataItem;
if (IsInnerPoint == true)
{
BuildMenuOptions();
}
}
protected override void Init()
{
base.Init();
menuOptions = new List<CinchMenuItem>();
MenuItemCommand = new SimpleCommand(ExecuteMenuItemCommand);
DeleteCommand = new SimpleCommand(ExecuteDeleteCommand);
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
if (designerbase is FullyCreatedConnectorInfoItem designer)
{
XRatio = designer.XRatio;
YRatio = designer.YRatio;
IsInnerPoint = designer.IsInnerPoint;
ValueTypePoint = designer.ValueTypePoint;
}
}
public override SelectableItemBase ToXmlObject()
{
return new FullyCreatedConnectorInfoItem(this);
}
public override Type ToXmlType()
{
return typeof(FullyCreatedConnectorInfo);
}
#region
public override PointBase Position
{
get
@@ -18,62 +82,14 @@ namespace AIStudio.Wpf.DiagramDesigner
}
private List<CinchMenuItem> menuOptions;
public FullyCreatedConnectorInfo(DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0)
: base(orientation)
public IEnumerable<CinchMenuItem> MenuOptions
{
this.DataItem = dataItem;
this.IsInnerPoint = isInnerPoint;
this.ValueTypePoint = valueTypePoint;
menuOptions = new List<CinchMenuItem>();
MenuItemCommand = new SimpleCommand(ExecuteMenuItemCommand);
DeleteCommand = new SimpleCommand(ExecuteDeleteCommand);
if (IsInnerPoint == true)
get
{
BuildMenuOptions();
return menuOptions;
}
}
public void ExecuteMenuItemCommand(object arg)
{
Orientation = (ConnectorOrientation)arg;
}
public void ExecuteDeleteCommand(object arg)
{
DataItem.RemoveConnector(this);
}
private void BuildMenuOptions()
{
menuOptions.Clear();
var orientation = new CinchMenuItem("方向");
var top = new CinchMenuItem("上");
top.Command = MenuItemCommand;
top.CommandParameter = ConnectorOrientation.Top;
var bottom = new CinchMenuItem("下");
bottom.Command = MenuItemCommand;
bottom.CommandParameter = ConnectorOrientation.Bottom;
var left = new CinchMenuItem("左");
left.Command = MenuItemCommand;
left.CommandParameter = ConnectorOrientation.Left;
var right = new CinchMenuItem("右");
right.Command = MenuItemCommand;
right.CommandParameter = ConnectorOrientation.Right;
orientation.Children.Add(top);
orientation.Children.Add(bottom);
orientation.Children.Add(left);
orientation.Children.Add(right);
var delete = new CinchMenuItem("删除");
delete.Command = DeleteCommand;
menuOptions.Add(orientation);
menuOptions.Add(delete);
}
public DesignerItemViewModelBase DataItem
{
get; private set;
@@ -148,7 +164,9 @@ namespace AIStudio.Wpf.DiagramDesigner
SetProperty(ref _style, value);
}
}
#endregion
#region
public SimpleCommand DeleteCommand
{
get; private set;
@@ -157,13 +175,45 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get; private set;
}
#endregion
public IEnumerable<CinchMenuItem> MenuOptions
public void ExecuteMenuItemCommand(object arg)
{
get
{
return menuOptions;
}
Orientation = (ConnectorOrientation)arg;
}
public void ExecuteDeleteCommand(object arg)
{
DataItem.RemoveConnector(this);
}
private void BuildMenuOptions()
{
menuOptions.Clear();
var orientation = new CinchMenuItem("方向");
var top = new CinchMenuItem("上");
top.Command = MenuItemCommand;
top.CommandParameter = ConnectorOrientation.Top;
var bottom = new CinchMenuItem("下");
bottom.Command = MenuItemCommand;
bottom.CommandParameter = ConnectorOrientation.Bottom;
var left = new CinchMenuItem("左");
left.Command = MenuItemCommand;
left.CommandParameter = ConnectorOrientation.Left;
var right = new CinchMenuItem("右");
right.Command = MenuItemCommand;
right.CommandParameter = ConnectorOrientation.Right;
orientation.Children.Add(top);
orientation.Children.Add(bottom);
orientation.Children.Add(left);
orientation.Children.Add(right);
var delete = new CinchMenuItem("删除");
delete.Command = DeleteCommand;
menuOptions.Add(orientation);
menuOptions.Add(delete);
}
public double GetXRatioFromConnector()

View File

@@ -7,7 +7,7 @@ using AIStudio.Wpf.DiagramDesigner.Geometrys;
namespace AIStudio.Wpf.DiagramDesigner
{
public class PartCreatedConnectionInfo : ConnectorInfoBase
public class PartCreatedConnectorInfo : ConnectorInfoBase
{
private PointBase position;
public override PointBase Position
@@ -18,7 +18,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public PartCreatedConnectionInfo(double X, double Y) : base(ConnectorOrientation.None)
public PartCreatedConnectorInfo(double X, double Y) : base(ConnectorOrientation.None)
{
this.position = new PointBase(X, Y);
}

View File

@@ -18,7 +18,7 @@ namespace AIStudio.Wpf.DiagramDesigner
ShapeDefiner = Shapes.Rectangle;
}
public DesignerItemViewModelBase(IDiagramViewModel root, DesignerItemBase designer) : base(root, designer)
public DesignerItemViewModelBase(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
ShapeDefiner = Shapes.Rectangle;
}
@@ -39,16 +39,17 @@ namespace AIStudio.Wpf.DiagramDesigner
{
base.LoadDesignerItemViewModel(root, designerbase);
DesignerItemBase designer = designerbase as DesignerItemBase;
this.Left = designer.Left;
this.Top = designer.Top;
this.Angle = designer.Angle;
this.ScaleX = designer.ScaleX;
this.ScaleY = designer.ScaleY;
this.ItemWidth = designer.ItemWidth;
this.ItemHeight = designer.ItemHeight;
this.Icon = designer.Icon;
if (designerbase is DesignerItemBase designer)
{
this.Left = designer.Left;
this.Top = designer.Top;
this.Angle = designer.Angle;
this.ScaleX = designer.ScaleX;
this.ScaleY = designer.ScaleY;
this.ItemWidth = designer.ItemWidth;
this.ItemHeight = designer.ItemHeight;
this.Icon = designer.Icon;
}
}
public override SelectableItemBase ToXmlObject()

View File

@@ -1361,10 +1361,10 @@ namespace AIStudio.Wpf.DiagramDesigner
List<DesignerItemViewModelBase> selectedDesignerItems =
SelectedItems.OfType<DesignerItemViewModelBase>().ToList();
List<ConnectorViewModel> selectedConnections =
SelectedItems.OfType<ConnectorViewModel>().ToList();
List<ConnectionViewModel> selectedConnections =
SelectedItems.OfType<ConnectionViewModel>().ToList();
foreach (ConnectorViewModel connection in Items.OfType<ConnectorViewModel>())
foreach (ConnectionViewModel connection in Items.OfType<ConnectionViewModel>())
{
if (!selectedConnections.Contains(connection))
{
@@ -1458,7 +1458,7 @@ namespace AIStudio.Wpf.DiagramDesigner
ConnectorOrientation sinkConnectorOrientation = connectionItem.SinkOrientation;
FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sinkItem, sinkConnectorOrientation, connectionItem.SinkXRatio, connectionItem.SinkYRatio, connectionItem.SinkInnerPoint);
ConnectorViewModel connectionVM = new ConnectorViewModel(this, sourceConnectorInfo, sinkConnectorInfo, connectionItem);
ConnectionViewModel connectionVM = new ConnectionViewModel(this, sourceConnectorInfo, sinkConnectorInfo, connectionItem);
connectors.Add(connectionVM);
}
@@ -1537,7 +1537,7 @@ namespace AIStudio.Wpf.DiagramDesigner
List<SelectableDesignerItemViewModelBase> itemsToRemove = SelectedItems.OfType<SelectableDesignerItemViewModelBase>().ToList();
List<SelectableDesignerItemViewModelBase> connectionsToAlsoRemove = new List<SelectableDesignerItemViewModelBase>();
foreach (var connector in Items.OfType<ConnectorViewModel>())
foreach (var connector in Items.OfType<ConnectionViewModel>())
{
if (ItemsToDeleteHasConnector(itemsToRemove, connector.SourceConnectorInfo))
{