Skip to content

Commit fd45b5f

Browse files
committed
for messages
1 parent 28d38dd commit fd45b5f

19 files changed

Lines changed: 301 additions & 142 deletions

SimpleStateMachineNodeEditor/Helpers/Commands/Command.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public class Command<TParameter, TResult> : CommandUndoRedo, ICommand, ICloneabl
2222
/// </summary>
2323
private readonly Func<TParameter, TResult, TResult> _unExecute;
2424

25+
public Action OnExecute { get; set; }
26+
2527
/// <summary>
2628
/// Параметр, который был передан в команду при выполнении
2729
/// </summary>
@@ -33,11 +35,6 @@ public class Command<TParameter, TResult> : CommandUndoRedo, ICommand, ICloneabl
3335
/// Например здесь может храниться список объектов, которые были изменены
3436
public TResult Result { get; set; }
3537

36-
/// <summary>
37-
/// Объкт, которому принадлежит команда
38-
/// </summary>
39-
public object Owner { get; protected set; }
40-
4138
/// <summary>
4239
/// Флаг того, является ли команда отменяемой
4340
/// </summary>
@@ -52,7 +49,7 @@ private bool CanUnExecute
5249
/// <returns></returns>
5350
public object Clone()
5451
{
55-
return new Command<TParameter, TResult>(Owner, _execute, _unExecute)
52+
return new Command<TParameter, TResult>(_execute, _unExecute, OnExecute)
5653
{
5754
Parameters = this.Parameters,
5855
Result = this.Result
@@ -106,6 +103,8 @@ public void Execute(object parameter)
106103

107104
//Очищаем параметр ( чтобы не передавать его при повторном выполнении)
108105
Parameters = null;
106+
107+
OnExecute?.Invoke();
109108
}
110109

111110
/// <summary>
@@ -137,10 +136,11 @@ public override void Execute()
137136
/// </summary>
138137
/// <param name="owner">Объкт, которому принадлежит команда</param>
139138
/// <param name="action">Функция, которая будет вызвана при выполнении команды</param>
140-
private Command(object owner, Func<TParameter, TResult, TResult> execute)
139+
private Command(Func<TParameter, TResult, TResult> execute, Action onExecute = null)
141140
{
142-
Owner = owner;
143141
_execute = execute;
142+
143+
OnExecute += onExecute;
144144
}
145145

146146
/// <summary>
@@ -149,7 +149,7 @@ private Command(object owner, Func<TParameter, TResult, TResult> execute)
149149
/// <param name="owner">Объкт, которому принадлежит команда</param>
150150
/// <param name="execute">Функция, которая будет вызвана при выполнении команды</param>
151151
/// <param name="unExecute">Функция, которая будет вызвана при отмене команды</param>
152-
public Command(object owner, Func<TParameter, TResult, TResult> execute, Func<TParameter, TResult, TResult> unExecute) : this(owner, execute)
152+
public Command(Func<TParameter, TResult, TResult> execute, Func<TParameter, TResult, TResult> unExecute, Action onExecute = null) : this(execute, onExecute)
153153
{
154154
_unExecute = unExecute;
155155
}

SimpleStateMachineNodeEditor/Helpers/Commands/SimpleCommand.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ public class SimpleCommand : ICommand
1010
/// </summary>
1111
private Action _execute;
1212

13-
/// <summary>
14-
/// Объкт, которому принадлежит команда
15-
/// </summary>
16-
public object Owner { get; protected set; }
13+
public Action OnExecute { get; set; }
1714

1815
/// <summary>
1916
/// Требуется интерфейсом ICloneable, не используется
@@ -41,17 +38,18 @@ public bool CanExecute(object parameter)
4138
public void Execute(object parameter = null)
4239
{
4340
this._execute();
41+
OnExecute?.Invoke();
4442
}
4543

4644
/// <summary>
4745
/// Создать команду
4846
/// </summary>
4947
/// <param name="owner">Объкт, которому принадлежит команда</param>
5048
/// <param name="execute">Функция, которая будет вызвана при выполнении команды</param>
51-
public SimpleCommand(object owner, Action execute)
49+
public SimpleCommand(Action execute, Action onExecute = null)
5250
{
53-
Owner = owner;
5451
_execute = execute;
52+
OnExecute += onExecute;
5553
}
5654
}
5755
}

SimpleStateMachineNodeEditor/Helpers/Commands/SimpleCommandWithParameter.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@ public class SimpleCommandWithParameter<TParameter> : ICommand where TParameter
1414
/// </summary>
1515
private Action<TParameter> _execute;
1616

17-
/// <summary>
18-
/// Объкт, которому принадлежит команда
19-
/// </summary>
20-
public object Owner { get; protected set; }
17+
public Action OnExecute { get; set; }
2118

