Skip to content

Commit a584fec

Browse files
committed
before big optimization
1 parent cf72f5d commit a584fec

File tree

16 files changed

+226
-226
lines changed

16 files changed

+226
-226
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using System.Windows;
5+
6+
namespace SimpleStateMachineNodeEditor.Helpers.Extensions
7+
{
8+
public static class PointExtensition
9+
{
10+
public static MyPoint ToMyPoint(this Point point)
11+
{
12+
return MyPoint.CreateFromPoint(point);
13+
}
14+
}
15+
}

SimpleStateMachineNodeEditor/View/ViewConnect.xaml.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using System.Windows.Markup;
1515
using SimpleStateMachineNodeEditor.ViewModel;
1616
using SimpleStateMachineNodeEditor.Helpers;
17+
using SimpleStateMachineNodeEditor.ViewModel.Connect;
1718

1819
namespace SimpleStateMachineNodeEditor.View
1920
{

SimpleStateMachineNodeEditor/View/ViewLeftConnector.xaml.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using SimpleStateMachineNodeEditor.ViewModel;
1717
using System.Windows.Shapes;
1818
using SimpleStateMachineNodeEditor.Helpers.Extensions;
19+
using SimpleStateMachineNodeEditor.ViewModel.Connector;
1920

2021
namespace SimpleStateMachineNodeEditor.View
2122
{

SimpleStateMachineNodeEditor/View/ViewNodesCanvas.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
xmlns:local="clr-namespace:SimpleStateMachineNodeEditor.View"
77
xmlns:View="clr-namespace:SimpleStateMachineNodeEditor.View"
88
xmlns:ViewModel="clr-namespace:SimpleStateMachineNodeEditor.ViewModel"
9+
xmlns:Connect="clr-namespace:SimpleStateMachineNodeEditor.ViewModel.Connect"
910
mc:Ignorable="d"
1011
d:DesignHeight="450" d:DesignWidth="800" Focusable="True" AllowDrop="True" ClipToBounds="True">
1112

@@ -37,7 +38,7 @@
3738
</ItemsPanelTemplate>
3839
</ItemsControl.ItemsPanel>
3940
<ItemsControl.Resources >
40-
<DataTemplate DataType="{x:Type ViewModel:ViewModelConnect}">
41+
<DataTemplate DataType="{x:Type Connect:ViewModelConnect}">
4142
<View:ViewConnect ViewModel="{Binding}"/>
4243
</DataTemplate>
4344
<DataTemplate DataType="{x:Type ViewModel:ViewModelNode}">

SimpleStateMachineNodeEditor/View/ViewRightConnector.xaml.cs

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using SimpleStateMachineNodeEditor.Helpers.Transformations;
1919
using SimpleStateMachineNodeEditor.Helpers.Enums;
2020
using SimpleStateMachineNodeEditor.Helpers.Extensions;
21+
using SimpleStateMachineNodeEditor.ViewModel.Connector;
2122

2223
namespace SimpleStateMachineNodeEditor.View
2324
{
@@ -45,7 +46,8 @@ public ViewRightConnector()
4546
{
4647
InitializeComponent();
4748
SetupBinding();
48-
SetupEvents();
49+
SetupEvents();
50+
SetupSubcriptions();
4951
}
5052

5153
#region SetupBinding
@@ -67,18 +69,27 @@ private void SetupBinding()
6769

6870
this.OneWayBind(this.ViewModel, x => x.FormStroke, x => x.EllipseElement.Stroke).DisposeWith(disposable);
6971

70-
this.Bind(this.ViewModel, x => x.FormFill, x => x.EllipseElement.Fill).DisposeWith(disposable);
72+
this.OneWayBind(this.ViewModel, x => x.FormFill, x => x.EllipseElement.Fill).DisposeWith(disposable);
7173

7274
this.OneWayBind(this.ViewModel, x => x.FormStrokeThickness, x => x.EllipseElement.StrokeThickness).DisposeWith(disposable);
7375

74-
this.WhenAnyValue(x => x.ViewModel.Node.Size, x => x.ViewModel.Node.Point1.Value, x => x.ViewModel.Node.NodesCanvas.Scale.Scales.Value)
75-
.Subscribe(_ => { UpdatePositionConnectPoin(); }).DisposeWith(disposable);
7676

77-
this.WhenAnyValue(x=>x.EllipseElement.IsMouseOver).Subscribe(value=> OnEventMouseOver(value)).DisposeWith(disposable);
7877
});
7978
}
8079
#endregion SetupBinding
8180

