Skip to content

Commit 1bc138f

Browse files
Merge pull request #3 from SimpleStateMachine/develop
Big update
2 parents c14aacd + 5b2e69a commit 1bc138f

File tree

84 files changed

+2649
-2707
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+2649
-2707
lines changed

SimpleStateMachineNodeEditor/App.xaml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
<Application.Resources>
77
<ResourceDictionary>
88
<ResourceDictionary.MergedDictionaries>
9-
<ResourceDictionary Source="Icons/Icons.xaml"/>
109
<ResourceDictionary Source="Styles/Themes/Dark.xaml"/>
1110
<!--<ResourceDictionary Source="Styles/Themes/Light.xaml"/>-->
11+
<ResourceDictionary Source="Icons/Icons.xaml"/>
12+
13+
1214
<!--<ResourceDictionary Source="Styles/Theme.xaml"/>-->
1315
<ResourceDictionary Source="Styles/ErrorList/StyleExpander.xaml"/>
1416
<ResourceDictionary Source="Styles/ErrorList/StyleScrollBar.xaml"/>
@@ -46,12 +48,11 @@
4648
<ResourceDictionary Source="Styles/MainWindow/CustomWindowTemplate.xaml"/>
4749

4850
<!--#region Header-->
49-
<ResourceDictionary Source="Styles/MainWindow/ToolBar/ToolButtonTemplate.xaml"/>
51+
<ResourceDictionary Source="Styles/MainWindow/ToolBar/ToolButtonTemplate.xaml"/>
5052
<ResourceDictionary Source="Styles/MainWindow/ToolBar/TemplateSeparator.xaml"/>
51-
<ResourceDictionary Source="Styles/MainWindow/ToolBarTemplate.xaml"/>
53+
<ResourceDictionary Source="Styles/MainWindow/ToolBarTemplate.xaml"/>
5254
<ResourceDictionary Source="Styles/MainWindow/Header/StyleHeaderButton.xaml"/>
53-
<ResourceDictionary Source="Styles/MainWindow/Header/StyleHeaderButtonClosePath.xaml"/>
54-
<!--#endregion Header-->
55+
<!--#endregion Header-->
5556

5657
<!--#endregion MainWindow-->
5758

SimpleStateMachineNodeEditor/Helpers/Commands/Command.cs

Lines changed: 11 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -4,129 +4,72 @@
44

