From 72e3efb05227c1f1361cb954ec75558278a0bc7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Fri, 27 Jan 2023 14:54:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E7=94=BBdemo=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml | 12 +- .../Views/PropertyControl.xaml | 19 +- .../BarcodeDesignerItemViewModel.cs | 15 +- .../OutLineTextDesignerItemViewModel.cs | 11 +- .../ViewModels/PathItemViewModel.cs | 12 +- .../PersistDesignerItemViewModel.cs | 15 +- .../SettingsDesignerItemViewModel.cs | 15 +- .../AIStudio.Wpf.DiagramDesigner.Demo.csproj | 6 +- .../Controls/NotDoneYetControl.xaml | 12 + .../Controls/NotDoneYetControl.xaml.cs | 26 ++ .../Controls/TitleControl.xaml | 17 +- .../MainWindow.xaml | 15 +- .../MainWindow.xaml.cs | 93 +++++- .../ReconnectLinksToClosestPortsViewModel.cs | 16 +- .../Animations/LineAnimationViewModel.cs | 43 +++ .../Animations/PathAnimationViewModel.cs | 41 +++ .../ViewModels/Base/BaseViewModel.cs | 18 -- .../CustomDesignerItemViewModel.xaml | 0 ...inkViewModel.cs => CustomLinkViewModel.cs} | 20 +- .../CustomNodeViewModel.cs | 19 +- .../ViewModels/Groups/GroupingViewModel.cs | 14 +- .../ViewModels/Links/LabelsViewModel.cs | 30 +- .../ViewModels/Links/MarkersViewModel.cs | 34 +-- .../Links/PathGeneratorsViewModel.cs | 14 +- .../ViewModels/Links/RoutersViewModel.cs | 14 +- .../ViewModels/Links/SnappingViewModel.cs | 10 +- .../ViewModels/Links/VerticesViewModel.cs | 16 +- .../ViewModels/LockedViewModel.cs | 14 +- .../ViewModels/Nodes/SvgViewModel.cs | 14 +- .../ViewModels/PerformanceViewModel.cs | 10 +- .../ViewModels/SimpleViewModel.cs | 14 +- .../ViewModels/SnapToGridViewModel.cs | 14 +- .../ViewModels/ZoomViewModel.cs | 14 +- .../ReconnectLinksToClosestPortsView.xaml | 0 .../ReconnectLinksToClosestPortsView.xaml.cs | 0 .../Views/Animations/LineAnimationView.xaml | 16 + .../Animations/LineAnimationView.xaml.cs | 26 ++ .../Views/Animations/PathAnimationView.xaml | 16 + .../Animations/PathAnimationView.xaml.cs | 26 ++ .../Views/Customization/CustomGroupView.xaml | 12 + .../Customization/CustomGroupView.xaml.cs | 26 ++ ...ThickLinkView.xaml => CustomLinkView.xaml} | 2 +- ...inkView.xaml.cs => CustomLinkView.xaml.cs} | 4 +- .../Controls/DesignerCanvas.cs | 2 +- .../Serializables/SelectableItemBase.cs | 6 + .../UserControls/LineControl.xaml | 2 + .../UserControls/LineControl.xaml.cs | 3 +- .../AdditionViewModel/ColorViewModel.cs | 13 + .../Interface/IColorViewModel.cs | 4 + .../BaseViewModel/ConnectionViewModel.cs | 51 ++-- .../Connector/ConnectorInfoBase.cs | 15 +- .../Connector/ConnectorLabelModel.cs | 16 +- .../Connector/ConnectorPointModel.cs | 59 ++-- .../Connector/ConnectorVertexModel.cs | 16 +- .../Connector/FullyCreatedConnectorInfo.cs | 15 +- .../Connector/PartCreatedConnectorInfo.cs | 17 +- .../DesignerItemViewModelBase.cs | 15 +- .../GroupDesignerItemViewModel.cs | 11 +- .../SelectableDesignerItemViewModelBase.cs | 14 +- .../BaseViewModel/SelectableViewModelBase.cs | 32 +- .../DefaultDesignerItemViewModel.cs | 7 +- .../SimpleViewModel/GifImageItemViewModel.cs | 52 ++-- .../SimpleViewModel/ImageItemViewModel.cs | 17 +- .../LinkPointDesignerItemViewModel.cs | 21 +- .../LogicalGateItemViewModelBase.cs | 17 +- .../SimpleViewModel/MediaItemViewModel.cs | 15 +- .../PointDesignerItemViewModel.cs | 41 +-- .../ShapeDesignerItemViewModel.cs | 58 ++-- .../TextDesignerItemViewModel.cs | 11 +- .../SimpleViewModel/VideoItemViewModel.cs | 8 +- AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs | 50 +++- .../ViewModels/MiddleFlowNode.cs | 7 +- .../ViewModels/LogicalGateItemViewModel.cs | 280 ++++++++++++++---- AIStudio.Wpf.SFC/ViewModels/SFCCOBeginNode.cs | 7 +- AIStudio.Wpf.SFC/ViewModels/SFCCOEndNode.cs | 7 +- .../ViewModels/SFCConditionNode.cs | 13 +- AIStudio.Wpf.SFC/ViewModels/SFCNode.cs | 15 +- AIStudio.Wpf.SFC/ViewModels/SFCStartNode.cs | 7 +- .../ViewModels/Simulate_SolenoidViewModel.cs | 11 +- .../ViewModels/Simulate_StartViewModel.cs | 7 +- .../ViewModels/Simulate_TankViewModel.cs | 7 +- 81 files changed, 1211 insertions(+), 503 deletions(-) create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Controls/NotDoneYetControl.xaml create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Controls/NotDoneYetControl.xaml.cs rename AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/{ => Algorithms}/ReconnectLinksToClosestPortsViewModel.cs (71%) create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Animations/LineAnimationViewModel.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Animations/PathAnimationViewModel.cs rename AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/{ => Customization}/CustomDesignerItemViewModel.xaml (100%) rename AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/{ThickLinkViewModel.cs => CustomLinkViewModel.cs} (71%) rename AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/{ => Customization}/CustomNodeViewModel.cs (85%) rename AIStudio.Wpf.DiagramDesigner.Demo/Views/{Animations => Algorithms}/ReconnectLinksToClosestPortsView.xaml (100%) rename AIStudio.Wpf.DiagramDesigner.Demo/Views/{Animations => Algorithms}/ReconnectLinksToClosestPortsView.xaml.cs (100%) create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/LineAnimationView.xaml create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/LineAnimationView.xaml.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/PathAnimationView.xaml create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/PathAnimationView.xaml.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomGroupView.xaml create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomGroupView.xaml.cs rename AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/{ThickLinkView.xaml => CustomLinkView.xaml} (98%) rename AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/{ThickLinkView.xaml.cs => CustomLinkView.xaml.cs} (86%) diff --git a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml index f3827c3..2b8d7a6 100644 --- a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml @@ -1236,6 +1236,16 @@ + + + + + + + + + + @@ -1246,7 +1256,7 @@ - + - + diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/BarcodeDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/BarcodeDesignerItemViewModel.cs index 7f4d326..b76a5e2 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/BarcodeDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/BarcodeDesignerItemViewModel.cs @@ -10,7 +10,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels { private IUIVisualizerService visualiserService; - public BarcodeDesignerItemViewModel() : base() + public BarcodeDesignerItemViewModel() : this(null) + { + + } + + public BarcodeDesignerItemViewModel(IDiagramViewModel root) : base(root) { } @@ -29,16 +34,16 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new DesignerItemBase(this, Format.ToString()); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is DesignerItemBase designer) { diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/OutLineTextDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/OutLineTextDesignerItemViewModel.cs index 151b500..d8234c4 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/OutLineTextDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/OutLineTextDesignerItemViewModel.cs @@ -10,7 +10,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels public class OutLineTextDesignerItemViewModel : TextDesignerItemViewModel { private IUIVisualizerService visualiserService; - public OutLineTextDesignerItemViewModel() : base() + public OutLineTextDesignerItemViewModel() : this(null) + { + + } + + public OutLineTextDesignerItemViewModel(IDiagramViewModel root) : base(root) { } @@ -30,9 +35,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new TextDesignerItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PathItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PathItemViewModel.cs index 0836e15..99662ce 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PathItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PathItemViewModel.cs @@ -7,7 +7,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels { public class PathItemViewModel : DesignerItemViewModelBase { - public PathItemViewModel() : base() + public PathItemViewModel() : this(null) + { + + } + + public PathItemViewModel(IDiagramViewModel root) : base(root) { } @@ -17,7 +22,6 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels } - public PathItemViewModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) { @@ -28,9 +32,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new PathDesignerItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); this.ShowConnectors = false; } diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PersistDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PersistDesignerItemViewModel.cs index 8012953..4412f03 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PersistDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/PersistDesignerItemViewModel.cs @@ -10,7 +10,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels { private IUIVisualizerService visualiserService; - public PersistDesignerItemViewModel() : base() + public PersistDesignerItemViewModel() : this(null) + { + + } + + public PersistDesignerItemViewModel(IDiagramViewModel root) : base(root) { } @@ -30,17 +35,17 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new PersistDesignerItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; this.ShowConnectors = false; } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is PersistDesignerItem designer) { diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/SettingsDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/SettingsDesignerItemViewModel.cs index 90090e5..050b79d 100644 --- a/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/SettingsDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/Extensions/ViewModels/SettingsDesignerItemViewModel.cs @@ -10,7 +10,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels { private IUIVisualizerService visualiserService; - public SettingsDesignerItemViewModel() : base() + public SettingsDesignerItemViewModel() : this(null) + { + + } + + public SettingsDesignerItemViewModel(IDiagramViewModel root) : base(root) { } @@ -30,17 +35,17 @@ namespace AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels return new SettingsDesignerItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; this.ShowConnectors = false; } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is SettingsDesignerItem designer) { diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj b/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj index e51ccd7..97e216b 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj +++ b/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj @@ -16,11 +16,7 @@ - - - - - + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Controls/NotDoneYetControl.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Controls/NotDoneYetControl.xaml new file mode 100644 index 0000000..b38db67 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Controls/NotDoneYetControl.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Controls/NotDoneYetControl.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Controls/NotDoneYetControl.xaml.cs new file mode 100644 index 0000000..082d6a7 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Controls/NotDoneYetControl.xaml.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.Controls +{ + /// + /// NotDoneYetControl.xaml 的交互逻辑 + /// + public partial class NotDoneYetControl : UserControl + { + public NotDoneYetControl() + { + InitializeComponent(); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Controls/TitleControl.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Controls/TitleControl.xaml index 8f9862c..ec58c18 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/Controls/TitleControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Controls/TitleControl.xaml @@ -3,19 +3,10 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:local="clr-namespace:AIStudio.Wpf.DiagramDesigner.Demo.Controls" + xmlns:ac="https://gitee.com/akwkevin/AI-wpf-controls" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> - - - - - - - - - - - - + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml index 9ec7384..e1fccd3 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml @@ -14,9 +14,20 @@ - + + + + + + + + + + x.Namespace.StartsWith("AIStudio.Wpf.DiagramDesigner.Demo.ViewModels") && x.Name.Contains("ViewModel")).ToList().ForEach(x => _viewModelDic.Add(x.Name.Remove(x.Name.Length - 9), x)); } #endregion - + List _menus; public MainWindow() { InitializeComponent(); this.Loaded += MainWindow_Loaded; - listbox.ItemsSource = _viewDic.Keys.ToList(); + + _menus = new List() + { + new MenuItemViewModel(){Title = "Simple"}, + new MenuItemViewModel(){Title = "Locked"}, + new MenuItemViewModel(){Title = "Events"}, + new MenuItemViewModel(){Title = "DynamicInsertions"}, + new MenuItemViewModel(){Title = "Performance"}, + new MenuItemViewModel(){Title = "Zoom"}, + new MenuItemViewModel(){Title = "SnapToGrid"}, + new MenuItemViewModel(){Title = "DragAndDrop"}, + new MenuItemViewModel(){Title = "Nodes", + Children=new List + { + new MenuItemViewModel(){Title = "Svg"}, + new MenuItemViewModel(){Title = "Portless"}, + } + }, + new MenuItemViewModel(){Title = "Links", + Children=new List + { + new MenuItemViewModel(){Title = "Snapping"}, + new MenuItemViewModel(){Title = "Labels"}, + new MenuItemViewModel(){Title = "Vertices"}, + new MenuItemViewModel(){Title = "Markers"}, + new MenuItemViewModel(){Title = "Routers"}, + new MenuItemViewModel(){Title = "PathGenerators"}, + } + }, + new MenuItemViewModel(){Title = "Groups", + Children=new List + { + new MenuItemViewModel(){Title = "Grouping"}, + } + }, + new MenuItemViewModel(){Title = "Customization", + Children=new List + { + new MenuItemViewModel(){Title = "CustomNode"}, + new MenuItemViewModel(){Title = "CustomLink"}, + new MenuItemViewModel(){Title = "CustomPort"}, + new MenuItemViewModel(){Title = "CustomGroup"}, + } + }, + new MenuItemViewModel(){Title = "Algorithms", + Children=new List + { + + } + }, + new MenuItemViewModel(){Title = "Animations", + Children=new List + { + new MenuItemViewModel(){Title = "PathAnimation"}, + new MenuItemViewModel(){Title = "LineAnimation"}, + } + }, + }; + treeview.ItemsSource = _menus; } private void MainWindow_Loaded(object sender, RoutedEventArgs e) { - listbox.SelectedIndex = 0; + treeview.SelectObject(_menus.FirstOrDefault()); } private void Button_Click(object sender, RoutedEventArgs e) @@ -74,17 +133,33 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo ContentControl.Content = control; } else - ContentControl.Content = null; + { + ContentControl.Content = new Controls.NotDoneYetControl(); + } } - private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) + private void treeview_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!IsLoaded) return; - var tag = listbox.SelectedItem as string; - - ShowContent(tag); + if (e.NewValue is MenuItemViewModel menuItemViewModel && menuItemViewModel.Children == null) + { + ShowContent(menuItemViewModel.Title); + } } } -} + + public class MenuItemViewModel + { + public string Title + { + get; set; + } + + public List Children + { + get; set; + } + } +} \ No newline at end of file diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Algorithms/ReconnectLinksToClosestPortsViewModel.cs similarity index 71% rename from AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs rename to AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Algorithms/ReconnectLinksToClosestPortsViewModel.cs index c560025..7cd1429 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Algorithms/ReconnectLinksToClosestPortsViewModel.cs @@ -12,26 +12,26 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels { Title = "Reconnect links"; Info = "An example of reconnecting links to the closest ports."; - - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - + DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); ReconnectLinksCommand = new SimpleCommand(ReconnectLinks); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Animations/LineAnimationViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Animations/LineAnimationViewModel.cs new file mode 100644 index 0000000..60837d0 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Animations/LineAnimationViewModel.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels +{ + class LineAnimationViewModel : BaseViewModel + { + public LineAnimationViewModel() + { + Title = "Line Animation"; + Info = "Line path motion animationr."; + + DiagramViewModel = new DiagramViewModel(); + DiagramViewModel.PageSizeType = PageSizeType.Custom; + DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; + + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; + DiagramViewModel.DirectAddItemCommand.Execute(node1); + + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; + DiagramViewModel.DirectAddItemCommand.Execute(node2); + + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; + DiagramViewModel.DirectAddItemCommand.Execute(node3); + + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + connector1.ColorViewModel.LineDashStyle = LineDashStyle.Dash1; + connector1.ColorViewModel.LineAnimation = LineAnimation.DashAnimation; + DiagramViewModel.DirectAddItemCommand.Execute(connector1); + + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + connector2.ColorViewModel.LineDashStyle = LineDashStyle.Dash1; + connector2.ColorViewModel.LineAnimation = LineAnimation.DashAnimation; + DiagramViewModel.DirectAddItemCommand.Execute(connector2); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Animations/PathAnimationViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Animations/PathAnimationViewModel.cs new file mode 100644 index 0000000..59691d3 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Animations/PathAnimationViewModel.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels +{ + class PathAnimationViewModel : BaseViewModel + { + public PathAnimationViewModel() + { + Title = "Path Animation"; + Info = "Line flow motion animation."; + + DiagramViewModel = new DiagramViewModel(); + DiagramViewModel.PageSizeType = PageSizeType.Custom; + DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; + + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; + DiagramViewModel.DirectAddItemCommand.Execute(node1); + + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; + DiagramViewModel.DirectAddItemCommand.Execute(node2); + + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; + DiagramViewModel.DirectAddItemCommand.Execute(node3); + + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + connector1.ColorViewModel.LineAnimation = LineAnimation.PathAnimation; + DiagramViewModel.DirectAddItemCommand.Execute(connector1); + + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + connector2.ColorViewModel.LineAnimation = LineAnimation.PathAnimation; + DiagramViewModel.DirectAddItemCommand.Execute(connector2); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs index 01574ea..bad80a8 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs @@ -6,14 +6,6 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels { class BaseViewModel : BindableBase { - protected IDiagramServiceProvider _service - { - get - { - return DiagramServicesProvider.Instance.Provider; - } - } - public DiagramViewModel DiagramViewModel { get; set; @@ -28,15 +20,5 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels { get; set; } - - public int Index - { - get; set; - } - - public int ParentIndex - { - get; set; - } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomDesignerItemViewModel.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/CustomDesignerItemViewModel.xaml similarity index 100% rename from AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomDesignerItemViewModel.xaml rename to AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/CustomDesignerItemViewModel.xaml diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/CustomLinkViewModel.cs similarity index 71% rename from AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs rename to AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/CustomLinkViewModel.cs index 40c72fc..85101dd 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/CustomLinkViewModel.cs @@ -6,29 +6,29 @@ using System.Windows; namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels { - class ThickLinkViewModel : BaseViewModel + class CustomLinkViewModel : BaseViewModel { - public ThickLinkViewModel() + public CustomLinkViewModel() { Title = "Custom link"; Info = "Creating your own custom links is very easy!"; - - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - + DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); connector1.ColorViewModel.LineWidth = 6; connector1.ColorViewModel.LineColor.BrushType = BrushType.LinearGradientBrush; connector1.ColorViewModel.LineColor.GradientStop = new ObservableCollection(); @@ -36,7 +36,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels connector1.ColorViewModel.LineColor.GradientStop.Add(new GradientStop(System.Windows.Media.Colors.Gray, 1)); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); connector2.ColorViewModel.LineWidth = 6; connector2.ColorViewModel.LineColor.Color = System.Windows.Media.Colors.Blue; DiagramViewModel.DirectAddItemCommand.Execute(connector2); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/CustomNodeViewModel.cs similarity index 85% rename from AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs rename to AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/CustomNodeViewModel.cs index c136b60..4a703a3 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/CustomNodeViewModel.cs @@ -13,13 +13,13 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Custom node"; Info = "Creating your own custom design is very easy!"; - //_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center; DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center; DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); @@ -42,7 +42,12 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels public class CustomDesignerItemViewModel : DesignerItemViewModelBase { - public CustomDesignerItemViewModel() : base() + public CustomDesignerItemViewModel() : this(null) + { + + } + + public CustomDesignerItemViewModel(IDiagramViewModel root) : base(root) { } @@ -62,9 +67,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels return new DesignerItemBase(this, Answer); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); this.ItemWidth = 150; this.ItemHeight = 80; @@ -77,9 +82,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels connectors.Add(new FullyCreatedConnectorInfo(this, ConnectorOrientation.Bottom)); } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is DesignerItemBase designer) { diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs index cebd8cb..e6b156c 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs @@ -12,25 +12,25 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Simple"; Info = "A simple example of AIStudio.Wpf.DiagramDesigner."; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); DiagramViewModel.GroupCommand.Execute(new List { node1, node2 }); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs index 546ad16..b7bc697 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs @@ -12,52 +12,52 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Link Labels"; Info = "Labels help you show more information through out a link. You can specify a distance or an offset." + "The content of the labels is still limited because of Blazor's poor SVG support."; - - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - + DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50 }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 50 }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 50, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); connector1.AddLabel("Content"); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 160, Text = "1" }; + node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 160, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 160, Text = "2" }; + node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 160, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); connector1.AddLabel("0.25", 0.3); connector1.AddLabel("0.75", 0.7); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 270, Text = "1" }; + node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 270, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 270, Text = "2" }; + node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 270, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); connector1.AddLabel("50", 50); connector1.AddLabel("-50", -50); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 380, Text = "1" }; + node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 380, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 380, Text = "2" }; + node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 380, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); connector1.AddLabel("(0,-20)", 50, new Point(0, -20)); connector1.AddLabel("(0,20)", -50, new Point(0, 20)); DiagramViewModel.DirectAddItemCommand.Execute(connector1); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs index ab83afd..3eb811c 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs @@ -12,67 +12,67 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Link Markers"; Info = "Markers are SVG Paths that you can put at the beginning or at the end of your links."; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 50, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 50, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); connector1.ShapeViewModel.SourceMarker = LinkMarker.Arrow; connector1.ShapeViewModel.SinkMarker = LinkMarker.Arrow; connector1.AddLabel("Arrow"); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 160, Text = "1" }; + node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 160, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 160, Text = "2" }; + node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 160, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); connector1.ShapeViewModel.SourceMarker = LinkMarker.Circle; connector1.ShapeViewModel.SinkMarker = LinkMarker.Circle; connector1.AddLabel("Circle"); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 270, Text = "1" }; + node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 270, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 270, Text = "2" }; + node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 270, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); connector1.ShapeViewModel.SourceMarker = LinkMarker.Square; connector1.ShapeViewModel.SinkMarker = LinkMarker.Square; connector1.AddLabel("Square"); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 380, Text = "1" }; + node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 380, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 380, Text = "2" }; + node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 380, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); connector1.ShapeViewModel.SourceMarker = LinkMarker.NewRectangle(10, 20); connector1.ShapeViewModel.SinkMarker = LinkMarker.NewArrow(20, 10); connector1.AddLabel("Factory"); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 490, Text = "1" }; + node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 490, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - node2 = new DefaultDesignerItemViewModel() { Left = 400, Top = 490, Text = "2" }; + node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 490, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); connector1.ShapeViewModel.SourceMarker = new LinkMarker("M 0 -8 L 3 -8 3 8 0 8 z M 4 -8 7 -8 7 8 4 8 z M 8 -8 16 0 8 8 z", 16, ArrowPathStyle.Arrow, ArrowSizeStyle.ExtraLarge); connector1.ShapeViewModel.SinkMarker = new LinkMarker("M 0 -8 L 8 -8 4 0 8 8 0 8 4 0 z", 8, ArrowPathStyle.Arrow, ArrowSizeStyle.Small); connector1.AddLabel("Custom"); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs index 26f281f..b5c9ed6 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs @@ -13,26 +13,26 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Info = "Path generators are functions that take as input the calculated route and output SVG paths, " + "alongside the markers positions and their angles. There are currently two generators: Straight and Smooth."; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 80, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 80, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 350, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 350, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 400, Top = 100, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 100, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal); connector1.AddLabel("Straight"); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); connector2.AddLabel("Smooth"); DiagramViewModel.DirectAddItemCommand.Execute(connector2); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs index e3570b8..aa17e0b 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs @@ -13,26 +13,26 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Info = "Routers are functions that take as input the link's vertices and can add points in between. " + "There are currently two routers: Normal and Orthogonal."; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 80, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 80, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 350, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 350, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 350, Top = 100, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 350, Top = 100, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); connector1.AddLabel("Normal"); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); connector2.AddLabel("Orthogonal"); DiagramViewModel.DirectAddItemCommand.Execute(connector2); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs index 5edf68a..faff78f 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs @@ -12,20 +12,20 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Link Snapping"; Info = "While dragging a new link, it will try to find (and link) to the closest target within a radius."; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); DiagramViewModel.DrawModeViewModel = new DrawModeViewModel() { EnableSnapping = true }; + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); DiagramViewModel.ClearSelectedItemsCommand.Execute(null); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs index 7243acd..75d0f39 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs @@ -12,29 +12,29 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Link Vertices"; Info = "Click on a link to create a vertex. Double click on a vertex to delete it. " + "You can drag the vertices around."; - - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - + DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 80, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 80, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 200, Top = 350, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 200, Top = 350, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 400, Top = 100, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 400, Top = 100, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal); connector1.AddLabel("Content"); connector1.AddVertex(new Point(221, 112.5)); connector1.AddVertex(new Point(111, 291)); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); connector2.AddLabel("Content"); connector2.AddVertex(new Point(400, 324)); connector2.AddVertex(new Point(326, 180)); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs index e139c22..28132ff 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs @@ -15,35 +15,35 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels //"All the TOP ports are locked as well, so you can't create links from/to them, but you can from/to the others." + "Newly created links aren't locked, so they can be deleted."; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center; DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center; DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; //node1.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以 node1.IsReadOnly = true; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; //node2.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以 node2.IsReadOnly = true; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; //node3.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以 node3.IsReadOnly = true; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); //connector1.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以 connector1.IsReadOnly = true; DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); // connector2.LockObjectViewModel.LockObject.FirstOrDefault(p => p.LockFlag == LockFlag.All).IsChecked = true;//这个也可以 connector2.IsReadOnly = true; DiagramViewModel.DirectAddItemCommand.Execute(connector2); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs index a8c55b8..f10e124 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs @@ -13,27 +13,27 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Custom node"; Info = "Creating your own custom design is very easy!"; - //_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center; DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center; DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - PathItemViewModel node2 = new PathItemViewModel() { Left = 300, Top = 300, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" }; + PathItemViewModel node2 = new PathItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - PathItemViewModel node3 = new PathItemViewModel() { Left = 300, Top = 50, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" }; + PathItemViewModel node3 = new PathItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.TopConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.TopConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.BottomConnector, node3.BottomConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.BottomConnector, node3.BottomConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); DiagramViewModel.ClearSelectedItemsCommand.Execute(null); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs index 33e8914..347fd7c 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs @@ -12,22 +12,22 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Performance"; Info = "This diagram contains 100 nodes and 50 links"; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(1000, 1000); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; for (int r = 0; r < 10; r++) { for (int c = 0; c < 10; c += 2) { - var node1 = new DefaultDesignerItemViewModel() { Left = 10 + c * 10 + c * 120, Top = 10 + r * 100, Text = $"{r * 10 + c}" }; - var node2 = new DefaultDesignerItemViewModel { Left = 10 + (c + 1) * 130, Top = 10 + r * 100, Text = $"{r * 10 + c + 1}" }; + var node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 10 + c * 10 + c * 120, Top = 10 + r * 100, Text = $"{r * 10 + c}" }; + var node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 10 + (c + 1) * 130, Top = 10 + r * 100, Text = $"{r * 10 + c + 1}" }; DiagramViewModel.DirectAddItemCommand.Execute(new List { node1, node2 }); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector); DiagramViewModel.DirectAddItemCommand.Execute(connector1); } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs index e79cc18..6971607 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs @@ -12,25 +12,25 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Simple"; Info = "A simple example of AIStudio.Wpf.DiagramDesigner."; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); DiagramViewModel.ClearSelectedItemsCommand.Execute(null); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs index f7ab25d..5b3f230 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs @@ -12,27 +12,27 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Snap to Grid"; Info = "This diagram has a grid size of 100, moving nodes will make them automatically snap."; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center; DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center; DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); DiagramViewModel.ClearSelectedItemsCommand.Execute(null); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs index 73f5c97..4b0b508 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs @@ -12,25 +12,25 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Title = "Zoom"; Info = "Drag the upper-right scroll bar to make the canvas larger and smaller."; - _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + DiagramViewModel.ColorViewModel = new ColorViewModel(); + DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; DiagramViewModel.DirectAddItemCommand.Execute(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); - ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); DiagramViewModel.DirectAddItemCommand.Execute(connector1); - ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); DiagramViewModel.ClearSelectedItemsCommand.Execute(null); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/ReconnectLinksToClosestPortsView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Algorithms/ReconnectLinksToClosestPortsView.xaml similarity index 100% rename from AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/ReconnectLinksToClosestPortsView.xaml rename to AIStudio.Wpf.DiagramDesigner.Demo/Views/Algorithms/ReconnectLinksToClosestPortsView.xaml diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/ReconnectLinksToClosestPortsView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Algorithms/ReconnectLinksToClosestPortsView.xaml.cs similarity index 100% rename from AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/ReconnectLinksToClosestPortsView.xaml.cs rename to AIStudio.Wpf.DiagramDesigner.Demo/Views/Algorithms/ReconnectLinksToClosestPortsView.xaml.cs diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/LineAnimationView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/LineAnimationView.xaml new file mode 100644 index 0000000..f955442 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/LineAnimationView.xaml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/LineAnimationView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/LineAnimationView.xaml.cs new file mode 100644 index 0000000..8139475 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/LineAnimationView.xaml.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.Views +{ + /// + /// LineAnimationView.xaml 的交互逻辑 + /// + public partial class LineAnimationView : UserControl + { + public LineAnimationView() + { + InitializeComponent(); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/PathAnimationView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/PathAnimationView.xaml new file mode 100644 index 0000000..b10a08f --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/PathAnimationView.xaml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/PathAnimationView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/PathAnimationView.xaml.cs new file mode 100644 index 0000000..ac45fb6 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Animations/PathAnimationView.xaml.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.Views +{ + /// + /// PathAnimationView.xaml 的交互逻辑 + /// + public partial class PathAnimationView : UserControl + { + public PathAnimationView() + { + InitializeComponent(); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomGroupView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomGroupView.xaml new file mode 100644 index 0000000..9e1102d --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomGroupView.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomGroupView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomGroupView.xaml.cs new file mode 100644 index 0000000..87f77e8 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomGroupView.xaml.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.Views +{ + /// + /// CustomGroupView.xaml 的交互逻辑 + /// + public partial class CustomGroupView : UserControl + { + public CustomGroupView() + { + InitializeComponent(); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomLinkView.xaml similarity index 98% rename from AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml rename to AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomLinkView.xaml index 1c7f390..316ee1d 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/CustomLinkView.xaml @@ -1,4 +1,4 @@ - /// ThickLinkView.xaml 的交互逻辑 /// - public partial class ThickLinkView : UserControl + public partial class CustomLinkView : UserControl { - public ThickLinkView() + public CustomLinkView() { InitializeComponent(); } diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs index a0efb74..4e49b05 100644 --- a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs +++ b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs @@ -464,7 +464,7 @@ namespace AIStudio.Wpf.DiagramDesigner } else if (partialConnection.IsFullConnection) { - + partialConnection.RaiseFullConnection(); } else if (_service.DrawModeViewModel.GetDrawMode() == DrawMode.DirectLine && connectorsHit.Count() == 1) { diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/SelectableItemBase.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/SelectableItemBase.cs index 18afd9c..216698e 100644 --- a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/SelectableItemBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/SelectableItemBase.cs @@ -162,6 +162,12 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } + [XmlAttribute] + public LineAnimation LineAnimation + { + get; set; + } + public event PropertyChangedEventHandler PropertyChanged; } diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml index 08da5df..121533b 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml @@ -50,6 +50,7 @@ HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" + Visibility="{Binding Path=IsFullConnection, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" Style="{StaticResource ArrowStyle}"> @@ -68,6 +69,7 @@ HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" + Visibility="{Binding Path=IsFullConnection, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" Style="{StaticResource ArrowStyle}"> diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml.cs b/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml.cs index 9a52104..f73d07c 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml.cs +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml.cs @@ -52,7 +52,6 @@ namespace AIStudio.Wpf.DiagramDesigner { switch (e.PropertyName) { - case nameof(ConnectionViewModel.LineAnimation): case nameof(ConnectionViewModel.PathGeneratorResult): await DoAnimation(); break; @@ -65,7 +64,7 @@ namespace AIStudio.Wpf.DiagramDesigner if (this.DataContext is ConnectionViewModel connector && connector.IsFullConnection) { await System.Threading.Tasks.Task.Delay(100); - switch (connector.LineAnimation) + switch (connector.ColorViewModel.LineAnimation) { case LineAnimation.None: _story?.Stop(); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/ColorViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/ColorViewModel.cs index 82528bd..2941d40 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/ColorViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/ColorViewModel.cs @@ -137,6 +137,19 @@ namespace AIStudio.Wpf.DiagramDesigner } } } + + private LineAnimation _lineAnimation = LineAnimation.None; + public LineAnimation LineAnimation + { + get + { + return _lineAnimation; + } + set + { + SetProperty(ref _lineAnimation, value); + } + } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IColorViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IColorViewModel.cs index 5404069..40ca6ec 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IColorViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IColorViewModel.cs @@ -29,6 +29,10 @@ namespace AIStudio.Wpf.DiagramDesigner { get; set; } + LineAnimation LineAnimation + { + get; set; + } event PropertyChangedEventHandler PropertyChanged; } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs index abcbc82..ea1ce5b 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs @@ -15,24 +15,22 @@ namespace AIStudio.Wpf.DiagramDesigner { public class ConnectionViewModel : SelectableDesignerItemViewModelBase { - public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode, RouterMode routerMode) - { - Root = root; - PathMode = drawMode.ToString(); - RouterMode = routerMode.ToString(); - Init(sourceConnectorInfo, sinkConnectorInfo); - } - public ConnectionViewModel(FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode = DrawMode.ConnectingLineSmooth, RouterMode routerMode = AIStudio.Wpf.DiagramDesigner.RouterMode.RouterNormal) : this(null, sourceConnectorInfo, sinkConnectorInfo, drawMode, routerMode) { } + public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode = DrawMode.ConnectingLineSmooth, RouterMode routerMode = AIStudio.Wpf.DiagramDesigner.RouterMode.RouterNormal) : base(root) + { + PathMode = drawMode.ToString(); + RouterMode = routerMode.ToString(); + Init(sourceConnectorInfo, sinkConnectorInfo); + } + public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, FullyCreatedConnectorInfo sinkConnectorInfo, ConnectionItem designer) : base(root, designer) { PathMode = designer.PathMode; RouterMode = designer.RouterMode; - Init(sourceConnectorInfo, sinkConnectorInfo); } @@ -76,9 +74,9 @@ namespace AIStudio.Wpf.DiagramDesigner AddLabelCommand = new SimpleCommand(Command_Enable, para => AddLabel()); } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is ConnectionItem designer) { @@ -297,23 +295,6 @@ namespace AIStudio.Wpf.DiagramDesigner } } - - private LineAnimation _lineAnimation = LineAnimation.None; - [Browsable(true)] - [CanDo] - [StyleName("LineAnimationStyle")] - public LineAnimation LineAnimation - { - get - { - return _lineAnimation; - } - set - { - SetProperty(ref _lineAnimation, value); - } - } - public virtual Dictionary PropertiesSetting { get @@ -384,6 +365,11 @@ namespace AIStudio.Wpf.DiagramDesigner } } + public void RaiseFullConnection() + { + RaisePropertyChanged(nameof(IsFullConnection)); + } + public bool IsPortless => SourceConnectorInfo?.DataItem?.Connectors?.Count() == 0; #endregion @@ -506,6 +492,15 @@ namespace AIStudio.Wpf.DiagramDesigner } } } + else if (sender is ColorViewModel) + { + switch (e.PropertyName) + { + case nameof(ColorViewModel.LineAnimation): + RaisePropertyChanged(nameof(PathGeneratorResult)); + break; + } + } } private void UpdateArea() diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs index e785495..e029c4c 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs @@ -11,7 +11,12 @@ namespace AIStudio.Wpf.DiagramDesigner { public abstract class ConnectorInfoBase : SelectableViewModelBase { - public ConnectorInfoBase(ConnectorOrientation orientation) + public ConnectorInfoBase(ConnectorOrientation orientation) : this(null, orientation) + { + + } + + public ConnectorInfoBase(IDiagramViewModel root, ConnectorOrientation orientation) : base(root) { this.Orientation = orientation; } @@ -31,9 +36,9 @@ namespace AIStudio.Wpf.DiagramDesigner return new ConnectorInfoItemBase(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); ColorViewModel = new ColorViewModel() { @@ -42,9 +47,9 @@ namespace AIStudio.Wpf.DiagramDesigner }; } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is ConnectorInfoItemBase designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs index 038d644..e13a606 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs @@ -8,12 +8,16 @@ namespace AIStudio.Wpf.DiagramDesigner { public class ConnectorLabelModel : ConnectorPointModel, ISelectable { - public ConnectorLabelModel(ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null) + public ConnectorLabelModel(ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null) : this(null, connector, content, distance, offset) + { + } + + public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null) : base(root) { Parent = connector; Text = content; Distance = distance; - Offset = offset ?? new PointBase(); + Offset = offset ?? new PointBase(); } public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, SelectableItemBase designer) : base(root, designer) @@ -31,9 +35,9 @@ namespace AIStudio.Wpf.DiagramDesigner return new ConnectorLabelItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); ConnectorWidth = 30; ConnectorHeight = 30; @@ -41,9 +45,9 @@ namespace AIStudio.Wpf.DiagramDesigner DeleteLabelCommand = new SimpleCommand(Command_Enable, DeleteLabel); } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is ConnectorLabelItem designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorPointModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorPointModel.cs index a7ea667..130d4d2 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorPointModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorPointModel.cs @@ -11,9 +11,24 @@ namespace AIStudio.Wpf.DiagramDesigner { public class ConnectorPointModel : SelectableViewModelBase { - public ConnectorPointModel() + public ConnectorPointModel() : this(null) { - + + } + + public ConnectorPointModel(IDiagramViewModel root) : base(root) + { + + } + + public ConnectorPointModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) + { + + } + + public ConnectorPointModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) + { + } public ConnectorPointModel(PointBase point) : this() @@ -28,24 +43,14 @@ namespace AIStudio.Wpf.DiagramDesigner Y = y; } - public ConnectorPointModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) - { - - } - - public ConnectorPointModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) - { - - } - public override SelectableItemBase GetSerializableObject() { return new ConnectorPointItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); ColorViewModel = new ColorViewModel() { LineColor = new ColorObject() { Color = Color.FromArgb(0xAA, 0x00, 0x00, 0x80) }, @@ -53,9 +58,9 @@ namespace AIStudio.Wpf.DiagramDesigner }; } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is ConnectorPointItem designer) { @@ -78,7 +83,7 @@ namespace AIStudio.Wpf.DiagramDesigner } set { - if(SetProperty(ref _x, value)) + if (SetProperty(ref _x, value)) { RaisePropertyChanged(nameof(Left)); } @@ -138,15 +143,27 @@ namespace AIStudio.Wpf.DiagramDesigner private double connectorWidth = 8; public double ConnectorWidth { - get { return connectorWidth; } - set { connectorWidth = value; } + get + { + return connectorWidth; + } + set + { + connectorWidth = value; + } } private double connectorHeight = 8; public double ConnectorHeight { - get { return connectorHeight; } - set { connectorHeight = value; } + get + { + return connectorHeight; + } + set + { + connectorHeight = value; + } } public static ConnectorPointModel operator -(ConnectorPointModel a, ConnectorPointModel b) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorVertexModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorVertexModel.cs index 2ecb7d8..4125151 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorVertexModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorVertexModel.cs @@ -6,11 +6,15 @@ namespace AIStudio.Wpf.DiagramDesigner { public class ConnectorVertexModel : ConnectorPointModel { - public ConnectorVertexModel(ConnectionViewModel connector, PointBase? position = null) + public ConnectorVertexModel(ConnectionViewModel connector, PointBase? position = null) : this(null, connector, position) + { + } + + public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, PointBase? position = null) : base(root) { Parent = connector; X = position?.X ?? 0; - Y = position?.Y ?? 0; + Y = position?.Y ?? 0; } public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, SelectableItemBase designer) : base(root, designer) @@ -28,16 +32,16 @@ namespace AIStudio.Wpf.DiagramDesigner return new ConnectorVertexItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); DeleteVertexCommand = new SimpleCommand(Command_Enable, DeleteVertex); } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is ConnectorVertexItem designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs index 137843a..066ccee 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs @@ -11,7 +11,12 @@ namespace AIStudio.Wpf.DiagramDesigner public class FullyCreatedConnectorInfo : ConnectorInfoBase { public FullyCreatedConnectorInfo(DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0) - : base(orientation) + : this(null, dataItem, orientation, isInnerPoint, valueTypePoint) + { + } + + public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0) + : base(root, orientation) { this.Parent = dataItem; this.IsInnerPoint = isInnerPoint; @@ -45,9 +50,9 @@ namespace AIStudio.Wpf.DiagramDesigner return new FullyCreatedConnectorInfoItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); menuOptions = new List(); MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand); @@ -55,9 +60,9 @@ namespace AIStudio.Wpf.DiagramDesigner } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is FullyCreatedConnectorInfoItem designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/PartCreatedConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/PartCreatedConnectorInfo.cs index 72a33a9..f547590 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/PartCreatedConnectorInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/PartCreatedConnectorInfo.cs @@ -9,6 +9,18 @@ namespace AIStudio.Wpf.DiagramDesigner { public class PartCreatedConnectorInfo : ConnectorInfoBase { + public PartCreatedConnectorInfo(double X, double Y) : this(null, X, Y) + { + + } + + public PartCreatedConnectorInfo(IDiagramViewModel root, double X, double Y) : base(root, ConnectorOrientation.None) + { + this.position = new PointBase(X, Y); + } + + + private PointBase position; public override PointBase Position { @@ -18,9 +30,6 @@ namespace AIStudio.Wpf.DiagramDesigner } } - public PartCreatedConnectorInfo(double X, double Y) : base(ConnectorOrientation.None) - { - this.position = new PointBase(X, Y); - } + } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs index 8e841df..72e0b83 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs @@ -13,7 +13,12 @@ namespace AIStudio.Wpf.DiagramDesigner { public abstract class DesignerItemViewModelBase : SelectableDesignerItemViewModelBase { - public DesignerItemViewModelBase() : base() + public DesignerItemViewModelBase() : this(null) + { + + } + + public DesignerItemViewModelBase(IDiagramViewModel root) : base(root) { ShapeDefiner = Shapes.Rectangle; } @@ -33,16 +38,16 @@ namespace AIStudio.Wpf.DiagramDesigner return new DesignerItemBase(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); InitConnector(); } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is DesignerItemBase designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs index a0b3fcf..fed0785 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs @@ -9,14 +9,19 @@ namespace AIStudio.Wpf.DiagramDesigner { public class GroupDesignerItemViewModel : DesignerItemViewModelBase { - public GroupDesignerItemViewModel() : base() + public GroupDesignerItemViewModel() : this(null) + { + + } + + public GroupDesignerItemViewModel(IDiagramViewModel root) : base(root) { } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); this.IsHitTestVisible = false; } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs index 6380556..97a7e12 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs @@ -22,8 +22,12 @@ namespace AIStudio.Wpf.DiagramDesigner public abstract class SelectableDesignerItemViewModelBase : SelectableViewModelBase, ISelectItems, ISelectable, IGroupable { + public SelectableDesignerItemViewModelBase() : this(null) + { - public SelectableDesignerItemViewModelBase():base() + } + + public SelectableDesignerItemViewModelBase(IDiagramViewModel root) :base(root) { } @@ -38,17 +42,17 @@ namespace AIStudio.Wpf.DiagramDesigner } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); SelectItemCommand = new SimpleCommand(Command_Enable, ExecuteSelectItemCommand); EditCommand = new SimpleCommand(Command_Enable, ExecuteEditCommand); } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); } public virtual bool InitData() diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs index 41e8f22..d11645b 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs @@ -20,34 +20,38 @@ namespace AIStudio.Wpf.DiagramDesigner } } - public SelectableViewModelBase() + public SelectableViewModelBase() : this(null) { - Init(); + + } + + public SelectableViewModelBase(IDiagramViewModel root) + { + Init(root); (FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged; } public SelectableViewModelBase(IDiagramViewModel root, SelectableItemBase designer) { - Init(); - LoadDesignerItemViewModel(root, designer); + Init(root); + LoadDesignerItemViewModel(designer); (FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged; } public SelectableViewModelBase(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) { - Init(); - + Init(root); SelectableItemBase obj = SerializeHelper.DeserializeObject(serializableItem.SerializableTypeName, serializableItem.SerializableString, serializableType); - LoadDesignerItemViewModel(root, obj); + LoadDesignerItemViewModel(obj); (FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged; - } + } public virtual SerializableItem ToSerializableItem(string serializableType) { var obj = GetSerializableObject(); if (obj != null) { - return new SerializableItem() { ModelTypeName = this.GetType().FullName, SerializableTypeName = obj.GetType().FullName, SerializableString = SerializeHelper.SerializeObject(obj, serializableType) }; + return new SerializableItem() { ModelTypeName = this.GetType().FullName, SerializableTypeName = obj.GetType().FullName, SerializableString = SerializeHelper.SerializeObject(obj, serializableType) }; } else { @@ -60,8 +64,10 @@ namespace AIStudio.Wpf.DiagramDesigner return null; } - protected virtual void Init() + protected virtual void Init(IDiagramViewModel root) { + Root = root; + if (Root?.ColorViewModel != null) { this.ColorViewModel = CopyHelper.Mapper(Root.ColorViewModel); @@ -92,10 +98,8 @@ namespace AIStudio.Wpf.DiagramDesigner LockObjectViewModel = new LockObjectViewModel(); } - protected virtual void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected virtual void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - this.Root = root; - this.Id = designerbase.Id; this.ParentId = designerbase.ParentId; this.IsGroup = designerbase.IsGroup; @@ -211,7 +215,7 @@ namespace AIStudio.Wpf.DiagramDesigner return _isHitTestVisible; } set - { + { if (SetProperty(ref _isHitTestVisible, value)) { RaisePropertyChanged("IsReadOnly"); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/DefaultDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/DefaultDesignerItemViewModel.cs index 0594d4d..20e8f0f 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/DefaultDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/DefaultDesignerItemViewModel.cs @@ -7,7 +7,12 @@ namespace AIStudio.Wpf.DiagramDesigner { public class DefaultDesignerItemViewModel : DesignerItemViewModelBase { - public DefaultDesignerItemViewModel() : base() + public DefaultDesignerItemViewModel() : this(null) + { + + } + + public DefaultDesignerItemViewModel(IDiagramViewModel root) : base(root) { } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/GifImageItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/GifImageItemViewModel.cs index 98263fd..9085945 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/GifImageItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/GifImageItemViewModel.cs @@ -17,23 +17,24 @@ namespace AIStudio.Wpf.DiagramDesigner { //private IDisposable propertyChangedSubscription; //private IDisposable connectorsChangedSubscription; - - public SimpleCommand AddItemCommand { get; private set; } - public SimpleCommand ImageSwitchCommand { get; private set; } - - public GifImageItemViewModel() : base() + public GifImageItemViewModel() : this(null) { + + } + public GifImageItemViewModel(IDiagramViewModel root) : base(root) + { + } - public GifImageItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) + public GifImageItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { - + } public GifImageItemViewModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) { - + } public override SelectableItemBase GetSerializableObject() @@ -41,26 +42,26 @@ namespace AIStudio.Wpf.DiagramDesigner return new MediaDesignerItem(this); } - protected override void Init() - { - AddItemCommand = new SimpleCommand(Command_Enable, ExecuteAddItemCommand); - ImageSwitchCommand = new SimpleCommand(Command_Enable, ExecuteImageSwitchCommand); - - base.Init(); + protected override void Init(IDiagramViewModel root) + { + base.Init(root); ClearConnectors(); //propertyChangedSubscription = WhenPropertyChanged.Where(o => o.ToString() == "Left" || o.ToString() == "Top" || o.ToString() == "ItemWidth" || o.ToString() == "ItemHeight").Subscribe(ChangeImageElement); //connectorsChangedSubscription = WhenConnectorsChanged.Subscribe(OnConnectorsChanged); BuildMenuOptions(); + + AddItemCommand = new SimpleCommand(Command_Enable, ExecuteAddItemCommand); + ImageSwitchCommand = new SimpleCommand(Command_Enable, ExecuteImageSwitchCommand); } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); - if (designerbase is MediaDesignerItem designer) + if (designerbase is MediaDesignerItem designer) { this.Icon = designer.Icon; foreach (var connector in designer.Connectors) @@ -74,12 +75,25 @@ namespace AIStudio.Wpf.DiagramDesigner private bool _shouldInsertAnchor; public bool ShouldInsertAnchor { - get { return _shouldInsertAnchor; } + get + { + return _shouldInsertAnchor; + } set { SetProperty(ref _shouldInsertAnchor, value); } - } + } + + public SimpleCommand AddItemCommand + { + get; private set; + } + + public SimpleCommand ImageSwitchCommand + { + get; private set; + } private string dir = System.AppDomain.CurrentDomain.BaseDirectory + "Images\\Gifs"; private void BuildMenuOptions() diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/ImageItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/ImageItemViewModel.cs index a671a34..0981de3 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/ImageItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/ImageItemViewModel.cs @@ -15,12 +15,17 @@ namespace AIStudio.Wpf.DiagramDesigner { public class ImageItemViewModel : DesignerItemViewModelBase { - private static readonly string filter = "图片|*.bmp;*.jpg;*.jpeg;*.gif;*.png"; - public ImageItemViewModel() : base() + + public ImageItemViewModel() : this(null) { } + public ImageItemViewModel(IDiagramViewModel root) : base(root) + { + + } + public ImageItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -36,9 +41,9 @@ namespace AIStudio.Wpf.DiagramDesigner return new ImageDesignerItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); this.PropertyChanged += ImageItemViewModel_PropertyChanged; @@ -110,9 +115,9 @@ namespace AIStudio.Wpf.DiagramDesigner } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is ImageDesignerItem designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LinkPointDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LinkPointDesignerItemViewModel.cs index 594eba6..97c24a6 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LinkPointDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LinkPointDesignerItemViewModel.cs @@ -5,23 +5,20 @@ namespace AIStudio.Wpf.DiagramDesigner { public class LinkPointDesignerItemViewModel : DesignerItemViewModelBase { - public Point CurrentLocation + public LinkPointDesignerItemViewModel(Point location) : this(null, location) { - get - { - return new Point() { X = Left + ItemWidth / 2, Y = Top + ItemHeight / 2 }; - } + } - public LinkPointDesignerItemViewModel(Point location) : base() + public LinkPointDesignerItemViewModel(IDiagramViewModel root, Point location) : base(root) { Left = Math.Max(0, location.X - ItemWidth / 2); Top = Math.Max(0, location.Y - ItemHeight / 2); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); this.ClearConnectors(); this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true)); @@ -29,5 +26,13 @@ namespace AIStudio.Wpf.DiagramDesigner ItemWidth = 5; ItemHeight = 5; } + + public Point CurrentLocation + { + get + { + return new Point() { X = Left + ItemWidth / 2, Y = Top + ItemHeight / 2 }; + } + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LogicalGateItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LogicalGateItemViewModelBase.cs index 1dfd2fb..547d333 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LogicalGateItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LogicalGateItemViewModelBase.cs @@ -9,13 +9,18 @@ using AIStudio.Wpf.DiagramDesigner.Models; namespace AIStudio.Wpf.DiagramDesigner { - public class LogicalGateItemViewModelBase : DesignerItemViewModelBase + public abstract class LogicalGateItemViewModelBase : DesignerItemViewModelBase { public SimpleCommand AddInputCommand { get; private set; } public SimpleCommand AddOutputCommand { get; private set; } - public LogicalGateItemViewModelBase(LogicalType logicalType) : base() + public LogicalGateItemViewModelBase(LogicalType logicalType) : this(null, logicalType) + { + + } + + public LogicalGateItemViewModelBase(IDiagramViewModel root, LogicalType logicalType) : base(root) { this.LogicalType = logicalType; @@ -89,14 +94,14 @@ namespace AIStudio.Wpf.DiagramDesigner return new LogicalGateDesignerItemBase(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { ShowRotate = false; ShowArrow = false; AddInputCommand = new SimpleCommand(Command_Enable, para => ExecuteAddInput(para)); AddOutputCommand = new SimpleCommand(Command_Enable, para => ExecuteAddOutput(para)); - base.Init(); + base.Init(root); } private void BuildMenuOptions() @@ -133,9 +138,9 @@ namespace AIStudio.Wpf.DiagramDesigner } } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is LogicalGateDesignerItemBase designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/MediaItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/MediaItemViewModel.cs index b351bb4..5d52776 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/MediaItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/MediaItemViewModel.cs @@ -10,11 +10,16 @@ namespace AIStudio.Wpf.DiagramDesigner { protected virtual string Filter { get; set; } = "媒体·|*.*"; - public MediaItemViewModel() : base() + public MediaItemViewModel() : this(null) { } + public MediaItemViewModel(IDiagramViewModel root) : base(root) + { + + } + public MediaItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -30,17 +35,17 @@ namespace AIStudio.Wpf.DiagramDesigner return new MediaDesignerItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); BuildMenuOptions(); } - protected override void LoadDesignerItemViewModel(IDiagramViewModel parent, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(parent, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is MediaDesignerItem designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/PointDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/PointDesignerItemViewModel.cs index 01c07b6..4f8df09 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/PointDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/PointDesignerItemViewModel.cs @@ -5,6 +5,28 @@ namespace AIStudio.Wpf.DiagramDesigner { public class PointDesignerItemViewModel : DesignerItemViewModelBase { + public PointDesignerItemViewModel(Point location) : this(null, location) + { + + } + + public PointDesignerItemViewModel(IDiagramViewModel root, Point location) : base(root) + { + Left = Math.Max(0, location.X - ItemWidth / 2); + Top = Math.Max(0, location.Y - ItemHeight / 2); + } + + protected override void Init(IDiagramViewModel root) + { + base.Init(root); + + this.ClearConnectors(); + this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true)); + + ItemWidth = 5; + ItemHeight = 5; + } + private bool _showConnectors = false; public new bool ShowConnectors { @@ -25,24 +47,5 @@ namespace AIStudio.Wpf.DiagramDesigner return new Point() { X = Left + ItemWidth / 2, Y = Top + ItemHeight / 2 }; } } - - public PointDesignerItemViewModel(Point location) : base() - { - Left = Math.Max(0, location.X - ItemWidth / 2); - Top = Math.Max(0, location.Y - ItemHeight / 2); - } - - protected override void Init() - { - base.Init(); - - this.ClearConnectors(); - this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true)); - - ItemWidth = 5; - ItemHeight = 5; - } - - } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/ShapeDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/ShapeDesignerItemViewModel.cs index 50d387d..0076f1e 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/ShapeDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/ShapeDesignerItemViewModel.cs @@ -11,7 +11,33 @@ namespace AIStudio.Wpf.DiagramDesigner { public class ShapeDesignerItemViewModel : DesignerItemViewModelBase { - public List PointDesignerItemViewModels { get; set; } + public ShapeDesignerItemViewModel(DrawMode drawMode, List points) : this(null, drawMode, points) + { + } + + public ShapeDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List points) : base(root) + { + DrawMode = drawMode; + ConnectionPoints = points; + + ItemWidth = ConnectionPoints.Max(p => p.X) - ConnectionPoints.Min(p => p.X); + ItemHeight = ConnectionPoints.Max(p => p.Y) - ConnectionPoints.Min(p => p.Y); + Left = ConnectionPoints.Min(p => p.X); + Top = ConnectionPoints.Min(p => p.Y); + + PointDesignerItemViewModels = new List(); + ConnectionPoints.ForEach((Action)(p => { + var item = new PointDesignerItemViewModel(p); + PointDesignerItemViewModels.Add((PointDesignerItemViewModel)item); + })); + + PointDesignerItemViewModels.ForEach(p => p.PropertyChanged += PointDesignerItemViewModel_PropertyChanged); + } + + public List PointDesignerItemViewModels + { + get; set; + } private List _connectionPoints; public List ConnectionPoints @@ -25,7 +51,10 @@ namespace AIStudio.Wpf.DiagramDesigner SetProperty(ref _connectionPoints, value); } } - public DrawMode DrawMode { get; set; } + public DrawMode DrawMode + { + get; set; + } private bool _showConnectors = false; public new bool ShowConnectors @@ -46,26 +75,9 @@ namespace AIStudio.Wpf.DiagramDesigner } } - public SimpleCommand MenuItemCommand { get; private set; } - - public ShapeDesignerItemViewModel(DrawMode drawMode, List points) : base() + public SimpleCommand MenuItemCommand { - DrawMode = drawMode; - ConnectionPoints = points; - - ItemWidth = ConnectionPoints.Max(p => p.X) - ConnectionPoints.Min(p => p.X); - ItemHeight = ConnectionPoints.Max(p => p.Y) - ConnectionPoints.Min(p => p.Y); - Left = ConnectionPoints.Min(p => p.X); - Top = ConnectionPoints.Min(p => p.Y); - - PointDesignerItemViewModels = new List(); - ConnectionPoints.ForEach((Action)(p => - { - var item = new PointDesignerItemViewModel(p); - PointDesignerItemViewModels.Add((PointDesignerItemViewModel)item); - })); - - PointDesignerItemViewModels.ForEach(p => p.PropertyChanged += PointDesignerItemViewModel_PropertyChanged); + get; private set; } private void PointDesignerItemViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) @@ -85,10 +97,10 @@ namespace AIStudio.Wpf.DiagramDesigner Top = ConnectionPoints.Min(p => p.Y); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand); - base.Init(); + base.Init(root); this.ClearConnectors(); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/TextDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/TextDesignerItemViewModel.cs index 78e2152..ad3fb84 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/TextDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/TextDesignerItemViewModel.cs @@ -7,7 +7,12 @@ namespace AIStudio.Wpf.DiagramDesigner { public class TextDesignerItemViewModel : DesignerItemViewModelBase { - public TextDesignerItemViewModel() + public TextDesignerItemViewModel() : this(null) + { + + } + + public TextDesignerItemViewModel(IDiagramViewModel root) : base(root) { } @@ -27,9 +32,9 @@ namespace AIStudio.Wpf.DiagramDesigner return new TextDesignerItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); this.ItemWidth = 150; this.ClearConnectors(); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/VideoItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/VideoItemViewModel.cs index 9939eeb..abeb2d9 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/VideoItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/VideoItemViewModel.cs @@ -10,16 +10,20 @@ namespace AIStudio.Wpf.DiagramDesigner { protected override string Filter { get; set; } = "视频|*.wmv;*.asf;*.asx;*.rm;*.rmvb;*.mp4;*.3gp;*.mov;*.m4v;*.avi;*.dat;*.mkv;*.flv;*.vob"; - public VideoItemViewModel() : base() + public VideoItemViewModel() : this(null) { } + public VideoItemViewModel(IDiagramViewModel root) : base(root) + { + + } + public VideoItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { } - public VideoItemViewModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) { diff --git a/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs b/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs index c291c6f..53e024b 100644 --- a/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs +++ b/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs @@ -12,7 +12,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels { protected IUIVisualizerService visualiserService; - public FlowNode(NodeKinds kind) : base() + public FlowNode(NodeKinds kind) : this(null, kind) + { + + } + + public FlowNode(IDiagramViewModel root, NodeKinds kind) : base(root) { Kind = kind; Text = Kind.GetDescription(); @@ -33,9 +38,9 @@ namespace AIStudio.Wpf.Flowchart.ViewModels return new FlowNodeDesignerItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); ShowRotate = false; ShowText = true; @@ -44,9 +49,9 @@ namespace AIStudio.Wpf.Flowchart.ViewModels visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is FlowNodeDesignerItem designer) { @@ -125,7 +130,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels public class StartFlowNode : FlowNode { - public StartFlowNode() : base(NodeKinds.Start) + public StartFlowNode() : this(null) + { + + } + + public StartFlowNode(IDiagramViewModel root) : base(root, NodeKinds.Start) { } @@ -143,7 +153,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels public class EndFlowNode : FlowNode { - public EndFlowNode() : base(NodeKinds.End) + public EndFlowNode() : this(null) + { + + } + + public EndFlowNode(IDiagramViewModel root) : base(root, NodeKinds.End) { } @@ -161,7 +176,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels public class DecideFlowNode : FlowNode { - public DecideFlowNode() : base(NodeKinds.Decide) + public DecideFlowNode() : this(null) + { + + } + + public DecideFlowNode(IDiagramViewModel root) : base(root, NodeKinds.Decide) { } @@ -179,7 +199,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels public class COBeginFlowNode : FlowNode { - public COBeginFlowNode() : base(NodeKinds.COBegin) + public COBeginFlowNode() : this(null) + { + + } + + public COBeginFlowNode(IDiagramViewModel root) : base(root, NodeKinds.COBegin) { } @@ -197,7 +222,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels public class COEndFlowNode : FlowNode { - public COEndFlowNode() : base(NodeKinds.COEnd) + public COEndFlowNode() : this(null) + { + + } + + public COEndFlowNode(IDiagramViewModel root) : base(root, NodeKinds.COEnd) { } diff --git a/AIStudio.Wpf.Flowchart/ViewModels/MiddleFlowNode.cs b/AIStudio.Wpf.Flowchart/ViewModels/MiddleFlowNode.cs index 4a2204a..590195b 100644 --- a/AIStudio.Wpf.Flowchart/ViewModels/MiddleFlowNode.cs +++ b/AIStudio.Wpf.Flowchart/ViewModels/MiddleFlowNode.cs @@ -9,7 +9,12 @@ namespace AIStudio.Wpf.Flowchart.ViewModels { public class MiddleFlowNode : FlowNode { - public MiddleFlowNode() : base(NodeKinds.Middle) + public MiddleFlowNode() : this(null) + { + + } + + public MiddleFlowNode(IDiagramViewModel root) : base(root, NodeKinds.Middle) { } diff --git a/AIStudio.Wpf.Logical/ViewModels/LogicalGateItemViewModel.cs b/AIStudio.Wpf.Logical/ViewModels/LogicalGateItemViewModel.cs index 959c476..7a6692b 100644 --- a/AIStudio.Wpf.Logical/ViewModels/LogicalGateItemViewModel.cs +++ b/AIStudio.Wpf.Logical/ViewModels/LogicalGateItemViewModel.cs @@ -8,10 +8,15 @@ using AIStudio.Wpf.DiagramDesigner.Services; namespace AIStudio.Wpf.Logical.ViewModels { - public class LogicalGateItemViewModel : LogicalGateItemViewModelBase + public abstract class LogicalGateItemViewModel : LogicalGateItemViewModelBase { protected IUIVisualizerService visualiserService; - public LogicalGateItemViewModel(LogicalType logicalType) : base(logicalType) + public LogicalGateItemViewModel(LogicalType logicalType) : this(null, logicalType) + { + ColorViewModel.FillColor.Color = Colors.Orange; + } + + public LogicalGateItemViewModel(IDiagramViewModel root, LogicalType logicalType) : base(root, logicalType) { ColorViewModel.FillColor.Color = Colors.Orange; } @@ -31,16 +36,16 @@ namespace AIStudio.Wpf.Logical.ViewModels return new LogicalGateDesignerItemBase(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is LogicalGateDesignerItemBase designer) { @@ -72,7 +77,11 @@ namespace AIStudio.Wpf.Logical.ViewModels public class AddGateItemViewModel : LogicalGateItemViewModel { - public AddGateItemViewModel() : base(LogicalType.ADD) + public AddGateItemViewModel() : this(null) + { + } + + public AddGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ADD) { } @@ -88,7 +97,11 @@ namespace AIStudio.Wpf.Logical.ViewModels public class SubtractGateItemViewModel : LogicalGateItemViewModel { - public SubtractGateItemViewModel() : base(LogicalType.SUB) + public SubtractGateItemViewModel() : this(null) + { + } + + public SubtractGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SUB) { } @@ -104,7 +117,11 @@ namespace AIStudio.Wpf.Logical.ViewModels public class MultiplyGateItemViewModel : LogicalGateItemViewModel { - public MultiplyGateItemViewModel() : base(LogicalType.MUL) + public MultiplyGateItemViewModel() : this(null) + { + } + + public MultiplyGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.MUL) { } @@ -121,7 +138,11 @@ namespace AIStudio.Wpf.Logical.ViewModels public class DivideGateItemViewModel : LogicalGateItemViewModel { - public DivideGateItemViewModel() : base(LogicalType.DIV) + public DivideGateItemViewModel() : this(null) + { + } + + public DivideGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.DIV) { } @@ -137,11 +158,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class AverageGateItemViewModel : LogicalGateItemViewModel { - public AverageGateItemViewModel() : base(LogicalType.AVE) + public AverageGateItemViewModel() : this(null) { } + public AverageGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.AVE) + { + } + public AverageGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -155,11 +180,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class MODGateItemViewModel : LogicalGateItemViewModel { - public MODGateItemViewModel() : base(LogicalType.MOD) + public MODGateItemViewModel() : this(null) { } + public MODGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.MOD) + { + } + public MODGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -173,11 +202,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class ANDGateItemViewModel : LogicalGateItemViewModel { - public ANDGateItemViewModel() : base(LogicalType.AND) + public ANDGateItemViewModel() : this(null) { } + public ANDGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.AND) + { + } + public ANDGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -191,11 +224,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class ORGateItemViewModel : LogicalGateItemViewModel { - public ORGateItemViewModel() : base(LogicalType.OR) + public ORGateItemViewModel() : this(null) { } + public ORGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.OR) + { + } + public ORGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -209,11 +246,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class XORGateItemViewModel : LogicalGateItemViewModel { - public XORGateItemViewModel() : base(LogicalType.XOR) + public XORGateItemViewModel() : this(null) { } + public XORGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.XOR) + { + } + public XORGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -227,11 +268,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class NOTGateItemViewModel : LogicalGateItemViewModel { - public NOTGateItemViewModel() : base(LogicalType.NOT) + public NOTGateItemViewModel() : this(null) { } + public NOTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.NOT) + { + } + public NOTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -245,11 +290,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class SHLGateItemViewModel : LogicalGateItemViewModel { - public SHLGateItemViewModel() : base(LogicalType.SHL) + public SHLGateItemViewModel() : this(null) { } + public SHLGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SHL) + { + } + public SHLGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -263,11 +312,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class SHRGateItemViewModel : LogicalGateItemViewModel { - public SHRGateItemViewModel() : base(LogicalType.SHR) + public SHRGateItemViewModel() : this(null) { } + public SHRGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SHR) + { + } + public SHRGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -281,11 +334,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class ROLGateItemViewModel : LogicalGateItemViewModel { - public ROLGateItemViewModel() : base(LogicalType.ROL) + public ROLGateItemViewModel() : this(null) { } + public ROLGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ROL) + { + } + public ROLGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -299,11 +356,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class RORGateItemViewModel : LogicalGateItemViewModel { - public RORGateItemViewModel() : base(LogicalType.ROR) + public RORGateItemViewModel() : this(null) { } + public RORGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ROR) + { + } + public RORGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -317,11 +378,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class SELGateItemViewModel : LogicalGateItemViewModel { - public SELGateItemViewModel() : base(LogicalType.SEL) + public SELGateItemViewModel() : this(null) { } + public SELGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SEL) + { + } + public SELGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -335,11 +400,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class MAXGateItemViewModel : LogicalGateItemViewModel { - public MAXGateItemViewModel() : base(LogicalType.MAX) + public MAXGateItemViewModel() : this(null) { } + public MAXGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.MAX) + { + } + public MAXGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -353,11 +422,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class MINGateItemViewModel : LogicalGateItemViewModel { - public MINGateItemViewModel() : base(LogicalType.MIN) + public MINGateItemViewModel() : this(null) { } + public MINGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.MIN) + { + } + public MINGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -371,11 +444,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class LIMITGateItemViewModel : LogicalGateItemViewModel { - public LIMITGateItemViewModel() : base(LogicalType.LIMIT) + public LIMITGateItemViewModel() : this(null) { } + public LIMITGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LIMIT) + { + } + public LIMITGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -389,11 +466,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class GTGateItemViewModel : LogicalGateItemViewModel { - public GTGateItemViewModel() : base(LogicalType.GT) + public GTGateItemViewModel() : this(null) { } + public GTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.GT) + { + } + public GTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -407,11 +488,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class LTGateItemViewModel : LogicalGateItemViewModel { - public LTGateItemViewModel() : base(LogicalType.GT) + public LTGateItemViewModel() : this(null) { } + public LTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LT) + { + } + public LTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -425,11 +510,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class GEGateItemViewModel : LogicalGateItemViewModel { - public GEGateItemViewModel() : base(LogicalType.GE) + public GEGateItemViewModel() : this(null) { } + public GEGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.GE) + { + } + public GEGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -443,11 +532,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class LEGateItemViewModel : LogicalGateItemViewModel { - public LEGateItemViewModel() : base(LogicalType.LE) + public LEGateItemViewModel() : this(null) { } + public LEGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LE) + { + } + public LEGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -461,11 +554,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class EQGateItemViewModel : LogicalGateItemViewModel { - public EQGateItemViewModel() : base(LogicalType.LE) + public EQGateItemViewModel() : this(null) { } + public EQGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.EQ) + { + } + public EQGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -479,11 +576,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class NEGateItemViewModel : LogicalGateItemViewModel { - public NEGateItemViewModel() : base(LogicalType.NE) + public NEGateItemViewModel() : this(null) { } + public NEGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.NE) + { + } + public NEGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -497,11 +598,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class ABSGateItemViewModel : LogicalGateItemViewModel { - public ABSGateItemViewModel() : base(LogicalType.ABS) + public ABSGateItemViewModel() : this(null) { } + public ABSGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ABS) + { + } + public ABSGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -515,11 +620,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class SQRTGateItemViewModel : LogicalGateItemViewModel { - public SQRTGateItemViewModel() : base(LogicalType.SQRT) + public SQRTGateItemViewModel() : this(null) { } + public SQRTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SQRT) + { + } + public SQRTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -533,11 +642,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class LNGateItemViewModel : LogicalGateItemViewModel { - public LNGateItemViewModel() : base(LogicalType.LN) + public LNGateItemViewModel() : this(null) { } + public LNGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LN) + { + } + public LNGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -551,11 +664,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class LOGGateItemViewModel : LogicalGateItemViewModel { - public LOGGateItemViewModel() : base(LogicalType.LOG) + public LOGGateItemViewModel() : this(null) { } + public LOGGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.LOG) + { + } + public LOGGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -569,11 +686,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class EXPGateItemViewModel : LogicalGateItemViewModel { - public EXPGateItemViewModel() : base(LogicalType.EXP) + public EXPGateItemViewModel() : this(null) { } + public EXPGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.EXP) + { + } + public EXPGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -587,11 +708,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class SINGateItemViewModel : LogicalGateItemViewModel { - public SINGateItemViewModel() : base(LogicalType.SIN) + public SINGateItemViewModel() : this(null) { } + public SINGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.SIN) + { + } + public SINGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -605,11 +730,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class COSGateItemViewModel : LogicalGateItemViewModel { - public COSGateItemViewModel() : base(LogicalType.COS) + public COSGateItemViewModel() : this(null) { } + public COSGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.COS) + { + } + public COSGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -623,11 +752,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class TANGateItemViewModel : LogicalGateItemViewModel { - public TANGateItemViewModel() : base(LogicalType.TAN) + public TANGateItemViewModel() : this(null) { } + public TANGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.TAN) + { + } + public TANGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -641,11 +774,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class ASINGateItemViewModel : LogicalGateItemViewModel { - public ASINGateItemViewModel() : base(LogicalType.ASIN) + public ASINGateItemViewModel() : this(null) { } + public ASINGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ASIN) + { + } + public ASINGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -659,11 +796,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class ACOSGateItemViewModel : LogicalGateItemViewModel { - public ACOSGateItemViewModel() : base(LogicalType.ACOS) + public ACOSGateItemViewModel() : this(null) { } + public ACOSGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ACOS) + { + } + public ACOSGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -677,11 +818,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class ATANGateItemViewModel : LogicalGateItemViewModel { - public ATANGateItemViewModel() : base(LogicalType.ATAN) + public ATANGateItemViewModel() : this(null) { } + public ATANGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.ATAN) + { + } + public ATANGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -695,11 +840,15 @@ namespace AIStudio.Wpf.Logical.ViewModels public class EXPTGateItemViewModel : LogicalGateItemViewModel { - public EXPTGateItemViewModel() : base(LogicalType.EXPT) + public EXPTGateItemViewModel() : this(null) { } + public EXPTGateItemViewModel(IDiagramViewModel root) : base(root, LogicalType.EXPT) + { + } + public EXPTGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -713,7 +862,12 @@ namespace AIStudio.Wpf.Logical.ViewModels public class ConstantDesignerItemViewModel : LogicalGateItemViewModel { - public ConstantDesignerItemViewModel() : base(LogicalType.Constant) + public ConstantDesignerItemViewModel() : this(null) + { + + } + + public ConstantDesignerItemViewModel(IDiagramViewModel root) : base(root, LogicalType.Constant) { ItemHeight = 28; } @@ -731,7 +885,11 @@ namespace AIStudio.Wpf.Logical.ViewModels public class InputItemViewModel : LogicalGateItemViewModel { - public InputItemViewModel() : base(LogicalType.Input) + public InputItemViewModel() : this(null) + { + } + + public InputItemViewModel(IDiagramViewModel root) : base(root, LogicalType.Input) { ItemHeight = 28; } @@ -746,9 +904,9 @@ namespace AIStudio.Wpf.Logical.ViewModels } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is LogicalGateDesignerItemBase designer) { @@ -790,7 +948,12 @@ namespace AIStudio.Wpf.Logical.ViewModels public class OutputItemViewModel : LogicalGateItemViewModel { - public OutputItemViewModel() : base(LogicalType.Output) + public OutputItemViewModel() : this(null) + { + + } + + public OutputItemViewModel(IDiagramViewModel root) : base(root, LogicalType.Output) { ItemHeight = 28; } @@ -805,9 +968,9 @@ namespace AIStudio.Wpf.Logical.ViewModels } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is LogicalGateDesignerItemBase designer) { @@ -853,7 +1016,12 @@ namespace AIStudio.Wpf.Logical.ViewModels private System.Timers.Timer readDataTimer = new System.Timers.Timer(); public Action Do; - public TimerDesignerItemViewModel() : base(LogicalType.Time) + public TimerDesignerItemViewModel() : this(null) + { + + } + + public TimerDesignerItemViewModel(IDiagramViewModel root) : base(root, LogicalType.Time) { ItemHeight = 32; ItemWidth = 32; @@ -872,18 +1040,18 @@ namespace AIStudio.Wpf.Logical.ViewModels BuildMenuOptions(); } - protected override void Init() - { - MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand); - base.Init(); + protected override void Init(IDiagramViewModel root) + { + base.Init(root); + MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand); readDataTimer.Elapsed += timeCycle; readDataTimer.Interval = 1000; } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (IsEnabled) { diff --git a/AIStudio.Wpf.SFC/ViewModels/SFCCOBeginNode.cs b/AIStudio.Wpf.SFC/ViewModels/SFCCOBeginNode.cs index 1383852..9dbba10 100644 --- a/AIStudio.Wpf.SFC/ViewModels/SFCCOBeginNode.cs +++ b/AIStudio.Wpf.SFC/ViewModels/SFCCOBeginNode.cs @@ -8,7 +8,12 @@ namespace AIStudio.Wpf.SFC.ViewModels { public class SFCCOBeginNode : SFCNode { - public SFCCOBeginNode() : base(SFCNodeKinds.COBegin) + public SFCCOBeginNode() : this(null) + { + + } + + public SFCCOBeginNode(IDiagramViewModel root) : base(root, SFCNodeKinds.COBegin) { ItemWidth = 280; ItemHeight = 10; diff --git a/AIStudio.Wpf.SFC/ViewModels/SFCCOEndNode.cs b/AIStudio.Wpf.SFC/ViewModels/SFCCOEndNode.cs index d3f76ce..c2b444e 100644 --- a/AIStudio.Wpf.SFC/ViewModels/SFCCOEndNode.cs +++ b/AIStudio.Wpf.SFC/ViewModels/SFCCOEndNode.cs @@ -8,7 +8,12 @@ namespace AIStudio.Wpf.SFC.ViewModels { public class SFCCOEndNode : SFCNode { - public SFCCOEndNode() : base(SFCNodeKinds.COEnd) + public SFCCOEndNode() : this(null) + { + + } + + public SFCCOEndNode(IDiagramViewModel root) : base(root, SFCNodeKinds.COEnd) { ItemWidth = 280; ItemHeight = 10; diff --git a/AIStudio.Wpf.SFC/ViewModels/SFCConditionNode.cs b/AIStudio.Wpf.SFC/ViewModels/SFCConditionNode.cs index 5d5a23c..4860eda 100644 --- a/AIStudio.Wpf.SFC/ViewModels/SFCConditionNode.cs +++ b/AIStudio.Wpf.SFC/ViewModels/SFCConditionNode.cs @@ -11,11 +11,16 @@ namespace AIStudio.Wpf.SFC.ViewModels { public class SFCConditionNode : SFCNode { - public SFCConditionNode() : base(SFCNodeKinds.Condition) + public SFCConditionNode() : this(null) + { + + } + + public SFCConditionNode(IDiagramViewModel root) : base(root, SFCNodeKinds.Condition) { ColorViewModel.LineColor.Color = Colors.Black; ItemWidth = 30; - ItemHeight = 30; + ItemHeight = 30; ExecuteAddTopInput(null); ExecuteAddBottomOutput(null); @@ -30,9 +35,9 @@ namespace AIStudio.Wpf.SFC.ViewModels } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); } private bool _showText; diff --git a/AIStudio.Wpf.SFC/ViewModels/SFCNode.cs b/AIStudio.Wpf.SFC/ViewModels/SFCNode.cs index 70add03..f3048ed 100644 --- a/AIStudio.Wpf.SFC/ViewModels/SFCNode.cs +++ b/AIStudio.Wpf.SFC/ViewModels/SFCNode.cs @@ -14,7 +14,12 @@ namespace AIStudio.Wpf.SFC.ViewModels { protected IUIVisualizerService visualiserService; - public SFCNode(SFCNodeKinds kind) : base() + public SFCNode(SFCNodeKinds kind) : this(null, kind) + { + + } + + public SFCNode(IDiagramViewModel root, SFCNodeKinds kind) : base(root) { ColorViewModel.FillColor.Color = Colors.Blue; Kind = kind; @@ -37,7 +42,7 @@ namespace AIStudio.Wpf.SFC.ViewModels return new SFCNodeDesignerItem(this); } - protected override void Init() + protected override void Init(IDiagramViewModel root) { IsInnerConnector = true; ShowRotate = false; @@ -45,14 +50,14 @@ namespace AIStudio.Wpf.SFC.ViewModels ShowText = true; IsReadOnlyText = true; - base.Init(); + base.Init(root); visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService; } - protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase) + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { - base.LoadDesignerItemViewModel(root, designerbase); + base.LoadDesignerItemViewModel(designerbase); if (designerbase is SFCNodeDesignerItem designer) { diff --git a/AIStudio.Wpf.SFC/ViewModels/SFCStartNode.cs b/AIStudio.Wpf.SFC/ViewModels/SFCStartNode.cs index dab5d75..530ded3 100644 --- a/AIStudio.Wpf.SFC/ViewModels/SFCStartNode.cs +++ b/AIStudio.Wpf.SFC/ViewModels/SFCStartNode.cs @@ -8,7 +8,12 @@ namespace AIStudio.Wpf.SFC.ViewModels { public class SFCStartNode : SFCNode { - public SFCStartNode() : base(SFCNodeKinds.Start) + public SFCStartNode() : this(null) + { + + } + + public SFCStartNode(IDiagramViewModel root) : base(root, SFCNodeKinds.Start) { ExecuteAddTopInput(null); ExecuteAddBottomOutput(null); diff --git a/AIStudio.Wpf.SFC/ViewModels/Simulate_SolenoidViewModel.cs b/AIStudio.Wpf.SFC/ViewModels/Simulate_SolenoidViewModel.cs index 044416f..7bc530c 100644 --- a/AIStudio.Wpf.SFC/ViewModels/Simulate_SolenoidViewModel.cs +++ b/AIStudio.Wpf.SFC/ViewModels/Simulate_SolenoidViewModel.cs @@ -11,7 +11,12 @@ namespace AIStudio.Wpf.SFC.ViewModels public class Simulate_SolenoidViewModel : SFCNode { private IDisposable diChangedSubscription; - public Simulate_SolenoidViewModel() : base(SFCNodeKinds.Simulate_Solenoid) + public Simulate_SolenoidViewModel() : this(null) + { + + } + + public Simulate_SolenoidViewModel(IDiagramViewModel root) : base(root, SFCNodeKinds.Simulate_Solenoid) { ItemWidth = 32; ItemHeight = 32; @@ -29,9 +34,9 @@ namespace AIStudio.Wpf.SFC.ViewModels } - protected override void Init() + protected override void Init(IDiagramViewModel root) { - base.Init(); + base.Init(root); if (diChangedSubscription != null) { diChangedSubscription.Dispose(); diff --git a/AIStudio.Wpf.SFC/ViewModels/Simulate_StartViewModel.cs b/AIStudio.Wpf.SFC/ViewModels/Simulate_StartViewModel.cs index 5d60837..7f9bea7 100644 --- a/AIStudio.Wpf.SFC/ViewModels/Simulate_StartViewModel.cs +++ b/AIStudio.Wpf.SFC/ViewModels/Simulate_StartViewModel.cs @@ -8,7 +8,12 @@ namespace AIStudio.Wpf.SFC.ViewModels { public class Simulate_StartViewModel : SFCNode { - public Simulate_StartViewModel() : base(SFCNodeKinds.Simulate_Start) + public Simulate_StartViewModel() : this(null) + { + + } + + public Simulate_StartViewModel(IDiagramViewModel root) : base(root, SFCNodeKinds.Simulate_Start) { ItemWidth = 32; ItemHeight = 32; diff --git a/AIStudio.Wpf.SFC/ViewModels/Simulate_TankViewModel.cs b/AIStudio.Wpf.SFC/ViewModels/Simulate_TankViewModel.cs index 7ed2d9e..adf6d25 100644 --- a/AIStudio.Wpf.SFC/ViewModels/Simulate_TankViewModel.cs +++ b/AIStudio.Wpf.SFC/ViewModels/Simulate_TankViewModel.cs @@ -9,7 +9,12 @@ namespace AIStudio.Wpf.SFC.ViewModels { public class Simulate_TankViewModel : SFCNode { - public Simulate_TankViewModel() : base(SFCNodeKinds.Simulate_Tank) + public Simulate_TankViewModel() : this(null) + { + + } + + public Simulate_TankViewModel(IDiagramViewModel root) : base(root, SFCNodeKinds.Simulate_Tank) { ItemWidth = 50; ItemHeight = 120;