Skip to content

Commit 303bcf7

Browse files
committed
some try
1 parent 36c4f84 commit 303bcf7

File tree

10 files changed

+137
-41
lines changed

10 files changed

+137
-41
lines changed

SimpleStateMachineNodeEditor/View/MainWindow.xaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,17 @@
178178
<view:ViewNodesCanvas x:Name="NodesCanvas" />
179179
</TabItem>
180180
<!--<TabItem Header="Transitions table" ToolTip="" Style="{DynamicResource StyleTabItem}" Foreground="{DynamicResource ColorForeground}"/>-->
181+
<TabItem Header="Transitions table" Style="{DynamicResource StyleTabItem}" Background="{DynamicResource ColorWindowHeader}" Foreground="{DynamicResource ColorWindowHeaderTabItemForeground}" BorderBrush="{DynamicResource ColorElementMouseOver}" OpacityMask="{DynamicResource ColorElementMouseOver}">
182+
<DataGrid x:Name="TableOfTransitions">
183+
<DataGridTemplateColumn Header="Address">
184+
<DataGridTemplateColumn.CellTemplate>
185+
<DataTemplate>
186+
<TextBox Text="{Binding Path=Name}"/>
187+
</DataTemplate>
188+
</DataGridTemplateColumn.CellTemplate>
189+
</DataGridTemplateColumn>
190+
</DataGrid>
191+
</TabItem>
181192
</TabControl>
182193
<!--#endregion Tabs-->
183194

SimpleStateMachineNodeEditor/View/MainWindow.xaml.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ private void SetupBinding()
5959

