Skip to content

Commit 4f79078

Browse files
committed
select for connectors
1 parent 378cbbc commit 4f79078

5 files changed

Lines changed: 97 additions & 38 deletions

File tree

SimpleStateMachineNodeEditor/View/ViewNode.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
66
xmlns:local="clr-namespace:SimpleStateMachineNodeEditor.View"
77
xmlns:NodeStyles="clr-namespace:SimpleStateMachineNodeEditor.Styles.Node"
8-
xmlns:View="clr-namespace:SimpleStateMachineNodeEditor.View" xmlns:enums="clr-namespace:SimpleStateMachineNodeEditor.Helpers.Enums"
8+
xmlns:View="clr-namespace:SimpleStateMachineNodeEditor.View"
9+
xmlns:enums="clr-namespace:SimpleStateMachineNodeEditor.Helpers.Enums"
910
mc:Ignorable="d" Focusable="True" AllowDrop="True" Visibility="Visible">
1011

1112
<Border x:Name="BorderElement" CornerRadius="5,5,5,5" BorderThickness="1,1,1,1" HorizontalAlignment="Left" VerticalAlignment="Top" MinWidth="80" Background="{StaticResource ColorNodeBody}" >

SimpleStateMachineNodeEditor/View/ViewRightConnector.xaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
33
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
44
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:enums="clr-namespace:SimpleStateMachineNodeEditor.Helpers.Enums"
56
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
67
mc:Ignorable="d"
78
x:Name="RightConnector" HorizontalAlignment="Stretch" VerticalAlignment="Top" BorderThickness="0" AllowDrop="True">
@@ -26,4 +27,8 @@
2627
<TranslateTransform x:Name="TranslateTransform"/>
2728
</TransformGroup>
2829
</UserControl.RenderTransform>
30+
<!--<UserControl.InputBindings>
31+
<MouseBinding x:Name="BindingSelectWithCtrl" Gesture="Ctrl+LeftClick" />
32+
--><!--<MouseBinding x:Name="BindingSelectWithShift" Gesture="Shift+LeftClick" CommandParameter="{x:Static enums:SelectMode.ClickWithShift}"/>--><!--
33+
</UserControl.InputBindings>-->
2934
</UserControl>

SimpleStateMachineNodeEditor/View/ViewRightConnector.xaml.cs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ object IViewFor.ViewModel
4343
public ViewRightConnector()
4444
{
4545
InitializeComponent();
46+
SetupCommands();
4647
SetupBinding();
47-
SetupEvents();
48-
48+
SetupEvents();
4949
}
5050

5151
#region SetupBinding
@@ -78,7 +78,16 @@ private void SetupBinding()
7878
});
7979
}
8080
#endregion SetupBinding
81-
81+
#region Setup Commands
82+
private void SetupCommands()
83+
{
84+
this.WhenActivated(disposable =>
85+
{
86+
//this.BindCommand(this.ViewModel, x => x.CommandSelect, x => x.BindingSelectWithCtrl).DisposeWith(disposable);
87+
//this.BindCommand(this.ViewModel, x => x.CommandSelect, x => x.BindingSelectWithShift).DisposeWith(disposable);
88+
});
89+
}
90+
#endregion Setup Commands
8291
#region SetupEvents
8392

