diff --git a/src/InvvardDev.EZLayoutDisplay.Desktop/Model/Revision.cs b/src/InvvardDev.EZLayoutDisplay.Desktop/Model/Revision.cs
index 9ebd2b67..07f0c9c9 100644
--- a/src/InvvardDev.EZLayoutDisplay.Desktop/Model/Revision.cs
+++ b/src/InvvardDev.EZLayoutDisplay.Desktop/Model/Revision.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using Newtonsoft.Json;
namespace InvvardDev.EZLayoutDisplay.Desktop.Model
diff --git a/src/InvvardDev.EZLayoutDisplay.Desktop/View/DisplayLayoutWindow.xaml b/src/InvvardDev.EZLayoutDisplay.Desktop/View/DisplayLayoutWindow.xaml
index c9a0346a..04ba091c 100644
--- a/src/InvvardDev.EZLayoutDisplay.Desktop/View/DisplayLayoutWindow.xaml
+++ b/src/InvvardDev.EZLayoutDisplay.Desktop/View/DisplayLayoutWindow.xaml
@@ -26,6 +26,10 @@
+
+
+
@@ -50,24 +54,27 @@
-
+ Visibility="{Binding NoLayoutAvailable, Converter={StaticResource BoolToVisibleConverter}}">
+
-
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
diff --git a/src/InvvardDev.EZLayoutDisplay.Desktop/View/SettingsWindow.xaml b/src/InvvardDev.EZLayoutDisplay.Desktop/View/SettingsWindow.xaml
index 45bf0b25..74ad9785 100644
--- a/src/InvvardDev.EZLayoutDisplay.Desktop/View/SettingsWindow.xaml
+++ b/src/InvvardDev.EZLayoutDisplay.Desktop/View/SettingsWindow.xaml
@@ -3,7 +3,6 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:model="clr-namespace:InvvardDev.EZLayoutDisplay.Desktop.Model"
mc:Ignorable="d" Background="{StaticResource WindowBackgroundBrush}"
Title="{Binding WindowTitle}" Icon="{StaticResource WindowIcon}"
Width="630" Height="340" MinWidth="630" MinHeight="300"
diff --git a/src/InvvardDev.EZLayoutDisplay.Desktop/ViewModel/DisplayLayoutViewModel.cs b/src/InvvardDev.EZLayoutDisplay.Desktop/ViewModel/DisplayLayoutViewModel.cs
index 849aa3d9..bc041a83 100644
--- a/src/InvvardDev.EZLayoutDisplay.Desktop/ViewModel/DisplayLayoutViewModel.cs
+++ b/src/InvvardDev.EZLayoutDisplay.Desktop/ViewModel/DisplayLayoutViewModel.cs
@@ -33,6 +33,7 @@ public class DisplayLayoutViewModel : ViewModelBase
private ICommand _lostFocusCommand;
private ICommand _hideWindowCommand;
private ICommand _nextLayerCommand;
+ private ICommand _scrollLayerCommand;
private List> _layoutTemplates;
private ObservableCollection _currentLayoutTemplate;
@@ -198,6 +199,13 @@ public bool IsWindowPinned
_nextLayerCommand
?? (_nextLayerCommand = new RelayCommand(NextLayer, NextLayerCanExecute));
+ ///
+ /// Next layer command.
+ ///
+ public ICommand ScrollLayerCommand =>
+ _scrollLayerCommand
+ ?? (_scrollLayerCommand = new RelayCommand(ScrollLayer));
+
#endregion
public DisplayLayoutViewModel(IWindowService windowService, ILayoutService layoutService, ISettingsService settingsService)
@@ -370,16 +378,50 @@ private void LostFocus()
private void NextLayer()
{
Logger.TraceRelayCommand();
+
+ VaryLayer(1);
+ }
+
+ private void ScrollLayer(MouseWheelEventArgs e)
+ {
+ Logger.TraceRelayCommand();
+
+ if (e.Delta < 0)
+ {
+ VaryLayer(1);
+ }
+
+ if (e.Delta > 0)
+ {
+ VaryLayer(-1);
+ }
+ }
+
+ private void VaryLayer(int variation)
+ {
+ Logger.TraceRelayCommand();
+
var maxLayerIndex = _ezLayout.EZLayers.Count - 1;
switch (CurrentLayerIndex)
{
- case var _ when maxLayerIndex == 0:
- case var _ when CurrentLayerIndex >= maxLayerIndex:
+ case var _ when maxLayerIndex <= 0:
+ CurrentLayerIndex = 0;
+
+ break;
+ case var _ when CurrentLayerIndex <= 0 && variation < 0:
+ CurrentLayerIndex = maxLayerIndex;
+
+ break;
+ case var _ when CurrentLayerIndex > 0 && variation < 0:
+ CurrentLayerIndex--;
+
+ break;
+ case var _ when CurrentLayerIndex >= maxLayerIndex && variation > 0:
CurrentLayerIndex = 0;
break;
- case var _ when CurrentLayerIndex < maxLayerIndex:
+ case var _ when CurrentLayerIndex < maxLayerIndex && variation > 0:
CurrentLayerIndex++;
break;
diff --git a/src/InvvardDev.EZLayoutDisplay.Tests/InvvardDev.EZLayoutDisplay.Tests.csproj b/src/InvvardDev.EZLayoutDisplay.Tests/InvvardDev.EZLayoutDisplay.Tests.csproj
index 9d5fecab..3603056f 100644
--- a/src/InvvardDev.EZLayoutDisplay.Tests/InvvardDev.EZLayoutDisplay.Tests.csproj
+++ b/src/InvvardDev.EZLayoutDisplay.Tests/InvvardDev.EZLayoutDisplay.Tests.csproj
@@ -44,24 +44,12 @@
..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll
-
- ..\packages\MSTest.TestFramework.1.4.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll
-
-
- ..\packages\MSTest.TestFramework.1.4.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll
-
..\packages\Moq.4.10.1\lib\net45\Moq.dll
-
- ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll
-
-
- ..\packages\NonInvasiveKeyboardHookLibrary.1.4.0\lib\net452\NonInvasiveKeyboardHookLibrary.dll
-
+
-
..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll
@@ -69,9 +57,7 @@
..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll
-
- ..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll
-
+
..\packages\xunit.assert.2.4.1\lib\netstandard1.1\xunit.assert.dll
@@ -81,6 +67,9 @@
..\packages\xunit.extensibility.execution.2.4.1\lib\net452\xunit.execution.desktop.dll
+
+ ..\packages\Xunit.StaFact.0.3.18\lib\net452\Xunit.StaFact.dll
+
diff --git a/src/InvvardDev.EZLayoutDisplay.Tests/ViewModel/DisplayLayoutViewModelTest.cs b/src/InvvardDev.EZLayoutDisplay.Tests/ViewModel/DisplayLayoutViewModelTest.cs
index fc71f87e..d72cd7ac 100644
--- a/src/InvvardDev.EZLayoutDisplay.Tests/ViewModel/DisplayLayoutViewModelTest.cs
+++ b/src/InvvardDev.EZLayoutDisplay.Tests/ViewModel/DisplayLayoutViewModelTest.cs
@@ -1,4 +1,6 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
+using System.Windows.Input;
using InvvardDev.EZLayoutDisplay.Desktop.Model;
using InvvardDev.EZLayoutDisplay.Desktop.Service.Interface;
using InvvardDev.EZLayoutDisplay.Desktop.View;
@@ -10,6 +12,23 @@ namespace InvvardDev.EZLayoutDisplay.Tests.ViewModel
{
public class DisplayLayoutViewModelTest
{
+ private static EZLayout CreateLayers(int layerNumber)
+ {
+ var keyboardLayout = new EZLayout();
+
+ for (int i = 0 ; i < layerNumber ; i++)
+ {
+ keyboardLayout.EZLayers.Add(new EZLayer {
+ Index = i,
+ EZKeys = new List {
+ new EZKey()
+ }
+ });
+ }
+
+ return keyboardLayout;
+ }
+
[ Fact ]
public void DisplayLayoutViewModel_Constructor()
{
@@ -17,11 +36,7 @@ public void DisplayLayoutViewModel_Constructor()
var mockWindowService = new Mock();
var mockLayoutService = new Mock();
var mockSettingsService = new Mock();
- mockSettingsService.SetupProperty(s => s.EZLayout,
- new EZLayout
- {
- EZLayers = new List { new EZLayer { EZKeys = new List { new EZKey { Label = new KeyLabel("A"), Modifier = new KeyLabel("a") } } } }
- });
+ mockSettingsService.SetupProperty(s => s.EZLayout, CreateLayers(1));
//Act
var displayLayoutViewModel = new DisplayLayoutViewModel(mockWindowService.Object, mockLayoutService.Object, mockSettingsService.Object);
@@ -56,8 +71,8 @@ public void LostFocusCommand_Execute()
}
[ Theory ]
- [InlineData(true)]
- [InlineData(false)]
+ [ InlineData(true) ]
+ [ InlineData(false) ]
public void LostFocusCommand_CanExecute(bool isPinned)
{
//Arrange
@@ -82,7 +97,7 @@ public void LostFocusCommand_CanExecute(bool isPinned)
}
}
- [Fact]
+ [ Fact ]
public void HideWindowCommand_Execute()
{
//Arrange
@@ -99,7 +114,7 @@ public void HideWindowCommand_Execute()
mockWindowService.Verify(w => w.CloseWindow(), Times.Once);
}
- [Theory ]
+ [ Theory ]
[ InlineData(0, 1, true) ]
[ InlineData(1, 2, false) ]
[ InlineData(76, 2, false) ]
@@ -119,7 +134,10 @@ public void LoadCompleteLayout(int numberOfKey, int numberOfLayer, bool noLayout
for (int i = 0 ; i < numberOfLayer ; i++)
{
- keyboardLayout.EZLayers.Add(new EZLayer { Index = i, EZKeys = new List(ezKeys) });
+ keyboardLayout.EZLayers.Add(new EZLayer {
+ Index = i,
+ EZKeys = new List(ezKeys)
+ });
}
var mockWindowService = new Mock();
@@ -143,13 +161,49 @@ [ InlineData(1, true) ]
public void NextLayerCommand_CanExecute(int layerNumber, bool expectedCanExecute)
{
//Arrange
- var keyboardLayout = new EZLayout();
+ var keyboardLayout = CreateLayers(layerNumber);
- for (int i = 0 ; i < layerNumber ; i++)
+ var layoutTemplate = new List();
+
+ for (int i = 0 ; i < 1 ; i++)
{
- keyboardLayout.EZLayers.Add(new EZLayer { Index = i, EZKeys = new List { new EZKey() } });
+ layoutTemplate.Add(new KeyTemplate(i, i, 54, 81));
}
+ var mockLayoutService = new Mock();
+ mockLayoutService.Setup(l => l.GetLayoutTemplate()).ReturnsAsync(layoutTemplate);
+ var mockWindowService = new Mock();
+ var mockSettingsService = new Mock();
+ mockSettingsService.SetupProperty(s => s.EZLayout, keyboardLayout);
+
+ //Act
+ var displayLayoutViewModel = new DisplayLayoutViewModel(mockWindowService.Object, mockLayoutService.Object, mockSettingsService.Object);
+
+ //Assert
+ Assert.Equal(expectedCanExecute, displayLayoutViewModel.NextLayerCommand.CanExecute(null));
+ }
+
+ [ WpfTheory ]
+ [ InlineData(0, 0, 120) ]
+ [ InlineData(0, 0, -120) ]
+ [ InlineData(1, 0, 120) ]
+ [ InlineData(1, 0, -120) ]
+ [ InlineData(2, 1, -120) ]
+ [ InlineData(2, 1, 120) ]
+ [ InlineData(2, 0, 120, -120) ]
+ [ InlineData(2, 0, 120, 120) ]
+ [ InlineData(2, 1, 120, 120, -120) ]
+ [ InlineData(3, 2, 120) ]
+ [ InlineData(3, 1, -120) ]
+ [ InlineData(3, 2, -120, -120) ]
+ [ InlineData(3, 1, 120, 120) ]
+ [ InlineData(3, 0, -120, -120, -120) ]
+ [ InlineData(3, 0, 120, 120, 120) ]
+ public void ScrollLayerCommand_Execute(int layerNumber, int expectedCurrentLayerIndex, params int[] scrollingValues)
+ {
+ //Arrange
+ var keyboardLayout = CreateLayers(layerNumber);
+
var layoutTemplate = new List();
for (int i = 0 ; i < 1 ; i++)
@@ -166,8 +220,13 @@ public void NextLayerCommand_CanExecute(int layerNumber, bool expectedCanExecute
//Act
var displayLayoutViewModel = new DisplayLayoutViewModel(mockWindowService.Object, mockLayoutService.Object, mockSettingsService.Object);
+ foreach (var scrollingValue in scrollingValues)
+ {
+ displayLayoutViewModel.ScrollLayerCommand.Execute(new MouseWheelEventArgs(Mouse.PrimaryDevice, 0, scrollingValue));
+ }
+
//Assert
- Assert.Equal(expectedCanExecute, displayLayoutViewModel.NextLayerCommand.CanExecute(null));
+ Assert.Equal(expectedCurrentLayerIndex, displayLayoutViewModel.CurrentLayerIndex);
}
[ Theory ]
@@ -184,13 +243,7 @@ [ InlineData(3, 3, 0) ]
public void NextLayerCommand_Execute(int layerNumber, int nextLayerHit, int expectedCurrentLayerIndex)
{
//Arrange
- var keyboardLayout = new EZLayout();
-
- for (int i = 0 ; i < layerNumber ; i++)
- {
- keyboardLayout.EZLayers.Add(new EZLayer { Index = i, EZKeys = new List { new EZKey() } });
- }
-
+ var keyboardLayout = CreateLayers(layerNumber);
var layoutTemplate = new List();
for (int i = 0 ; i < 1 ; i++)
@@ -223,8 +276,7 @@ public void NoLayoutAvailable()
var mockLayoutService = new Mock();
var mockWindowService = new Mock();
var mockSettingsService = new Mock();
- mockSettingsService.SetupProperty(s => s.EZLayout,
- new EZLayout { EZLayers = new List() });
+ mockSettingsService.SetupProperty(s => s.EZLayout, CreateLayers(0));
// Act
var displayLayoutViewModel = new DisplayLayoutViewModel(mockWindowService.Object, mockLayoutService.Object, mockSettingsService.Object);
diff --git a/src/InvvardDev.EZLayoutDisplay.Tests/ViewModel/SettingsViewModelTest.cs b/src/InvvardDev.EZLayoutDisplay.Tests/ViewModel/SettingsViewModelTest.cs
index 33c0a8b4..24a42073 100644
--- a/src/InvvardDev.EZLayoutDisplay.Tests/ViewModel/SettingsViewModelTest.cs
+++ b/src/InvvardDev.EZLayoutDisplay.Tests/ViewModel/SettingsViewModelTest.cs
@@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
-using System.Linq;
using System.Threading.Tasks;
-using Castle.Components.DictionaryAdapter;
using InvvardDev.EZLayoutDisplay.Desktop.Model;
using InvvardDev.EZLayoutDisplay.Desktop.Service.Interface;
using InvvardDev.EZLayoutDisplay.Desktop.View;
@@ -300,7 +298,7 @@ public void OpenTagSearchCommandExecute_ArgumentNullException()
var mockProcessService = new Mock();
// Act
- var settingsViewModel = new SettingsViewModel(mockSettingsService.Object, mockWindowService.Object, mockLayoutService.Object, mockProcessService.Object);
+ var _ = new SettingsViewModel(mockSettingsService.Object, mockWindowService.Object, mockLayoutService.Object, mockProcessService.Object);
// Assert
mockLayoutService.Verify();
@@ -320,7 +318,7 @@ public void OpenTagSearchCommandExecute_ArgumentException()
var mockProcessService = new Mock();
// Act
- var settingsViewModel = new SettingsViewModel(mockSettingsService.Object, mockWindowService.Object, mockLayoutService.Object, mockProcessService.Object);
+ var _settingsViewModel = new SettingsViewModel(mockSettingsService.Object, mockWindowService.Object, mockLayoutService.Object, mockProcessService.Object);
// Assert
mockLayoutService.Verify();
diff --git a/src/InvvardDev.EZLayoutDisplay.Tests/app.config b/src/InvvardDev.EZLayoutDisplay.Tests/app.config
index afb677ed..2e39f81b 100644
--- a/src/InvvardDev.EZLayoutDisplay.Tests/app.config
+++ b/src/InvvardDev.EZLayoutDisplay.Tests/app.config
@@ -6,6 +6,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/InvvardDev.EZLayoutDisplay.Tests/packages.config b/src/InvvardDev.EZLayoutDisplay.Tests/packages.config
index 89e522db..ac062fb4 100644
--- a/src/InvvardDev.EZLayoutDisplay.Tests/packages.config
+++ b/src/InvvardDev.EZLayoutDisplay.Tests/packages.config
@@ -3,7 +3,6 @@
-
@@ -16,4 +15,5 @@
+
\ No newline at end of file