保存SFC数据到xml,json完成,

This commit is contained in:
akwkevin
2021-08-03 18:19:47 +08:00
parent 5a1f869141
commit b0c9855d05
15 changed files with 466 additions and 131 deletions

View File

@@ -41,7 +41,14 @@ namespace AIStudio.Wpf.ADiagram.ViewModels
public DiagramsViewModel(string filename)
{
FileName = filename;
OpenFile(filename);
var diagramDocument = OpenFile(filename);
OpenFile(diagramDocument);
}
public DiagramsViewModel(string filename, DiagramDocument diagramDocument)
{
FileName = filename;
OpenFile(diagramDocument);
}
protected virtual void InitDiagramViewModel()
@@ -189,7 +196,7 @@ namespace AIStudio.Wpf.ADiagram.ViewModels
DiagramViewModel.SelectAllCommand.Execute(null);
}
private void OpenFile(string filename)
public static DiagramDocument OpenFile(string filename)
{
try
{
@@ -210,44 +217,7 @@ namespace AIStudio.Wpf.ADiagram.ViewModels
diagramDocument = JsonConvert.DeserializeObject<DiagramDocument>(File.ReadAllText(filename));
}
Title = diagramDocument.Title;
DiagramType = diagramDocument.DiagramType;
List<DiagramViewModel> viewModels = new List<DiagramViewModel>();
foreach (var diagramitem in diagramDocument.DiagramItems)
{
var viewModel = new DiagramViewModel();
viewModel.Name = diagramitem.Name;
viewModel.DiagramType = diagramitem.DiagramType;
foreach (DesignerItemBase diagramItemData in diagramitem.AllDesignerItems)
{
Type type = TypeHelper.GetType(diagramItemData.ItemTypeName);
DesignerItemViewModelBase itemBase = (DesignerItemViewModelBase)Activator.CreateInstance(type, viewModel, diagramItemData);
viewModel.Items.Add(itemBase);
}
foreach (var connection in diagramitem.Connections)
{
connection.SourceType = System.Type.GetType(connection.SourceTypeName);
connection.SinkType = System.Type.GetType(connection.SinkTypeName);
DesignerItemViewModelBase sourceItem = GetConnectorDataItem(viewModel, connection.SourceId, connection.SourceType);
ConnectorOrientation sourceConnectorOrientation = connection.SourceOrientation;
FullyCreatedConnectorInfo sourceConnectorInfo = GetFullConnectorInfo(connection.Id, sourceItem, sourceConnectorOrientation, connection.SourceXRatio, connection.SourceYRatio, connection.SourceInnerPoint);
DesignerItemViewModelBase sinkItem = GetConnectorDataItem(viewModel, connection.SinkId, connection.SinkType);
ConnectorOrientation sinkConnectorOrientation = connection.SinkOrientation;
FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connection.Id, sinkItem, sinkConnectorOrientation, connection.SinkXRatio, connection.SinkYRatio, connection.SinkInnerPoint);
ConnectorViewModel connectionVM = new ConnectorViewModel(viewModel, sourceConnectorInfo, sinkConnectorInfo, connection);
viewModel.Items.Add(connectionVM);
}
viewModels.Add(viewModel);
}
DiagramViewModels = new ObservableCollection<IDiagramViewModel>(viewModels);
DiagramViewModel = DiagramViewModels.FirstOrDefault();
return diagramDocument;
}
catch (System.IO.FileNotFoundException fnfe)
{
@@ -276,6 +246,57 @@ namespace AIStudio.Wpf.ADiagram.ViewModels
}
}
private void OpenFile(DiagramDocument diagramDocument)
{
Title = diagramDocument.Title;
DiagramType = diagramDocument.DiagramType;
List<DiagramViewModel> viewModels = new List<DiagramViewModel>();
foreach (var diagramItem in diagramDocument.DiagramItems)
{
var viewModel = new DiagramViewModel();
viewModel.Name = diagramItem.Name;
viewModel.DiagramType = diagramItem.DiagramType;
viewModel.ShowGrid = diagramItem.ShowGrid;
viewModel.GridCellSize = diagramItem.GridCellSize;
viewModel.CellHorizontalAlignment = diagramItem.CellHorizontalAlignment;
viewModel.CellVerticalAlignment = diagramItem.CellVerticalAlignment;
viewModel.PageSizeOrientation = diagramItem.PageSizeOrientation;
viewModel.PageSize = diagramItem.PageSize;
viewModel.PageSizeType = diagramItem.PageSizeType;
viewModel.GridMargin = diagramItem.GridMargin;
viewModel.GridColor = diagramItem.GridColor;
foreach (DesignerItemBase diagramItemData in diagramItem.AllDesignerItems)
{
Type type = TypeHelper.GetType(diagramItemData.ItemTypeName);
DesignerItemViewModelBase itemBase = (DesignerItemViewModelBase)Activator.CreateInstance(type, viewModel, diagramItemData);
viewModel.Items.Add(itemBase);
}
foreach (var connection in diagramItem.Connections)
{
connection.SourceType = System.Type.GetType(connection.SourceTypeName);
connection.SinkType = System.Type.GetType(connection.SinkTypeName);
DesignerItemViewModelBase sourceItem = GetConnectorDataItem(viewModel, connection.SourceId, connection.SourceType);
ConnectorOrientation sourceConnectorOrientation = connection.SourceOrientation;
FullyCreatedConnectorInfo sourceConnectorInfo = GetFullConnectorInfo(connection.Id, sourceItem, sourceConnectorOrientation, connection.SourceXRatio, connection.SourceYRatio, connection.SourceInnerPoint);
DesignerItemViewModelBase sinkItem = GetConnectorDataItem(viewModel, connection.SinkId, connection.SinkType);
ConnectorOrientation sinkConnectorOrientation = connection.SinkOrientation;
FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connection.Id, sinkItem, sinkConnectorOrientation, connection.SinkXRatio, connection.SinkYRatio, connection.SinkInnerPoint);
ConnectorViewModel connectionVM = new ConnectorViewModel(viewModel, sourceConnectorInfo, sinkConnectorInfo, connection);
viewModel.Items.Add(connectionVM);
}
viewModels.Add(viewModel);
}
DiagramViewModels = new ObservableCollection<IDiagramViewModel>(viewModels);
DiagramViewModel = DiagramViewModels.FirstOrDefault();
}
public bool SaveFile(bool isSaveAs = false)
{
string filter = "Files (*.xml)|*.xml|Files (*.json)|*.json|All Files (*.*)|*.*";
@@ -307,6 +328,15 @@ namespace AIStudio.Wpf.ADiagram.ViewModels
DiagramItem diagramItem = new DiagramItem();
diagramItem.Name = viewModel.Name;
diagramItem.DiagramType = viewModel.DiagramType;
diagramItem.ShowGrid = viewModel.ShowGrid;
diagramItem.GridCellSize = viewModel.GridCellSize;
diagramItem.CellHorizontalAlignment = viewModel.CellHorizontalAlignment;
diagramItem.CellVerticalAlignment = viewModel.CellVerticalAlignment;
diagramItem.PageSizeOrientation = viewModel.PageSizeOrientation;
diagramItem.PageSize = viewModel.PageSize;
diagramItem.PageSizeType = viewModel.PageSizeType;
diagramItem.GridMargin = viewModel.GridMargin;
diagramItem.GridColor = viewModel.GridColor;
diagramItem.AddItems(DiagramViewModel.Items);
@@ -891,6 +921,15 @@ namespace AIStudio.Wpf.ADiagram.ViewModels
DiagramItem diagramItem = new DiagramItem();
diagramItem.Name = viewModel.Name;
diagramItem.DiagramType = viewModel.DiagramType;
diagramItem.ShowGrid = viewModel.ShowGrid;
diagramItem.GridCellSize = viewModel.GridCellSize;
diagramItem.CellHorizontalAlignment = viewModel.CellHorizontalAlignment;
diagramItem.CellVerticalAlignment = viewModel.CellVerticalAlignment;
diagramItem.PageSizeOrientation = viewModel.PageSizeOrientation;
diagramItem.PageSize = viewModel.PageSize;
diagramItem.PageSizeType = viewModel.PageSizeType;
diagramItem.GridMargin = viewModel.GridMargin;
diagramItem.GridColor = viewModel.GridColor;
diagramItem.AddItems(DiagramViewModel.Items);
@@ -920,6 +959,15 @@ namespace AIStudio.Wpf.ADiagram.ViewModels
viewModel = new DiagramViewModel();
viewModel.Name = NewNameHelper.GetNewName(DiagramViewModels.Select(p => p.Name), "页-");
viewModel.DiagramType = diagramItem.DiagramType;
viewModel.ShowGrid = diagramItem.ShowGrid;
viewModel.GridCellSize = diagramItem.GridCellSize;
viewModel.CellHorizontalAlignment = diagramItem.CellHorizontalAlignment;
viewModel.CellVerticalAlignment = diagramItem.CellVerticalAlignment;
viewModel.PageSizeOrientation = diagramItem.PageSizeOrientation;
viewModel.PageSize = diagramItem.PageSize;
viewModel.PageSizeType = diagramItem.PageSizeType;
viewModel.GridMargin = diagramItem.GridMargin;
viewModel.GridColor = diagramItem.GridColor;
foreach (DesignerItemBase diagramItemData in diagramItem.AllDesignerItems)
{

View File

@@ -1,4 +1,5 @@
using AIStudio.Wpf.ADiagram.ViewModels;
using AIStudio.Wpf.ADiagram.Models;
using AIStudio.Wpf.ADiagram.ViewModels;
using AIStudio.Wpf.Flowchart.ViewModels;
using System;
using System.Collections.Generic;
@@ -18,9 +19,12 @@ namespace AIStudio.Wpf.Flowchart
{
}
public FlowchartViewModel(string filename) : base(filename)
public FlowchartViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
{
if (DiagramViewModel != null)
{
FlowchartService.InitData(DiagramViewModel.Items.OfType<FlowNode>().ToList(), DiagramViewModel.Items.OfType<ConnectorViewModel>().ToList(), DiagramViewModel);
}
}
protected override void InitDiagramViewModel()
@@ -101,6 +105,14 @@ namespace AIStudio.Wpf.Flowchart
FlowchartService.InitData(DiagramViewModel.Items.OfType<FlowNode>().ToList(), DiagramViewModel.Items.OfType<ConnectorViewModel>().ToList(), DiagramViewModel);
}
public override void Dispose()
{
base.Dispose();
foreach (var viewModel in DiagramViewModels)
{
FlowchartService.DisposeData(viewModel);
}
}
}
}