2219
/// <summary>
2320
/// Требуется интерфейсом ICloneable, не используется
@@ -45,17 +42,18 @@ public bool CanExecute(object parameter)
4542
public void Execute(object parameter)
4643
{
4744
this._execute(parameter as TParameter);
45+
OnExecute?.Invoke();
4846
}
4947

5048
/// <summary>
5149
/// Создать команду
5250
/// </summary>
5351
/// <param name="owner">Объкт, которому принадлежит команда</param>
5452
/// <param name="execute">Функция, которая будет вызвана при выполнении команды</param>
55-
public SimpleCommandWithParameter(object owner, Action<TParameter> execute)
53+
public SimpleCommandWithParameter(Action<TParameter> execute, Action onExecute = null)
5654
{
57-
Owner = owner;
5855
_execute = execute;
56+
OnExecute += onExecute;
5957
}
6058
}
6159
}

SimpleStateMachineNodeEditor/Helpers/Commands/SimpleCommandWithResult.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@ public class SimpleCommandWithResul<TResult> : ICommand
1111
/// </summary>
1212
private Func<TResult> _execute;
1313

14-
/// <summary>
15-
/// Объкт, которому принадлежит команда
16-
/// </summary>
17-
public object Owner { get; protected set; }
14+
public Action OnExecute { get; set; }
1815

1916
/// <summary>
2017
/// Требуется интерфейсом ICloneable, не используется
@@ -49,17 +46,18 @@ public void Execute(object parameter = null)
4946
{
5047
//Result = this._execute(Parameters, Result) as TResult;
5148
this._execute();
49+
OnExecute?.Invoke();
5250
}
5351