81+
#region Setup Subcriptions
82+
private void SetupSubcriptions()
83+
{
84+
this.WhenActivated(disposable =>
85+
{
86+
this.WhenAnyValue(x => x.ViewModel.Node.Size, x => x.ViewModel.Node.Point1.Value, x => x.ViewModel.Node.NodesCanvas.Scale.Scales.Value)
87+
.Subscribe(_ => UpdatePositionConnectPoin()).DisposeWith(disposable);
88+
this.WhenAnyValue(x => x.EllipseElement.IsMouseOver).Subscribe(value => OnEventMouseOver(value)).DisposeWith(disposable);
89+
});
90+
}
91+
92+
#endregion Setup Subcriptions
8293
#region SetupEvents
8394

8495
private void SetupEvents()
@@ -175,29 +186,33 @@ private void ConnectorDrop(DragEventArgs e)
175186
#endregion SetupEvents
176187

177188

178-
void UpdatePositionConnectPoin()
189+
private void UpdatePositionConnectPoin()
179190
{
180191
Point positionConnectPoint;
181192
MyPoint Position;
182193

183-
if (this.IsVisible)
194+
if((!ViewModel.Node.IsCollapse)||(ViewModel.Node.IsCollapse && this.ViewModel.Name == "Output"))
184195
{
185196
positionConnectPoint = EllipseElement.TranslatePoint(new Point(EllipseElement.Width/2, EllipseElement.Height / 2), this);
186197

187198
ViewNodesCanvas NodesCanvas = MyUtils.FindParent<ViewNodesCanvas>(this);
188199

189200
positionConnectPoint = this.TransformToAncestor(NodesCanvas).Transform(positionConnectPoint);
190201

191-
Position = MyPoint.CreateFromPoint(positionConnectPoint) / this.ViewModel.NodesCanvas.Scale.Value;
202+
Position = positionConnectPoint.ToMyPoint()/ this.ViewModel.NodesCanvas.Scale.Value;
192203

193204
}
194205
else
195206
{
196207
positionConnectPoint = this.ViewModel.Node.Output.PositionConnectPoint.Value;
197208

198-
Position = MyPoint.CreateFromPoint(positionConnectPoint);
209+
Position = positionConnectPoint.ToMyPoint();
210+
}
211+
212+
if (this.ViewModel.Name == "Output")
213+
{
214+
this.ViewModel.NodesCanvas.LogDebug(Position.ToString());
199215
}
200-
201216
this.ViewModel.PositionConnectPoint.Set(Position);
202217
}
203218

SimpleStateMachineNodeEditor/ViewModel/ViewModelConnect.cs renamed to SimpleStateMachineNodeEditor/ViewModel/Connect/ViewModelConnect.cs

Lines changed: 15 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
using SimpleStateMachineNodeEditor.Helpers;
1111
using SimpleStateMachineNodeEditor.Helpers.Extensions;
1212
using SimpleStateMachineNodeEditor.ViewModel.NodesCanvas;
13+
using SimpleStateMachineNodeEditor.ViewModel.Connector;
1314