8493
private void test(bool value)
@@ -90,7 +99,7 @@ private void SetupEvents()
9099
{
91100
this.WhenActivated(disposable =>
92101
{
93-
this.EllipseElement.Events().MouseLeftButtonDown.Subscribe(e => ConnectDrag(e)).DisposeWith(disposable);
102+
this.EllipseElement.Events().PreviewMouseLeftButtonDown.Subscribe(e => ConnectDrag(e)).DisposeWith(disposable);
94103
this.TextBoxElement.Events().LostFocus.Subscribe(e => Validate(e)).DisposeWith(disposable);
95104
this.BorderElement.Events().PreviewMouseLeftButtonDown.Subscribe(e => ConnectorDrag(e)).DisposeWith(disposable);
96105
this.BorderElement.Events().PreviewDragEnter.Subscribe(e => ConnectorDragEnter(e)).DisposeWith(disposable);
@@ -132,17 +141,20 @@ private void ConnectorDrag(MouseButtonEventArgs e)
132141
DataObject data = new DataObject();
133142
data.SetData("Connector", this.ViewModel);
134143
DragDrop.DoDragDrop(this, data, DragDropEffects.Link);
135-
e.Handled = true;
136144
}
137-
else if (Keyboard.IsKeyDown(Key.LeftAlt))
145+
else if (Keyboard.IsKeyDown(Key.LeftShift))
138146
{
139-
147+
this.ViewModel.CommandSelect.Execute(SelectMode.ClickWithShift);
148+
}
149+
else if (Keyboard.IsKeyDown(Key.LeftCtrl))
150+
{
151+
this.ViewModel.CommandSelect.Execute(SelectMode.ClickWithCtrl);
140152
}
141153
else
142154
{
143155
this.ViewModel.CommandSelect.Execute(SelectMode.Click);
144156
}
145-
157+
e.Handled = true;
146158
}
147159

148160
private void ConnectorDragEnter(DragEventArgs e)

SimpleStateMachineNodeEditor/ViewModel/ViewModelConnector.cs

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ private void SetupBinding()
9696
public SimpleCommand CommandSetAsLoop { get; set; }
9797
public SimpleCommand CommandAdd { get; set; }
9898
public SimpleCommand CommandDelete { get; set; }
99-
public SimpleCommandWithParameter<bool> CommandSelect { get; set; }
99+
public SimpleCommandWithParameter<SelectMode> CommandSelect { get; set; }
100100
public SimpleCommandWithParameter<string> CommandValidateName { get; set; }
101101

102102
private void SetupCommands()
@@ -115,39 +115,40 @@ private void SetupCommands()
115115
CommandDelete = new SimpleCommand(Delete);
116116
CommandValidateName = new SimpleCommandWithParameter<string>(ValidateName, NotSaved);
117117

118-
CommandSelect = new SimpleCommandWithParameter<bool>(Select);
118+
CommandSelect = new SimpleCommandWithParameter<SelectMode>(Select);
119119

120120

121121
//SimpleCommandWithResult<bool, Func<bool>> t = new SimpleCommandWithResult<bool, Func<bool>>()
122122
}
123123