55
namespace SimpleStateMachineNodeEditor.Helpers.Commands
66
{
7-
public class Command<TParameter, TResult> : CommandWithUndoRedo, ICommand, ICloneable
7+
public class Command<TParameter, TResult> : ICommandWithUndoRedo, ICommand, ICloneable
88
{
9-
109
private readonly Func<TParameter, TResult, TResult> _execute;
11-
12-
/// <summary>
13-
/// Функция отмены команды
14-
/// </summary>
1510
private readonly Func<TParameter, TResult, TResult> _unExecute;
16-
1711
public Action OnExecute { get; set; }
18-
19-
/// <summary>
20-
/// Параметр, который был передан в команду при выполнении
21-
/// </summary>
2212
public TParameter Parameters { get; set; }
23-
24-
/// <summary>
25-
/// Результат выполнения команды
26-
/// Например здесь может храниться список объектов, которые были изменены
2713
public TResult Result { get; set; }
28-
/// </summary>
29-
30-
31-
/// <summary>
32-
/// Клонирование текущей команды, для записи в стек выполненных или отмененных команд
33-
/// </summary>
34-
/// <returns></returns>
3514
public object Clone()
36-
{
37-
15+
{
3816
return new Command<TParameter, TResult>(_execute, _unExecute, OnExecute)
3917
{
4018
Parameters = this.Parameters,
4119
Result = this.Result
4220
};
4321
}
4422

45-
/// <summary>
46-
/// Требуется интерфейсом ICloneable, не используется
47-
/// </summary>
23+
4824
public event EventHandler CanExecuteChanged
4925
{
5026
add { CommandManager.RequerySuggested += value; }
5127
remove { CommandManager.RequerySuggested -= value; }
5228
}
5329

54-
/// <summary>
55-
/// Требуется интерфейсом ICloneable, не используется
56-
/// </summary>
57-
/// <param name="parameter"></param>
58-
/// <returns>Всегда возвращает true</returns>
5930
public bool CanExecute(object parameter)
6031
{
6132
return true;
6233
}
6334

64-
/// <summary>
65-
/// Выполнение команды
66-
/// </summary>
67-
/// <param name="parameter"> Параметр команды </param>
6835
public void Execute(object parameter)
6936
{
70-
//Запоминаем параметр ( чтобы можно было егоже передать в отмену)
7137
Parameters = parameter.Cast<TParameter>();
7238

73-
//Выполняем команду и запоминаем результат ( чтобы можно было выполнить отмену именно для этого результата)
7439
Result = this._execute(Parameters, Result).Cast<TResult>();
7540

76-
//Добавляем копию команды в стек команд, которые можно отменить
77-
CommandWithUndoRedo.AddInUndo(this.Clone() as CommandWithUndoRedo);
41+
ICommandWithUndoRedo.AddInUndo(this.Clone() as ICommandWithUndoRedo);
7842

79-
//Очищаем список отмененнных команд ( началась новая ветка изменений)
80-
CommandWithUndoRedo.StackRedo.Clear();
43+
ICommandWithUndoRedo.StackRedo.Clear();
8144

82-
//Очищаем результат ( чтобы не передавать его при повторном выполнении)
8345
Result = default(TResult);
8446

85-
//Очищаем параметр ( чтобы не передавать его при повторном выполнении)
8647
Parameters = default(TParameter);
8748

8849
OnExecute?.Invoke();
8950
}
9051

91-
/// <summary>
92-
/// Отмена команды
93-
/// </summary>
9452
public void UnExecute()
9553
{
96-
//Выполняем отмену команду
9754
this._unExecute(Parameters, Result);
9855

99-
//Добавляем копию команды в стек команд, которые можно выполнить повторно
100-
CommandWithUndoRedo.AddInRedo(this.Clone() as CommandWithUndoRedo);
56+
ICommandWithUndoRedo.AddInRedo(this.Clone() as ICommandWithUndoRedo);
10157
}
10258

103-
/// <summary>
104-
/// Повторное выполнения команды
105-
/// </summary>
106-
public void Execute()
59+
public void ExecuteWithSubscribe()
10760
{
108-
//Выполянем команду
10961
this.Result = this._execute(this.Parameters, this.Result);
11062

111-
//Добавляем копию команды в стек команд, которые можно отменить
112-
CommandWithUndoRedo.AddInUndo(this.Clone() as CommandWithUndoRedo);
63+
ICommandWithUndoRedo.AddInUndo(this.Clone() as ICommandWithUndoRedo);
11364
}
11465

115-
/// <summary>
116-
/// Создать отменяемую команду
117-
/// </summary>
118-
/// <param name="owner">Объкт, которому принадлежит команда</param>
119-
/// <param name="execute">Функция, которая будет вызвана при выполнении команды</param>
120-
/// <param name="unExecute">Функция, которая будет вызвана при отмене команды</param>
121-
public Command(Func<TParameter, TResult, TResult> execute, Func<TParameter, TResult, TResult> unExecute, Action onExecute = null)
66+
public Command(Func<TParameter, TResult, TResult> ExecuteWithSubscribe, Func<TParameter, TResult, TResult> unExecute, Action onExecute = null)
12267
{
123-
_execute = execute;
68+
_execute = ExecuteWithSubscribe;
12469

12570
_unExecute = unExecute;
12671

127-
OnExecute += onExecute;
128-
129-
72+
OnExecute += onExecute;
13073
}
13174
}
13275
}

SimpleStateMachineNodeEditor/Helpers/Commands/CommandWithUndoRedo.cs

Lines changed: 0 additions & 48 deletions
This file was deleted.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using System.Collections.Generic;
2+
3+
4+
namespace SimpleStateMachineNodeEditor.Helpers.Commands
5+
{
6+
public interface ICommandWithUndoRedo
7+
{
8+
public static Stack<ICommandWithUndoRedo> StackRedo { get; set; } = new Stack<ICommandWithUndoRedo>();
9+
10+
public static Stack<ICommandWithUndoRedo> StackUndo { get; set; } = new Stack<ICommandWithUndoRedo>();
11+
12+
public static void Redo()
13+
{
14+
if (StackRedo.Count > 0)
15+
{
16+
ICommandWithUndoRedo last = StackRedo.Pop();
17+
last.ExecuteWithSubscribe();
18+
}
19+
}
20+
21+
public static void Undo()
22+
{
23+
if (StackUndo.Count > 0)
24+
{
25+
ICommandWithUndoRedo last = StackUndo.Pop();
26+
last.UnExecute();
27+
}
28+
}
29+
30+
public static ICommandWithUndoRedo AddInRedo(ICommandWithUndoRedo command)
31+
{
32+
StackRedo.Push(command);
33+
34+
return command;
35+
}
36+
37+
public static ICommandWithUndoRedo AddInUndo(ICommandWithUndoRedo command)
38+
{
39+
StackUndo.Push(command);
40+
41+
return command;
42+
}
43+
44+
public void ExecuteWithSubscribe();
45+
public void UnExecute();
46+
47+
}
48+
}

SimpleStateMachineNodeEditor/Helpers/Commands/Interface1.cs

Lines changed: 0 additions & 62 deletions
This file was deleted.

SimpleStateMachineNodeEditor/Helpers/Commands/ReactiveCommandWithUndoRedo.cs

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)