Skip to content

Commit 9f6f6e7

Browse files
committed
optimize
1 parent fbe1f5b commit 9f6f6e7

File tree

4 files changed

+49
-19
lines changed

4 files changed

+49
-19
lines changed

SimpleStateMachineNodeEditor/View/ViewNodesCanvas.xaml.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,16 @@ private void SetupCommands()
9191
{
9292
//this.WhenAnyValue(x => x.PositionLeftClick).Subscribe(x => Test(x)).DisposeWith(disposable);
9393
var positionLeftClickObservable = this.WhenAnyValue(x => x.PositionLeftClick);
94-
var positionRightClickObservable = this.WhenAnyValue(x => x.PositionRightClick);
94+
var positionRightClickObservable = this.WhenAnyValue(x => x.PositionRightClick).Select(x => x);
9595

9696

9797
//IObservable<Point> positionLeftClickObservable = this.WhenAnyValue(x => x.PositionLeftClick).;
9898
//IObservable<Point> positionRightClickObservable = this.WhenAnyValue(x => x.PositionRightClick);
9999

100-
this.BindCommand(this.ViewModel, x => x.CommandSelect, x => x.BindingSelect, positionLeftClickObservable).DisposeWith(disposable);
101-
this.BindCommand(this.ViewModel, x => x.CommandCut, x => x.BindingCut, x => x.Position).DisposeWith(disposable);
102-
this.BindCommand(this.ViewModel, x => x.CommandAddNodeWithUndoRedo, x => x.BindingAddNode, x => x.Position).DisposeWith(disposable);
103-
this.BindCommand(this.ViewModel, x => x.CommandAddNodeWithUndoRedo, x => x.ItemAddNode, positionLeftClickObservable).DisposeWith(disposable);
100+
this.BindCommand(this.ViewModel, x => x.CommandSelect, x => x.BindingSelect, x => x.PositionRight).DisposeWith(disposable);
101+
this.BindCommand(this.ViewModel, x => x.CommandCut, x => x.BindingCut, x => x.PositionRight).DisposeWith(disposable);
102+
this.BindCommand(this.ViewModel, x => x.CommandAddNodeWithUndoRedo, x => x.BindingAddNode, x => x.PositionRight).DisposeWith(disposable);
103+
this.BindCommand(this.ViewModel, x => x.CommandAddNodeWithUndoRedo, x => x.ItemAddNode, x => x.PositionLeft).DisposeWith(disposable);
104104

105105
this.BindCommand(this.ViewModel, x => x.CommandRedo, x => x.BindingRedo).DisposeWith(disposable);
106106
this.BindCommand(this.ViewModel, x => x.CommandUndo, x => x.BindingUndo).DisposeWith(disposable);
@@ -226,11 +226,12 @@ private void OnEventDragOver(DragEventArgs e)
226226
private void OnEventPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
227227
{
228228
PositionLeftClick = e.GetPosition(this.Canvas);
229-
this.ViewModel.Position = PositionLeftClick;
229+
this.ViewModel.PositionRight = PositionLeftClick;
230230
}
231231
private void OnEventPreviewMouseRightButtonDown(MouseButtonEventArgs e)
232232
{
233233
PositionRightClick = e.GetPosition(this.Canvas);
234+
this.ViewModel.PositionLeft = PositionRightClick;
234235
}
235236

236237
#endregion Setup Events

SimpleStateMachineNodeEditor/ViewModel/Connector/ViewModelConnector.cs

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public partial class ViewModelConnector : ReactiveObject
3131
[Reactive] public bool ItsLoop { get; set; } = false;
3232
[Reactive] public ViewModelNodesCanvas NodesCanvas { get; set; }
3333
[Reactive] public bool Selected { get; set; }
34+
35+
private IDisposable subscriptionOnNodeWidthChange;
3436
public ViewModelConnector(ViewModelNodesCanvas nodesCanvas, ViewModelNode viewModelNode, string name, Point myPoint)
3537
{
3638
Node = viewModelNode;
@@ -44,12 +46,42 @@ public ViewModelConnector(ViewModelNodesCanvas nodesCanvas, ViewModelNode viewMo
4446
private void SetupSubscriptions()
4547
{
4648
this.WhenAnyValue(x => x.Selected).Subscribe(value => Select(value));
47-
this.WhenAnyValue(x => x.Node.Point1).Buffer(2, 1).Subscribe(value => PositionConnectPoint = PositionConnectPoint.Addition(value[1].Subtraction(value[0])));
49+
50+
51+
if(this.Name!="Input")
52+
{
53+
if (this.Name != "Output")
54+
{
55+
this.WhenAnyValue(x => x.Node.Transitions.Count).Subscribe(x => UpdatePositionOnTransitionCountChange());
56+
this.WhenAnyValue(x => x.Node.IsCollapse).Subscribe(value => UpdateSubscriptionForPosition(value));
57+
}
58+
}
4859

60+
this.WhenAnyValue(x => x.Node.Point1).Buffer(2, 1).Subscribe(value => PositionConnectPoint = PositionConnectPoint.Addition(value[1].Subtraction(value[0])));
4961
}
50-
private void Test(Point point)
62+
private void UpdateSubscriptionForPosition(bool nodeIsCollapse)
5163
{
52-
64+
if (!nodeIsCollapse)
65+
{
66+
subscriptionOnNodeWidthChange = this.WhenAnyValue(x => x.Node.Size.Width).Buffer(2, 1).Where(x => x[0] >= 80 && x[1] >= 80 && x[1]!=Node.WidthBeforeCollapse)
67+
.Subscribe(x => UpdatePositionOnWidthChange(x[1] - x[0]));
68+
}
69+
else
70+
{
71+
subscriptionOnNodeWidthChange?.Dispose();
72+
}
73+
}
74+
private void UpdatePositionOnTransitionCountChange()
75+
{
76+
if (!string.IsNullOrEmpty(Name))
77+
{
78+
int index = Node.Transitions.IndexOf(this);
79+
this.PositionConnectPoint = Node.Output.PositionConnectPoint.Addition(0, index*19);
80+
}
81+
}
82+
private void UpdatePositionOnWidthChange(double value)
83+
{
84+
this.PositionConnectPoint = this.PositionConnectPoint.Addition(value, 0);
5385
}
5486

5587
#endregion Setup Subscriptions

SimpleStateMachineNodeEditor/ViewModel/Node/ViewModelNode.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class ViewModelNode : ReactiveValidationObject<ViewModelNode>
2828
[Reactive] public Point Point1 { get; set; }
2929
[Reactive] public Point Point2 { get; set; }
3030
[Reactive] public Size Size { get; set; }
31+
[Reactive] public double WidthBeforeCollapse { get; set; }
3132
[Reactive] public string Name { get; set; }
3233
[Reactive] public bool NameEnable { get; set; } = true;
3334
[Reactive] public bool Selected { get; set; }
@@ -144,11 +145,13 @@ private void Collapse(bool value)
144145
{
145146
if (!value)
146147
{
148+
147149
TransitionsVisible = true;
148150
Output.Visible = null;
149151
}
150152
else
151153
{
154+
WidthBeforeCollapse = Size.Width;
152155
TransitionsVisible = null;
153156
Output.Visible = true;
154157
UnSelectedAllConnectors();
@@ -210,23 +213,16 @@ private void AddEmptyConnector()
210213
{
211214
CurrentConnector.TextEnable = true;
212215
CurrentConnector.FormEnable = false;
213-
ShiftConnectors();
214216
if (string.IsNullOrEmpty(CurrentConnector.Name))
215217
CurrentConnector.Name = "Transition " + NodesCanvas.TransitionsCount.ToString();
216218
}
217-
CurrentConnector = new ViewModelConnector(NodesCanvas, this,"", Point1.Addition(80,54))
219+
double width = Size.Width == 0 ? 80 : Size.Width;
220+
CurrentConnector = new ViewModelConnector(NodesCanvas, this,"", Point1.Addition(width, 54))
218221
{
219222
TextEnable = false
220223
};
221224
Transitions.Insert(0, CurrentConnector);
222225
}
223-
private void ShiftConnectors()
224-
{
225-
foreach(var transition in Transitions)
226-
{
227-
transition.PositionConnectPoint = transition.PositionConnectPoint.Addition(0, 19);
228-
}
229-
}
230226
private void UnSelectedAllConnectors()
231227
{
232228
foreach(var transition in Transitions)

SimpleStateMachineNodeEditor/ViewModel/NodesCanvas/ViewModelNodesCanvas.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public partial class ViewModelNodesCanvas : ReactiveObject
2323
public ObservableCollectionExtended<ViewModelNode> Nodes = new ObservableCollectionExtended<ViewModelNode>();
2424
public ObservableCollectionExtended<ViewModelMessage> Messages { get; set; } = new ObservableCollectionExtended<ViewModelMessage>();
2525

26-
[Reactive] public Point Position { get; set; }
26+
[Reactive] public Point PositionRight { get; set; }
27+
[Reactive] public Point PositionLeft { get; set; }
2728
[Reactive] public ViewModelSelector Selector { get; set; } = new ViewModelSelector();
2829
[Reactive] public ViewModelDialog Dialog { get; set; } = new ViewModelDialog();
2930
[Reactive] public ViewModelCutter Cutter { get; set; }

0 commit comments

Comments
 (0)