124-
private void Select(bool obj)
124+
private void Select(SelectMode selectMode)
125125
{
126-
//SelectMode selectMode = (SelectMode)obj;
127-
//ViewModelConnect viewModelConnect;
128-
////if (obj?.GetType() == typeof(ViewModelConnect))\
129-
//if (obj is SelectMode)
130-
//{
131-
// viewModelConnect = (ViewModelConnect)obj;
132-
//}
133-
//else
134-
//{
135-
// viewModelConnect = default(ViewModelConnect);
136-
//}
137-
126+
switch(selectMode)
127+
{
128+
case SelectMode.Click:
129+
{
130+
if(!this.Selected)
131+
{
132+
this.Node.CommandUnSelectedAllConnectors.Execute();
133+
this.Selected = true;
134+
}
135+
136+
break;
137+
}
138+
case SelectMode.ClickWithCtrl:
139+
{
140+
this.Selected = !this.Selected;
141+
break;
142+
}
143+
case SelectMode.ClickWithShift:
144+
{
145+
this.Node.CommandSelectWithShiftForConnectors.Execute(this);
146+
break;
147+
}
148+
}
138149

139-
//if (selectMode==SelectMode.Click)
140-
//{
141-
// this.Selected = !this.Selected;
142-
// return;
143-
//}
144-
//else
145-
//{
146-
// this.Selected = (bool)obj;
147-
//}
148150

149151
}
150-
151152
private void NotSaved()
152153
{
153154
NodesCanvas.ItSaved = false;

SimpleStateMachineNodeEditor/ViewModel/ViewModelNode.cs

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using System.Linq;
1515
using System.Xml.Linq;
1616
using SimpleStateMachineNodeEditor.Helpers.Enums;
17+
using DynamicData;
1718

1819
namespace SimpleStateMachineNodeEditor.ViewModel
1920
{
@@ -96,8 +97,10 @@ private void SetupConnectors()
9697

9798
public SimpleCommandWithParameter<string> CommandValidateName { get; set; }
9899

100+
public SimpleCommandWithParameter<ViewModelConnector> CommandSelectWithShiftForConnectors { get; set; }
101+
public SimpleCommand CommandUnSelectedAllConnectors { get; set; }
99102
public SimpleCommand CommandAddEmptyConnector { get; set; }
100-
103+
101104

102105
//public SimpleCommand CommandTransitionsDragLeave { get; set; }
103106

@@ -115,6 +118,8 @@ private void SetupCommands()
115118
CommandMove = new SimpleCommandWithParameter<MyPoint>(Move, NotSaved);
116119
CommandAddEmptyConnector = new SimpleCommand(AddEmptyConnector);
117120
CommandCollapse = new SimpleCommandWithParameter<bool>(Collapse, NotSaved);
121+
CommandSelectWithShiftForConnectors = new SimpleCommandWithParameter<ViewModelConnector>(SelectWithShiftForConnectors);
122+
CommandUnSelectedAllConnectors = new SimpleCommand(UnSelectedAllConnectors);
118123
//CommandTransitionsDragLeave = new SimpleCommand(TransitionsDragLeave);
119124
//CommandTransitionsDragEnter = new SimpleCommand(TransitionsDragEnter);
120125
//CommandTransitionsDrop = new SimpleCommand(TransitionsDrop);
@@ -161,7 +166,7 @@ private void Select(SelectMode selectMode)
161166
this.Selected = !this.Selected;
162167
return;
163168
}
164-
else if((selectMode == SelectMode.Click)&&(!Selected))
169+
else if ((selectMode == SelectMode.Click) && (!Selected))
165170
{
166171
NodesCanvas.CommandUnSelectAll.Execute();
167172
this.Selected = true;
@@ -185,8 +190,8 @@ private void AddEmptyConnector()
185190
if (CurrentConnector != null)
186191
{
187192
CurrentConnector.TextEnable = true;
188-
CurrentConnector.FormEnable = false;
189-
if(string.IsNullOrEmpty(CurrentConnector.Name))
193+
CurrentConnector.FormEnable = false;
194+
if (string.IsNullOrEmpty(CurrentConnector.Name))
190195
CurrentConnector.Name = "Transition " + NodesCanvas.Nodes.Sum(x => x.Transitions.Count - 1).ToString();
191196
}
192197
CurrentConnector = new ViewModelConnector(NodesCanvas, this)
@@ -195,7 +200,42 @@ private void AddEmptyConnector()
195200
};
196201
Transitions.Insert(0, CurrentConnector);
197202
}
203+
private void UnSelectedAllConnectors()
204+
{
205+
foreach(var transition in Transitions)
206+
{
207+
transition.Selected = false;
208+
}
209+
}
210+
private void SelectWithShiftForConnectors(ViewModelConnector viewModelConnector)
211+
{
212+
if (viewModelConnector == null)
213+
return;
214+
215+
var transitions = this.Transitions.Skip(1);
216+
217+
int index = transitions.IndexOf(viewModelConnector);
198218

219+
if ((!transitions.First().Selected) &&(transitions.Last().Selected))
220+
{
221+
UnSelectedAllConnectors();
222+
foreach (var transition in transitions.TakeLast(transitions.Count() - index))
223+
{
224+
transition.Selected = true;
225+
}
226+
return;
227+
}
228+
else
229+
{
230+
UnSelectedAllConnectors();
231+
//var t = transitions.Take(index);
232+
foreach (var transition in transitions.Take(index + 1))
233+
{
234+
transition.Selected = true;
235+
}
236+
return;
237+
}
238+
}
199239
public XElement ToXElement()
200240
{
201241
XElement element = new XElement("State");

0 commit comments

Comments
 (0)