14-
namespace SimpleStateMachineNodeEditor.ViewModel
15+
namespace SimpleStateMachineNodeEditor.ViewModel.Connect
1516
{
1617
public class ViewModelConnect : ReactiveObject
1718
{
@@ -34,39 +35,34 @@ public class ViewModelConnect : ReactiveObject
3435

3536
public ViewModelConnect(ViewModelNodesCanvas viewModelNodesCanvas, ViewModelConnector fromConnector)
3637
{
37-
3838
SetupSubscriptions();
39-
SetupCommands();
40-
41-
NodesCanvas = viewModelNodesCanvas;
42-
FromConnector = fromConnector;
43-
FromConnector.Connect = this;
39+
Initial(viewModelNodesCanvas, fromConnector);
40+
4441
}
4542
#region Setup Subscriptions
4643

4744
private void SetupSubscriptions()
4845
{
49-
this.WhenAnyValue(x => x.FromConnector.PositionConnectPoint.Value).Subscribe(value => StartPointUpdate(value));
50-
this.WhenAnyValue(x => x.ToConnector.PositionConnectPoint.Value).Subscribe(value => EndPointUpdate(value));
5146
this.WhenAnyValue(x => x.StartPoint.Value, x => x.EndPoint.Value).Subscribe(_ => UpdateMedium());
52-
this.WhenAnyValue(x => x.FromConnector).Where(x => x != null).Subscribe(_ => FromConnectChanged());
47+
this.WhenAnyValue(x => x.FromConnector.PositionConnectPoint.Value).Subscribe(value => StartPointUpdate(value));
48+
this.WhenAnyValue(x => x.ToConnector.PositionConnectPoint.Value).Subscribe(value => EndPointUpdate(value));
5349
this.WhenAnyValue(x => x.ToConnector).Where(x => x != null).Subscribe(_ => ToConnectChanged());
54-
this.WhenAnyValue(x => x.FromConnector.Node.NodesCanvas.Scale.Value).Subscribe(value => StrokeThickness = value);
55-
56-
50+
this.WhenAnyValue(x => x.FromConnector.Node.NodesCanvas.Scale.Value).Subscribe(value => StrokeThickness = value);
5751
}
52+
private void Initial(ViewModelNodesCanvas viewModelNodesCanvas, ViewModelConnector fromConnector)
53+
{
54+
NodesCanvas = viewModelNodesCanvas;
55+
FromConnector = fromConnector;
56+
FromConnector.Connect = this;
5857

58+
StartPointUpdate((FromConnector.Node.IsCollapse ? FromConnector.Node.Output : FromConnector).PositionConnectPoint.ToPoint());
59+
this.WhenAnyValue(x => x.FromConnector.Selected).Subscribe(value => Select(value));
60+
}
5961
private void Select(bool value)
6062
{
6163
//this.StrokeDashArray = value ? new DoubleCollection() { 10, 3 } : null;
6264
this.Stroke = value ? Application.Current.Resources["ColorSelectedElement"].Cast<SolidColorBrush>(): Application.Current.Resources["ColorConnect"].Cast<SolidColorBrush>();
6365
}
64-
private void FromConnectChanged()
65-
{
66-
StartPointUpdate(FromConnector.PositionConnectPoint.ToPoint());
67-
this.WhenAnyValue(x => x.FromConnector.Selected).Subscribe(value => Select(value));
68-
//this.FromConnector.WhenAnyValue(x => x.Selected).Subscribe(value => Selected = value);
69-
}
7066
private void ToConnectChanged()
7167
{
7268
EndPointUpdate(ToConnector.PositionConnectPoint.ToPoint());
@@ -88,40 +84,5 @@ private void UpdateMedium()
8884

8985
#endregion Setup Subscriptions
9086

91-
#region Setup Commands
92-
93-
//public ReactiveCommand<Unit,Unit> CommandDelete { get; set; }
94-
//public ReactiveCommand<Unit,Unit> CommandAdd { get; set; }
95-
//public ReactiveCommand<Unit,Unit> CommandDeleteWithConnector { get; set; }
96-
//public ReactiveCommand<Unit,Unit> CommandAddWithConnector { get; set; }
97-
private void SetupCommands()
98-
{
99-
//CommandAdd = ReactiveCommand.Create(Add, NotSaved);
100-
//CommandDelete = ReactiveCommand.Create(Delete, NotSaved);
101-
//CommandAddWithConnector = ReactiveCommand.Create(AddWithConnect, NotSaved);
102-
//CommandDeleteWithConnector = ReactiveCommand.Create(DeleteWithConnects, NotSaved);
103-
}
104-
private void NotSaved()
105-
{
106-
NodesCanvas.ItSaved = false;
107-
}
108-
//private void Add()
109-
//{
110-
// NodesCanvas.CommandAddConnect.ExecuteWithSubscribe(this);
111-
//}
112-
//private void Delete()
113-
//{
114-
// NodesCanvas.CommandDeleteConnect.ExecuteWithSubscribe(this);
115-
//}
116-
//private void AddWithConnect()
117-
//{
118-
// this.FromConnector.CommandAddWithConnect.ExecuteWithSubscribe();
119-
//}
120-
//private void DeleteWithConnects()
121-
//{
122-
// this.FromConnector.CommandDeleteWithConnect.ExecuteWithSubscribe();
123-
//}
124-
#endregion Setup Commands
125-
12687
}
12788
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
using System.Windows.Media;
2+
using System.Windows;
3+
4+
using ReactiveUI.Fody.Helpers;
5+
using ReactiveUI;
6+
7+
using SimpleStateMachineNodeEditor.Helpers;
8+
using System;
9+
using System.Xml.Linq;
10+
using System.Linq;
11+
using SimpleStateMachineNodeEditor.Helpers.Extensions;
12+
using SimpleStateMachineNodeEditor.ViewModel.NodesCanvas;
13+
using SimpleStateMachineNodeEditor.ViewModel.Connect;
14+
15+
namespace SimpleStateMachineNodeEditor.ViewModel.Connector
16+
{
17+
public partial class ViewModelConnector : ReactiveObject
18+
{
19+
[Reactive] public MyPoint PositionConnectPoint { get; set; } = new MyPoint();
20+
[Reactive] public string Name { get; set; }
21+
[Reactive] public bool TextEnable { get; set; } = false;
22+
[Reactive] public bool? Visible { get; set; } = true;
23+
[Reactive] public bool FormEnable { get; set; } = true;
24+
[Reactive] public Brush FormStroke { get; set; } = Application.Current.Resources["ColorNodesCanvasBackground"] as SolidColorBrush;
25+
[Reactive] public Brush FormFill { get; set; } = Application.Current.Resources["ColorConnector"] as SolidColorBrush;
26+
[Reactive] public Brush Foreground { get; set; } = Application.Current.Resources["ColorConnectorForeground"] as SolidColorBrush;
27+
[Reactive] public double FormStrokeThickness { get; set; } = 1;
28+
[Reactive] public ViewModelNode Node { get; set; }
29+
[Reactive] public ViewModelConnect Connect { get; set; }
30+
[Reactive] public bool ItsLoop { get; set; } = false;
31+
[Reactive] public ViewModelNodesCanvas NodesCanvas { get; set; }
32+
[Reactive] public bool Selected { get; set; }
33+
34+
public ViewModelConnector(ViewModelNodesCanvas nodesCanvas, ViewModelNode viewModelNode)
35+
{
36+
Node = viewModelNode;
37+
NodesCanvas = nodesCanvas;
38+
SetupCommands();
39+
SetupBinding();
40+
}
41+
42+
#region SetupBinding
43+
private void SetupBinding()
44+
{
45+
this.WhenAnyValue(x => x.Selected).Subscribe(value => Select(value));
46+
}
47+
#endregion SetupBinding
48+
49+
public XElement ToXElement()
50+
{
51+
XElement element = new XElement("Transition");
52+
element.Add(new XAttribute("Name", Name));
53+
element.Add(new XAttribute("From", Node.Name));
54+
var ToConnectorName = this.Connect?.ToConnector?.Node.Name;
55+
element.Add(new XAttribute("To", ToConnectorName?? Node.Name));
56+
57+
return element;
58+
}
59+
60+
public static ViewModelConnect FromXElement(ViewModelNodesCanvas nodesCanvas,XElement node, out string errorMessage, Func<string, bool> actionForCheck)
61+
{
62+
ViewModelConnect viewModelConnect = null;
63+
64+
errorMessage = null;
65+
string name = node.Attribute("Name")?.Value;
66+
string from = node.Attribute("From")?.Value;
67+
string to = node.Attribute("To")?.Value;
68+
69+
if (string.IsNullOrEmpty(name))
70+
{
71+
errorMessage = "Connect without name";
72+
return viewModelConnect;
73+
}
74+
if (string.IsNullOrEmpty(from))
75+
{
76+
errorMessage = "Connect without from point";
77+
return viewModelConnect;
78+
}
79+
if (string.IsNullOrEmpty(to))
80+
{
81+
errorMessage = "Connect without to point";
82+
return viewModelConnect;
83+
}
84+
if (actionForCheck(name))
85+
{
86+
errorMessage = String.Format("Contains more than one connect with name \"{0}\"", name);
87+
return viewModelConnect;
88+
}
89+
90+
ViewModelNode nodeFrom = nodesCanvas.Nodes.Single(x => x.Name == from);
91+
ViewModelNode nodeTo = nodesCanvas.Nodes.Single(x => x.Name == to);
92+
93+
nodeFrom.CurrentConnector.Name = name;
94+
95+
96+
if (nodeFrom == nodeTo)
97+
{
98+
nodeFrom.CurrentConnector.CommandSetAsLoop.ExecuteWithSubscribe();
99+
}
100+
else
101+
{
102+
viewModelConnect = new ViewModelConnect(nodeFrom.NodesCanvas, nodeFrom.CurrentConnector);
103+
viewModelConnect.ToConnector = nodeTo.Input;
104+
nodeFrom.CommandAddEmptyConnector.ExecuteWithSubscribe();
105+
}
106+
107+
return viewModelConnect;
108+
}
109+
}
110+
111+
}

0 commit comments

Comments
 (0)