ys-hwang 6 лет назад
Родитель
Сommit
85ac3585bb
28 измененных файлов с 3637 добавлено и 719 удалено
  1. 22 10
      Dev/OHV/OHV.Module.Interactivity/MessageController.cs
  2. 41 0
      Dev/OHV/OHV.Module.Interactivity/OHV.Module.Interactivity.csproj
  3. 142 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml
  4. 28 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml.cs
  5. 278 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/CalcuratorView.xaml
  6. 189 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/CalcuratorView.xaml.cs
  7. 404 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml
  8. 28 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml.cs
  9. 228 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs
  10. 634 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/KeyPadView.cs
  11. 514 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/KeyPadView.xaml
  12. 371 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml
  13. 28 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml.cs
  14. 221 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoViewModel.cs
  15. 115 75
      Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigView.xaml
  16. 37 2
      Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigViewModel.cs
  17. 4 0
      Dev/OHV/OHV.Module.MainViews/OHV.Module.MainViews.csproj
  18. 3 338
      Dev/OHV/OHV.Module.MainViews/Views/AutoView.xaml
  19. 50 270
      Dev/OHV/OHV.Module.MainViews/Views/TeachView.xaml
  20. 20 10
      Dev/OHV/OHV.Module.MainViews/Views/TeachViewModel.cs
  21. 4 4
      Dev/OHV/OHV.Vehicle/App.xaml
  22. 31 0
      Dev/OHV/OHV.Vehicle/App.xaml.cs
  23. 81 0
      Dev/OHV/OHV.Vehicle/Concept/AnimatedSplashScreenWindow.xaml
  24. 117 0
      Dev/OHV/OHV.Vehicle/Concept/AnimatedSplashScreenWindow.xaml.cs
  25. 6 0
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml.cs
  26. 9 9
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs
  27. 25 1
      Dev/OHV/OHV.Vehicle/Helpler/DeskTopInfo.cs
  28. 7 0
      Dev/OHV/OHV.Vehicle/OHV.Vehicle.csproj

+ 22 - 10
Dev/OHV/OHV.Module.Interactivity/MessageController.cs

@@ -15,35 +15,37 @@ namespace OHV.Module.Interactivity
     public class MessageController : IModule
     {
         IDialogService dialogService;
-        public MessageController(IDialogService dialogService)
+        public MessageController( IDialogService dialogService )
         {
             this.dialogService = dialogService;
         }
 
-        public void OnInitialized(IContainerProvider containerProvider)
+        public void OnInitialized( IContainerProvider containerProvider )
         {
         }
 
-        public void RegisterTypes(IContainerRegistry containerRegistry)
+        public void RegisterTypes( IContainerRegistry containerRegistry )
         {
             containerRegistry.RegisterDialog<NotificatioinView , NotificationViewModel>();
             containerRegistry.RegisterDialog<ConfirmationPopupView , ConfirmationPopupViewModel>();
             containerRegistry.RegisterDialog<MapView , MapViewModel>();
             containerRegistry.RegisterDialog<ServoConfigView , ServoConfigViewModel>();
             containerRegistry.RegisterDialog<InOutView , InOutViewModel>();
+            containerRegistry.RegisterDialog<DriveServoView , DriveServoViewModel>();
+            containerRegistry.RegisterDialog<LockServoView , LockServoViewModel>();
         }
 
-        public void ShowNotificationView(string Message, bool isOK = true)
+        public void ShowNotificationView( string Message , bool isOK = true )
         {
             var dialogPram = new DialogParameters();
-            dialogPram.Add("message", Message);
-            dialogPram.Add("Type", isOK);
-            this.dialogService.ShowDialog("NotificatioinView", dialogPram, null);
+            dialogPram.Add( "message" , Message );
+            dialogPram.Add( "Type" , isOK );
+            this.dialogService.ShowDialog( "NotificatioinView" , dialogPram , null );
         }
 
-        public void ShowConfirmationPopupView(string Message, Action<IDialogResult> callBack)
+        public void ShowConfirmationPopupView( string Message , Action<IDialogResult> callBack )
         {
-            this.dialogService.ShowDialog("ConfirmationPopupView", new DialogParameters($"message={Message}"), callBack);
+            this.dialogService.ShowDialog( "ConfirmationPopupView" , new DialogParameters( $"message={Message}" ) , callBack );
         }
 
         public void ShowMapPopupView( )
@@ -56,9 +58,19 @@ namespace OHV.Module.Interactivity
             this.dialogService.ShowDialog( "ServoConfigView" , new DialogParameters() , null );
         }
 
-        public void ShowInOutPopupView()
+        public void ShowInOutPopupView( )
         {
             this.dialogService.ShowDialog( "InOutView" , new DialogParameters() , null );
         }
+
+        public void ShowLockPopupView( )
+        {
+            this.dialogService.ShowDialog( "LockServoView" , new DialogParameters() , null );
+        }
+
+        public void ShowDrivePopupView( )
+        {
+            this.dialogService.ShowDialog( "DriveServoView" , new DialogParameters() , null );
+        }
     }
 }

+ 41 - 0
Dev/OHV/OHV.Module.Interactivity/OHV.Module.Interactivity.csproj

@@ -84,12 +84,33 @@
     <Compile Include="NotificationViewModel.cs">
       <DependentUpon>NotificatioinView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="PopUp\BatteryConfigView.xaml.cs">
+      <DependentUpon>BatteryConfigView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="PopUp\CalcuratorView.xaml.cs">
+      <DependentUpon>CalcuratorView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="PopUp\DriveServoView.xaml.cs">
+      <DependentUpon>DriveServoView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="PopUp\DriveServoViewModel.cs">
+      <DependentUpon>DriveServoView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="PopUp\InOutView.xaml.cs">
       <DependentUpon>InOutView.xaml</DependentUpon>
     </Compile>
     <Compile Include="PopUp\InOutViewModel.cs">
       <DependentUpon>InOutView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="PopUp\KeyPadView.cs">
+      <DependentUpon>KeyPadView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="PopUp\LockServoView.xaml.cs">
+      <DependentUpon>LockServoView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="PopUp\LockServoViewModel.cs">
+      <DependentUpon>LockServoView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="PopUp\MapView.xaml.cs">
       <DependentUpon>MapView.xaml</DependentUpon>
     </Compile>
@@ -113,10 +134,30 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="PopUp\BatteryConfigView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="PopUp\CalcuratorView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="PopUp\DriveServoView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="PopUp\InOutView.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="PopUp\KeyPadView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="PopUp\LockServoView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="PopUp\MapView.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 142 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml

@@ -0,0 +1,142 @@
+<UserControl x:Class="OHV.Module.Interactivity.PopUp.BatteryConfigView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:OHV.Module.Interactivity.PopUp"
+             xmlns:prism="http://prismlibrary.com/"
+             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+             prism:ViewModelLocator.AutoWireViewModel="True"
+             mc:Ignorable="d" 
+             Width="800"
+             Height="600"
+             Background="#455a64">
+
+    <prism:Dialog.WindowStyle>
+        <Style TargetType="Window">
+            <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
+            <Setter Property="Background" Value="Transparent"/>
+            <Setter Property="AllowsTransparency" Value="True"/>
+            <Setter Property="ResizeMode" Value="NoResize"/>
+            <Setter Property="WindowStyle" Value="None"/>
+            <Setter Property="BorderThickness" Value="1"/>
+            <Setter Property="BorderBrush" Value="{DynamicResource BorderSolidNormal}"/>
+            <Setter Property="Template" Value="{DynamicResource WindowTemplateKey}"/>
+
+            <!--<Style.Triggers>
+                <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
+                    <Setter Property="Template" Value="{StaticResource WindowTemplateKey}"/>
+                </Trigger>
+            </Style.Triggers>-->
+        </Style>
+    </prism:Dialog.WindowStyle>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"/>
+            <ColumnDefinition Width="130"/>
+        </Grid.ColumnDefinitions>
+
+        <Grid Grid.Column="0">
+            <Grid Margin="15" Background="#37474f">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="*"/>
+                </Grid.RowDefinitions>
+
+                <Grid Grid.Row="0">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <Grid Grid.Row="0">
+                        <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
+                            <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
+                                <Button Content="Version" Margin="3" IsEnabled="False"/>
+                                <Button Content="LifeTime" Margin="3" IsEnabled="False"/>
+                            </StackPanel>
+
+                            <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
+                                <Button Content="1.0.0.01" Margin="3" Background="{x:Null}"/>
+                                <Button Content="yyyy-MM-dd" Margin="3" Background="{x:Null}"/>
+                            </StackPanel>
+                        </StackPanel>
+                    </Grid>
+                    
+                    <!--Send Message Buttons-->
+                    <StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
+                        <Button Margin="5">
+                            <StackPanel>
+                                <TextBlock Text="MSG1"/>
+                            </StackPanel>
+                        </Button>
+
+                        <Button Margin="5">
+                            <StackPanel>
+                                <TextBlock Text="MSG2"/>
+                            </StackPanel>
+                        </Button>
+
+                        <Button Margin="5">
+                            <StackPanel>
+                                <TextBlock Text="MSG3"/>
+                            </StackPanel>
+                        </Button>
+
+                        <Button Margin="5">
+                            <StackPanel>
+                                <TextBlock Text="MSG4"/>
+                            </StackPanel>
+                        </Button>
+
+                        <Button Margin="5">
+                            <StackPanel>
+                                <TextBlock Text="MSG5"/>
+                            </StackPanel>
+                        </Button>
+                    </StackPanel>
+                </Grid>
+
+                <Grid Grid.Row="1">
+
+                </Grid>
+            </Grid>
+        </Grid>
+
+        <Grid Grid.Column="1" Background="#37474f">
+            <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
+            <StackPanel>
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="69" 
+                        BorderBrush="Gray" BorderThickness="2" 
+                        Command="{Binding CloseDialogCommand}" CommandParameter="true">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="ExitToApp" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Open" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="69" 
+                        BorderBrush="Gray" BorderThickness="2" 
+                        Command="{Binding CloseDialogCommand}" CommandParameter="true">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="ExitToApp" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Close" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5,50" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="ExitToApp" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Close" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+            </StackPanel>
+        </Grid>
+    </Grid>
+</UserControl>
+
+
+<!--<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
+    <TextBlock><Run Text="{Binding Title, FallbackValue=Battery Config View}" FontSize="40"/></TextBlock>
+</StackPanel>-->