5452
/// <summary>
5553
/// Создать команду
5654
/// </summary>
5755
/// <param name="owner">Объкт, которому принадлежит команда</param>
5856
/// <param name="execute">Функция, которая будет вызвана при выполнении команды</param>
59-
public SimpleCommandWithResul(object owner, Func<TResult> execute)
57+
public SimpleCommandWithResul(Func<TResult> execute, Action onExecute = null)
6058
{
61-
Owner = owner;
6259
_execute = execute;
60+
OnExecute += onExecute;
6361
}
6462
}
6563
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using System.Windows.Forms;
5+
6+
namespace SimpleStateMachineNodeEditor.Helpers.Enums
7+
{
8+
public enum TypeMessage
9+
{
10+
NotCorrect = 0,
11+
Debug,
12+
Error,
13+
Information,
14+
Warning
15+
}
16+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using SimpleStateMachineNodeEditor.ViewModel;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Text;
5+
6+
namespace SimpleStateMachineNodeEditor.Helpers.Logging
7+
{
8+
public interface WithLogging
9+
{
10+
11+
public void LogDebug(string message)
12+
{
13+
14+
}
15+
public void LogError(string message)
16+
{
17+
18+
}
19+
public void LogInformation(string message)
20+
{
21+
22+
}
23+
public void LogWarning(string message)
24+
{
25+
26+
}
27+
28+
}
29+
}

SimpleStateMachineNodeEditor/SimpleStateMachineNodeEditor.csproj

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@
4444

4545
<ItemGroup>
4646
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
47-
<PackageReference Include="ReactiveUI" Version="11.2.3" />
48-
<PackageReference Include="ReactiveUI.Events.WPF" Version="11.2.3" />
49-
<PackageReference Include="ReactiveUI.Fody" Version="11.2.3" />
50-
<PackageReference Include="ReactiveUI.Validation" Version="1.4.10" />
51-
<PackageReference Include="ReactiveUI.WPF" Version="11.2.3" />
52-
<PackageReference Include="Splat" Version="9.3.11" />
53-
<PackageReference Include="Splat.Drawing" Version="9.3.11" />
47+
<PackageReference Include="ReactiveUI" Version="11.3.8" />
48+
<PackageReference Include="ReactiveUI.Events.WPF" Version="11.3.8" />
49+
<PackageReference Include="ReactiveUI.Fody" Version="11.3.8" />
50+
<PackageReference Include="ReactiveUI.Validation" Version="1.4.13" />
51+
<PackageReference Include="ReactiveUI.WPF" Version="11.3.8" />
52+
<PackageReference Include="Splat" Version="9.4.5" />
53+
<PackageReference Include="Splat.Drawing" Version="9.4.5" />
5454
</ItemGroup>
5555

5656
<ItemGroup>

SimpleStateMachineNodeEditor/Styles/ErrorList/LabelTemplate.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</Border>
1717
<ControlTemplate.Triggers>
1818
<Trigger Property="IsMouseOver" Value="true">
19-
<Setter Property="Foreground" Value="#007acc"/>
19+
<Setter Property="Foreground" Value="{DynamicResource ColorHeaderButtonIsPressed}"/>
2020
</Trigger>
2121
</ControlTemplate.Triggers>
2222
</ControlTemplate>

SimpleStateMachineNodeEditor/View/MainWindow.xaml.cs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,16 @@ private void SetupEvents()
8787
this.WhenActivated(disposable =>
8888
{
8989
this.Header.Events().PreviewMouseLeftButtonDown.Subscribe(e => HeaderClick(e)).DisposeWith(disposable);
90-
this.ButtonClose.Events().Click.Subscribe(e => ButtonCloseClick(e)).DisposeWith(disposable);
90+
this.ButtonClose.Events().Click.Subscribe(_ => WithoutSaving(ButtonCloseClick)).DisposeWith(disposable);
9191
this.ButtonMin.Events().Click.Subscribe(e => ButtonMinClick(e)).DisposeWith(disposable);
9292
this.ButtonMax.Events().Click.Subscribe(e => ButtonMaxClick(e)).DisposeWith(disposable);
9393
this.ItemExportToJPEG.Events().Click.Subscribe(_ => ExportToImage(ImageFormats.JPEG)).DisposeWith(disposable);
9494
this.ItemExportToPNG.Events().Click.Subscribe(_ => ExportToImage(ImageFormats.PNG)).DisposeWith(disposable);
9595
this.ItemSave.Events().Click.Subscribe(_=> Save()).DisposeWith(disposable);
9696
this.ItemSaveAs.Events().Click.Subscribe(_ => SaveAs()).DisposeWith(disposable);
97-
this.ItemOpen.Events().Click.Subscribe(_ => Open()).DisposeWith(disposable);
98-
this.ItemExit.Events().Click.Subscribe(_=>Close()).DisposeWith(disposable);
99-
this.ItemNew.Events().Click.Subscribe(_ => New()).DisposeWith(disposable);
97+
this.ItemOpen.Events().Click.Subscribe(_ => WithoutSaving(Open)).DisposeWith(disposable);
98+
this.ItemExit.Events().Click.Subscribe(_=> WithoutSaving(ButtonCloseClick)).DisposeWith(disposable);
99+
this.ItemNew.Events().Click.Subscribe(_ => WithoutSaving(New)).DisposeWith(disposable);
100100
this.ItemUndo.Events().Click.Subscribe(_=>this.NodesCanvas.ViewModel.CommandUndo.Execute()).DisposeWith(disposable);
101101
this.ItemRedo.Events().Click.Subscribe(_ => this.NodesCanvas.ViewModel.CommandRedo.Execute()).DisposeWith(disposable);
102102
this.ErrorListExpander.Events().Collapsed.Subscribe(_=> ErrorListCollapse()).DisposeWith(disposable);
@@ -112,14 +112,14 @@ void ErrorListCollapse()
112112
void ErrorListExpanded()
113113
{
114114
this.ErrorListSplitter.IsEnabled = true;
115-
if(this.MessageList.Items.Count>this.ViewModel.CountShowingMessage)
115+
//if(this.MessageList.Items.Count>this.ViewModel.CountShowingMessage)
116116
this.Fotter.Height = new GridLength(this.ViewModel.MaxHeightMessagePanel);
117117
}
118118
void StateNormalMaximaze()
119119
{
120120
this.WindowState = this.WindowState == WindowState.Normal ? WindowState.Maximized : WindowState.Normal;
121121
}
122-
void ButtonCloseClick(RoutedEventArgs e)
122+
void ButtonCloseClick()
123123
{
124124
this.Close();
125125
}
@@ -180,6 +180,17 @@ void New()
180180
{
181181
this.NodesCanvas.ViewModel.CommandNew.Execute();
182182
}
183+
void WithoutSaving(Action action)
184+
{
185+
var result = MessageBoxResult.Yes;
186+
if (!this.NodesCanvas.ViewModel.ItSaved)
187+
{
188+
result = System.Windows.MessageBox.Show("Exit without saving ?", "Test", MessageBoxButton.YesNo);
189+
}
190+
191+
if (result == MessageBoxResult.Yes)
192+
action.Invoke();
193+
}
183194

184195
void Save()
185196
{
@@ -217,6 +228,7 @@ void Open()
217228
{
218229
this.NodesCanvas.ViewModel.CommandOpen.Execute(dlg.FileName);
219230
}
231+
220232
}
221233
#endregion SetupEvents
222234

SimpleStateMachineNodeEditor/View/ViewNodesCanvas.xaml.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,11 @@ private void OnEventMouseDown(MouseButtonEventArgs e)
180180
}
181181
private void OnEventMouseWheel(MouseWheelEventArgs e)
182182
{
183+
//var position = e.GetPosition(this.Canvas);
184+
//this.Scale.CenterX = position.X / this.ViewModel.Scale.Value;
185+
//this.Scale.CenterY = position.Y / this.ViewModel.Scale.Value;
183186
this.ViewModel.CommandZoom.Execute(e.Delta);
187+
184188
}
185189
private void OnEventMouseUp(MouseButtonEventArgs e)
186190
{

0 commit comments

Comments
 (0)