Exemple #1
0
        virtual public void ResetKeyboardLayout()
        {
            bool isReseted = false;

            foreach (Grid grdRow in this.Children)
            {
                foreach (KeyCap keyCap in grdRow.Children)
                {
                    UpdateKeyCapLayout(keyCap, false);

                    if (keyCap.LayoutRoot.Children[0] is ToggleButton)
                    {
                        if (!isReseted && keyCap.KeyCapType != KeyCapTypes.Function)
                        {
                            isReseted = (bool)(keyCap.LayoutRoot.Children[0] as ToggleButton).IsChecked;
                        }

                        (keyCap.LayoutRoot.Children[0] as ToggleButton).IsChecked = false;
                    }
                }
            }

            if (isReseted)
            {
                KeyCapEventArgs args = new KeyCapEventArgs();
                args.KeyCapType = KeyCapTypes.Esc;
                args.KeyCode    = 41; //ESC코드
                OnKeyboardLayoutReseted(args);
            }
        }
 protected virtual void OnLanguageKeyCapTap(KeyCapEventArgs e)
 {
     if (LanguageKeyCapTap != null)
     {
         LanguageKeyCapTap(this, e);
     }
 }
 protected virtual void OnFunctionKeyCapChecked(KeyCapEventArgs e)
 {
     if (FunctionKeyCapChecked != null)
     {
         FunctionKeyCapChecked(this, e);
     }
 }
 protected virtual void OnKeyCapUnchecked(KeyCapEventArgs e)
 {
     if (KeyCapUnchecked != null)
     {
         KeyCapUnchecked(this, e);
     }
 }
 protected virtual void OnSymbolKeyCapTap(KeyCapEventArgs e)
 {
     if (SymbolKeyCapTap != null)
     {
         SymbolKeyCapTap(this, e);
     }
 }
 protected virtual void OnKeyCapReleased(KeyCapEventArgs e)
 {
     if (KeyCapReleased != null)
     {
         KeyCapReleased(this, e);
     }
 }
 protected virtual void OnKeyboardLayoutReseted(KeyCapEventArgs e)
 {
     if (KeyboardLayoutReseted != null)
     {
         KeyboardLayoutReseted(this, e);
     }
 }
        void keyCap_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            KeyCap         keyCap = sender as KeyCap;
            ContentControl cc     = keyCap.LayoutRoot.Children[0] as ContentControl;
            //데이터 셋팅
            KeyCapEventArgs keyCapEventArgs = GetKeyCapEventArgs(keyCap);

            //키데이터 셋팅

            if (keyCap.KeyCapType == KeyCapTypes.Symbol)
            {
                OnSymbolKeyCapTap(keyCapEventArgs);
            }
            else if (keyCap.KeyCapType == KeyCapTypes.Language)
            {
                OnLanguageKeyCapTap(keyCapEventArgs);
            }
        }
        private KeyCapEventArgs GetKeyCapEventArgs(KeyCap keyCap)
        {
            KeyCapEventArgs keyCapEventArgs = new KeyCapEventArgs()
            {
                ImeKey     = keyCap.KeyCapType == KeyCapTypes.Language ? this.LanguageKeyboard.OriginalKeyboardLayoutType : this.OriginalKeyboardLayoutType,
                KeyCapType = keyCap.KeyCapType,
                KeyCode    = keyCap.KeyCode
            };

            foreach (Grid grd in this.Children)
            {
                foreach (KeyCap kc in grd.Children)
                {
                    if (kc.LayoutRoot.Children[0] is ToggleButton)
                    {
                        ToggleButton tb = kc.LayoutRoot.Children[0] as ToggleButton;
                        switch (kc.KeyCapType)
                        {
                        case KeyCapTypes.Shift:
                            keyCapEventArgs.IsShiftKey = (bool)tb.IsChecked;
                            break;

                        case KeyCapTypes.Control:
                            keyCapEventArgs.IsControlKey = (bool)tb.IsChecked;
                            break;

                        case KeyCapTypes.Alt:
                            keyCapEventArgs.IsAltKey = (bool)tb.IsChecked;
                            break;

                        case KeyCapTypes.Window:
                            keyCapEventArgs.IsWindowKey = (bool)tb.IsChecked;
                            break;

                        default:
                            break;
                        }
                    }
                }
            }

            return(keyCapEventArgs);
        }
        void keyCap_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
        {
            KeyCap         keyCap = sender as KeyCap;
            ContentControl cc     = keyCap.LayoutRoot.Children[0] as ContentControl;
            //데이터 셋팅
            KeyCapEventArgs keyCapEventArgs = GetKeyCapEventArgs(keyCap);

            //릴리즈 데이터
            keyCapEventArgs.KeyCode = 0;
            //키데이터 셋팅

            if (cc is Button)
            {
                OnKeyCapReleased(keyCapEventArgs);
            }
            else if (cc is ToggleButton && (cc as ToggleButton).IsChecked == false)
            {
                if (keyCap.KeyCapType == KeyCapTypes.Function)
                {
                    OnFunctionKeyCapUnchecked(keyCapEventArgs);
                }
                else
                {
                    OnKeyCapUnchecked(keyCapEventArgs);

                    if (keyCapEventArgs.KeyCapType == KeyCapTypes.Shift)
                    {
                        foreach (Grid grd in this.Children)
                        {
                            foreach (KeyCap kc in grd.Children)
                            {
                                if (kc.KeyCapType == KeyCapTypes.Normal || kc.KeyCapType == KeyCapTypes.Backspace)
                                {
                                    UpdateKeyCapLayout(kc, false);
                                }
                            }
                        }
                    }
                }
            }
        }