+ 28 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace OHV.Module.Interactivity.PopUp
+{
+    /// <summary>
+    /// BatteryConfigView.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class BatteryConfigView : UserControl
+    {
+        public BatteryConfigView( )
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 278 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/CalcuratorView.xaml

@@ -0,0 +1,278 @@
+<Window x:Class="OHV.Module.Interactivity.PopUp.CalcuratorView"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        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:local="clr-namespace:OHV.Module.Interactivity.PopUp"
+        mc:Ignorable="d"
+        Title="CalcuratorView" Height="525" Width="350"
+        Background="WhiteSmoke"
+        WindowStyle="None"
+        WindowStartupLocation="CenterScreen"
+        >
+
+    <Window.Resources>
+        <SolidColorBrush x:Key="numbersColor" Color="#444444"/>
+        <SolidColorBrush x:Key="operatorsColor" Color="Orange"/>
+        <Style x:Key="CalcuratorButton" TargetType="Button">
+            <Setter Property="Foreground" Value="White"></Setter>
+            <Setter Property="FontSize" Value="30"></Setter>
+        </Style>
+    </Window.Resources>
+
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="50" />
+            <RowDefinition Height="1*" />
+            <RowDefinition Height="60" />
+        </Grid.RowDefinitions>
+
+        <Grid x:Name="gridHeader" Grid.Row="0" Background="#FF646464">
+            <StackPanel
+                Margin="5,0,0,0"
+                HorizontalAlignment="Left"
+                IsHitTestVisible="False"
+                Orientation="Horizontal" >
+                <TextBlock
+                    Margin="5,10,0,0"
+                    FontSize="22"
+                    Foreground="White" Text="Number Input">
+                </TextBlock>
+            </StackPanel>
+        </Grid>
+
+        <Grid Margin="10" Grid.Row="1">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="*"/>
+            </Grid.ColumnDefinitions>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="2*"/>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="*"/>
+            </Grid.RowDefinitions>
+
+            <Label x:Name="lblResult" 
+               Content="0"
+               HorizontalAlignment="Right" 
+               VerticalAlignment="Bottom" 
+               FontSize="60" 
+               Grid.ColumnSpan="4"/>
+
+            <Button x:Name="btnAc" 
+                Content="AC"
+                Click="btnAc_Click"
+                Grid.Row="1"
+                Margin="5, 0, -2, 0"                
+                Foreground="Black"
+                Height="Auto"
+                FontSize="20"/>
+
+            <Button x:Name="btnNegative" 
+                Content="+/-"
+                Grid.Row="1"
+                Click="btnNegative_Click"
+                Grid.Column="1"
+                Margin="5, 0, -2, 0"                
+                Foreground="Black"
+                Height="Auto"
+                FontSize="20"/>
+
+            <Button x:Name="btnPercentage" 
+                Content="%"
+                Grid.Row="1"
+                Click="btnPercentage_Click"
+                Grid.Column="2"
+                Margin="5, 0, -2, 0"                
+                Foreground="Black"
+                Height="Auto"
+                FontSize="20"/>
+
+            <Button x:Name="btnDivide" 
+                Content="/"
+                Click="btnOperation_Click"
+                Grid.Row="1"
+                Grid.Column="3"
+                Margin="5, 0, 5, 0"                
+                Background="Orange"
+                Style="{StaticResource CalcuratorButton}"
+                />
+
+            <Button x:Name="btnSeven" 
+                Content="7"
+                Click="btnNumber_Click"
+                Grid.Row="2"
+                Margin="5, 2, -2, 0"  
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                FontSize="30"
+                Height="Auto"
+                VerticalAlignment="Stretch"
+                HorizontalAlignment="Stretch"/>
+
+            <Button x:Name="btnEight" 
+                Content="8"
+                Click="btnNumber_Click"
+                Grid.Row="2"
+                Grid.Column="1"
+                Margin="5, 2, -2, 0"                
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnNine" 
+                Content="9"
+                Click="btnNumber_Click"
+                Grid.Row="2"
+                Grid.Column="2"
+                Margin="5, 2, -2, 0"                
+                Background="#444444"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnMultiple" 
+                Content="*"
+                Click="btnOperation_Click"
+                Grid.Row="2"
+                Grid.Column="3"
+                Margin="5, 2, 5, 0"                
+                Background="{StaticResource operatorsColor}"
+                Foreground="White"
+                Style="{StaticResource CalcuratorButton}"
+                FontSize="30" >
+            </Button>
+
+            <Button x:Name="btnFour" 
+                Content="4"
+                Click="btnNumber_Click"
+                Grid.Row="3"
+                Margin="5, 2, -2, 0"                
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnFive" 
+                Content="5"
+                Click="btnNumber_Click"
+                Grid.Row="3"
+                Grid.Column="1"
+                Margin="5, 2, -2, 0"                
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnSix" 
+                Content="6"
+                Click="btnNumber_Click"
+                Grid.Row="3"
+                Grid.Column="2"
+                Margin="5, 2, -2, 0"                
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnMinus" 
+                Content="-"
+                Click="btnOperation_Click"
+                Grid.Row="3"
+                Grid.Column="3"
+                Margin="5, 2, 5, 0"    
+                Style="{StaticResource CalcuratorButton}"    
+                Background="{StaticResource operatorsColor}"/>
+
+            <Button x:Name="btnOne" 
+                Content="1"
+                Click="btnNumber_Click"
+                Grid.Row="4"
+                Margin="5, 2, -2, 0"                
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnTwo" 
+                Content="2"
+                Click="btnNumber_Click"
+                Grid.Row="4"
+                Grid.Column="1"
+                Margin="5, 2, -2, 0"                
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnThree" 
+                Content="3"
+                Click="btnNumber_Click"
+                Grid.Row="4"
+                Grid.Column="2"
+                Margin="5, 2, -2, 0"                
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnPlus" 
+                Content="+"
+                Click="btnOperation_Click"
+                Grid.Row="4"
+                Grid.Column="3"
+                Margin="5, 2, 5, 0"   
+                Style="{StaticResource CalcuratorButton}"
+                Background="{StaticResource operatorsColor}"/>
+
+            <Button x:Name="btnZero" 
+                Content="0"
+                Click="btnNumber_Click"
+                Grid.Row="5"
+                Grid.ColumnSpan="2"
+                Margin="5, 2, -2, 0"                
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnDot" 
+                Content="."
+                Grid.Row="5"
+                Click="btnDot_Click"
+                Grid.Column="2"
+                Margin="5, 2, -2, 0"                
+                Background="{StaticResource numbersColor}"
+                Foreground="White"
+                Height="Auto"
+                FontSize="30"/>
+
+            <Button x:Name="btnEqual" 
+                Content="="
+                Click="btnEqual_Click"
+                Grid.Row="5"
+                Grid.Column="3"
+                Margin="5, 2, 5, 0"   
+                Style="{StaticResource CalcuratorButton}"
+                Background="{StaticResource operatorsColor}"/>
+        </Grid>
+
+        <Grid x:Name="gridFooter" Grid.Row="2" Background="#FF646464">
+            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="5,5" Width="200">
+                <Button Width="89" Margin="0, 0" HorizontalAlignment="Left" Click="Button_Click"  >
+                    <TextBlock><Run Text="OK"/></TextBlock>
+                </Button>
+ 
+                <Button Width="89" Margin="20, 0" HorizontalAlignment="Right" Click="Button_Click_1">
+                    <TextBlock><Run Text="Cancel"/></TextBlock>
+                </Button>
+            </StackPanel>
+        </Grid>
+    </Grid>
+</Window>

+ 189 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/CalcuratorView.xaml.cs

@@ -0,0 +1,189 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace OHV.Module.Interactivity.PopUp
+{
+    /// <summary>
+    /// CalcuratorView.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class CalcuratorView : Window
+    {
+        enum SelectedOperator
+        {
+            Addition,
+            Sustraction,
+            Multiplicatiom,
+            Division
+        }
+
+        double lastNumber, result;
+        SelectedOperator selectedOperator;
+
+        public CalcuratorView()
+        {
+            InitializeComponent();
+            this.gridHeader.MouseLeftButtonDown += gridHeader_MouseLeftButtonDown;
+
+            lblResult.Content = "0";
+        }
+
+        private void gridHeader_MouseLeftButtonDown( object sender, MouseButtonEventArgs e )
+        {
+            e.Handled = true;
+            this.DragMove();
+        }
+
+
+        private void btnNumber_Click( object sender, RoutedEventArgs e )
+        {
+            int selectedValue = 0;
+
+            if( sender == btnZero )
+                selectedValue = 0;
+            if( sender == btnOne )
+                selectedValue = 1;
+            if( sender == btnTwo )
+                selectedValue = 2;
+            if( sender == btnThree )
+                selectedValue = 3;
+            if( sender == btnFour )
+                selectedValue = 4;
+            if( sender == btnFive )
+                selectedValue = 5;
+            if( sender == btnSix )
+                selectedValue = 6;
+            if( sender == btnSeven )
+                selectedValue = 7;
+            if( sender == btnEight )
+                selectedValue = 8;
+            if( sender == btnNine )
+                selectedValue = 9;
+
+
+
+            lblResult.Content = lblResult.Content.ToString() == "0" ? lblResult.Content = $"{selectedValue}" : lblResult.Content = $"{lblResult.Content}{selectedValue}";
+        }
+
+        private void btnNegative_Click( object sender, RoutedEventArgs e )
+        {
+            lblResult.Content = double.TryParse( lblResult.Content.ToString(), out lastNumber ) ? lastNumber = lastNumber * (-1) : lblResult.Content;
+        }
+
+        private void btnPercentage_Click( object sender, RoutedEventArgs e )
+        {
+            lblResult.Content = double.TryParse( lblResult.Content.ToString(), out lastNumber ) ? lastNumber = lastNumber / (-1) : lblResult.Content;
+        }
+
+        private void btnEqual_Click( object sender, RoutedEventArgs e )
+        {
+            double newNumber;
+            if( double.TryParse( lblResult.Content.ToString(), out newNumber ) )
+            {
+                switch( selectedOperator )
+                {
+                    case SelectedOperator.Addition:
+                        result = SimpleMath.Add( lastNumber, newNumber );
+                        break;
+                    case SelectedOperator.Sustraction:
+                        result = SimpleMath.Minus( lastNumber, newNumber );
+                        break;
+                    case SelectedOperator.Multiplicatiom:
+                        result = SimpleMath.Multiple( lastNumber, newNumber );
+                        break;
+                    case SelectedOperator.Division:
+                        result = SimpleMath.Divide( lastNumber, newNumber );
+                        break;
+                }
+
+                lblResult.Content = result.ToString();
+            }
+        }
+
+        private void btnDot_Click( object sender, RoutedEventArgs e )
+        {
+            if( !lblResult.Content.ToString().Contains( "." ) )
+                lblResult.Content = $"{lblResult.Content}.";
+        }
+
+        private void btnOperation_Click( object sender, RoutedEventArgs e )
+        {
+            if( double.TryParse( lblResult.Content.ToString(), out lastNumber ) )
+            {
+                lblResult.Content = "0";
+            }
+
+            if( sender == btnMultiple )
+                selectedOperator = SelectedOperator.Multiplicatiom;
+            if( sender == btnDivide )
+                selectedOperator = SelectedOperator.Division;
+            if( sender == btnPlus )
+                selectedOperator = SelectedOperator.Addition;
+            if( sender == btnMinus )
+                selectedOperator = SelectedOperator.Sustraction;
+
+        }
+
+        private void btnAc_Click( object sender, RoutedEventArgs e )
+        {
+            lblResult.Content = "0";
+        }
+
+        private void Button_Click( object sender, RoutedEventArgs e )
+        {
+            this.DialogResult = true;
+            Close();
+        }
+
+        private void Button_Click_1( object sender, RoutedEventArgs e )
+        {
+            Close();
+        }
+
+        public double ShowDialog(double currentNumber )
+        {
+            this.lblResult.Content = currentNumber.ToString();
+
+            var rtn = this.ShowDialog();
+            if( rtn == true )
+            {
+                return double.Parse( this.lblResult.Content.ToString() );
+            }
+            else
+                return currentNumber;
+        }
+
+    }
+
+    public class SimpleMath
+    {
+        public static double Add( double numberOne, double numberTwo )
+        {
+            return numberOne + numberTwo;
+        }
+
+        public static double Minus( double numberOne, double numberTwo )
+        {
+            return numberOne - numberTwo;
+        }
+        public static double Multiple( double numberOne, double numberTwo )
+        {
+            return numberOne * numberTwo;
+        }
+        public static double Divide( double numberOne, double numberTwo )
+        {
+            return numberOne / numberTwo;
+        }
+
+    }
+}

+ 404 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml

@@ -0,0 +1,404 @@
+<UserControl x:Class="OHV.Module.Interactivity.PopUp.DriveServoView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:OHV.Module.Interactivity.PopUp"
+             xmlns:prism="http://prismlibrary.com/"
+             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+             prism:ViewModelLocator.AutoWireViewModel="True"
+             mc:Ignorable="d" 
+             Width="800"
+             Height="600"
+             Background="#455a64">
+
+    <prism:Dialog.WindowStyle>
+        <Style TargetType="Window">
+            <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
+            <Setter Property="Background" Value="Transparent"/>
+            <Setter Property="AllowsTransparency" Value="True"/>
+            <Setter Property="ResizeMode" Value="NoResize"/>
+            <Setter Property="WindowStyle" Value="None"/>
+            <Setter Property="BorderThickness" Value="1"/>
+            <Setter Property="BorderBrush" Value="{DynamicResource BorderSolidNormal}"/>
+            <Setter Property="Template" Value="{DynamicResource WindowTemplateKey}"/>
+
+            <!--<Style.Triggers>
+                <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
+                    <Setter Property="Template" Value="{StaticResource WindowTemplateKey}"/>
+                </Trigger>
+            </Style.Triggers>-->
+        </Style>
+    </prism:Dialog.WindowStyle>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+            <ColumnDefinition Width="130"/>
+            <ColumnDefinition Width="130"/>
+        </Grid.ColumnDefinitions>
+
+        <Grid Grid.Column="0">
+            <Grid Margin="15,15" Background="#37474f">
+                <Grid.RowDefinitions>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                </Grid.RowDefinitions>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition/>
+                    <ColumnDefinition Width="110"/>
+                </Grid.ColumnDefinitions>
+
+                <Grid Grid.Row="0">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                    </Grid.ColumnDefinitions>
+
+                    <Border BorderBrush="#FF00FFD3" BorderThickness="2" Grid.RowSpan="4" Grid.Column="3" Margin="95,3,0,0"/>
+
+                    <!--Column1-->
+                    <Button Background="{x:Null}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <StackPanel>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Axis"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Select"/></TextBlock>
+                        </StackPanel>
+
+                    </Button>
+
+                    <Button Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <StackPanel>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Target"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Pos"/></TextBlock>
+                        </StackPanel>
+
+                    </Button>
+
+                    <Button Grid.Column="0" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <StackPanel>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Current"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Pos"/></TextBlock>
+                        </StackPanel>
+                    </Button>
+
+                    <Button Grid.Column="0" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <StackPanel>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Difference"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Pos"/></TextBlock>
+                        </StackPanel>
+
+                    </Button>
+
+                    <!--Column2-->
+                    <Button Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners"
+                            Command="{Binding SelectAxisCommand}"
+                            CommandParameter="Left">
+                        <TextBlock><Run Text="#Drive1"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <Button.InputBindings>
+                            <MouseBinding Gesture="LeftClick" Command="{Binding KeyInTargetPosCommand}" CommandParameter="Left"/>
+                        </Button.InputBindings>
+                        <TextBlock><Run Text="{Binding TargetPosDriveLeft, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <TextBlock><Run Text="{Binding CurrentDriveLeft, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <TextBlock><Run Text="{Binding DifferenceDriveLeft, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <!--Column3-->
+                    <Button Grid.Column="2" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners"
+                            Command="{Binding SelectAxisCommand}"
+                            CommandParameter="Right">
+                        <TextBlock><Run Text="#Drive2"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <Button.InputBindings>
+                            <MouseBinding Gesture="LeftClick" Command="{Binding KeyInTargetPosCommand}" CommandParameter="Right"/>
+                        </Button.InputBindings>
+                        <TextBlock><Run Text="{Binding TargetPosDriveRight, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="2" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <TextBlock><Run Text="{Binding CurrentDriveRight, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="2" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                           Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <TextBlock><Run Text="{Binding DifferenceDriveRight, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+                    <Border BorderBrush="#FF00FFD3" BorderThickness="2" Margin="7,98,101,-33" Grid.ColumnSpan="4" RenderTransformOrigin="0.5,0.5" Grid.Row="3">
+                        <Border.RenderTransform>
+                            <TransformGroup>
+                                <ScaleTransform ScaleX="-1"/>
+                                <SkewTransform/>
+                                <RotateTransform/>
+                                <TranslateTransform/>
+                            </TransformGroup>
+                        </Border.RenderTransform>
+                    </Border>
+
+                </Grid>
+
+                <Grid Grid.Row="1">
+                    <!--<Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                    </Grid.ColumnDefinitions>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
+                    </Grid.RowDefinitions>-->
+
+                    <StackPanel Margin="0,0,0,90" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Left">
+                        <Button
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners"
+                            Margin="15"
+                            Height="auto"
+                            HorizontalAlignment="Center"
+                            VerticalAlignment="Center"
+                            >
+                            <StackPanel>
+                                <TextBlock><Run Text="Limit(-)"/></TextBlock>
+                            </StackPanel>
+                        </Button>
+
+                        <materialDesign:Badged
+                            Badge="Current Pos"
+                            BadgeColorZoneMode="Dark"
+                            BadgePlacementMode="Top"
+                            BadgeForeground="Aqua"
+                            VerticalAlignment="Center"
+                            HorizontalAlignment="Center"
+                            Height="auto">
+                            <Button Margin="15" VerticalAlignment="Center" HorizontalAlignment="Center" Height="50" >
+                                <StackPanel>
+                                    <TextBlock Text="0.000"/>
+                                </StackPanel>
+                            </Button>
+                        </materialDesign:Badged>
+
+                        <Button
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners"
+                            Margin="15"
+                            Height="auto"
+                            HorizontalAlignment="Center"
+                            VerticalAlignment="Center">
+                            <StackPanel>
+                                <TextBlock><Run Text="Limit(+)"/></TextBlock>
+                            </StackPanel>
+                        </Button>
+                    </StackPanel>
+
+                    <StackPanel Margin="30,0,0,50" Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Left">
+                        <Button
+                            Margin="5"
+                            Grid.Row="2" 
+                            Grid.Column="1"
+                            HorizontalAlignment="Stretch"
+                            Height="auto">
+                            <StackPanel>
+                                <materialDesign:PackIcon Kind="ArrowLeftBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="30" Width="auto"/>
+                                <TextBlock><Run Text="Jog(-)"/></TextBlock>
+                            </StackPanel>
+                        </Button>
+
+                        <materialDesign:Badged
+                            Grid.Row="2"
+                            Grid.Column="2"
+                            Badge="Jog Velocity"
+                            BadgeColorZoneMode="Dark"
+                            BadgePlacementMode="Top"
+                            BadgeForeground="Aqua"
+                            VerticalAlignment="Center"
+                            HorizontalAlignment="Center">
+                            <Button Margin="15" VerticalAlignment="Center" HorizontalAlignment="Center" Height="60" Width="Auto" >
+                                <StackPanel>
+                                    <TextBlock Text="0.000"/>
+                                </StackPanel>
+                            </Button>
+                        </materialDesign:Badged>
+
+                        <Button
+                            Margin="5"
+                            Grid.Row="2" 
+                            Grid.Column="3"
+                            HorizontalAlignment="Stretch"
+                            Height="auto">
+                            <StackPanel>
+                                <materialDesign:PackIcon Kind="ArrowRightBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="30" Width="auto"/>
+                                <TextBlock><Run Text="Jog(+)"/></TextBlock>
+                            </StackPanel>
+                        </Button>
+                    </StackPanel>
+                    <!--JogVelocity, Jog(-), Jog(+)-->
+
+                </Grid>
+
+                <Grid Grid.Column="1">
+                    <StackPanel>
+                        <Button Margin="5" HorizontalAlignment="Stretch" Grid.Column="4" Grid.Row="1" Width="Auto" Height="Auto" BorderBrush="Gray" BorderThickness="2"
+                                Command="{Binding SelectPosCommand}" CommandParameter="P1">
+                            <StackPanel>
+                                <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                                <TextBlock Text="P1" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            </StackPanel>
+                        </Button>
+                        <Button Margin="5" HorizontalAlignment="Stretch" Grid.Column="4" Grid.Row="2" Width="Auto" Height="Auto" BorderBrush="Gray" BorderThickness="2"
+                                Command="{Binding SelectPosCommand}" CommandParameter="P2">
+                            <StackPanel>
+                                <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                                <TextBlock Text="P2" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            </StackPanel>
+                        </Button>
+                        <Button Margin="5" HorizontalAlignment="Stretch" Grid.Column="4" Grid.Row="3" Width="Auto" Height="Auto" BorderBrush="Gray" BorderThickness="2"
+                                Command="{Binding SelectPosCommand}" CommandParameter="P3">
+                            <StackPanel>
+                                <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                                <TextBlock Text="P3" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            </StackPanel>
+                        </Button>
+                        <Button Margin="5" HorizontalAlignment="Stretch" Grid.Column="4" Grid.Row="3" Width="Auto" Height="Auto" BorderBrush="Gray" BorderThickness="2"
+                                Command="{Binding SelectPosCommand}" CommandParameter="P4">
+                            <StackPanel>
+                                <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                                <TextBlock Text="P4" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            </StackPanel>
+                        </Button>
+                        <Button Margin="5" HorizontalAlignment="Stretch" Grid.Column="4" Grid.Row="3" Width="Auto" Height="Auto" BorderBrush="Gray" BorderThickness="2"
+                                Command="{Binding SelectPosCommand}" CommandParameter="P5">
+                            <StackPanel>
+                                <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                                <TextBlock Text="P5" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            </StackPanel>
+                        </Button>
+                    </StackPanel>
+                </Grid>
+            </Grid>
+        </Grid>
+
+        <Grid Grid.Column="1" Background="#37474f">
+            <StackPanel>
+                <Button Margin="7,20" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2"
+                        Style="{DynamicResource MaterialDesignRaisedButton}"
+                        materialDesign:ShadowAssist.ShadowDepth="Depth5"
+                        Command="{Binding MoveToCommand}">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Move To" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+
+                <Button Margin="7,20" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2"
+                        Style="{DynamicResource MaterialDesignRaisedButton}"
+                        materialDesign:ShadowAssist.ShadowDepth="Depth5"
+                        Command="{Binding CurrentToTargetCommand}">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Current" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                        <TextBlock Text="To Target" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+            </StackPanel>
+        </Grid>
+
+        <Grid Grid.Column="2" HorizontalAlignment="Stretch" Background="#263238">
+            <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
+            <StackPanel>
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOnCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Servo On" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOffCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="PowerPlugOff" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Servo Off" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding FaultResetCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="CircleArrows" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Fault Reset" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding OriginCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="Origin" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Origin" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="ExitToApp" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Close" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+            </StackPanel>
+        </Grid>
+
+    </Grid>
+</UserControl>

+ 28 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace OHV.Module.Interactivity.PopUp
+{
+    /// <summary>
+    /// DriveServoView.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class DriveServoView : UserControl
+    {
+        public DriveServoView( )
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 228 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -0,0 +1,228 @@
+using Prism.Commands;
+using Prism.Mvvm;
+using Prism.Services.Dialogs;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace OHV.Module.Interactivity.PopUp
+{
+    public class DriveServoViewModel : BindableBase, IDialogAware
+    {
+        private DelegateCommand<string> _closeDialogCommand;
+        public DelegateCommand<string> CloseDialogCommand =>
+            _closeDialogCommand ?? ( _closeDialogCommand = new DelegateCommand<string>( CloseDialog ) );
+
+        private string _title = "DriveServoView";
+        public string Title
+        {
+            get { return this._title; }
+            set
+            {
+                this.SetProperty( ref this._title , value );
+            }
+        }
+
+        private string _selectedPosition = string.Empty;
+        public string SelectedPosition
+        {
+            get => this._selectedPosition;
+            set
+            {
+                this.SetProperty( ref this._selectedPosition , value );
+            }
+        }
+
+        private string _selectAxis = string.Empty;
+        public string SelectAxis
+        {
+            get => this._selectAxis;
+            set { this.SetProperty( ref this._selectAxis , value ); }
+        }
+
+        #region Motor Left Binding Value
+        private double _targetPosDriveLeft;
+        public double TargetPosDriveLeft
+        {
+            get { return this._targetPosDriveLeft; }
+            set { this.SetProperty( ref this._targetPosDriveLeft , value ); }
+        }
+
+        private double _currentDriveLeft;
+        public double CurrentDriveLeft
+        {
+            get { return this._currentDriveLeft; }
+            set { this.SetProperty( ref this._currentDriveLeft , value ); }
+        }
+
+        private double _differenceDriveLeft;
+        public double DifferenceDriveLeft
+        {
+            get { return this._differenceDriveLeft; }
+            set { this.SetProperty( ref this._differenceDriveLeft , value ); }
+        }
+        #endregion
+
+        #region Motor Right Binding Value
+        private double _targetPosDriveRight;
+        public double TargetPosDriveRight
+        {
+            get { return this._targetPosDriveRight; }
+            set { this.SetProperty( ref this._targetPosDriveRight , value ); }
+        }
+
+        private double _currentDriveRight;
+        public double CurrentDriveRight
+        {
+            get { return this._currentDriveRight; }
+            set { this.SetProperty( ref this._currentDriveRight , value ); }
+        }
+
+        private double _differenceDriveRight;
+        public double DifferenceDriveRight
+        {
+            get { return this._differenceDriveRight; }
+            set { this.SetProperty( ref this._differenceDriveRight , value ); }
+        }
+        #endregion
+
+        public event Action<IDialogResult> RequestClose;
+
+        public ICommand SelectAxisCommand { get; set; }
+        public ICommand KeyInTargetPosCommand { get; set; }
+        public ICommand SelectPosCommand { get; set; }
+        public ICommand MoveToCommand { get; set; }
+        public ICommand CurrentToTargetCommand { get; set; }
+        public ICommand ServoOnCommand { get; set; }
+        public ICommand ServoOffCommand { get; set; }
+        public ICommand FaultResetCommand { get; set; }
+        public ICommand OriginCommand { get; set; }
+
+
+        public DriveServoViewModel( )
+        {
+            this.SelectAxisCommand = new DelegateCommand<object>( ExecuteSelectAxisCommand );
+            this.SelectPosCommand = new DelegateCommand<object>( ExecuteSelectPosCommand );
+            this.MoveToCommand = new DelegateCommand( ExecuteMoveToCommand );
+            this.CurrentToTargetCommand = new DelegateCommand( ExecuteCurrentToTargetCommand );
+            this.KeyInTargetPosCommand = new DelegateCommand<object>( ExecuteKeyInCommadn );
+
+            this.ServoOnCommand = new DelegateCommand( ExecuteServoOnCommand );
+            this.ServoOffCommand = new DelegateCommand( ExecuteServoOffCommand );
+            this.FaultResetCommand = new DelegateCommand( ExecuteFaultResetCommand );
+            this.OriginCommand = new DelegateCommand( ExecuteOriginCommand );
+        }
+
+        private void ExecuteKeyInCommadn( object obj )
+        {
+            if ( obj.ToString().Equals( "Left" ) )
+            {
+                var numPad = new CalcuratorView();
+                var result = numPad.ShowDialog( this.TargetPosDriveLeft );
+                this.TargetPosDriveLeft = result;
+            }
+            else
+            {
+                var numPad = new CalcuratorView();
+                var result = numPad.ShowDialog( this.TargetPosDriveRight );
+                this.TargetPosDriveRight = result;
+            }
+        }
+
+        private void ExecuteSelectAxisCommand( object obj )
+        {
+            this.SelectAxis = obj.ToString();
+        }
+
+        private void ExecuteOriginCommand( )
+        {
+            //this.SelectAxis.OriginReturn();
+        }
+
+        private void ExecuteFaultResetCommand( )
+        {
+            //this.SelectAxis.FaultReset()
+        }
+
+        private void ExecuteServoOffCommand( )
+        {
+            //this.SelectAxis.ServoOff();
+        }
+
+        private void ExecuteServoOnCommand( )
+        {
+            //this.SelectAxis.ServoOn();
+        }
+
+        private void ExecuteCurrentToTargetCommand( )
+        {
+            this.TargetPosDriveLeft = this.CurrentDriveLeft;
+            this.TargetPosDriveRight = this.CurrentDriveRight;
+        }
+
+        private async void ExecuteMoveToCommand( )
+        {
+            await Task.Run( ( ) =>
+            {
+                //Axis.Move(this.SelectPosition);
+            } );
+        }
+
+        private void ExecuteSelectPosCommand( object obj )
+        {
+            this.SelectedPosition = obj.ToString();
+
+            switch ( this.SelectedPosition )
+            {
+                case "P1":
+                    break;
+                case "P2":
+                    break;
+                case "P3":
+                    break;
+                case "P4":
+                    break;
+                case "P5":
+                    break;
+
+                default:
+                    break;
+            }
+        }
+
+        #region Dialog Function
+        public bool CanCloseDialog( )
+        {
+            return true;
+        }
+
+        public void OnDialogClosed( )
+        {
+        }
+
+        public void OnDialogOpened( IDialogParameters parameters )
+        {
+        }
+
+        private void CloseDialog( string parameter )
+        {
+            ButtonResult result = ButtonResult.None;
+
+            if ( parameter?.ToLower() == "true" )
+                result = ButtonResult.OK;
+            else if ( parameter?.ToLower() == "false" )
+                result = ButtonResult.Cancel;
+
+            RaiseRequestClose( new DialogResult( result ) );
+        }
+
+        public virtual void RaiseRequestClose( IDialogResult dialogResult )
+        {
+            RequestClose?.Invoke( dialogResult );
+        }
+        #endregion
+    }
+}

+ 634 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/KeyPadView.cs

@@ -0,0 +1,634 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace OHV.Module.Interactivity.PopUp
+{
+    /// <summary>
+    /// Window_Blue_KeyPad.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class KeyPadView : Window
+    {
+
+        public string keyValue;
+        private bool capsLock = false;
+
+        public KeyPadView( )
+        {
+            InitializeComponent();
+        }
+
+        public new string ShowDialog()
+        {
+            var rtn = base.ShowDialog();
+            if (rtn == true)
+            {
+                return this.keyValue;
+            }
+            else
+                return string.Empty;
+        }
+
+        private void BTN_KEYPAD_ENTER_Click(object sender, RoutedEventArgs e)
+        {
+            this.DialogResult = true;
+        }
+
+        private void BTN_KEYPAD_SPACEBAR_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += " ";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_BACKSPACE_Click(object sender, RoutedEventArgs e)
+        {
+            if (TB_KEY_PAD.Text.Length != 0)
+            {
+                TB_KEY_PAD.Text = TB_KEY_PAD.Text.Remove(TB_KEY_PAD.Text.Length - 1, 1);
+            }
+        }
+
+        private void BTN_KEYPAD_CAPSLOCK_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == true)
+            {
+                capsLock = false;
+
+                BTN_KEYPAD_BAR.Content = "_";
+                BTN_KEYPAD_q.Content = "q";
+                BTN_KEYPAD_TWO_w.Content = "w";
+                BTN_KEYPAD_e.Content = "e";
+                BTN_KEYPAD_r.Content = "r";
+                BTN_KEYPAD_t.Content = "t";
+                BTN_KEYPAD_y.Content = "y";
+                BTN_KEYPAD_u.Content = "u";
+                BTN_KEYPAD_i.Content = "i";
+                BTN_KEYPAD_o.Content = "o";
+                BTN_KEYPAD_p.Content = "p";
+                BTN_KEYPAD_LEFT.Content = "[";
+                BTN_KEYPAD_RIGHT.Content = "]";
+                BTN_KEYPAD_a.Content = "a";
+                BTN_KEYPAD_s.Content = "s";
+                BTN_KEYPAD_d.Content = "d";
+                BTN_KEYPAD_f.Content = "f";
+                BTN_KEYPAD_g.Content = "g";
+                BTN_KEYPAD_h.Content = "h";
+                BTN_KEYPAD_j.Content = "j";
+                BTN_KEYPAD_k.Content = "k";
+                BTN_KEYPAD_l.Content = "l";
+                BTN_KEYPAD_z.Content = "z";
+                BTN_KEYPAD_x.Content = "x";
+                BTN_KEYPAD_c.Content = "c";
+                BTN_KEYPAD_v.Content = "v";
+                BTN_KEYPAD_b.Content = "b";
+                BTN_KEYPAD_n.Content = "n";
+                BTN_KEYPAD_m.Content = "m";
+                BTN_KEYPAD_COMMA.Content = ",";
+                BTN_KEYPAD_POINTER.Content = ".";
+                BTN_KEYPAD_CAPSLOCK.Content = "caps";
+            }
+            else if (capsLock == false)
+            {
+                capsLock = true;
+
+                BTN_KEYPAD_BAR.Content = "_";
+                BTN_KEYPAD_q.Content = "Q";
+                BTN_KEYPAD_TWO_w.Content = "W";
+                BTN_KEYPAD_e.Content = "E";
+                BTN_KEYPAD_r.Content = "R";
+                BTN_KEYPAD_t.Content = "T";
+                BTN_KEYPAD_y.Content = "Y";
+                BTN_KEYPAD_u.Content = "U";
+                BTN_KEYPAD_i.Content = "I";
+                BTN_KEYPAD_o.Content = "O";
+                BTN_KEYPAD_p.Content = "P";
+                BTN_KEYPAD_LEFT.Content = "{";
+                BTN_KEYPAD_RIGHT.Content = "}";
+                BTN_KEYPAD_a.Content = "A";
+                BTN_KEYPAD_s.Content = "S";
+                BTN_KEYPAD_d.Content = "D";
+                BTN_KEYPAD_f.Content = "F";
+                BTN_KEYPAD_g.Content = "G";
+                BTN_KEYPAD_h.Content = "H";
+                BTN_KEYPAD_j.Content = "J";
+                BTN_KEYPAD_k.Content = "K";
+                BTN_KEYPAD_l.Content = "L";
+                BTN_KEYPAD_z.Content = "Z";
+                BTN_KEYPAD_x.Content = "X";
+                BTN_KEYPAD_c.Content = "C";
+                BTN_KEYPAD_v.Content = "V";
+                BTN_KEYPAD_b.Content = "B";
+                BTN_KEYPAD_n.Content = "N";
+                BTN_KEYPAD_m.Content = "M";
+                BTN_KEYPAD_COMMA.Content = "<";
+                BTN_KEYPAD_POINTER.Content = ">";
+                BTN_KEYPAD_CAPSLOCK.Content = "CAPS";
+            }
+        }
+
+        private void BTN_KEYPAD_ONE_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "1";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_TWO_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "2";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_THREE_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "3";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_FOUR_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "4";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_FIVE_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "5";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_SIX_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "6";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_SEVEN_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "7";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_EIGHT_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "8";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_NINE_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "9";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_ZERO_Click(object sender, RoutedEventArgs e)
+        {
+            keyValue += "0";
+            TB_KEY_PAD.Text = keyValue;
+        }
+
+        private void BTN_KEYPAD_BAR_Click(object sender, RoutedEventArgs e)
+        {
+            if(capsLock == false)
+            {
+                keyValue += "-";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if(capsLock == true)
+            {
+                keyValue += "_";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_q_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "q";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "Q";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_TWO_w_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "w";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "W";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_e_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "e";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "E";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_r_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "r";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "R";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_t_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "t";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "T";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_y_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "y";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "Y";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_u_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "u";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "U";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_i_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "i";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "I";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_o_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "o";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "O";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_p_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "p";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "P";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_LEFT_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "[";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "{";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_RIGHT_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "]";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "}";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_a_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "a";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "A";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_s_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "s";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "S";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_d_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "d";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "D";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_f_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "f";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "F";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_g_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "g";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "G";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_h_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "h";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "H";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_j_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "j";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "J";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_k_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "k";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "K";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_l_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "l";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "L";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_z_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "z";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "Z";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_x_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "x";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "X";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_c_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "c";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "C";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_v_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "v";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "V";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_b_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "b";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "B";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_n_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "n";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "N";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_m_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += "m";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "M";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_COMMA_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += ",";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += "<";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+        private void BTN_KEYPAD_POINTER_Click(object sender, RoutedEventArgs e)
+        {
+            if (capsLock == false)
+            {
+                keyValue += ".";
+                TB_KEY_PAD.Text = keyValue;
+            }
+            else if (capsLock == true)
+            {
+                keyValue += ">";
+                TB_KEY_PAD.Text = keyValue;
+            }            
+        }
+
+    }
+}

+ 514 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/KeyPadView.xaml

@@ -0,0 +1,514 @@
+<Window x:Class="OHV.Module.Interactivity.PopUp.KeyPadView"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        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:local="clr-namespace:OHV.Module.Interactivity.PopUp"
+        mc:Ignorable="d" WindowStartupLocation="CenterScreen"
+        Title="Window_Blue_KeyPad" Height="322.134" Width="948.171">
+    <Window.Resources>
+        <Style x:Key="ButtonStyleEtc" TargetType="{x:Type Button}">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type Button}">
+                        <Grid>
+                            <Rectangle Stroke="{x:Null}"/>
+                            <Rectangle x:Name="rectangle" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="2.5" RadiusX="2" RadiusY="2" Fill="{TemplateBinding Background}"/>
+                            <TextBlock x:Name="textBlock" Margin="0" TextWrapping="Wrap" Padding="{TemplateBinding Padding}" Text="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" Width="{TemplateBinding Width}" Foreground="{TemplateBinding Foreground}" Height="{TemplateBinding Height}" TextAlignment="Center" VerticalAlignment="{TemplateBinding VerticalAlignment}" FontSize="{TemplateBinding FontSize}"/>
+                        </Grid>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsDefault" Value="False"/>
+                            <Trigger Property="IsFocused" Value="True"/>
+                            <Trigger Property="IsDefaulted" Value="True"/>
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Fill" TargetName="rectangle">
+                                    <Setter.Value>
+                                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                                            <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                                            <GradientStop Color="#FF979797"/>
+                                            <GradientStop Color="White" Offset="0.009"/>
+                                            <GradientStop Color="#FF4674B6" Offset="0.511"/>
+                                        </LinearGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                                <Setter Property="Foreground" TargetName="textBlock" Value="White"/>
+                            </Trigger>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Fill" TargetName="rectangle">
+                                    <Setter.Value>
+                                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                                            <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                                            <GradientStop Color="#FF979797"/>
+                                            <GradientStop Color="White" Offset="0.009"/>
+                                            <GradientStop Color="#FF4674B6" Offset="0.511"/>
+                                        </LinearGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                                <Setter Property="Foreground" TargetName="textBlock" Value="#FFD88102"/>
+                                <Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/>
+                            </Trigger>
+                            <Trigger Property="IsEnabled" Value="False"/>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+        <TextBox x:Name="TB_KEY_PAD" HorizontalAlignment="Left" Height="46" Margin="8,8,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="919" FontSize="28"/>
+        <Button x:Name="BTN_KEYPAD_ONE" Content="1" HorizontalAlignment="Left" Margin="8,72,0,0" Width="67" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_ONE_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_TWO" Content="2" HorizontalAlignment="Left" Margin="81,72,0,0" Width="66" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_TWO_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_THREE" Content="3" HorizontalAlignment="Left" Margin="152,72,0,0" Width="67" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_THREE_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_FOUR" Content="4" HorizontalAlignment="Left" Margin="226,72,0,0" Width="66" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_FOUR_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_FIVE" Content="5" HorizontalAlignment="Left" Margin="298,72,0,0" Width="66" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_FIVE_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_SIX" Content="6" HorizontalAlignment="Left" Margin="370,72,0,0" Width="67" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_SIX_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_SEVEN" Content="7" HorizontalAlignment="Left" Margin="443,72,0,0" Width="66" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_SEVEN_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_EIGHT" Content="8" HorizontalAlignment="Left" Margin="515,72,0,0" Width="67" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_EIGHT_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_NINE" Content="9" HorizontalAlignment="Left" Margin="588,72,0,0" Width="67" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_NINE_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_ZERO" Content="0" HorizontalAlignment="Left" Margin="661,72,0,0" Width="66" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_ZERO_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_BAR" Content="-" HorizontalAlignment="Left" Margin="732,72,0,0" Width="66" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_BAR_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_BACKSPACE" Content="BACKSPACE" HorizontalAlignment="Left" Margin="803,72,0,0" Width="124" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,12,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_BACKSPACE_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_q" Content="q" HorizontalAlignment="Left" Margin="8,125,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_q_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_TWO_w" Content="w" HorizontalAlignment="Left" Margin="86,125,0,0" Width="70" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_TWO_w_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_e" Content="e" HorizontalAlignment="Left" Margin="162,125,0,0" Width="71" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_e_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_r" Content="r" HorizontalAlignment="Left" Margin="241,125,0,0" Width="70" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_r_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_t" Content="t" HorizontalAlignment="Left" Margin="318,125,0,0" Width="70" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_t_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_y" Content="y" HorizontalAlignment="Left" Margin="394,125,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_y_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_u" Content="u" HorizontalAlignment="Left" Margin="472,125,0,0" Width="71" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_u_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_i" Content="i" HorizontalAlignment="Left" Margin="549,125,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_i_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_o" Content="o" HorizontalAlignment="Left" Margin="627,125,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_o_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_p" Content="p" HorizontalAlignment="Left" Margin="705,125,0,0" Width="70" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_p_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_LEFT" Content="[" HorizontalAlignment="Left" Margin="781,125,0,0" Width="70" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_LEFT_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_RIGHT" Content="]" HorizontalAlignment="Left" Margin="857,125,0,0" Width="70" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_RIGHT_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_a" Content="a" HorizontalAlignment="Left" Margin="70,178,0,0" Width="74" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_a_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_s" Content="s" HorizontalAlignment="Left" Margin="150,178,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_s_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_d" Content="d" HorizontalAlignment="Left" Margin="228,178,0,0" Width="73" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_d_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_f" Content="f" HorizontalAlignment="Left" Margin="309,178,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_f_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_g" Content="g" HorizontalAlignment="Left" Margin="388,178,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_g_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_h" Content="h" HorizontalAlignment="Left" Margin="466,178,0,0" Width="74" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_h_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_j" Content="j" HorizontalAlignment="Left" Margin="546,178,0,0" Width="73" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_j_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_k" Content="k" HorizontalAlignment="Left" Margin="625,178,0,0" Width="74" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_k_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_l" Content="l" HorizontalAlignment="Left" Margin="705,178,0,0" Width="74" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_l_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_ENTER" Content="ENTER" HorizontalAlignment="Left" Margin="784,178,0,0" Width="143" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,12,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_ENTER_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_CAPSLOCK" Content="caps" HorizontalAlignment="Left" Margin="8,178,0,0" Width="57" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="15" Style="{DynamicResource ButtonStyleEtc}" Padding="1,14,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_CAPSLOCK_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_z" Content="z" HorizontalAlignment="Left" Margin="9,231,0,0" Width="74" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_z_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_x" Content="x" HorizontalAlignment="Left" Margin="89,231,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_x_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_c" Content="c" HorizontalAlignment="Left" Margin="167,231,0,0" Width="73" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_c_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_v" Content="v" HorizontalAlignment="Left" Margin="248,231,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_v_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_b" Content="b" HorizontalAlignment="Left" Margin="537,231,0,0" Width="72" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_b_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_n" Content="n" HorizontalAlignment="Left" Margin="614,231,0,0" Width="74" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_n_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_m" Content="m" HorizontalAlignment="Left" Margin="694,231,0,0" Width="73" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_m_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_COMMA" Content="," HorizontalAlignment="Left" Margin="773,231,0,0" Width="74" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_COMMA_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_POINTER" Content="." HorizontalAlignment="Left" Margin="853,231,0,0" Width="74" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_POINTER_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+        <Button x:Name="BTN_KEYPAD_SPACEBAR" Content="SPACE" HorizontalAlignment="Left" Margin="325,231,0,0" Width="207" FontFamily="Malgun Gothic" FontWeight="Bold" FontSize="18" Style="{DynamicResource ButtonStyleEtc}" Padding="1,15,1,1" Height="48" VerticalAlignment="Top" Click="BTN_KEYPAD_SPACEBAR_Click">
+            <Button.Background>
+                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+                    <GradientStop Color="#FFDFDFE4" Offset="1"/>
+                    <GradientStop Color="#FF979797"/>
+                    <GradientStop Color="White" Offset="0.009"/>
+                    <GradientStop Color="#FF9696A8" Offset="0.511"/>
+                </LinearGradientBrush>
+            </Button.Background>
+        </Button>
+
+    </Grid>
+</Window>

+ 371 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml

@@ -0,0 +1,371 @@
+<UserControl x:Class="OHV.Module.Interactivity.PopUp.LockServoView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:prism="http://prismlibrary.com/"
+             xmlns:local="clr-namespace:OHV.Module.Interactivity.PopUp"
+             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+             prism:ViewModelLocator.AutoWireViewModel="True"
+             mc:Ignorable="d" 
+             Width="800"
+             Height="600"
+             Background="#455a64">
+
+    <prism:Dialog.WindowStyle>
+        <Style TargetType="Window">
+            <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
+            <Setter Property="Background" Value="Transparent"/>
+            <Setter Property="AllowsTransparency" Value="True"/>
+            <Setter Property="ResizeMode" Value="NoResize"/>
+            <Setter Property="WindowStyle" Value="None"/>
+            <Setter Property="BorderThickness" Value="1"/>
+            <Setter Property="BorderBrush" Value="{DynamicResource BorderSolidNormal}"/>
+            <Setter Property="Template" Value="{DynamicResource WindowTemplateKey}"/>
+
+            <!--<Style.Triggers>
+                <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
+                    <Setter Property="Template" Value="{StaticResource WindowTemplateKey}"/>
+                </Trigger>
+            </Style.Triggers>-->
+        </Style>
+    </prism:Dialog.WindowStyle>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+            <ColumnDefinition Width="130"/>
+            <ColumnDefinition Width="130"/>
+        </Grid.ColumnDefinitions>
+
+        <Grid Grid.Column="0">
+            <Grid Margin="15,15" Background="#37474f">
+                <Grid.RowDefinitions>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                </Grid.RowDefinitions>
+
+                <Grid Grid.Row="0">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                        <ColumnDefinition Width="*"/>
+                    </Grid.ColumnDefinitions>
+
+                    <Border BorderBrush="#FF00FFD3" BorderThickness="2" Grid.RowSpan="4" Grid.Column="3" Margin="95,10,2,0"/>
+
+                    <!--Column1-->
+                    <Button Background="{x:Null}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <StackPanel>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Axis"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Select"/></TextBlock>
+                        </StackPanel>
+
+                    </Button>
+
+                    <Button Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <StackPanel>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Target"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Pos"/></TextBlock>
+                        </StackPanel>
+
+                    </Button>
+
+                    <Button Grid.Column="0" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <StackPanel>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Current"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Pos"/></TextBlock>
+                        </StackPanel>
+                    </Button>
+
+                    <Button Grid.Column="0" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <StackPanel>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Difference"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Pos"/></TextBlock>
+                        </StackPanel>
+
+                    </Button>
+
+                    <!--Column2-->
+                    <Button Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners"
+                            Command="{Binding SelectAxisCommand}">
+                        <TextBlock><Run Text="#Motor1"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <Button.InputBindings>
+                            <MouseBinding Gesture="LeftClick" Command="{Binding KeyInTargetPosCommand}" CommandParameter="Left"/>
+                        </Button.InputBindings>
+                        <TextBlock><Run Text="{Binding TargetPosLockLeft, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <TextBlock><Run Text="{Binding CurrentLockLeft, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <TextBlock><Run Text="{Binding DifferenceLockLeft, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <!--Column3-->
+                    <Button Grid.Column="2" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners"
+                            Command="{Binding SelectAxisCommand}">
+                        <TextBlock><Run Text="#Motor2"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <Button.InputBindings>
+                            <MouseBinding Gesture="RightClick" Command="{Binding KeyInTargetPosCommand}" CommandParameter="Left"/>
+                        </Button.InputBindings>
+                        <TextBlock><Run Text="{Binding TargetPosLockRight, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="2" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <TextBlock><Run Text="{Binding CurrentLockRight, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <Button Background="{x:Null}" Grid.Column="2" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                           Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                        <TextBlock><Run Text="{Binding DifferenceLockRight, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                    </Button>
+
+                    <Button Margin="3" HorizontalAlignment="Stretch" Grid.Column="4" Grid.Row="1" Width="Auto" Height="Auto" BorderBrush="Gray" BorderThickness="2"
+                            Command="{Binding SelectPosCommand}"
+                            CommandParameter="Lock">
+                        <StackPanel>
+                            <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            <TextBlock Text="Lock" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                        </StackPanel>
+                    </Button>
+                    <Button Margin="3" HorizontalAlignment="Stretch" Grid.Column="4" Grid.Row="2" Width="Auto" Height="Auto" BorderBrush="Gray" BorderThickness="2"
+                            Command="{Binding SelectPosCommand}"
+                            CommandParameter="UnLock">
+                        <StackPanel>
+                            <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            <TextBlock Text="UnLock" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                        </StackPanel>
+                    </Button>
+                    <Border BorderBrush="#FF00FFD3" BorderThickness="2" Margin="7,98,101,-33" Grid.ColumnSpan="4" RenderTransformOrigin="0.5,0.5" Grid.Row="3">
+                        <Border.RenderTransform>
+                            <TransformGroup>
+                                <ScaleTransform ScaleX="-1"/>
+                                <SkewTransform/>
+                                <RotateTransform/>
+                                <TranslateTransform/>
+                            </TransformGroup>
+                        </Border.RenderTransform>
+                    </Border>
+
+                </Grid>
+
+                <Grid Grid.Row="1">
+                    <StackPanel Margin="0,0,0,90" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Left">
+                        <Button
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners"
+                            Margin="15"
+                            Height="auto"
+                            HorizontalAlignment="Center"
+                            VerticalAlignment="Center"
+                            >
+                            <StackPanel>
+                                <TextBlock><Run Text="Limit(-)"/></TextBlock>
+                            </StackPanel>
+                        </Button>
+
+                        <materialDesign:Badged
+                            Badge="Current Pos"
+                            BadgeColorZoneMode="Dark"
+                            BadgePlacementMode="Top"
+                            BadgeForeground="Aqua"
+                            VerticalAlignment="Center"
+                            HorizontalAlignment="Center"
+                            Height="auto">
+                            <Button Margin="15" VerticalAlignment="Center" HorizontalAlignment="Center" Height="50" >
+                                <StackPanel>
+                                    <TextBlock Text="0.000"/>
+                                </StackPanel>
+                            </Button>
+                        </materialDesign:Badged>
+
+                        <Button
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners"
+                            Margin="15"
+                            Height="auto"
+                            HorizontalAlignment="Center"
+                            VerticalAlignment="Center">
+                            <StackPanel>
+                                <TextBlock><Run Text="Limit(+)"/></TextBlock>
+                            </StackPanel>
+                        </Button>
+                    </StackPanel>
+
+                    <StackPanel Margin="30,0,0,50" Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Left">
+                        <Button
+                            Margin="5"
+                            Grid.Row="2" 
+                            Grid.Column="1"
+                            HorizontalAlignment="Stretch"
+                            Height="auto">
+                            <StackPanel>
+                                <materialDesign:PackIcon Kind="ArrowLeftBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="30" Width="auto"/>
+                                <TextBlock><Run Text="Jog(-)"/></TextBlock>
+                            </StackPanel>
+                        </Button>
+
+                        <materialDesign:Badged
+                            Grid.Row="2"
+                            Grid.Column="2"
+                            Badge="Jog Velocity"
+                            BadgeColorZoneMode="Dark"
+                            BadgePlacementMode="Top"
+                            BadgeForeground="Aqua"
+                            VerticalAlignment="Center"
+                            HorizontalAlignment="Center">
+                            <Button Margin="15" VerticalAlignment="Center" HorizontalAlignment="Center" Height="60" Width="Auto" >
+                                <StackPanel>
+                                    <TextBlock Text="0.000"/>
+                                </StackPanel>
+                            </Button>
+                        </materialDesign:Badged>
+
+                        <Button
+                    Margin="5"
+                    Grid.Row="2" 
+                    Grid.Column="3"
+                    HorizontalAlignment="Stretch"
+                    Height="auto">
+                            <StackPanel>
+                                <materialDesign:PackIcon Kind="ArrowRightBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="30" Width="auto"/>
+                                <TextBlock><Run Text="Jog(+)"/></TextBlock>
+                            </StackPanel>
+                        </Button>
+                    </StackPanel>
+                </Grid>
+            </Grid>
+        </Grid>
+
+        <Grid Grid.Column="1" Background="#37474f">
+            <StackPanel>
+                <Button Margin="7,20" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding AxisSelectCommand}"
+                        Style="{DynamicResource MaterialDesignRaisedButton}"
+                        materialDesign:ShadowAssist.ShadowDepth="Depth5">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Move To" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+
+                <Button Margin="7,20" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding AxisSelectCommand}"
+                        Style="{DynamicResource MaterialDesignRaisedButton}"
+                        materialDesign:ShadowAssist.ShadowDepth="Depth5">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Current" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                        <TextBlock Text="To Target" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+            </StackPanel>
+        </Grid>
+
+        <Grid Grid.Column="2" HorizontalAlignment="Stretch" Background="#263238">
+            <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
+            <StackPanel>
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOnCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Servo On" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOffCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="PowerPlugOff" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Servo Off" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding FaultResetCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="CircleArrows" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Fault Reset" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding OriginCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="Origin" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Origin" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="ExitToApp" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Close" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+            </StackPanel>
+
+        </Grid>
+
+        <!--<StackPanel Orientation="Horizontal" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,5,0,0">
+            <Button x:Name="btnSend" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="0,0,20,0" Height="25" Command="{Binding CloseDialogCommand}" CommandParameter="true" Content="확인" Background="#FF1368BD" Style="{StaticResource MaterialDesignRaisedButton}"/>
+            -->
+        <!--Style="{DynamicResource btn_Send}"-->
+        <!--
+
+            <Button x:Name="btnCancel" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="25"  Content="취소" Command="{Binding CloseDialogCommand}" CommandParameter="false" Background="#FF1368BD" Style="{StaticResource MaterialDesignRaisedButton}"/>
+            -->
+        <!--Style="{DynamicResource btn_Close}"-->
+        <!--
+        </StackPanel>-->
+    </Grid>
+</UserControl>

+ 28 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace OHV.Module.Interactivity.PopUp
+{
+    /// <summary>
+    /// LockServoView.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class LockServoView : UserControl
+    {
+        public LockServoView( )
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 221 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoViewModel.cs

@@ -0,0 +1,221 @@
+using Prism.Commands;
+using Prism.Mvvm;
+using Prism.Services.Dialogs;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace OHV.Module.Interactivity.PopUp
+{
+    public class LockServoViewModel : BindableBase, IDialogAware
+    {
+        private DelegateCommand<string> _closeDialogCommand;
+        public DelegateCommand<string> CloseDialogCommand =>
+            _closeDialogCommand ?? ( _closeDialogCommand = new DelegateCommand<string>( CloseDialog ) );
+
+
+        private string _title = "LockServoView";
+        public string Title
+        {
+            get { return this._title; }
+            set
+            {
+                this.SetProperty( ref this._title , value );
+            }
+        }
+
+        private string _selectAxis = string.Empty;
+        public string SelectAxis
+        {
+            get => this._selectAxis;
+            set { this.SetProperty( ref this._selectAxis , value ); }
+        }
+
+        private string _selectedPosition = string.Empty;
+        public string SelectedPosition
+        {
+            get => this._selectedPosition;
+            set
+            {
+                this.SetProperty( ref this._selectedPosition , value );
+            }
+        }
+
+        #region Binding Lock Left
+        private double _targetPosLockLeft;
+        public double TargetPosLockLeft
+        {
+            get { return this._targetPosLockLeft; }
+            set { this.SetProperty( ref this._targetPosLockLeft , value ); }
+        }
+
+        private double _currentLockLeft;
+        public double CurrentLockLeft
+        {
+            get { return this._currentLockLeft; }
+            set { this.SetProperty( ref this._currentLockLeft , value ); }
+        }
+
+        private double _differenceLockLeft;
+        public double DifferenceLockLeft
+        {
+            get { return this._differenceLockLeft; }
+            set { this.SetProperty( ref this._differenceLockLeft , value ); }
+        }
+        #endregion
+
+        #region Binding Lock Right
+        private double _targetPosLockRight;
+        public double TargetPosLockRight
+        {
+            get { return this._targetPosLockRight; }
+            set { this.SetProperty( ref this._targetPosLockRight , value ); }
+        }
+
+        private double _currentLockRight;
+        public double CurrentLockRight
+        {
+            get { return this._currentLockRight; }
+            set { this.SetProperty( ref this._currentLockRight , value ); }
+        }
+
+        private double _differenceLockRight;
+        public double DifferenceLockRight
+        {
+            get { return this._differenceLockRight; }
+            set { this.SetProperty( ref this._differenceLockRight , value ); }
+        }
+        #endregion
+
+
+        public ICommand SelectAxisCommand { get; set; }
+        public ICommand KeyInTargetPosCommand { get; set; }
+        public ICommand SelectPosCommand { get; set; }
+        public ICommand MoveToCommand { get; set; }
+        public ICommand CurrentToTargetCommand { get; set; }
+        public ICommand ServoOnCommand { get; set; }
+        public ICommand ServoOffCommand { get; set; }
+        public ICommand FaultResetCommand { get; set; }
+        public ICommand OriginCommand { get; set; }
+
+        public event Action<IDialogResult> RequestClose;
+
+        public LockServoViewModel( )
+        {
+            this.SelectAxisCommand = new DelegateCommand<object>( ExecuteSelectAxisCommand );
+            this.SelectPosCommand = new DelegateCommand<object>( ExecuteSelectPosCommand );
+            this.MoveToCommand = new DelegateCommand( ExecuteMoveToCommand );
+            this.CurrentToTargetCommand = new DelegateCommand( ExecuteCurrentToTargetCommand );
+            this.KeyInTargetPosCommand = new DelegateCommand<object>( ExecuteKeyInCommadn );
+
+            this.ServoOnCommand = new DelegateCommand( ExecuteServoOnCommand );
+            this.ServoOffCommand = new DelegateCommand( ExecuteServoOffCommand );
+            this.FaultResetCommand = new DelegateCommand( ExecuteFaultResetCommand );
+            this.OriginCommand = new DelegateCommand( ExecuteOriginCommand );
+        }
+
+        private void ExecuteOriginCommand( )
+        {
+        }
+
+        private void ExecuteFaultResetCommand( )
+        {
+        }
+
+        private void ExecuteServoOffCommand( )
+        {
+        }
+
+        private void ExecuteServoOnCommand( )
+        {
+        }
+
+        private void ExecuteKeyInCommadn( object obj )
+        {
+            if ( obj.ToString().Equals( "Left" ) )
+            {
+                var numPad = new CalcuratorView();
+                var result = numPad.ShowDialog( this.TargetPosLockLeft );
+                this.TargetPosLockLeft = result;
+            }
+            else
+            {
+                var numPad = new CalcuratorView();
+                var result = numPad.ShowDialog( this.TargetPosLockRight );
+                this.TargetPosLockRight = result;
+            }
+        }
+
+        private void ExecuteCurrentToTargetCommand( )
+        {
+            this.TargetPosLockLeft = this.CurrentLockLeft;
+            this.TargetPosLockRight = this.CurrentLockRight;
+        }
+
+        private async void ExecuteMoveToCommand( )
+        {
+            await Task.Run( ( ) =>
+            {
+                //Axis.Move(this.SelectPosition);
+            } );
+        }
+
+        private void ExecuteSelectPosCommand( object obj )
+        {
+            this.SelectedPosition = obj.ToString();
+
+            switch ( this.SelectedPosition )
+            {
+                case "Lock":
+                    break;
+                case "UnLock":
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        private void ExecuteSelectAxisCommand( object obj )
+        {
+            this.SelectAxis = obj.ToString();
+        }
+
+        #region Dialog 
+        public bool CanCloseDialog( )
+        {
+            //throw new NotImplementedException();
+            return true;
+        }
+
+        public void OnDialogClosed( )
+        {
+            //throw new NotImplementedException();
+        }
+
+        public void OnDialogOpened( IDialogParameters parameters )
+        {
+            //throw new NotImplementedException();
+        }
+
+        public virtual void RaiseRequestClose( IDialogResult dialogResult )
+        {
+            RequestClose?.Invoke( dialogResult );
+        }
+
+        private void CloseDialog( string parameter )
+        {
+            ButtonResult result = ButtonResult.None;
+
+            if ( parameter?.ToLower() == "true" )
+                result = ButtonResult.OK;
+            else if ( parameter?.ToLower() == "false" )
+                result = ButtonResult.Cancel;
+
+            RaiseRequestClose( new DialogResult( result ) );
+        }
+        #endregion
+    }
+}

+ 115 - 75
Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigView.xaml

@@ -8,8 +8,8 @@
              xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
              prism:ViewModelLocator.AutoWireViewModel="True"
              mc:Ignorable="d" 
-             Width="600"
-             Height="400"
+             Width="800"
+             Height="550"
              Background="#455a64">
 
     <prism:Dialog.WindowStyle>
@@ -32,16 +32,10 @@
     </prism:Dialog.WindowStyle>
 
     <Grid>
-        <!--<Grid.RowDefinitions>
-            <RowDefinition/>
-            <RowDefinition/>
-            <RowDefinition Height="45"/>
-        </Grid.RowDefinitions>-->
-
         <Grid.ColumnDefinitions>
             <ColumnDefinition/>
-            <ColumnDefinition Width="100"/>
-            <ColumnDefinition Width="100"/>
+            <ColumnDefinition Width="130"/>
+            <ColumnDefinition Width="130"/>
         </Grid.ColumnDefinitions>
 
         <Grid Grid.Column="0">
@@ -49,91 +43,133 @@
                 <Grid.RowDefinitions>
                     <RowDefinition/>
                     <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
                 </Grid.RowDefinitions>
-                
-                <StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Bottom">
-                    <materialDesign:Badged
-                    Badge="SENSOR"
-                    BadgeColorZoneMode="Dark" BadgePlacementMode="TopLeft" Margin="5" VerticalAlignment="Center">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Background="{Binding LimitNE}">
-                            <StackPanel>
-                                <TextBlock Text="Limit NE(-)" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </materialDesign:Badged>
-
-                    <materialDesign:Badged
-                    Badge="SENSOR"
-                    BadgeColorZoneMode="Dark" BadgePlacementMode="Top" Margin="5" VerticalAlignment="Center">
-                        <Button Margin="15" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Background="{Binding Home}">
-                            <StackPanel>
-                                <TextBlock Text="Home" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </materialDesign:Badged>
-
-                    <materialDesign:Badged
-                    Badge="SENSOR"
-                    BadgeColorZoneMode="Dark" BadgePlacementMode="TopRight" Margin="5" VerticalAlignment="Center">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Background="{Binding LimitPV}">
-                            <StackPanel>
-                                <TextBlock Text="Limit PV(+)" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </materialDesign:Badged>
-                </StackPanel>
-
-                <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Top">
-                    
-                    <Button Margin="0,0,15,0" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding JogNECommand}">
-                        <StackPanel>
-                            <materialDesign:PackIcon Kind="ArrowLeftBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                            <TextBlock Text="Jog(-)" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                        </StackPanel>
-                    </Button>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+
+                <!--Current Pos & Limit(+),(-)-->
+                <Border Margin="2,101,0,10" BorderBrush="#FF00FFD3" 
+                        BorderThickness="1" VerticalAlignment="Stretch"
+                        HorizontalAlignment="Stretch" Grid.Column="1" 
+                        Grid.ColumnSpan="3" Grid.RowSpan="2"/>
+                <Button
+                    Style="{StaticResource MaterialDesignRaisedButton}"
+                    materialDesign:ButtonAssist.CornerRadius="10"
+                    ToolTip="MaterialDesignRaisedButton with Round Corners"
+                    Margin="10,20,10,20"
+                    Grid.Row="1" 
+                    Grid.Column="1"
+                    Height="auto"
+                    HorizontalAlignment="Stretch">
+                    <StackPanel>
+                        <TextBlock><Run Text="Limit(-)"/></TextBlock>
+                    </StackPanel>
+                </Button>
 
-                    <Button Margin="0,0,15,0" Height="Auto" BorderBrush="Gray" BorderThickness="2">
+                <materialDesign:Badged
+                        Grid.Row="1"
+                        Grid.Column="2"
+                        Badge="Current Pos"
+                        BadgeColorZoneMode="Dark"
+                        BadgePlacementMode="Top"
+                        BadgeForeground="Aqua"
+                        VerticalAlignment="Center"
+                        HorizontalAlignment="Center"
+                        Height="auto">
+                    <Button Margin="15" VerticalAlignment="Center" HorizontalAlignment="Center" Height="50" >
                         <StackPanel>
-                            <!--<materialDesign:PackIcon Kind="ArrowLeftBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
-                            <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            <TextBlock Text="{Binding CurrentPos,FallbackValue=0.000, StringFormat=0.000}" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            <TextBlock Text="0.000"/>
                         </StackPanel>
                     </Button>
+                </materialDesign:Badged>
+
+                <Button
+                    Style="{StaticResource MaterialDesignRaisedButton}"
+                    materialDesign:ButtonAssist.CornerRadius="10"
+                    ToolTip="MaterialDesignRaisedButton with Round Corners"
+                    Margin="10,20,10,20"
+                    Grid.Row="1" 
+                    Grid.Column="3"
+                    Height="auto"
+                    HorizontalAlignment="Stretch">
+                    <StackPanel>
+                        <TextBlock><Run Text="Limit(-)"/></TextBlock>
+                    </StackPanel>
+                </Button>
+
+                <!--JogVelocity, Jog(-), Jog(+)-->
+                <Button
+                    Margin="5"
+                    Grid.Row="2" 
+                    Grid.Column="1"
+                    HorizontalAlignment="Stretch"
+                    Height="auto">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="ArrowLeftBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock><Run Text="Jog(-)"/></TextBlock>
+                    </StackPanel>
+                </Button>
 
-                    <Button Margin="0,0,15,0" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding JogPVCommand}">
+                <materialDesign:Badged
+                        Grid.Row="2"
+                        Grid.Column="2"
+                        Badge="Jog Velocity"
+                        BadgeColorZoneMode="Dark"
+                        BadgePlacementMode="Top"
+                        BadgeForeground="Aqua"
+                        VerticalAlignment="Center"
+                    HorizontalAlignment="Center">
+                    <Button Margin="15" VerticalAlignment="Center" HorizontalAlignment="Center" Height="60" Width="Auto" >
                         <StackPanel>
-                            <materialDesign:PackIcon Kind="ArrowRightBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                            <TextBlock Text="Jog(+)" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            <TextBlock Text="0.000"/>
                         </StackPanel>
                     </Button>
-                </StackPanel>
+                </materialDesign:Badged>
+
+                <Button
+                    Margin="5"
+                    Grid.Row="2" 
+                    Grid.Column="3"
+                    HorizontalAlignment="Stretch"
+                    Height="auto">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="ArrowRightBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock><Run Text="Jog(+)"/></TextBlock>
+                    </StackPanel>
+                </Button>
+
             </Grid>
         </Grid>
 
         <Grid Grid.Column="1" Background="#37474f">
             <StackPanel>
-                <materialDesign:Badged
-                    Badge="SELECT"
-                    BadgeColorZoneMode="Dark" BadgePlacementMode="TopLeft" Margin="7, 20">
-                    <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding AxisSelectCommand}">
-                        <StackPanel>
-                            <materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                            <TextBlock Text="Motor#1" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                        </StackPanel>
-                    </Button>
-                </materialDesign:Badged>
+                <Button Margin="7,20" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding AxisSelectCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Drive#1" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
 
 
                 <Button Margin="7,20" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding AxisSelectCommand}">
                     <StackPanel>
                         <materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                        <TextBlock Text="Motor#2" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                        <TextBlock Text="Lock#2" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
                 </Button>
-            </StackPanel>    
+            </StackPanel>
         </Grid>
 
-        <Grid Grid.Column="2" HorizontalAlignment="Right" Background="#263238">
+        <Grid Grid.Column="2" HorizontalAlignment="Stretch" Background="#263238">
+            <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
             <StackPanel>
                 <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOnCommand}">
                     <StackPanel>
@@ -149,7 +185,7 @@
                     </StackPanel>
                 </Button>
 
-                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding AlarmResetCommand}">
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding FaultResetCommand}">
                     <StackPanel>
                         <materialDesign:PackIcon Kind="CircleArrows" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
                         <TextBlock Text="Alarm Rst" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
@@ -175,10 +211,14 @@
 
         <!--<StackPanel Orientation="Horizontal" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,5,0,0">
             <Button x:Name="btnSend" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="0,0,20,0" Height="25" Command="{Binding CloseDialogCommand}" CommandParameter="true" Content="확인" Background="#FF1368BD" Style="{StaticResource MaterialDesignRaisedButton}"/>
-            --><!--Style="{DynamicResource btn_Send}"--><!--
+            -->
+        <!--Style="{DynamicResource btn_Send}"-->
+        <!--
 
             <Button x:Name="btnCancel" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="25"  Content="취소" Command="{Binding CloseDialogCommand}" CommandParameter="false" Background="#FF1368BD" Style="{StaticResource MaterialDesignRaisedButton}"/>
-            --><!--Style="{DynamicResource btn_Close}"--><!--
+            -->
+        <!--Style="{DynamicResource btn_Close}"-->
+        <!--
         </StackPanel>-->
     </Grid>
 </UserControl>

+ 37 - 2
Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigViewModel.cs

@@ -7,7 +7,9 @@ using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Windows;
 using System.Windows.Input;
+using System.Windows.Threading;
 
 namespace OHV.Module.Interactivity.PopUp
 {
@@ -41,11 +43,13 @@ namespace OHV.Module.Interactivity.PopUp
         }
 
         public ICommand ServoOnCommand { get; set; }
-        public ICommand ServoOffCOmmand { get; set; }
-        public ICommand AlarmResetCommand { get; set; }
+        public ICommand ServoOffCommand { get; set; }
+        public ICommand FaultResetCommand { get; set; }
         public ICommand OriginCommand { get; set; }
         public ICommand AxisSelectCommand { get; set; }
 
+        DispatcherTimer dispatcherTimer;
+
         public string Title
         {
             get { return this._title; }
@@ -54,11 +58,41 @@ namespace OHV.Module.Interactivity.PopUp
                 this.SetProperty( ref this._title , value );
             }
         }
+
         public ServoConfigViewModel( )
         {
+            this.ServoOnCommand = new DelegateCommand( ExecuteServoOnCommand );
+            this.ServoOffCommand = new DelegateCommand( ExecuteServoOffCommand );
+            this.FaultResetCommand = new DelegateCommand( ExecuteFaultResetCommand );
+            this.OriginCommand = new DelegateCommand( ExecuteOriginCommand );
+
+            this.dispatcherTimer = new DispatcherTimer( TimeSpan.FromMilliseconds( 500 ) , DispatcherPriority.Render ,
+                                                       this.AxisCurrentPosUpdate , Application.Current.Dispatcher );
+        }
+
+        private void AxisCurrentPosUpdate( object sender , EventArgs e )
+        {
+            //this.CurrentPosition = this.axis.CurrentPosition;
+        }
+
+        private void ExecuteOriginCommand( )
+        {
+        }
 
+        private void ExecuteFaultResetCommand( )
+        {
+        }
+
+        private void ExecuteServoOffCommand( )
+        {
         }
 
+        private void ExecuteServoOnCommand( )
+        {
+        }
+
+
+        #region Dialog 
         public bool CanCloseDialog( )
         {
             return true;
@@ -87,6 +121,7 @@ namespace OHV.Module.Interactivity.PopUp
         {
             RequestClose?.Invoke( dialogResult );
         }
+        #endregion
 
         public void Init( ) { }
     }

+ 4 - 0
Dev/OHV/OHV.Module.MainViews/OHV.Module.MainViews.csproj

@@ -113,6 +113,10 @@
       <Project>{D6402D97-2206-4D55-8097-8DA9A01568CB}</Project>
       <Name>OHV.Module.Interactivity</Name>
     </ProjectReference>
+    <ProjectReference Include="..\OHV.SqliteDAL\OHV.SqliteDAL.csproj">
+      <Project>{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}</Project>
+      <Name>OHV.SqliteDAL</Name>
+    </ProjectReference>
     <ProjectReference Include="..\VehicleControlSystem\VehicleControlSystem.csproj">
       <Project>{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}</Project>
       <Name>VehicleControlSystem</Name>

+ 3 - 338
Dev/OHV/OHV.Module.MainViews/Views/AutoView.xaml

@@ -12,346 +12,11 @@
              Height="942"
              >
 
-    <Grid Margin="15" Background="#455a64">
+    <Grid Background="#37474f">
         <Grid.ColumnDefinitions>
-            <ColumnDefinition Width="641*"/>
-            <ColumnDefinition Width="379*"/>
+            <ColumnDefinition Width="*"/>
         </Grid.ColumnDefinitions>
 
-        <Grid Grid.Column="0">
-            <Grid.RowDefinitions>
-                <RowDefinition Height="*"/>
-                <RowDefinition Height="*"/>
-                <RowDefinition Height="*"/>
-                <RowDefinition Height="*"/>
-            </Grid.RowDefinitions>
-
-            <!--<Grid Grid.Row="0">
-                <Grid.RowDefinitions>
-                    <RowDefinition/>
-                    <RowDefinition/>
-                </Grid.RowDefinitions>
-
-                <Grid Grid.Row="0" Margin="96,0,0,0">
-                    <Grid.RowDefinitions>
-                        <RowDefinition Height="*"/>
-                        <RowDefinition Height="*"/>
-                    </Grid.RowDefinitions>
-
-                    <Grid Grid.Row="0">
-                        <StackPanel Orientation="Vertical" Background="#FFDCA617" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
-                            <ProgressBar Width="50" Height="50" RenderTransformOrigin="0.5,0.5" VerticalAlignment="Bottom" HorizontalAlignment="Right" IsIndeterminate="True">
-                                <ProgressBar.RenderTransform>
-                                    <TransformGroup>
-                                        <ScaleTransform ScaleY="-1"/>
-                                        <SkewTransform/>
-                                        <RotateTransform/>
-                                        <TranslateTransform/>
-                                    </TransformGroup>
-                                </ProgressBar.RenderTransform>
-                            </ProgressBar>
-                        </StackPanel>
-                        <TextBlock VerticalAlignment="Top" HorizontalAlignment="Right" Width="366" Height="45" Foreground="White" FontSize="30" Margin="0,0,2,0"><Run Text="Tabos Battery Energy "/><InlineUIContainer>
-                                <materialDesign:PackIcon Kind="BatteryCharging" Height="28" RenderTransformOrigin="0.5,0.857" Width="33"/>
-                            </InlineUIContainer></TextBlock>
-                    </Grid>
-                </Grid>
-
-                <Grid Background="#FFD18E00" Grid.Row="1" Margin="2,0,2,1">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition/>
-                    </Grid.ColumnDefinitions>
-
-                    <TextBlock Text="STX" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0,0,52,4" Foreground="White"/>
-                    <TextBlock Text="RTX" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0,0,138,3" Foreground="White"/>
-
-                    <Button Margin="392,28,311,19" Height="Auto" Background="{x:Null}" BorderBrush="#FF683400">
-                        <materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
-                    </Button>
-                    <TextBlock Text="Open" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="404,0,323,3" Foreground="White" Width="31"/>
-
-                    <Button Margin="486,28,217,19" Background="{x:Null}" Height="Auto" BorderBrush="#FF683400">
-                        <materialDesign:PackIcon Kind="CloseNetwork" VerticalAlignment="Bottom" HorizontalAlignment="Center"/>
-                    </Button>
-                    <TextBlock Text="Close" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="499,0,228,3" Foreground="White" Width="31"/>
-
-                    <Button Background="{x:Null}" Margin="581,27,122,20" Height="Auto" BorderBrush="#FF683400">
-                        <materialDesign:PackIcon Kind="CircleDouble" HorizontalAlignment="Center" VerticalAlignment="Center"/>
-                    </Button>
-
-                    <Button Background="{x:Null}" Margin="667,27,36,20" Height="Auto" BorderBrush="#FF683400">
-                        <materialDesign:PackIcon Kind="CircleDouble" HorizontalAlignment="Center" VerticalAlignment="Center"/>
-                    </Button>
-                </Grid>
-
-                <materialDesign:PackIcon Kind="BatteryCharging" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="158,45,478,51" Height="Auto" Grid.RowSpan="2" Width="Auto">
-                    <materialDesign:PackIcon.Foreground>
-                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
-                            <GradientStop Color="White" Offset="0"/>
-                            <GradientStop Color="#FFFFD30B" Offset="1"/>
-                        </LinearGradientBrush>
-                    </materialDesign:PackIcon.Foreground>
-                </materialDesign:PackIcon>
-            </Grid>-->
-
-            <!--<Grid Grid.Row="1">
-                <Grid.RowDefinitions>
-                    <RowDefinition/>
-                    <RowDefinition/>
-                </Grid.RowDefinitions>
-                <DockPanel>
-                    <TextBlock Text="Laser Status" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"/>
-                </DockPanel>
-
-                <Grid Grid.Row="0" Margin="2,2,2,0" Background="#FF7EBFFF">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="*"/>
-                        <ColumnDefinition Width="*"/>
-                    </Grid.ColumnDefinitions>
-
-                    <Grid Grid.Column="0">
-                    </Grid>
-                    <Grid Grid.Column="1">
-                        <DockPanel VerticalAlignment="Center" HorizontalAlignment="Center">
-                            <TextBlock Text="Robot Lazer Scanner" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="30"/>
-                        </DockPanel>
-                    </Grid>
-                </Grid>
-
-                <Grid Grid.Row="1" Margin="2,0,2,2" Background="#FF288DF1">
-
-                    <Button Margin="392,24,311,23" Height="Auto" Background="{x:Null}" BorderBrush="#FF0016EE">
-                        <materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
-                    </Button>
-                    <TextBlock Text="Open" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="404,0,323,7" Foreground="White" Width="31"/>
-
-                    <Button Margin="488,24,215,23" Height="Auto" Background="{x:Null}" BorderBrush="#FF0016EE">
-                        <materialDesign:PackIcon Kind="CloseNetworkOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
-                    </Button>
-                    <TextBlock Text="Close" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="502,0,225,7" Foreground="White" Width="31"/>
-                </Grid>
-
-                <materialDesign:PackIcon Kind="ImageFilterCenterFocusStrongOutline" Margin="158,48,0,0" Height="82" Grid.RowSpan="2" Width="126" >
-                    <materialDesign:PackIcon.Foreground>
-                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
-                            <GradientStop Color="#FFB6B6F3" Offset="0"/>
-                            <GradientStop Color="Blue" Offset="1"/>
-                        </LinearGradientBrush>
-                    </materialDesign:PackIcon.Foreground>
-                </materialDesign:PackIcon>
-            </Grid>-->
-
-            <!--<Grid Grid.Row="2">
-                <Grid.RowDefinitions>
-                    <RowDefinition/>
-                    <RowDefinition/>
-                </Grid.RowDefinitions>
-
-                <Grid Grid.Row="0" Background="#FF62953F" Margin="2,0">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="*"/>
-                        <ColumnDefinition Width="*"/>
-                    </Grid.ColumnDefinitions>
-
-                    <Grid Grid.Column="0">
-
-                    </Grid>
-
-                    <Grid Grid.Column="1">
-                        <DockPanel>
-                            <TextBlock Text="Steering System" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="30"/>
-                        </DockPanel>
-                    </Grid>
-                </Grid>
-
-                <Grid Grid.Row="1" Background="#FF3C6C1B" Margin="2,0,2,2">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition/>
-                    </Grid.ColumnDefinitions>
-
-                    <Grid Grid.Column="0">
-
-                        <Button Margin="392,24,311,23" Height="Auto" Background="{x:Null}" BorderBrush="#FF08A600">
-                            <materialDesign:PackIcon Kind="RotateLeftVariant" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
-                        </Button>
-                        <TextBlock Text="Left" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="404,0,323,7" Foreground="White" Width="31"/>
-
-                        <Button Margin="488,24,215,23" Height="Auto" Background="{x:Null}" BorderBrush="#FF08A600">
-                            <materialDesign:PackIcon Kind="RotateRightVariant" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
-                        </Button>
-                        <TextBlock Text="Right" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="501,0,226,7" Foreground="White" Width="31"/>
-                    </Grid>
-                </Grid>
-
-                <materialDesign:PackIcon Kind="SearchHandsFree" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="Auto" Margin="159,47,477,48" Grid.RowSpan="2" Width="Auto">
-                    <materialDesign:PackIcon.Foreground>
-                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
-                            <GradientStop Color="#FFD2FFCB" Offset="0"/>
-                            <GradientStop Color="#FF1BC900" Offset="1"/>
-                        </LinearGradientBrush>
-                    </materialDesign:PackIcon.Foreground>
-                </materialDesign:PackIcon>
-            </Grid>-->
-
-            <!--<Grid Grid.Row="3">
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="*"/>
-                </Grid.RowDefinitions>
-
-                <Grid Grid.Row="0" Background="#FF4D4D4D" Margin="2,0">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                    </Grid.ColumnDefinitions>
-                    <Grid Grid.Column="0"></Grid>
-                    <Grid Grid.Column="1">
-                        <DockPanel>
-                            <TextBlock Text="OCS System Command" Foreground="White" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center"/>
-                        </DockPanel>
-                    </Grid>
-                </Grid>
-
-                <Grid Grid.Row="1" Background="#FF292929" Margin="2,0,2,2">
-                    <StackPanel>
-                        <CheckBox x:Name="MaterialDesignOutlinedTextFieldTextBoxEnabledComboBox" IsChecked="True" Margin="339,0,0,8" Content="Enabled"/>
-                        <TextBox Style="{StaticResource MaterialDesignOutlinedTextFieldTextBox}" VerticalAlignment="Top" Height="59" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" materialDesign:HintAssist.Hint="Command Area" IsEnabled="{Binding IsChecked, ElementName=MaterialDesignOutlinedTextFieldTextBoxEnabledComboBox}" Margin="339,0,2,0" Foreground="White" />
-                    </StackPanel>
-                </Grid>
-
-                <materialDesign:PackIcon Kind="LanConnect" Height="83" RenderTransformOrigin="0.5,0.857" Width="126" Margin="159,41,0,0" Grid.RowSpan="2">
-                    <materialDesign:PackIcon.Foreground>
-                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
-                            <GradientStop Color="White" Offset="0.013"/>
-                            <GradientStop Color="#FF2B1F1F" Offset="1"/>
-                        </LinearGradientBrush>
-                    </materialDesign:PackIcon.Foreground>
-                </materialDesign:PackIcon>
-            </Grid>-->
-        </Grid>
-
-
-        <!--<Grid Grid.Column="1">
-            <Grid.RowDefinitions>
-                <RowDefinition Height="119*"/>
-                <RowDefinition Height="200*"/>
-                <RowDefinition Height="221*"/>
-            </Grid.RowDefinitions>
-
-            <Grid Grid.Row="0">
-                <Grid.RowDefinitions>
-                    <RowDefinition/>
-                    <RowDefinition/>
-                </Grid.RowDefinitions>
-                <Grid Grid.Row="0">
-                    <DockPanel>
-                        <TextBlock Text="Vehicle Machine #1" Style="{StaticResource MaterialDesignHeadline5TextBlock}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
-                    </DockPanel>
-                </Grid>
-                <Grid Grid.Row="1">
-                    <DockPanel>
-                        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
-                            <Hyperlink IsEnabled="False" Style="{StaticResource MaterialDesignHeadline6Hyperlink}">
-                            Vehicle Task Result Message
-                            </Hyperlink>
-                        </TextBlock>
-                    </DockPanel>
-                </Grid>
-            </Grid>
-
-            <Grid Grid.Row="1">
-                <StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="90">
-                    <TextBlock Text="Device Status 0.0% Monitor" FontSize="30" VerticalAlignment="Top"/>
-                </StackPanel>
- 
-                <StackPanel Orientation="Horizontal" >
-                    <materialDesign:PackIcon Kind="ChartTimelineVariant" Height="auto" Width="46" VerticalAlignment="Center" Margin="35"/>
-                    <materialDesign:PackIcon Kind="TimelineClockOutline" Height="Auto" Width="46" VerticalAlignment="Center" Margin="35"/>
-                    <materialDesign:PackIcon Kind="BatteryChargingWirelessWarning" Height="39" Width="46" VerticalAlignment="Center" Margin="35"/>
-                    <materialDesign:PackIcon Kind="Bullhorn" Height="Auto" Width="46" VerticalAlignment="Center" Margin="35"/>
-                    <materialDesign:PackIcon Kind="Gamepad" Height="Auto" Width="46"  VerticalAlignment="Center" Margin="35"/>
-                </StackPanel>
-                
-            </Grid>
-
-            <Grid Grid.Row="2">
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition/>
-                    <ColumnDefinition/>
-                    <ColumnDefinition/>
-                </Grid.ColumnDefinitions>
-
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="37*"/>
-                    <RowDefinition Height="60*"/>
-                </Grid.RowDefinitions>
-
-                <DockPanel Grid.Column="0" Grid.Row="1">
-                    <DockPanel>
-                        <Button HorizontalAlignment="Stretch" Height="Auto" Command="{Binding StopCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="StopCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="86" Width="auto"/>
-                                <TextBlock Text="Stop" VerticalAlignment="Bottom" HorizontalAlignment="Center" FontSize="30"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-                </DockPanel>
-
-                <DockPanel Grid.Column="1" Grid.Row="1">
-                    <Button HorizontalAlignment="Stretch" Height="Auto" Command="{Binding AutoStartCommand}">
-                        <StackPanel>
-                            <materialDesign:PackIcon Kind="ArrowRightDropCircle" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="86" Width="auto"/>
-                            <TextBlock Text="Start" VerticalAlignment="Bottom" HorizontalAlignment="Center" FontSize="30"/>
-                        </StackPanel>
-                    </Button>
-                </DockPanel>
-
-                <DockPanel Grid.Column="2" Grid.Row="1">
-                    <Button HorizontalAlignment="Stretch" Height="Auto" Command="{Binding ResetCommand}">
-                        <StackPanel>
-                            <materialDesign:PackIcon Kind="CircleArrows" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="86" Width="auto"/>
-                            <TextBlock Text="Reset" VerticalAlignment="Bottom" HorizontalAlignment="Center" FontSize="30"/>
-                        </StackPanel>
-                    </Button>
-                </DockPanel>
-
-                <Grid Grid.Row="0" Grid.Column="0">
-                    <Border BorderBrush="Gray" BorderThickness="2"/>
-                </Grid>
-
-                <Grid Grid.Row="0" Grid.Column="1">
-                    <Border BorderBrush="Gray" BorderThickness="2"/>
-                </Grid>
-
-                <Grid Grid.Row="0" Grid.Column="2">
-                    <Border BorderBrush="Gray" BorderThickness="2"/>
-                </Grid>
-
-                <DockPanel Grid.Column="0" Grid.Row="0">
-                    <Button Margin="0,0,0,0" Command="{Binding ModeCommand}" CommandParameter="Auto"
-                    Style="{DynamicResource MaterialDesignRaisedButton}"
-                    materialDesign:ShadowAssist.ShadowDepth="Depth4" HorizontalAlignment="Center">
-                        Auto
-                    </Button>
-                </DockPanel>
-
-                <DockPanel Grid.Column="1" Grid.Row="0">
-                    <Button Margin="0,0,0,0" Command="{Binding ModeCommand}" CommandParameter="Manual"
-                    Style="{DynamicResource MaterialDesignRaisedButton}"
-                    materialDesign:ShadowAssist.ShadowDepth="Depth4" HorizontalAlignment="Center">
-                        Manual
-                    </Button>
-                </DockPanel>
-
-                <DockPanel Grid.Column="2" Grid.Row="0">
-                    <Button Margin="0,0,0,0" Command="{Binding ModeCommand}" CommandParameter="Initialize"
-                    Style="{DynamicResource MaterialDesignRaisedButton}"
-                    materialDesign:ShadowAssist.ShadowDepth="Depth4" HorizontalAlignment="Center">
-                        Initialize
-                    </Button>
-                </DockPanel>
-            </Grid>
-        </Grid>-->
-
+        <Grid Margin="15" Background="#263238"/>
     </Grid>
 </UserControl>

+ 50 - 270
Dev/OHV/OHV.Module.MainViews/Views/TeachView.xaml

@@ -13,280 +13,60 @@
              Background="#37474f">
     
     <Grid>
-        <Grid Margin="15" Background="#263238">
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"/>
+            <ColumnDefinition Width="Auto"/>
+        </Grid.ColumnDefinitions>
 
-            <Grid.RowDefinitions>
-                <RowDefinition Height="*"/>
-                <RowDefinition Height="*"/>
-            </Grid.RowDefinitions>
-
-            <Grid Grid.Row="0">
-                <DockPanel Grid.Row="0">
-                    <!--<TextBlock Text="Teaching Pos View" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Red" FontSize="30"/>-->
-                    <ListView x:Name="LV_PositionView" ItemsSource="{Binding PosData}" FontSize="20" Foreground="Gray" BorderBrush="White" BorderThickness="1">
-                        <ListView.View>
-                            <GridView>
-                                <GridViewColumn DisplayMemberBinding="{Binding No}" Header="No"/>
-                                <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name"/>
-                                <GridViewColumn DisplayMemberBinding="{Binding Positioin}" Header="Position"/>
-                                <GridViewColumn DisplayMemberBinding="{Binding Tag}" Header="Tag"/>
-                            </GridView>
-                        </ListView.View>
-                    </ListView>
-                </DockPanel>
+        <Grid Grid.Column="0">
+            <Grid Margin="15,15" Background="#263238">
             </Grid>
+        </Grid>
 
-            <Grid Grid.Row="1" Grid.Column="0">
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="1*"/>
-                    <ColumnDefinition Width="1*"/>
-                </Grid.ColumnDefinitions>
-                
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="2*"/>
-                    <RowDefinition Height="*"/>
-                </Grid.RowDefinitions>
-
-                <Grid Grid.Row="0" Grid.Column="0">
-                    <Border Margin="15" BorderBrush="Gray" BorderThickness="1"/>
-                    <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
-                        <TextBlock Margin="15" Text="Command Log" FontSize="50" FontWeight="Bold" Foreground="Gray"/>
-                        <TextBlock Margin="15" Text="#MOTOR1 Move TO P1" FontSize="50" FontWeight="Bold" Foreground="Gray"/>
+        <Grid Grid.Column="1" HorizontalAlignment="Right" Background="#263238">
+            <StackPanel>
+                <Button HorizontalAlignment="Stretch"
+                    Style="{StaticResource MaterialDesignRaisedButton}"
+                    Margin="20"
+                    materialDesign:ButtonProgressAssist.Value="-1"
+                    materialDesign:ButtonProgressAssist.IsIndicatorVisible="True"
+                    materialDesign:ButtonProgressAssist.IsIndeterminate="True"
+                    Command="{Binding DriveTeachPopup}"
+                    Height="Auto" Width="Auto">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="CarTractionControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="50"/>
+                        <TextBlock Text="# Drive Teach" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
-                </Grid>
-
-                <Grid Grid.Row="0" Grid.Column="1">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                    </Grid.ColumnDefinitions>
-
-                    <Border Grid.Column="0" Margin="15" BorderBrush="Gray" BorderThickness="1"/>
-                    <Border Grid.Column="1" Margin="15" BorderBrush="Gray" BorderThickness="1"/>
-                    <Border Grid.Column="2" Margin="15" BorderBrush="Gray" BorderThickness="1"/>
-                    
-                    <DockPanel Grid.Column="0" Grid.Row="0">
-                        <Button VerticalAlignment="Center" HorizontalAlignment="Center" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOnCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Servo On" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="1" Grid.Row="0">
-                        <Button VerticalAlignment="Center" HorizontalAlignment="Center" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOffCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="PowerPlugOff" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Servo Off" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="2" Grid.Row="0">
-                        <Button VerticalAlignment="Center" HorizontalAlignment="Center" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoConfigCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="SettingsTransferOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Servo Config" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                </Grid>
-
-                <Grid Grid.Row="1" Grid.Column="0">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                    </Grid.ColumnDefinitions>
-
-                    <DockPanel Grid.Row="1" Grid.Column="0">
-                        <Button HorizontalAlignment="Stretch" Height="Auto">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="FileUpload" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Others" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Row="1" Grid.Column="1">
-                        <Button HorizontalAlignment="Stretch" Height="Auto">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="FileUpload" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Others" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Row="1" Grid.Column="2">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" Command="{Binding MapCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="MapMarkerCircle" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Map" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Row="1" Grid.Column="3">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" Command="{Binding FileLoadCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="FileUpload" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Load" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Row="1" Grid.Column="4">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" Command="{Binding TeachSaveCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="ContentSaveOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Save" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-                </Grid>
-
-                <Grid Grid.Row="1" Grid.Column="1">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                    </Grid.ColumnDefinitions>
-                    
-                    <DockPanel Grid.Column="0" Grid.Row="2">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding JogNECommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="ArrowLeftBoldBoxOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Jog -" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="1" Grid.Row="2">
-                        <Border BorderBrush="Gray" BorderThickness="2">
-                            <StackPanel Orientation="Vertical" VerticalAlignment="Center">
-                                <TextBlock Text="Pos" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Top"/>
-                                <TextBlock Text="{Binding CurrentPosCommand, FallbackValue=0.000, StringFormat=0.000}" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="20,0"/>
-                            </StackPanel>
-                        </Border>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="2" Grid.Row="2">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding JogPVCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="ArrowRightBoldBoxOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Jog +" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-                </Grid>
-            </Grid>
-
-
-            <!--<Grid Grid.Column="1" Grid.Row="1">
-
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="*"/>
-                </Grid.RowDefinitions>
-
-                <Grid Grid.Row="0">
-                    <DockPanel Grid.Row="0">
-                        --><!--<ContentControl Grid.Column="1" prism:RegionManager.RegionName="IOView"/>--><!--
-                    </DockPanel>
-                </Grid>
-
-                <Grid Grid.Row="1" Grid.Column="1">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                    </Grid.ColumnDefinitions>
-
-                    <Grid.RowDefinitions>
-                        <RowDefinition Height="60*"/>
-                        <RowDefinition Height="37*"/>
-                        <RowDefinition Height="60*"/>
-                    </Grid.RowDefinitions>
-
-                    <DockPanel Grid.Column="0" Grid.Row="0">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOnCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Servo On" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="1" Grid.Row="1">
-                        <Border BorderBrush="Gray" BorderThickness="2">
-                            <TextBlock Text="Nagative Sensor" VerticalAlignment="Center" HorizontalAlignment="Center"/>
-                        </Border>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="2" Grid.Row="1">
-                        <Border BorderBrush="Gray" BorderThickness="2">
-                            <TextBlock Text="Home Sensor" VerticalAlignment="Center" HorizontalAlignment="Center"/>
-                        </Border>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="2" Grid.Row="1">
-                        <Border BorderBrush="Gray" BorderThickness="2">
-                            <TextBlock Text="Positive Sensor" VerticalAlignment="Center" HorizontalAlignment="Center"/>
-                        </Border>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="1" Grid.Row="0">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOffCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="PowerPlugOff" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Servo Off" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="2" Grid.Row="0">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoConfigCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="SettingsTransferOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Servo Config" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="0" Grid.Row="2">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding JogNECommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="ArrowLeftBoldBoxOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Jog -" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="1" Grid.Row="2">
-                        <Border BorderBrush="Gray" BorderThickness="2">
-                            <StackPanel >
-                                <TextBlock Text="Pos" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Top"/>
-                                <TextBlock Text="{Binding CurrentPosCommand, FallbackValue=0.000, StringFormat=0.000}" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="20,0"/>
-                            </StackPanel>
-                        </Border>
-                    </DockPanel>
-
-                    <DockPanel Grid.Column="2" Grid.Row="2">
-                        <Button HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding JogPVCommand}">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="ArrowRightBoldBoxOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                                <TextBlock Text="Jog +" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </DockPanel>
-
-                </Grid>
-            </Grid>-->
+                </Button>
+
+                <Button HorizontalAlignment="Stretch"
+                    Style="{StaticResource MaterialDesignRaisedButton}"
+                    Margin="20"
+                    materialDesign:ButtonProgressAssist.Value="-1"
+                    materialDesign:ButtonProgressAssist.IsIndicatorVisible="True"
+                    materialDesign:ButtonProgressAssist.IsIndeterminate="True"
+                    Command="{Binding LockPopup}"
+                    Height="Auto" Width="Auto">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="PackageUp" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="50"/>
+                        <TextBlock Text="#Lock Teach" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <!--<Button HorizontalAlignment="Stretch"
+                    Style="{StaticResource MaterialDesignRaisedButton}"
+                    Margin="20"
+                    materialDesign:ButtonProgressAssist.Value="-1"
+                    materialDesign:ButtonProgressAssist.IsIndicatorVisible="True"
+                    materialDesign:ButtonProgressAssist.IsIndeterminate="True"
+                    Command="{Binding JogPopup}"
+                    Height="Auto" Width="Auto">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="GestureSpread" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="50"/>
+                        <TextBlock Text="# Jogging" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>-->
+            </StackPanel>
         </Grid>
     </Grid>
 </UserControl>

+ 20 - 10
Dev/OHV/OHV.Module.MainViews/Views/TeachViewModel.cs

@@ -1,4 +1,5 @@
 using OHV.Module.Interactivity;
+using OHV.SqliteDAL;
 using Prism.Commands;
 using Prism.Events;
 using Prism.Mvvm;
@@ -17,24 +18,33 @@ namespace OHV.Module.MainViews.Views
         IEventAggregator eventAggregator = null;
         VCSystem vcSystem = null;
         MessageController msgController = null;
+        SqliteManager sql = null;
 
-        public ICommand ServoOnCommand { get; set; }
-        public ICommand ServoOffCommand { get; set; }
-        public ICommand TeachSaveCommand { get; set; }
-        public ICommand FileLoadCommand { get; set; }
-        public ICommand MapCommand { get; set; }
         public ICommand ServoConfigCommand { get; set; }
-        public ICommand JogNECommand { get; set; }
-        public ICommand JogPVCommand { get; set; }
+        public ICommand JogPopup { get; set; }
+        public ICommand LockPopup { get; set; }
+        public ICommand DriveTeachPopup { get; set; }
 
-        public TeachViewModel( IEventAggregator _ea , VCSystem _vcSystem , MessageController _msgController )
+        public TeachViewModel( IEventAggregator _ea , VCSystem _vcSystem , MessageController _msgController, SqliteManager _sql )
         {
             this.eventAggregator = _ea;
             this.vcSystem = _vcSystem;
             this.msgController = _msgController;
+            this.sql = _sql;
 
-            this.MapCommand = new DelegateCommand( ExecuteMapCommand);
-            this.ServoConfigCommand = new DelegateCommand( ExecuteServoConfigCommand );
+            this.JogPopup = new DelegateCommand( ExecuteServoConfigCommand );
+            this.LockPopup = new DelegateCommand( ExecuteLockPopupCommand );
+            this.DriveTeachPopup = new DelegateCommand( ExecuteDriveTeachPopupCommand );
+        }
+
+        private void ExecuteDriveTeachPopupCommand( )
+        {
+            this.msgController.ShowDrivePopupView();
+        }
+
+        private void ExecuteLockPopupCommand( )
+        {
+            this.msgController.ShowLockPopupView();
         }
 
         private void ExecuteServoConfigCommand( )

+ 4 - 4
Dev/OHV/OHV.Vehicle/App.xaml

@@ -16,12 +16,12 @@
 
             <!--TODO: Skin Test-->
             <!--PRIMARY-->
-            <SolidColorBrush x:Key="PrimaryHueLightBrush" Color="#349fda"/>
-            <SolidColorBrush x:Key="PrimaryHueLightForegroundBrush" Color="#333333"/>
+            <!--<SolidColorBrush x:Key="PrimaryHueLightBrush" Color="#349fda"/>
+            <SolidColorBrush x:Key="PrimaryHueLightForegroundBrush" Color="#333333"/>-->
             <SolidColorBrush x:Key="PrimaryHueMidBrush" Color="#349fda"/>
             <SolidColorBrush x:Key="PrimaryHueMidForegroundBrush" Color="#FFFFFF"/>
-            <SolidColorBrush x:Key="PrimaryHueDarkBrush" Color="#689f38"/>
-            <SolidColorBrush x:Key="PrimaryHueDarkForegroundBrush" Color="#FFFFFF"/>
+            <!--<SolidColorBrush x:Key="PrimaryHueDarkBrush" Color="#689f38"/>
+            <SolidColorBrush x:Key="PrimaryHueDarkForegroundBrush" Color="#FFFFFF"/>-->
             <!--ACCENT-->
             <SolidColorBrush x:Key="SecondaryAccentBrush" Color="#689f38"/>
             <SolidColorBrush x:Key="SecondaryAccentForegroundBrush" Color="#FFFFFF"/>

+ 31 - 0
Dev/OHV/OHV.Vehicle/App.xaml.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Threading;
 using System.Windows;
 using CommonServiceLocator;
 using GSG.NET.Logging;
@@ -23,6 +24,10 @@ namespace OHV.Vehicle
     {
         static Logger logger = Logger.GetLogger();
 
+        public static ISplashScreen splashScreen;
+        private ManualResetEvent resetSplashCreated;
+        private Thread splashThread;
+
         private void Application_Startup(object sender, StartupEventArgs e)
         {
             LogUtils.Configure("CONFIG/log4net.xml");
@@ -46,6 +51,18 @@ namespace OHV.Vehicle
 
                 //this.MainWindow = mainView;
                 //this.ShutdownMode = ShutdownMode.OnMainWindowClose;
+
+                #region Splash
+                resetSplashCreated = new ManualResetEvent( false );
+
+                splashThread = new Thread( ShowSplash );
+                splashThread.SetApartmentState( ApartmentState.STA );
+                splashThread.IsBackground = true;
+                splashThread.Name = "Splash Screen";
+                splashThread.Start();
+
+                resetSplashCreated.WaitOne();
+                #endregion
             }
             catch (Exception ex)
             {
@@ -56,6 +73,20 @@ namespace OHV.Vehicle
 
         }
 
+        private void ShowSplash( )
+        {
+            // Create the window
+            AnimatedSplashScreenWindow animatedSplashScreenWindow = new AnimatedSplashScreenWindow();
+            splashScreen = animatedSplashScreenWindow;
+
+            // Show it
+            animatedSplashScreenWindow.Show();
+
+            // Now that the window is created, allow the rest of the startup to run
+            resetSplashCreated.Set();
+            System.Windows.Threading.Dispatcher.Run();
+        }
+
         private void Application_Exit(object sender, ExitEventArgs e)
         {
             var ea = Container.Resolve<IEventAggregator>();

Разница между файлами не показана из-за своего большого размера
+ 81 - 0
Dev/OHV/OHV.Vehicle/Concept/AnimatedSplashScreenWindow.xaml


+ 117 - 0
Dev/OHV/OHV.Vehicle/Concept/AnimatedSplashScreenWindow.xaml.cs

@@ -0,0 +1,117 @@
+using System;
+using System.ComponentModel;
+using System.Threading;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace OHV.Vehicle.Concept
+{
+    /// <summary>
+    /// AnimatedSplashScreenWindow.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class AnimatedSplashScreenWindow : Window, ISplashScreen, INotifyPropertyChanged
+    {
+        public event PropertyChangedEventHandler PropertyChanged;
+
+        #region Properties
+        string totalProgressText;
+        private int _progressValue;
+
+        public int ProgressValue
+        {
+            get { return _progressValue; }
+            set
+            {
+                _progressValue = value;
+                OnPropertyChanged( nameof( ProgressValue ) );
+            }
+        }
+        public string TotalProgressText
+        {
+            get { return totalProgressText; }
+            set
+            {
+                if ( totalProgressText == value )
+                    return;
+                totalProgressText = value;
+                OnPropertyChanged( nameof( TotalProgressText ) );
+            }
+        }
+        #endregion
+
+        public void SetRange(int count )
+        {
+            Dispatcher.Invoke( new Action( () => 
+            {
+                ProgressValue = 0;
+                ProgressBar.Maximum = count;
+            } ) );
+            
+        }
+
+        public void StepIt()
+        {
+            Dispatcher.Invoke( new Action(()=> 
+            {
+                if ( this.ProgressBar.Maximum <= ProgressValue )
+                    return;
+
+                this.ProgressValue += 1;
+            } ));
+        }
+
+        public AnimatedSplashScreenWindow()
+        {
+            InitializeComponent();
+        }
+
+        public void AddMessage( string message )
+        {
+            Dispatcher.Invoke( (Action)delegate ()
+            {
+                this.UpdateMessageLabel.Content = message;
+            } );
+        }
+
+        public void ReportProgress(int persent )
+        {
+            Dispatcher.Invoke( (Action)delegate ()
+            {
+                ProgressValue = persent;
+            } );
+        }
+
+        public void ReportTotalProgress( int persent )
+        {
+            Dispatcher.Invoke( (Action)delegate ()
+            {
+                this.TotalProgressText = $"Total {persent}%";
+            } );
+        }
+
+        public void LoadComplete()
+        {
+            Thread.Sleep( 500 );
+            Dispatcher.InvokeShutdown();
+        }
+
+        protected void OnPropertyChanged( string name )
+        {
+            PropertyChangedEventHandler handler = PropertyChanged;
+            if ( handler != null )
+            {
+                handler( this, new PropertyChangedEventArgs( name ) );
+            }
+        }
+
+    }
+    public interface ISplashScreen
+    {
+        void ReportTotalProgress( int persent );
+        void AddMessage( string message );
+        void LoadComplete();
+        void ReportProgress( int persent );
+        void SetRange( int count );
+        void StepIt();
+    }
+}

+ 6 - 0
Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml.cs

@@ -25,12 +25,18 @@ namespace OHV.Vehicle.Concept
         {
             InitializeComponent();
 
+            App.splashScreen.AddMessage( "Application Start !" );
+            App.splashScreen.StepIt();
+
             if ( !DesignerProperties.GetIsInDesignMode( this ) )
             {
                 this.gridHead.MouseLeftButtonDown += GridMain_MouseLeftButtonDown;
                 this.Loaded += MainWindow_Loaded;
                 this.Closing += MainWindow_Closing;
             }
+
+            App.splashScreen.AddMessage( "Done !" );
+            App.splashScreen.LoadComplete();
         }
 
         private void GridMain_MouseLeftButtonDown( object sender , MouseButtonEventArgs e )

+ 9 - 9
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -136,15 +136,15 @@ namespace OHV.Vehicle.Concept
             dateTimer.Interval = TimeSpan.FromMilliseconds( 500 );
             dateTimer.Start();
 
-            //DispatcherTimer deskTopTimer = new DispatcherTimer();
-            //deskTopTimer.Tick += ( object sender , EventArgs e ) =>
-            //{
-            //    this.CPU = dti.GetCpuUsage();
-            //    this.UsageCPU = (int)dti.GetCpuUsage();
-            //    this.RAM = dti.GetRamUsage();
-            //};
-            //deskTopTimer.Interval = TimeSpan.FromMilliseconds( 1000 );
-            //deskTopTimer.Start();
+            DispatcherTimer deskTopTimer = new DispatcherTimer();
+            deskTopTimer.Tick += ( object sender , EventArgs e ) =>
+            {
+                this.CPU = dti.GetCpuUsage();
+                this.UsageCPU = ( int )dti.GetCpuUsage();
+                this.RAM = dti.GetRamUsage();
+            };
+            deskTopTimer.Interval = TimeSpan.FromMilliseconds( 1000 );
+            deskTopTimer.Start();
 
             this._totalCPU = dti.cpuResult;
         }

+ 25 - 1
Dev/OHV/OHV.Vehicle/Helpler/DeskTopInfo.cs

@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Data.Entity.Core.Objects;
 using System.Diagnostics;
+using System.IO;
 using System.Linq;
 using System.Management;
 using System.Text;
@@ -20,6 +21,7 @@ namespace OHV.Vehicle
 
         public double totalMemory { get; }
         public float cpuResult { get; set; }
+        public double cDriveCapacity { get; set; }
 
         public DeskTopInfo()
         {
@@ -49,7 +51,7 @@ namespace OHV.Vehicle
         }
 
         public float GetCpuUsage()
-        {
+        { 
             return cpuResult = cpu.NextValue();
         }
 
@@ -57,5 +59,27 @@ namespace OHV.Vehicle
         {
             return totalMemory - (ram.NextValue() / GB);
         }
+
+        [System.Runtime.InteropServices.DllImport( "kernel32.dll" , SetLastError = true , CharSet = System.Runtime.InteropServices.CharSet.Auto )]
+        [return: System.Runtime.InteropServices.MarshalAs( System.Runtime.InteropServices.UnmanagedType.Bool )]
+        static extern bool GetDiskFreeSpaceEx( string lpDirectoryName ,
+        out ulong lpFreeBytesAvailable , out ulong lpTotalNumberOfBytes ,
+        out ulong lpTotalNumberOfFreeBytes );
+
+        public double GetDrive()
+        {
+            ulong available, total, free;
+
+            GetDiskFreeSpaceEx( "C:\\" , out available , out total , out free );
+
+            return 100d * free / total;
+        }
+
+        public double GetCDrive()
+        {
+            var drive = new DriveInfo("C");
+
+            return 100 * drive.TotalFreeSpace / drive.TotalSize;
+        }
     }
 }

+ 7 - 0
Dev/OHV/OHV.Vehicle/OHV.Vehicle.csproj

@@ -121,6 +121,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </ApplicationDefinition>
+    <Page Include="Concept\AnimatedSplashScreenWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Concept\D_MainWindow.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
@@ -133,6 +137,9 @@
       <DependentUpon>App.xaml</DependentUpon>
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Concept\AnimatedSplashScreenWindow.xaml.cs">
+      <DependentUpon>AnimatedSplashScreenWindow.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Concept\D_MainWindow.xaml.cs">
       <DependentUpon>D_MainWindow.xaml</DependentUpon>
     </Compile>