From b36bd4b22826d04cc4bca5fb9d7602b9e1d487ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Sat, 25 Mar 2023 11:59:31 +0800 Subject: [PATCH] XX --- .../BarcodeDesignerItemViewModel.cs | 9 +- .../OutLineTextDesignerItemViewModel.cs | 10 +- .../ViewModels/PathItemViewModel.cs | 9 +- .../PersistDesignerItemViewModel.cs | 9 +- .../SettingsDesignerItemViewModel.cs | 11 +- .../CustomDefinedDesignerItemViewModel.cs | 12 +- .../Models/Serializables/DesignerItemBase.cs | 8 ++ .../Models/Serializables/MediaDesignerItem.cs | 17 +-- .../BaseViewModel/ConnectionViewModel.cs | 5 + .../Connector/ConnectorInfoBase.cs | 9 +- .../Connector/ConnectorLabelModel.cs | 13 +- .../Connector/ConnectorPointModel.cs | 8 +- .../Connector/ConnectorVertexModel.cs | 4 +- .../Connector/FullyCreatedConnectorInfo.cs | 9 +- .../DesignerItemViewModelBase.cs | 23 ++-- .../BaseViewModel/DiagramViewModel.cs | 29 ++--- .../GroupDesignerItemViewModel.cs | 8 +- .../SelectableDesignerItemViewModelBase.cs | 9 +- .../BaseViewModel/SelectableViewModelBase.cs | 27 +++- .../DefaultViewModel/GifImageItemViewModel.cs | 16 +-- .../DefaultViewModel/ImageItemViewModel.cs | 38 +++--- .../LinkPointDesignerItemViewModel.cs | 7 +- .../LogicalGateItemViewModelBase.cs | 11 +- .../DefaultViewModel/MediaItemViewModel.cs | 16 +-- .../PointDesignerItemViewModel.cs | 12 +- .../ShapeDesignerItemViewModel.cs | 15 ++- .../TextDesignerItemViewModel.cs | 9 +- AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs | 9 +- .../ViewModels/LogicalGateItemViewModel.cs | 20 ++- .../Controls/ToolBoxControl.xaml | 123 ++++++------------ .../ViewModels/MindDiagramViewModel.cs | 36 ++--- AIStudio.Wpf.Mind/ViewModels/MindNode.cs | 65 +++++---- .../ViewModels/SFCConditionNode.cs | 9 +- AIStudio.Wpf.SFC/ViewModels/SFCNode.cs | 16 +-- .../ViewModels/Simulate_SolenoidViewModel.cs | 9 +- 35 files changed, 344 insertions(+), 296 deletions(-) diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/BarcodeDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/BarcodeDesignerItemViewModel.cs index b06cfd6..d1b873a 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/BarcodeDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/BarcodeDesignerItemViewModel.cs @@ -34,15 +34,20 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new DesignerItemBase(this, Format.ToString()); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); CustomText = true; visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; } + protected override void InitNew() + { + base.InitNew(); + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/OutLineTextDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/OutLineTextDesignerItemViewModel.cs index d8234c4..20b5ce6 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/OutLineTextDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/OutLineTextDesignerItemViewModel.cs @@ -35,12 +35,16 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new TextDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); - visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; + visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; + } + protected override void InitNew() + { + base.InitNew(); FontViewModel.FontFamily = "Arial"; FontViewModel.FontSize = 36; } diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PathItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PathItemViewModel.cs index 99662ce..a0b11b6 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PathItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PathItemViewModel.cs @@ -32,11 +32,16 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new PathDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); this.ShowConnectors = false; } + + protected override void InitNew() + { + base.InitNew(); + } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PersistDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PersistDesignerItemViewModel.cs index 4412f03..d188ae9 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PersistDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PersistDesignerItemViewModel.cs @@ -35,14 +35,19 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new PersistDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; this.ShowConnectors = false; } + protected override void InitNew() + { + base.InitNew(); + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/SettingsDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/SettingsDesignerItemViewModel.cs index 050b79d..721d80c 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/SettingsDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/SettingsDesignerItemViewModel.cs @@ -35,15 +35,20 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new SettingsDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; this.ShowConnectors = false; } - protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) + protected override void InitNew() + { + base.InitNew(); + } + + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/CustomDefinedDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/CustomDefinedDesignerItemViewModel.cs index 4a634f8..725c56e 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/CustomDefinedDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/CustomDefinedDesignerItemViewModel.cs @@ -32,17 +32,15 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels return new DesignerItemBase(this, Answer); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); - - this.ItemWidth = 150; - this.ItemHeight = 80; - InitConnector(); + base.Init(root, initNew); } - protected override void InitConnector() + protected override void InitNew() { + this.ItemWidth = 150; + this.ItemHeight = 80; connectors.Add(new FullyCreatedConnectorInfo(this, ConnectorOrientation.Top)); connectors.Add(new FullyCreatedConnectorInfo(this, ConnectorOrientation.Bottom)); } diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DesignerItemBase.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DesignerItemBase.cs index 42f5f59..bcde36b 100644 --- a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DesignerItemBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DesignerItemBase.cs @@ -35,6 +35,8 @@ namespace AIStudio.Wpf.DiagramDesigner this.Reserve = reserve; this.CornerRadius = viewmodel.CornerRadius; this.BorderThickness = viewmodel.BorderThickness; + + Connectors = new List(viewmodel.Connectors.Select(p => new FullyCreatedConnectorInfoItem(p))); } [XmlAttribute("Left")] @@ -117,6 +119,12 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } + + [XmlArray] + public List Connectors + { + get; set; + } } diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/MediaDesignerItem.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/MediaDesignerItem.cs index cb9a7a0..cbd3667 100644 --- a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/MediaDesignerItem.cs +++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/MediaDesignerItem.cs @@ -12,26 +12,13 @@ namespace AIStudio.Wpf.DiagramDesigner public MediaDesignerItem(GifImageItemViewModel item) : base(item) { - Connectors = new List(); - foreach (var fullyCreatedConnectorInfo in item.Connectors) - { - FullyCreatedConnectorInfoItem connector = new FullyCreatedConnectorInfoItem(fullyCreatedConnectorInfo); - Connectors.Add(connector); - } + } public MediaDesignerItem(MediaItemViewModel item) : base(item) { - Connectors = new List(); - foreach (var fullyCreatedConnectorInfo in item.Connectors) - { - FullyCreatedConnectorInfoItem connector = new FullyCreatedConnectorInfoItem(fullyCreatedConnectorInfo); - Connectors.Add(connector); - } - } - [XmlArray] - public List Connectors { get; set; } + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs index ff197d5..cc2f1f9 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs @@ -76,6 +76,11 @@ namespace AIStudio.Wpf.DiagramDesigner AddLabelCommand = new SimpleCommand(Command_Enable, para => AddLabel()); } + protected override void InitNew() + { + base.InitNew(); + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs index 07be8cd..3dff2aa 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs @@ -36,10 +36,13 @@ namespace AIStudio.Wpf.DiagramDesigner return new ConnectorInfoItemBase(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) + { + base.Init(root, initNew); + } + + protected override void InitNew() { - base.Init(root); - ColorViewModel = new ColorViewModel() { LineColor = new ColorObject() { Color = Color.FromArgb(0xAA, 0x00, 0x00, 0x80) }, diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs index 182fe40..ee1cf22 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs @@ -36,17 +36,20 @@ namespace AIStudio.Wpf.DiagramDesigner return new ConnectorLabelItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); - - ConnectorWidth = 30; - ConnectorHeight = 30; + base.Init(root, initNew); DeleteLabelCommand = new SimpleCommand(Command_Enable, DeleteLabel); EditCommand = new SimpleCommand(Command_Enable, ExecuteEditCommand); } + protected override void InitNew() + { + ConnectorWidth = 30; + ConnectorHeight = 30; + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorPointModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorPointModel.cs index 130d4d2..9457f6c 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorPointModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorPointModel.cs @@ -48,9 +48,13 @@ namespace AIStudio.Wpf.DiagramDesigner return new ConnectorPointItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) + { + base.Init(root, initNew); + } + + protected override void InitNew() { - base.Init(root); ColorViewModel = new ColorViewModel() { LineColor = new ColorObject() { Color = Color.FromArgb(0xAA, 0x00, 0x00, 0x80) }, diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorVertexModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorVertexModel.cs index 1c75a91..293c1e6 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorVertexModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorVertexModel.cs @@ -33,9 +33,9 @@ namespace AIStudio.Wpf.DiagramDesigner return new ConnectorVertexItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); DeleteVertexCommand = new SimpleCommand(Command_Enable, DeleteVertex); } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs index 0ec46f5..6705a6d 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs @@ -52,9 +52,9 @@ namespace AIStudio.Wpf.DiagramDesigner return new FullyCreatedConnectorInfoItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); menuOptions = new List(); MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand); @@ -62,6 +62,11 @@ namespace AIStudio.Wpf.DiagramDesigner } + protected override void InitNew() + { + base.InitNew(); + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs index 56b7c61..09cd7bb 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs @@ -38,11 +38,12 @@ namespace AIStudio.Wpf.DiagramDesigner return new DesignerItemBase(this); } - protected override void Init(IDiagramViewModel root) + protected override void InitNew() { - base.Init(root); - - InitConnector(); + connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Top)); + connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Bottom)); + connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Left)); + connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Right)); } protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) @@ -61,17 +62,13 @@ namespace AIStudio.Wpf.DiagramDesigner this.Icon = designer.Icon; this.CornerRadius = designer.CornerRadius; this.BorderThickness = designer.BorderThickness; + foreach (var connector in designer.Connectors) + { + FullyCreatedConnectorInfo fullyCreatedConnectorInfo = new FullyCreatedConnectorInfo(this.Root, this, connector); + AddConnector(fullyCreatedConnectorInfo); + } } } - - protected virtual void InitConnector() - { - connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Top)); - connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Bottom)); - connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Left)); - connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Right)); - } - #region 属性 public FullyCreatedConnectorInfo FirstConnector diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index dfd5432..40c4f04 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -1493,17 +1493,9 @@ namespace AIStudio.Wpf.DiagramDesigner { if (!selectedConnections.Contains(connection)) { - DesignerItemViewModelBase sourceItem = (from item in selectedDesignerItems - where item.Id == connection.SourceConnectorInfo.DataItem.Id - select item).FirstOrDefault(); - - DesignerItemViewModelBase sinkItem = (from item in selectedDesignerItems - where item.Id == connection.SinkConnectorInfoFully?.DataItem?.Id - select item).FirstOrDefault(); - - if (sourceItem != null && - sinkItem != null && - BelongToSameGroup(sourceItem, sinkItem)) + DesignerItemViewModelBase sourceItem = selectedDesignerItems.FirstOrDefault(p => p.Id == connection.SourceConnectorInfo.DataItem.Id); + DesignerItemViewModelBase sinkItem = selectedDesignerItems.FirstOrDefault(p => p.Id == connection.SinkConnectorInfoFully?.DataItem?.Id); + if (sourceItem != null && sinkItem != null && BelongToSameGroup(sourceItem, sinkItem)) { selectedConnections.Add(connection); } @@ -1600,11 +1592,11 @@ namespace AIStudio.Wpf.DiagramDesigner if (mappingOldToNewIDs.ContainsKey(item.ParentId)) item.ParentId = mappingOldToNewIDs[item.ParentId]; } - } - items.AddRange(connectors); - FixConnection(items); - + } + items.AddRange(connectors); DirectAddItemCommand.Execute(items); + + FixOtherInfo(items); } catch (Exception e) { @@ -1618,7 +1610,7 @@ namespace AIStudio.Wpf.DiagramDesigner } } - protected virtual void FixConnection(List items) + protected virtual void FixOtherInfo(List items) { } @@ -2521,10 +2513,7 @@ namespace AIStudio.Wpf.DiagramDesigner foreach (DesignerItemViewModelBase groupRoot in groups) { - var children = from child in SelectedItems.OfType() - where child.ParentId == groupRoot.Id - select child; - + var children = SelectedItems.OfType().Where(p => p.ParentId == groupRoot.Id); foreach (DesignerItemViewModelBase child in children) child.ParentId = Guid.Empty; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs index 9bf13c8..312dead 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs @@ -36,17 +36,17 @@ namespace AIStudio.Wpf.DiagramDesigner } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); this.IsGroup = true; this.IsHitTestVisible = true; } - protected override void InitConnector() + protected override void InitNew() { - + this.ClearConnectors(); } protected override void ExecuteEditCommand(object param) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs index 9e6ecfc..c0ab39a 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs @@ -42,14 +42,19 @@ namespace AIStudio.Wpf.DiagramDesigner } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); SelectItemCommand = new SimpleCommand(Command_Enable, ExecuteSelectItemCommand); EditCommand = new SimpleCommand(Command_Enable, ExecuteEditCommand); } + protected override void InitNew() + { + base.InitNew(); + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs index fda6d07..67c589c 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs @@ -29,20 +29,20 @@ namespace AIStudio.Wpf.DiagramDesigner public SelectableViewModelBase(IDiagramViewModel root) { - Init(root); + Init(root, true); (FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged; } public SelectableViewModelBase(IDiagramViewModel root, SelectableItemBase designer) { - Init(root); + Init(root, false); LoadDesignerItemViewModel(designer); (FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged; } public SelectableViewModelBase(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) { - Init(root); + Init(root, false); SelectableItemBase obj = SerializeHelper.DeserializeObject(serializableItem.SerializableTypeName, serializableItem.SerializableString, serializableType); LoadDesignerItemViewModel(obj); (FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged; @@ -66,7 +66,7 @@ namespace AIStudio.Wpf.DiagramDesigner return null; } - protected virtual void Init(IDiagramViewModel root) + protected virtual void Init(IDiagramViewModel root, bool initNew) { Root = root; @@ -98,6 +98,16 @@ namespace AIStudio.Wpf.DiagramDesigner } LockObjectViewModel = new LockObjectViewModel(); + + if (initNew) + { + InitNew(); + } + } + + protected virtual void InitNew() + { + } protected virtual void LoadDesignerItemViewModel(SelectableItemBase designerbase) @@ -158,7 +168,7 @@ namespace AIStudio.Wpf.DiagramDesigner set { if (SetProperty(ref _isSelected, value)) - { + { //如果没有文字,失去焦点自动清除 if (_isSelected == false && string.IsNullOrEmpty(Text)) { @@ -336,7 +346,7 @@ namespace AIStudio.Wpf.DiagramDesigner protected virtual void ClearText() { - + } public virtual void ClearSelected() @@ -362,6 +372,11 @@ namespace AIStudio.Wpf.DiagramDesigner } } + public override string ToString() + { + return $"{Id}-{Text}"; + } + public virtual void Dispose() { } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/GifImageItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/GifImageItemViewModel.cs index 8faad8d..037fd03 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/GifImageItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/GifImageItemViewModel.cs @@ -42,11 +42,10 @@ namespace AIStudio.Wpf.DiagramDesigner return new MediaDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); - ClearConnectors(); //propertyChangedSubscription = WhenPropertyChanged.Where(o => o.ToString() == "Left" || o.ToString() == "Top" || o.ToString() == "ItemWidth" || o.ToString() == "ItemHeight").Subscribe(ChangeImageElement); //connectorsChangedSubscription = WhenConnectorsChanged.Subscribe(OnConnectorsChanged); @@ -55,6 +54,10 @@ namespace AIStudio.Wpf.DiagramDesigner BuildMenuOptions(); } + protected override void InitNew() + { + this.ClearConnectors(); + } protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { @@ -62,12 +65,7 @@ namespace AIStudio.Wpf.DiagramDesigner if (designerbase is MediaDesignerItem designer) { - this.Icon = designer.Icon; - foreach (var connector in designer.Connectors) - { - FullyCreatedConnectorInfo fullyCreatedConnectorInfo = new FullyCreatedConnectorInfo(this.Root, this, connector); - AddConnector(fullyCreatedConnectorInfo); - } + this.Icon = designer.Icon; } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/ImageItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/ImageItemViewModel.cs index fe66fab..5aaee3c 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/ImageItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/ImageItemViewModel.cs @@ -41,15 +41,31 @@ namespace AIStudio.Wpf.DiagramDesigner return new ImageDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); this.PropertyChanged += ImageItemViewModel_PropertyChanged; BuildMenuOptions(); } + protected override void InitNew() + { + base.InitNew(); + } + + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) + { + base.LoadDesignerItemViewModel(designerbase); + + if (designerbase is ImageDesignerItem designer) + { + this.Icon = designer.Icon; + Suffix = Path.GetExtension(this.Icon).ToLower(); + } + } + private void ImageItemViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == nameof(ItemWidth) || e.PropertyName == nameof(ItemHeight) || e.PropertyName == nameof(ResizeMargin) || e.PropertyName == nameof(ClipMode)) @@ -65,6 +81,7 @@ namespace AIStudio.Wpf.DiagramDesigner } } + #region 属性 private string _suffix; public string Suffix { @@ -113,24 +130,9 @@ namespace AIStudio.Wpf.DiagramDesigner SetProperty(ref _clipMode, value); } } + #endregion - protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) - { - base.LoadDesignerItemViewModel(designerbase); - - if (designerbase is ImageDesignerItem designer) - { - this.Icon = designer.Icon; - Suffix = Path.GetExtension(this.Icon).ToLower(); - foreach (var connector in designer.Connectors) - { - FullyCreatedConnectorInfo fullyCreatedConnectorInfo = new FullyCreatedConnectorInfo(this.Root, this, connector); - AddConnector(fullyCreatedConnectorInfo); - } - } - } - private void BuildMenuOptions() { menuOptions = new ObservableCollection(); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LinkPointDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LinkPointDesignerItemViewModel.cs index 97c24a6..61ea26f 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LinkPointDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LinkPointDesignerItemViewModel.cs @@ -16,10 +16,13 @@ namespace AIStudio.Wpf.DiagramDesigner Top = Math.Max(0, location.Y - ItemHeight / 2); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); + } + protected override void InitNew() + { this.ClearConnectors(); this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true)); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs index 64fb6a1..e2c631c 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs @@ -95,14 +95,19 @@ namespace AIStudio.Wpf.DiagramDesigner return new LogicalGateDesignerItemBase(this); } - protected override void Init(IDiagramViewModel root) - { + protected override void Init(IDiagramViewModel root, bool initNew) + { ShowRotate = false; ShowArrow = false; AddInputCommand = new SimpleCommand(Command_Enable, para => ExecuteAddInput(para)); AddOutputCommand = new SimpleCommand(Command_Enable, para => ExecuteAddOutput(para)); - base.Init(root); + base.Init(root, initNew); + } + + protected override void InitNew() + { + base.InitNew(); } private void BuildMenuOptions() diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/MediaItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/MediaItemViewModel.cs index 9a163d1..ddbe0ea 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/MediaItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/MediaItemViewModel.cs @@ -36,13 +36,17 @@ namespace AIStudio.Wpf.DiagramDesigner return new MediaDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); BuildMenuOptions(); - } + } + protected override void InitNew() + { + base.InitNew(); + } protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { @@ -51,12 +55,6 @@ namespace AIStudio.Wpf.DiagramDesigner if (designerbase is MediaDesignerItem designer) { this.Icon = designer.Icon; - - foreach (var connector in designer.Connectors) - { - FullyCreatedConnectorInfo fullyCreatedConnectorInfo = new FullyCreatedConnectorInfo(this.Root, this, connector); - AddConnector(fullyCreatedConnectorInfo); - } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/PointDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/PointDesignerItemViewModel.cs index 4f8df09..5bd90b2 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/PointDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/PointDesignerItemViewModel.cs @@ -16,15 +16,17 @@ namespace AIStudio.Wpf.DiagramDesigner Top = Math.Max(0, location.Y - ItemHeight / 2); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); - - this.ClearConnectors(); - this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true)); + base.Init(root, initNew); + } + protected override void InitNew() + { ItemWidth = 5; ItemHeight = 5; + this.ClearConnectors(); + this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true)); } private bool _showConnectors = false; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/ShapeDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/ShapeDesignerItemViewModel.cs index 4cdab77..8e3c7df 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/ShapeDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/ShapeDesignerItemViewModel.cs @@ -98,16 +98,19 @@ namespace AIStudio.Wpf.DiagramDesigner Top = ConnectionPoints.Min(p => p.Y); } - protected override void Init(IDiagramViewModel root) - { + protected override void Init(IDiagramViewModel root, bool initNew) + { MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand); - base.Init(root); - - this.ClearConnectors(); - + base.Init(root, initNew); + BuildMenuOptions(); } + protected override void InitNew() + { + this.ClearConnectors(); + } + private void ExecuteMenuItemCommand(object obj) { ShowConnectors = (obj as CinchMenuItem).IsChecked; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/TextDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/TextDesignerItemViewModel.cs index 5c4cbc3..f422361 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/TextDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/TextDesignerItemViewModel.cs @@ -35,12 +35,15 @@ namespace AIStudio.Wpf.DiagramDesigner return new TextDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); - CustomText = true; + CustomText = true; + } + protected override void InitNew() + { this.ItemWidth = 150; this.ClearConnectors(); } diff --git a/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs b/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs index c6b1c68..1b9eeb4 100644 --- a/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs +++ b/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs @@ -40,9 +40,9 @@ namespace AIStudio.Wpf.Flowchart.ViewModels return new FlowNodeDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); ShowRotate = false; ShowText = true; @@ -51,6 +51,11 @@ namespace AIStudio.Wpf.Flowchart.ViewModels visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; } + protected override void InitNew() + { + base.InitNew(); + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.Logical/ViewModels/LogicalGateItemViewModel.cs b/AIStudio.Wpf.Logical/ViewModels/LogicalGateItemViewModel.cs index 7a6692b..9904cfd 100644 --- a/AIStudio.Wpf.Logical/ViewModels/LogicalGateItemViewModel.cs +++ b/AIStudio.Wpf.Logical/ViewModels/LogicalGateItemViewModel.cs @@ -36,13 +36,18 @@ namespace AIStudio.Wpf.Logical.ViewModels return new LogicalGateDesignerItemBase(this); } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; } + protected override void InitNew() + { + base.InitNew(); + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); @@ -1040,15 +1045,20 @@ namespace AIStudio.Wpf.Logical.ViewModels BuildMenuOptions(); } - protected override void Init(IDiagramViewModel root) - { - base.Init(root); + protected override void Init(IDiagramViewModel root, bool initNew) + { + base.Init(root, initNew); MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand); readDataTimer.Elapsed += timeCycle; readDataTimer.Interval = 1000; } + protected override void InitNew() + { + base.InitNew(); + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.Mind/Controls/ToolBoxControl.xaml b/AIStudio.Wpf.Mind/Controls/ToolBoxControl.xaml index 549654b..33ca6e8 100644 --- a/AIStudio.Wpf.Mind/Controls/ToolBoxControl.xaml +++ b/AIStudio.Wpf.Mind/Controls/ToolBoxControl.xaml @@ -25,29 +25,8 @@ - - - - - - - - - - - - - - - - - - - - - - - + + @@ -55,8 +34,8 @@ - - + + - - + + - - + + - - + + @@ -186,8 +165,8 @@ - - + + - - + + - + @@ -427,24 +406,10 @@ - + - - - - - - - - - - - - - - - + @@ -460,8 +425,8 @@ - - + + @@ -489,15 +454,15 @@ - - - - + + @@ -525,8 +490,8 @@ - - + + @@ -585,7 +550,7 @@ - + @@ -604,31 +569,17 @@ - + - + - - - - - - - - - - - - - - - - + + @@ -644,7 +595,7 @@ - + @@ -660,8 +611,8 @@ - - + + - - - + @@ -730,7 +681,7 @@ - + diff --git a/AIStudio.Wpf.Mind/ViewModels/MindDiagramViewModel.cs b/AIStudio.Wpf.Mind/ViewModels/MindDiagramViewModel.cs index 7d56415..29433b8 100644 --- a/AIStudio.Wpf.Mind/ViewModels/MindDiagramViewModel.cs +++ b/AIStudio.Wpf.Mind/ViewModels/MindDiagramViewModel.cs @@ -347,7 +347,7 @@ namespace AIStudio.Wpf.Mind.ViewModels foreach (var parent in parents) { parent.Children = new System.Collections.ObjectModel.ObservableCollection(Items.OfType().Where(p => p.ParentId == parent.Id)); - foreach (var item in Items.OfType().Where(p => p.ParentId == parent.Id)) + foreach (var item in Items.OfType().Where(p => p.ParentId == parent.Id).ToList()) { item.Parent = parent; item.InitLayout(false); @@ -426,7 +426,7 @@ namespace AIStudio.Wpf.Mind.ViewModels if (items?.Count == 0) { - var node = new MindNode(this) { Text = "分支主题" }; + var node = new MindNode(this) { Text = $"分支主题{parent.Children.Count + 1}"}; items.Add(node); } @@ -463,14 +463,15 @@ namespace AIStudio.Wpf.Mind.ViewModels else { node = SelectedItem as MindNode; - } - if (items?.Count == 0) - { - items.Add(new MindNode(this) { Text = "分支主题" }); - } + } if (node.Parent is MindNode parent) { + if (items?.Count == 0) + { + items.Add(new MindNode(this) { Text = $"分支主题{parent.Children.Count + 1}" }); + } + DoCommandManager.DoNewCommand(this.ToString(), () => { int index = parent.Children.IndexOf(node); @@ -510,15 +511,14 @@ namespace AIStudio.Wpf.Mind.ViewModels pear = SelectedItem as MindNode; } - if (items?.Count == 0) - { - var node = new MindNode(this) { Text = "分支主题" }; - items.Add(node); - } - - if (pear.Parent is MindNode parent) { + if (items?.Count == 0) + { + var node = new MindNode(this) { Text = $"分支主题{parent.Children.Count + 1}" }; + items.Add(node); + } + DoCommandManager.DoNewCommand(this.ToString(), () => { int index = parent.Children.IndexOf(pear); @@ -667,22 +667,24 @@ namespace AIStudio.Wpf.Mind.ViewModels #endregion #region 复制,粘贴 - protected override void FixConnection(List items) + protected override void FixOtherInfo(List items) { List parents = new List(); foreach (var item in items.OfType()) { var parent = Items.OfType().FirstOrDefault(p => p.Id == item.ParentId); - if (parent != null) + if (parent != null && !items.Contains(parent)) { parents.Add(parent); } - else + else if (item.ParentId == Guid.Empty) { parents.Add(item); + item.InitLayout(false); } } ResetChildren(parents); + parents.ForEach(p => p.LayoutUpdated()); } #endregion diff --git a/AIStudio.Wpf.Mind/ViewModels/MindNode.cs b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs index 95598c2..dfee264 100644 --- a/AIStudio.Wpf.Mind/ViewModels/MindNode.cs +++ b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs @@ -46,14 +46,34 @@ namespace AIStudio.Wpf.Mind.ViewModels InitLayout(false); } + public override SelectableItemBase GetSerializableObject() { return new MindNodeDesignerItem(this); } - protected override void Init(IDiagramViewModel root) + public override DiagramNode ToDiagram() { - base.Init(root); + var mindNodeModel = new MindNodeModel(); + + mindNodeModel.Spacing = Spacing; + mindNodeModel.Offset = Offset; + mindNodeModel.IsExpanded = IsExpanded; + mindNodeModel.LinkInfoModel = new LinkInfoModel(LinkInfo); + mindNodeModel.ImageInfoModel = new ImageInfoModel(ImageInfo); + mindNodeModel.Remark = Remark; + mindNodeModel.Priority = Priority; + mindNodeModel.Rate = Rate; + if (Tags != null) + { + mindNodeModel.Tags = new List(Tags); + } + return mindNodeModel; + } + + protected override void Init(IDiagramViewModel root, bool initNew) + { + base.Init(root, initNew); EnabledForConnection = false; AlwayForResized = true; @@ -71,6 +91,11 @@ namespace AIStudio.Wpf.Mind.ViewModels ImageInfo = new ImageInfo(); } + protected override void InitNew() + { + this.ClearConnectors(); + } + public void InitLayout(bool initAppearance) { var layout = GlobalType.AllTypes.Where(p => typeof(IMindLayout).IsAssignableFrom(p)).FirstOrDefault(p => p.Name == MindType.ToString() + "Layout"); @@ -108,26 +133,6 @@ namespace AIStudio.Wpf.Mind.ViewModels } } } - - public override DiagramNode ToDiagram() - { - var mindNodeModel = new MindNodeModel(); - - mindNodeModel.Spacing = Spacing; - mindNodeModel.Offset = Offset; - mindNodeModel.IsExpanded = IsExpanded; - mindNodeModel.LinkInfoModel = new LinkInfoModel(LinkInfo); - mindNodeModel.ImageInfoModel = new ImageInfoModel(ImageInfo); - mindNodeModel.Remark = Remark; - mindNodeModel.Priority = Priority; - mindNodeModel.Rate = Rate; - if (Tags != null) - { - mindNodeModel.Tags = new List(Tags); - } - return mindNodeModel; - } - #region 属性 public IMindLayout MindLayout { @@ -462,7 +467,7 @@ namespace AIStudio.Wpf.Mind.ViewModels } item.Parent = this; item.ParentId = this.Id; - item.InitLayout(true); + item.InitLayout(true);//因为节点的层级不同的样式,所以需要Parent确定后才能初始化 ConnectionViewModel connector = MindLayout?.GetOrSetConnectionViewModel(this, item); Root?.DirectAddItemCommand.Execute(new SelectableDesignerItemViewModelBase[] { item, connector }); @@ -498,10 +503,16 @@ namespace AIStudio.Wpf.Mind.ViewModels public void InitConnectLayout() { var connector = Root?.Items.OfType().Where(p => p.IsFullConnection).FirstOrDefault(p => p.SinkConnectorInfoFully.DataItem == this); - var newconnecter = MindLayout?.GetOrSetConnectionViewModel(connector.SourceConnectorInfo.DataItem as MindNode, connector.SinkConnectorInfoFully.DataItem as MindNode, connector); - if (connector == null) + if (connector != null) { - Root?.DirectAddItemCommand.Execute(new SelectableDesignerItemViewModelBase[] { newconnecter }); + MindLayout?.GetOrSetConnectionViewModel(connector.SourceConnectorInfo.DataItem as MindNode, connector.SinkConnectorInfoFully.DataItem as MindNode, connector); + } + else if (ParentNode != null) + { + connector = MindLayout?.GetOrSetConnectionViewModel(ParentNode, this, null); + Root?.DirectAddItemCommand.Execute(new SelectableDesignerItemViewModelBase[] { connector }); + connector.ZIndex = -1; + connector.IsSelected = false; } } #endregion @@ -510,6 +521,8 @@ namespace AIStudio.Wpf.Mind.ViewModels { if (GetLevel1Node()?.LayoutUpdating == true) return; + if (Root == null) return; + switch (e.PropertyName) { case nameof(IsExpanded): diff --git a/AIStudio.Wpf.SFC/ViewModels/SFCConditionNode.cs b/AIStudio.Wpf.SFC/ViewModels/SFCConditionNode.cs index 63f1d45..1726452 100644 --- a/AIStudio.Wpf.SFC/ViewModels/SFCConditionNode.cs +++ b/AIStudio.Wpf.SFC/ViewModels/SFCConditionNode.cs @@ -35,12 +35,17 @@ namespace AIStudio.Wpf.SFC.ViewModels } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); CustomText = true; } + protected override void InitNew() + { + base.InitNew(); + } + private ObservableCollection _linkPoint = new ObservableCollection(); public ObservableCollection LinkPoint { diff --git a/AIStudio.Wpf.SFC/ViewModels/SFCNode.cs b/AIStudio.Wpf.SFC/ViewModels/SFCNode.cs index f3048ed..e230723 100644 --- a/AIStudio.Wpf.SFC/ViewModels/SFCNode.cs +++ b/AIStudio.Wpf.SFC/ViewModels/SFCNode.cs @@ -42,19 +42,24 @@ namespace AIStudio.Wpf.SFC.ViewModels return new SFCNodeDesignerItem(this); } - protected override void Init(IDiagramViewModel root) - { + protected override void Init(IDiagramViewModel root, bool initNew) + { IsInnerConnector = true; ShowRotate = false; ShowArrow = false; ShowText = true; IsReadOnlyText = true; - base.Init(root); + base.Init(root, initNew); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; } + protected override void InitNew() + { + ClearConnectors(); + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); @@ -102,11 +107,6 @@ namespace AIStudio.Wpf.SFC.ViewModels } } - protected override void InitConnector() - { - ClearConnectors(); - } - public Dictionary Input { get; set; } = new Dictionary(); public Dictionary Output { get; set; } = new Dictionary(); public Dictionary Action { get; set; } = new Dictionary(); diff --git a/AIStudio.Wpf.SFC/ViewModels/Simulate_SolenoidViewModel.cs b/AIStudio.Wpf.SFC/ViewModels/Simulate_SolenoidViewModel.cs index f3df464..0a11b4f 100644 --- a/AIStudio.Wpf.SFC/ViewModels/Simulate_SolenoidViewModel.cs +++ b/AIStudio.Wpf.SFC/ViewModels/Simulate_SolenoidViewModel.cs @@ -34,9 +34,9 @@ namespace AIStudio.Wpf.SFC.ViewModels } - protected override void Init(IDiagramViewModel root) + protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root); + base.Init(root, initNew); CustomText = true; if (diChangedSubscription != null) @@ -47,6 +47,11 @@ namespace AIStudio.Wpf.SFC.ViewModels diChangedSubscription = WhenPropertyChanged.Where(o => o.ToString() == "Value").Throttle(TimeSpan.FromSeconds(random.Next(1,10))).Subscribe(OnValueChanged);//Sample } + protected override void InitNew() + { + base.InitNew(); + } + /// /// 输入 ///