6060
this.WhenActivated(disposable =>
6161
{
62+
this.OneWayBind(this.ViewModel, x => x.Tests, x => x.TableOfTransitions.ItemsSource).DisposeWith(disposable);
63+
6264
var SelectedItem = this.ObservableForProperty(x => x.MessageList.SelectedItem).Select(x=>(x.Value as ViewModelMessage)?.Text);
6365
this.BindCommand(this.ViewModel, x => x.CommandCopyError, x => x.BindingCopyError, SelectedItem).DisposeWith(disposable);
6466
this.BindCommand(this.ViewModel, x => x.CommandCopyError, x => x.ItemCopyError, SelectedItem).DisposeWith(disposable);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<UserControl x:Class="SimpleStateMachineNodeEditor.View.Test"
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6+
xmlns:local="clr-namespace:SimpleStateMachineNodeEditor.View"
7+
mc:Ignorable="d"
8+
d:DesignHeight="450" d:DesignWidth="800">
9+
<Grid>
10+
11+
</Grid>
12+
</UserControl>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using ReactiveUI;
2+
using SimpleStateMachineNodeEditor.ViewModel;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Text;
6+
using System.Windows;
7+
using System.Windows.Controls;
8+
using System.Windows.Data;
9+
using System.Windows.Documents;
10+
using System.Windows.Input;
11+
using System.Windows.Media;
12+
using System.Windows.Media.Imaging;
13+
using System.Windows.Navigation;
14+
using System.Windows.Shapes;
15+
16+
namespace SimpleStateMachineNodeEditor.View
17+
{
18+
/// <summary>
19+
/// Логика взаимодействия для Test.xaml
20+
/// </summary>
21+
public partial class Test : UserControl, IViewFor<ViewModelConnector>
22+
{
23+
#region ViewModel
24+
public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(ViewModelConnector), typeof(Test), new PropertyMetadata(null));
25+
26+
public ViewModelConnector ViewModel
27+
{
28+
get { return (ViewModelConnector)GetValue(ViewModelProperty); }
29+
set { SetValue(ViewModelProperty, value); }
30+
}
31+
32+
object IViewFor.ViewModel
33+
{
34+
get { return ViewModel; }
35+
set { ViewModel = (ViewModelConnector)value; }
36+
}
37+
#endregion ViewModel
38+
public Test()
39+
{
40+
InitializeComponent();
41+
SetupBinding();
42+
}
43+
#region SetupBinding
44+
private void SetupBinding()
45+
{
46+
this.WhenActivated(disposable =>
47+
{
48+
49+
});
50+
}
51+
#endregion SetupBinding
52+
}
53+
}

SimpleStateMachineNodeEditor/View/ViewNodesCanvas.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ private void SetupBinding()
6464
this.WhenActivated(disposable =>
6565
{
6666

67-
this.OneWayBind(this.ViewModel, x => x.Nodes, x => x.Nodes.Collection).DisposeWith(disposable);
67+
this.OneWayBind(this.ViewModel, x => x.Nodes2, x => x.Nodes.Collection).DisposeWith(disposable);
6868

6969
this.OneWayBind(this.ViewModel, x => x.Connects, x => x.Connects.Collection).DisposeWith(disposable);
7070

SimpleStateMachineNodeEditor/ViewModel/Connector/ViewModelConnector.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public partial class ViewModelConnector : ReactiveObject
3131
[Reactive] public ViewModelNodesCanvas NodesCanvas { get; set; }
3232
[Reactive] public bool Selected { get; set; }
3333

34+
[Reactive] public SourceList<string> test { get; set; }
35+
3436
public ViewModelConnector(ViewModelNodesCanvas nodesCanvas, ViewModelNode viewModelNode, string name, Point myPoint)
3537
{
3638
Node = viewModelNode;
@@ -51,7 +53,7 @@ private void SetupSubscriptions()
5153
this.WhenAnyValue(x => x.Node.HeaderWidth).Buffer(2, 1).Subscribe(x => UpdatePositionOnWidthChange(x[1] - x[0]));
5254
if (this.Name != "Output")
5355
{
54-
this.WhenAnyValue(x => x.Node.Transitions.Count).Subscribe(x => UpdatePositionOnTransitionCountChange());
56+
this.WhenAnyValue(x => x.Node.Transitions2.Count).Subscribe(x => UpdatePositionOnTransitionCountChange());
5557
}
5658

5759
}
@@ -123,8 +125,8 @@ public static ViewModelConnect FromXElement(ViewModelNodesCanvas nodesCanvas,XEl
123125
return viewModelConnect;
124126
}
125127

126-
ViewModelNode nodeFrom = nodesCanvas.Nodes.Single(x => x.Name == from);
127-
ViewModelNode nodeTo = nodesCanvas.Nodes.Single(x => x.Name == to);
128+
ViewModelNode nodeFrom = nodesCanvas.Nodes.Items.Single(x => x.Name == from);
129+
ViewModelNode nodeTo = nodesCanvas.Nodes.Items.Single(x => x.Name == to);
128130

129131
nodeFrom.CurrentConnector.Name = name;
130132

SimpleStateMachineNodeEditor/ViewModel/MainWindow/ViewModelMainWindow.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,19 @@
66
using SimpleStateMachineNodeEditor.Helpers.Enums;
77
using System.Reactive.Linq;
88
using System.Linq;
9+
using DynamicData.Alias;
910

1011
namespace SimpleStateMachineNodeEditor.ViewModel
1112
{
13+
public class Test: ReactiveObject
14+
{
15+
[Reactive] public string Name { get; set; }
16+
17+
public Test(ViewModelNode viewModelNode)
18+
{
19+
Name = viewModelNode.Name;
20+
}
21+
}
1222
public partial class ViewModelMainWindow : ReactiveObject
1323
{
1424
public ObservableCollectionExtended<ViewModelMessage> Messages { get; set; } = new ObservableCollectionExtended<ViewModelMessage>();
@@ -22,14 +32,15 @@ public partial class ViewModelMainWindow : ReactiveObject
2232
[Reactive] public int CountInformation { get; set; }
2333
[Reactive] public int CountDebug { get; set; }
2434

35+
36+
public ObservableCollectionExtended<ViewModelConnector> Tests = new ObservableCollectionExtended<ViewModelConnector>();
2537
private IDisposable ConnectToMessages;
2638
public double MaxHeightMessagePanel = 150;
2739

28-
29-
3040
public ViewModelMainWindow(ViewModelNodesCanvas viewModelNodesCanvas)
3141
{
3242
NodesCanvas = viewModelNodesCanvas;
43+
NodesCanvas.Nodes.Connect().SelectMany(x=>x.Transitions.Items).Bind(Tests).Subscribe();
3344
SetupCommands();
3445
SetupSubscriptions();
3546
}

SimpleStateMachineNodeEditor/ViewModel/Node/ViewModelNode.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,11 @@ public partial class ViewModelNode : ReactiveValidationObject<ViewModelNode>
3838
[Reactive] public double HeaderWidth { get; set; } = 80;
3939

4040
public SourceList<ViewModelConnector> Transitions { get; set; } = new SourceList<ViewModelConnector>();
41-
42-
private readonly IObservableCollection<ViewModelConnector> _Transitions2 = new ObservableCollectionExtended<ViewModelConnector>();
43-
public IObservableCollection<ViewModelConnector> Transitions2 => _Transitions2;
44-
45-
//public IObservableCollection<ViewModelConnector> Transitions2 { get; } = new ObservableCollectionExtended<ViewModelConnector>();
46-
41+
public ObservableCollectionExtended<ViewModelConnector> Transitions2 = new ObservableCollectionExtended<ViewModelConnector>();
4742
public int Zindex { get; private set; }
4843

4944
private ViewModelNode()
5045
{
51-
Transitions.Connect().ObserveOnDispatcher().Bind(_Transitions2).Subscribe();
52-
5346
SetupCommands();
5447
SetupBinding();
5548
}
@@ -61,7 +54,9 @@ public ViewModelNode(ViewModelNodesCanvas nodesCanvas, string name, Point point)
6154
Name = name;
6255
Zindex = nodesCanvas.Nodes.Count;
6356
Point1 = point;
57+
Transitions.Connect().ObserveOnDispatcher().Bind(Transitions2).Subscribe();
6458
SetupConnectors();
59+
6560
SetupCommands();
6661
SetupBinding();
6762
SetupSubscriptions();
@@ -78,9 +73,15 @@ private void SetupBinding()
7873
private void SetupSubscriptions()
7974
{
8075
this.WhenAnyValue(x => x.Selected).Subscribe(value => { this.BorderBrush = value ? Application.Current.Resources["ColorSelectedElement"] as SolidColorBrush : Brushes.LightGray; });
81-
this.WhenAnyValue(x => x.Transitions.Count).Buffer(2, 1).Select(x => (Previous: x[0], Current: x[1])).Subscribe(x => UpdateCount(x.Previous, x.Current));
76+
this.WhenAnyValue(x => x.Transitions2.Count).Buffer(2, 1).Select(x => (Previous: x[0], Current: x[1])).Subscribe(x => UpdateCount(x.Previous, x.Current));
8277
this.WhenAnyValue(x => x.Point1, x => x.Size).Subscribe(_ => UpdatePoint2());
83-
this.WhenAnyValue(x => x.IsCollapse).Subscribe(value => Collapse(value));
78+
this.WhenAnyValue(x => x.IsCollapse).Subscribe(value => Collapse(value));
79+
80+
//this.WhenAnyValue(x => x.Transitions.Count).Subscribe(value => UpdateCount(value));
81+
}
82+
private void UpdateCount(int value)
83+
{
84+
NodesCanvas.TransitionsCount++;
8485
}
8586
#endregion Setup Subscriptions
8687
#region Connectors
@@ -100,7 +101,7 @@ private void UpdatePoint2()
100101
}
101102
private void UpdateCount(int oldValue, int newValue)
102103
{
103-
if (newValue > oldValue)
104+
if ((oldValue>0)&&(newValue > oldValue))
104105
{
105106
NodesCanvas.TransitionsCount++;
106107
}

SimpleStateMachineNodeEditor/ViewModel/NodesCanvas/ViewModelNodesCanvas.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,17 @@
1414
using System.Collections.Generic;
1515
using System.Windows.Controls;
1616
using System.Windows.Media;
17+
using DynamicData;
1718

1819
namespace SimpleStateMachineNodeEditor.ViewModel
1920
{
2021
public partial class ViewModelNodesCanvas : ReactiveObject
2122
{
2223
public ObservableCollectionExtended<ViewModelConnect> Connects = new ObservableCollectionExtended<ViewModelConnect>();
2324

24-
public ObservableCollectionExtended<ViewModelNode> Nodes = new ObservableCollectionExtended<ViewModelNode>();
25+
//public ObservableCollectionExtended<ViewModelNode> Nodes = new ObservableCollectionExtended<ViewModelNode>();
26+
public SourceList<ViewModelNode> Nodes = new SourceList<ViewModelNode>();
27+
public ObservableCollectionExtended<ViewModelNode> Nodes2 = new ObservableCollectionExtended<ViewModelNode>();
2528
public ObservableCollectionExtended<ViewModelMessage> Messages { get; set; } = new ObservableCollectionExtended<ViewModelMessage>();
2629

2730
[Reactive] public Point PositionRight { get; set; }
@@ -46,14 +49,16 @@ public partial class ViewModelNodesCanvas : ReactiveObject
4649
[Reactive] public bool WithoutMessages { get; set; }
4750
[Reactive] public Themes Theme { get; set; } = Themes.Dark;
4851

52+
53+
4954
static Dictionary<Themes, string> themesPaths = new Dictionary<Themes, string>()
5055
{
5156
{Themes.Dark, @"Styles\Themes\Dark.xaml" },
5257
{Themes.Light, @"Styles\Themes\Light.xaml"},
5358
};
5459

5560
public int NodesCount = 0;
56-
public int TransitionsCount = 1;
61+
public int TransitionsCount = 0;
5762
public double ScaleMax = 5;
5863
public double ScaleMin = 0.1;
5964
public double Scales { get; set; } = 0.05;
@@ -62,6 +67,7 @@ public partial class ViewModelNodesCanvas : ReactiveObject
6267
public ViewModelNodesCanvas()
6368
{
6469
Cutter = new ViewModelCutter(this);
70+
Nodes.Connect().ObserveOnDispatcher().Bind(Nodes2).Subscribe();
6571
SetupCommands();
6672
SetupSubscriptions();
6773
SetupStartState();
@@ -80,7 +86,7 @@ private void SetupSubscriptions()
8086

8187
private void SetupStartState()
8288
{
83-
string name = Nodes.Any(x => x.Name == "Start") ? GetNameForNewNode() : "Start";
89+
string name = Nodes.Items.Any(x => x.Name == "Start") ? GetNameForNewNode() : "Start";
8490
StartState = new ViewModelNode(this, name, new Point());
8591
SetAsStart(StartState);
8692
Nodes.Add(StartState);

0 commit comments

Comments
 (0)