View File

@@ -1,4 +1,5 @@
using AIStudio.Wpf.ADiagram.ViewModels;
using AIStudio.Wpf.ADiagram.Models;
using AIStudio.Wpf.ADiagram.ViewModels;
using AIStudio.Wpf.Logical.ViewModels;
using System;
using System.Linq;
@@ -14,7 +15,7 @@ namespace AIStudio.Wpf.Logical
{
}
public LogicalViewModel(string filename) : base(filename)
public LogicalViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
{
}

View File

@@ -786,7 +786,24 @@ namespace AIStudio.Wpf.ADiagram.ViewModels
return;
}
var flow = new DiagramsViewModel(filename);
var diagram = DiagramsViewModel.OpenFile(filename);
DiagramsViewModel flow;
if (diagram.DiagramType == DiagramType.FlowChart)
{
flow = new FlowchartViewModel(filename, diagram);
}
else if (diagram.DiagramType == DiagramType.Logical)
{
flow = new LogicalViewModel(filename, diagram);
}
else if (diagram.DiagramType == DiagramType.SFC)
{
flow = new SFCViewModel(filename, diagram);
}
else
{
flow = new DiagramsViewModel(filename, diagram);
}
DiagramsViewModels.Add(flow);
DiagramsViewModel = flow;

View File

@@ -1,4 +1,5 @@
using AIStudio.Wpf.ADiagram.ViewModels;
using AIStudio.Wpf.ADiagram.Models;
using AIStudio.Wpf.ADiagram.ViewModels;
using AIStudio.Wpf.Flowchart.ViewModels;
using AIStudio.Wpf.SFC;
using AIStudio.Wpf.SFC.ViewModels;
@@ -21,9 +22,16 @@ namespace AIStudio.Wpf.Flowchart
{
}
public SFCViewModel(string filename) : base(filename)
public SFCViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
{
if (DiagramViewModel != null)
{
SFCService.InitData(DiagramViewModel.Items.OfType<SFCNode>().ToList(), DiagramViewModel.Items.OfType<ConnectorViewModel>().ToList(), DiagramViewModel);
}
readDataTimer.Elapsed += timeCycle;
readDataTimer.Interval = 1000;
readDataTimer.AutoReset = false;
readDataTimer.Start();
}
protected override void InitDiagramViewModel()
@@ -285,6 +293,11 @@ namespace AIStudio.Wpf.Flowchart
readDataTimer.Stop();
readDataTimer.Dispose();
foreach (var viewModel in DiagramViewModels)
{
SFCService.DisposeData(viewModel);
}
}
}
}