示例#1
0
 private void onPreviewKeyDown( object sender, KeyEventArgs args ) {
     if ( mainMenu != null ) {
         if ( mainMenu.TryMatchGesture( args ) ) {
             args.Handled = true;
         }
     }
 }
示例#2
0
        private void Button_KeyDown( object sender, KeyEventArgs args ) {
            if (Disabled) return;

            if ( args.wVirtualKeyCode == VirtualKeys.Space ) { // VK_SPACE
                RaiseEvent(ClickEvent, new RoutedEventArgs(this, ClickEvent));
                args.Handled = true;
            }
        }
示例#3
0
        private void Button_KeyDown( object sender, KeyEventArgs args ) {
            if (Disabled) return;

            if ( args.wVirtualKeyCode == VirtualKeys.Space
                || args.wVirtualKeyCode == VirtualKeys.Return) {
                RaiseEvent(ClickEvent, new RoutedEventArgs(this, ClickEvent));
                pressedUsingKeyboard = true;
                Invalidate(  );
                ConsoleApplication.Instance.Post( ( ) => {
                    pressedUsingKeyboard = false;
                    Invalidate(  );
                }, TimeSpan.FromMilliseconds( 300 ) );
                args.Handled = true;
            }
        }
示例#4
0
        public bool Matches( KeyEventArgs args ) {
            VirtualKeys wVirtualKeyCode = args.wVirtualKeyCode;
            if ( this.Key != wVirtualKeyCode ) return false;
            ControlKeyState controlKeyState = args.dwControlKeyState;
            ModifierKeys modifierKeys = this.Modifiers;

            // Проверяем все возможные модификаторы по очереди

            if ( ( modifierKeys & ModifierKeys.Alt ) != 0 ) {
                if ( ( controlKeyState & ( ControlKeyState.LEFT_ALT_PRESSED
                                           | ControlKeyState.RIGHT_ALT_PRESSED ) ) == 0 ) {
                    // Должен быть взведён один из флагов, показывающих нажатие Alt, а его нет
                    return false;
                }
            } else {
                if ( ( controlKeyState & ( ControlKeyState.LEFT_ALT_PRESSED
                                           | ControlKeyState.RIGHT_ALT_PRESSED ) ) != 0 ) {
                    // Не должно быть взведено ни одного флага, показывающего нажатие Alt,
                    // а на самом деле - флаг стоит
                    return false;
                }
            }

            if ( ( modifierKeys & ModifierKeys.Control ) != 0 ) {
                if ( ( controlKeyState & ( ControlKeyState.LEFT_CTRL_PRESSED
                                           | ControlKeyState.RIGHT_CTRL_PRESSED ) ) == 0 ) {
                    return false;
                }
            } else {
                if ( ( controlKeyState & ( ControlKeyState.LEFT_CTRL_PRESSED
                                           | ControlKeyState.RIGHT_CTRL_PRESSED ) ) != 0 ) {
                    return false;
                }
            }

            if ( ( modifierKeys & ModifierKeys.Shift ) != 0 ) {
                if ( ( controlKeyState & ( ControlKeyState.SHIFT_PRESSED ) ) == 0 ) {
                    return false;
                }
            } else {
                if ( ( controlKeyState & ( ControlKeyState.SHIFT_PRESSED ) ) != 0 ) {
                    return false;
                }
            }

            return true;
        }
示例#5
0
 private void TextBox_KeyDown(object sender, KeyEventArgs args) {
     // todo : add right alt & ctrl support
     ConsoleKeyInfo keyInfo = new ConsoleKeyInfo(args.UnicodeChar, (ConsoleKey) args.wVirtualKeyCode,
                                                 (args.dwControlKeyState & ControlKeyState.SHIFT_PRESSED) ==
                                                 ControlKeyState.SHIFT_PRESSED,
                                                 (args.dwControlKeyState & ControlKeyState.LEFT_ALT_PRESSED) ==
                                                 ControlKeyState.LEFT_ALT_PRESSED,
                                                 (args.dwControlKeyState & ControlKeyState.LEFT_CTRL_PRESSED) ==
                                                 ControlKeyState.LEFT_CTRL_PRESSED);
     if (!char.IsControl(keyInfo.KeyChar)) {
         // insert keychar into a text string according to cursorPosition and offset
         if (text != null) {
             string leftPart = text.Substring(0, cursorPosition + displayOffset);
             string rightPart = text.Substring(cursorPosition + displayOffset);
             Text = leftPart + keyInfo.KeyChar + rightPart;
         } else {
             Text = keyInfo.KeyChar.ToString();
         }
         if (cursorPosition + 1 < ActualWidth - 2) {
             cursorPosition++;
             CursorPosition = new Point(cursorPosition + 1, 0);
         } else {
             displayOffset++;
         }
     } else {
         if (keyInfo.Key == ConsoleKey.Delete) {
             if (!String.IsNullOrEmpty(text) && displayOffset + cursorPosition < text.Length) {
                 string leftPart = text.Substring(0, cursorPosition + displayOffset);
                 string rightPart = text.Substring(cursorPosition + displayOffset + 1);
                 Text = leftPart + rightPart;
                 //
             } else {
                 Console.Beep();
             }
         }
         if (keyInfo.Key == ConsoleKey.Backspace) {
             if (!String.IsNullOrEmpty(text) && (displayOffset != 0 || cursorPosition != 0)) {
                 string leftPart = text.Substring(0, cursorPosition + displayOffset - 1);
                 string rightPart = text.Substring(cursorPosition + displayOffset);
                 Text = leftPart + rightPart;
                 if (displayOffset > 0)
                     displayOffset--;
                 else {
                     if (cursorPosition > 0) {
                         cursorPosition--;
                         CursorPosition = new Point(cursorPosition + 1, 0);
                     }
                 }
             } else {
                 Console.Beep();
             }
         }
         if (keyInfo.Key == ConsoleKey.LeftArrow) {
             if (!String.IsNullOrEmpty(text) && (displayOffset != 0 || cursorPosition != 0)) {
                 if (cursorPosition > 0) {
                     cursorPosition--;
                     CursorPosition = new Point(cursorPosition + 1, 0);
                 } else {
                     if (displayOffset > 0) {
                         displayOffset--;
                         Invalidate();
                     }
                 }
             } else {
                 Console.Beep();
             }
         }
         if (keyInfo.Key == ConsoleKey.RightArrow) {
             if (!String.IsNullOrEmpty(text) && displayOffset + cursorPosition < text.Length) {
                 if (cursorPosition + 1 < ActualWidth - 2) {
                     cursorPosition++;
                     CursorPosition = new Point(cursorPosition + 1, 0);
                 } else {
                     if (displayOffset + cursorPosition < text.Length) {
                         displayOffset++;
                         Invalidate();
                     }
                 }
             } else {
                 Console.Beep();
             }
         }
         if (keyInfo.Key == ConsoleKey.Home) {
             if (displayOffset != 0 || cursorPosition != 0) {
                 displayOffset = 0;
                 cursorPosition = 0;
                 CursorPosition = new Point(cursorPosition + 1, 0);
                 Invalidate();
             } else {
                 Console.Beep();
             }
         }
         if (keyInfo.Key == ConsoleKey.End) {
             if (!String.IsNullOrEmpty(text) && cursorPosition + displayOffset < ActualWidth - 2) {
                 displayOffset = text.Length >= ActualWidth - 2 ? text.Length - (ActualWidth - 2) + 1 : 0;
                 cursorPosition = text.Length >= ActualWidth - 2 ? ActualWidth - 2 - 1 : text.Length;
                 CursorPosition = new Point(cursorPosition + 1, 0);
                 Invalidate();
             } else {
                 Console.Beep();
             }
         }
     }
     //Debugger.Log(0, "", String.Format("cursorPos : {0} offset {1}\n", cursorPosition, displayOffset));
 }
        private bool processRoutedEvent(RoutedEvent routedEvent, RoutedEventArgs args) {
            //
            List<RoutedEventTargetInfo> subscribedTargets = getTargetsSubscribedTo(routedEvent);

            Control capturingControl = inputCaptureStack.Count != 0 ? inputCaptureStack.Peek() : null;
            //
            if (routedEvent.RoutingStrategy == RoutingStrategy.Direct) {
                if (null == subscribedTargets)
                    return false;
                //
                RoutedEventTargetInfo targetInfo =
                    subscribedTargets.FirstOrDefault(info => info.target == args.Source);
                if (null == targetInfo)
                    return false;

                // если имеется контрол, захватывающий события, события получает только он сам
                // и его дочерние контролы
                if ( capturingControl != null ) {
                    if ( !(args.Source is Control) ) return false;
                    if ( !isControlAllowedToReceiveEvents( ( Control ) args.Source, capturingControl ) )
                        return false;
                }

                // copy handlersList to local list to avoid modifications when enumerating
                foreach (DelegateInfo delegateInfo in new List< DelegateInfo >(targetInfo.handlersList)) {
                    if (!args.Handled || delegateInfo.handledEventsToo) {
                        if (delegateInfo.@delegate is RoutedEventHandler) {
                            ((RoutedEventHandler) delegateInfo.@delegate).Invoke(targetInfo.target, args);
                        } else {
                            [email protected](targetInfo.target, args);
                        }
                    }
                }
            }

            Control source = (Control) args.Source;
            // path to source from root element down to Source
            List<Control> path = new List<Control>();
            Control current = source;
            while (null != current) {
                // та же логика с контролом, захватившим обработку сообщений
                // если имеется контрол, захватывающий события, события получает только он сам
                // и его дочерние контролы
                if ( capturingControl == null || isControlAllowedToReceiveEvents( current, capturingControl ) ) {
                    path.Insert( 0, current );
                    current = current.Parent;
                } else {
                    break;
                }
            }

            if (routedEvent.RoutingStrategy == RoutingStrategy.Tunnel) {
                if (subscribedTargets != null) {
                    foreach (Control potentialTarget in path) {
                        Control target = potentialTarget;
                        RoutedEventTargetInfo targetInfo =
                            subscribedTargets.FirstOrDefault(info => info.target == target);
                        if (null != targetInfo) {
                            foreach (DelegateInfo delegateInfo in new List< DelegateInfo >(targetInfo.handlersList)) {
                                if (!args.Handled || delegateInfo.handledEventsToo) {
                                    if (delegateInfo.@delegate is RoutedEventHandler) {
                                        ((RoutedEventHandler) delegateInfo.@delegate).Invoke(target, args);
                                    } else {
                                        [email protected](target, args);
                                    }
                                }
                            }
                        }
                    }
                }
                // для парных Preview-событий запускаем соответствующие настоящие события,
                // сохраняя при этом Handled (если Preview событие помечено как Handled=true,
                // то и настоящее событие будет маршрутизировано с Handled=true)
                if (routedEvent == Control.PreviewMouseDownEvent) {
                    MouseButtonEventArgs mouseArgs = ( ( MouseButtonEventArgs ) args );
                    MouseButtonEventArgs argsNew = new MouseButtonEventArgs(
                        args.Source, Control.MouseDownEvent, mouseArgs.RawPosition,
                        mouseArgs.LeftButton, mouseArgs.MiddleButton, mouseArgs.RightButton,
                        mouseArgs.ChangedButton
                    );
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
                if (routedEvent == Control.PreviewMouseUpEvent) {
                    MouseButtonEventArgs mouseArgs = ( ( MouseButtonEventArgs ) args );
                    MouseButtonEventArgs argsNew = new MouseButtonEventArgs(
                        args.Source, Control.MouseUpEvent, mouseArgs.RawPosition,
                        mouseArgs.LeftButton, mouseArgs.MiddleButton, mouseArgs.RightButton,
                        mouseArgs.ChangedButton
                    );
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
                if (routedEvent == Control.PreviewMouseMoveEvent) {
                    MouseEventArgs mouseArgs = ( ( MouseEventArgs ) args );
                    MouseEventArgs argsNew = new MouseEventArgs(
                        args.Source, Control.MouseMoveEvent, mouseArgs.RawPosition,
                        mouseArgs.LeftButton, mouseArgs.MiddleButton, mouseArgs.RightButton
                    );
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
                if ( routedEvent == Control.PreviewMouseWheelEvent ) {
                    MouseWheelEventArgs oldArgs = ((MouseWheelEventArgs)args);
                    MouseEventArgs argsNew = new MouseWheelEventArgs(
                        args.Source, Control.MouseWheelEvent, oldArgs.RawPosition,
                        oldArgs.LeftButton, oldArgs.MiddleButton, oldArgs.RightButton,
                        oldArgs.Delta
                    );
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }

                if (routedEvent == Control.PreviewKeyDownEvent) {
                    KeyEventArgs argsNew = new KeyEventArgs(args.Source, Control.KeyDownEvent);
                    KeyEventArgs keyEventArgs = ( ( KeyEventArgs ) args );
                    argsNew.UnicodeChar = keyEventArgs.UnicodeChar;
                    argsNew.bKeyDown = keyEventArgs.bKeyDown;
                    argsNew.dwControlKeyState = keyEventArgs.dwControlKeyState;
                    argsNew.wRepeatCount = keyEventArgs.wRepeatCount;
                    argsNew.wVirtualKeyCode = keyEventArgs.wVirtualKeyCode;
                    argsNew.wVirtualScanCode = keyEventArgs.wVirtualScanCode;
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
                if (routedEvent == Control.PreviewKeyUpEvent) {
                    KeyEventArgs argsNew = new KeyEventArgs(args.Source, Control.KeyUpEvent);
                    KeyEventArgs keyEventArgs = ( ( KeyEventArgs ) args );
                    argsNew.UnicodeChar = keyEventArgs.UnicodeChar;
                    argsNew.bKeyDown = keyEventArgs.bKeyDown;
                    argsNew.dwControlKeyState = keyEventArgs.dwControlKeyState;
                    argsNew.wRepeatCount = keyEventArgs.wRepeatCount;
                    argsNew.wVirtualKeyCode = keyEventArgs.wVirtualKeyCode;
                    argsNew.wVirtualScanCode = keyEventArgs.wVirtualScanCode;
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
            }

            if (routedEvent.RoutingStrategy == RoutingStrategy.Bubble) {
                if (subscribedTargets != null) {
                    for (int i = path.Count - 1; i >= 0; i--) {
                        Control target = path[i];
                        RoutedEventTargetInfo targetInfo =
                            subscribedTargets.FirstOrDefault(info => info.target == target);
                        if (null != targetInfo) {
                            //
                            foreach (DelegateInfo delegateInfo in new List< DelegateInfo >(targetInfo.handlersList)) {
                                if (!args.Handled || delegateInfo.handledEventsToo) {
                                    if (delegateInfo.@delegate is RoutedEventHandler) {
                                        ((RoutedEventHandler) delegateInfo.@delegate).Invoke(target, args);
                                    } else {
                                        [email protected](target, args);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return args.Handled;
        }
        public void ParseInputEvent(INPUT_RECORD inputRecord, Control rootElement) {
            if (inputRecord.EventType == EventType.MOUSE_EVENT) {
                MOUSE_EVENT_RECORD mouseEvent = inputRecord.MouseEvent;

                if (mouseEvent.dwEventFlags != MouseEventFlags.PRESSED_OR_RELEASED &&
                    mouseEvent.dwEventFlags != MouseEventFlags.MOUSE_MOVED &&
                    mouseEvent.dwEventFlags != MouseEventFlags.DOUBLE_CLICK &&
                    mouseEvent.dwEventFlags != MouseEventFlags.MOUSE_WHEELED &&
                    mouseEvent.dwEventFlags != MouseEventFlags.MOUSE_HWHEELED) {
                    //
                    throw new InvalidOperationException("Flags combination in mouse event was not expected.");
                }
                Point rawPosition;
                if (mouseEvent.dwEventFlags == MouseEventFlags.MOUSE_MOVED ||
                    mouseEvent.dwEventFlags == MouseEventFlags.PRESSED_OR_RELEASED) {
                    rawPosition = new Point(mouseEvent.dwMousePosition.X, mouseEvent.dwMousePosition.Y);
                    lastMousePosition = rawPosition;
                } else {
                    // При событии MOUSE_WHEELED в Windows некорректно устанавливается mouseEvent.dwMousePosition
                    // Поэтому для определения элемента, над которым производится прокручивание колёсика, мы
                    // вынуждены сохранять координаты, полученные при предыдущем событии мыши
                    rawPosition = lastMousePosition;
                }
                Control topMost = findSource(rawPosition, rootElement);

                // если мышь захвачена контролом, то события перемещения мыши доставляются только ему,
                // события, связанные с нажатием мыши - тоже доставляются только ему, вместо того
                // контрола, над которым событие было зарегистрировано. Такой механизм необходим,
                // например, для корректной обработки перемещений окон (вверх или в стороны)
                Control source = (inputCaptureStack.Count != 0) ? inputCaptureStack.Peek() : topMost;
                
                if (mouseEvent.dwEventFlags == MouseEventFlags.MOUSE_MOVED) {
                    MouseButtonState leftMouseButtonState = getLeftButtonState(mouseEvent.dwButtonState);
                    MouseButtonState middleMouseButtonState = getMiddleButtonState(mouseEvent.dwButtonState);
                    MouseButtonState rightMouseButtonState = getRightButtonState(mouseEvent.dwButtonState);
                    //
                    MouseEventArgs mouseEventArgs = new MouseEventArgs(source, Control.PreviewMouseMoveEvent,
                                                                       rawPosition,
                                                                       leftMouseButtonState,
                                                                       middleMouseButtonState,
                                                                       rightMouseButtonState
                        );
                    eventsQueue.Enqueue(mouseEventArgs);
                    //
                    lastLeftMouseButtonState = leftMouseButtonState;
                    lastMiddleMouseButtonState = middleMouseButtonState;
                    lastRightMouseButtonState = rightMouseButtonState;

                    // detect mouse enter / mouse leave events

                    // path to source from root element down
                    List<Control> mouseOverStack = new List<Control>();
                    Control current = topMost;
                    while (null != current) {
                        mouseOverStack.Insert(0, current);
                        current = current.Parent;
                    }

                    int index;
                    for (index = 0; index < Math.Min(mouseOverStack.Count, prevMouseOverStack.Count); index++) {
                        if (mouseOverStack[index] != prevMouseOverStack[index])
                            break;
                    }

                    for (int i = prevMouseOverStack.Count - 1; i >= index; i-- ) {
                        Control control = prevMouseOverStack[i];
                        MouseEventArgs args = new MouseEventArgs(control, Control.MouseLeaveEvent,
                                                                    rawPosition,
                                                                    leftMouseButtonState,
                                                                    middleMouseButtonState,
                                                                    rightMouseButtonState
                            );
                        eventsQueue.Enqueue(args);
                    }

                    for (int i = index; i < mouseOverStack.Count; i++ ) {
                        // enqueue MouseEnter event
                        Control control = mouseOverStack[i];
                        MouseEventArgs args = new MouseEventArgs(control, Control.MouseEnterEvent,
                                                                    rawPosition,
                                                                    leftMouseButtonState,
                                                                    middleMouseButtonState,
                                                                    rightMouseButtonState
                            );
                        eventsQueue.Enqueue(args);
                    }

                    prevMouseOverStack.Clear();
                    prevMouseOverStack.AddRange(mouseOverStack);
                }
                if (mouseEvent.dwEventFlags == MouseEventFlags.PRESSED_OR_RELEASED) {
                    //
                    MouseButtonState leftMouseButtonState = getLeftButtonState(mouseEvent.dwButtonState);
                    MouseButtonState middleMouseButtonState = getMiddleButtonState(mouseEvent.dwButtonState);
                    MouseButtonState rightMouseButtonState = getRightButtonState(mouseEvent.dwButtonState);
                    //
                    if (leftMouseButtonState != lastLeftMouseButtonState) {
                        MouseButtonEventArgs eventArgs = new MouseButtonEventArgs(source,
                            leftMouseButtonState == MouseButtonState.Pressed ? Control.PreviewMouseDownEvent : Control.PreviewMouseUpEvent,
                            rawPosition,
                            leftMouseButtonState,
                            lastMiddleMouseButtonState,
                            lastRightMouseButtonState,
                            MouseButton.Left
                            );
                        eventsQueue.Enqueue(eventArgs);
                    }
                    if (middleMouseButtonState != lastMiddleMouseButtonState) {
                        MouseButtonEventArgs eventArgs = new MouseButtonEventArgs(source,
                            middleMouseButtonState == MouseButtonState.Pressed ? Control.PreviewMouseDownEvent : Control.PreviewMouseUpEvent,
                            rawPosition,
                            lastLeftMouseButtonState,
                            middleMouseButtonState,
                            lastRightMouseButtonState,
                            MouseButton.Middle
                            );
                        eventsQueue.Enqueue(eventArgs);
                    }
                    if (rightMouseButtonState != lastRightMouseButtonState) {
                        MouseButtonEventArgs eventArgs = new MouseButtonEventArgs(source,
                            rightMouseButtonState == MouseButtonState.Pressed ? Control.PreviewMouseDownEvent : Control.PreviewMouseUpEvent,
                            rawPosition,
                            lastLeftMouseButtonState,
                            lastMiddleMouseButtonState,
                            rightMouseButtonState,
                            MouseButton.Right
                            );
                        eventsQueue.Enqueue(eventArgs);
                    }
                    //
                    lastLeftMouseButtonState = leftMouseButtonState;
                    lastMiddleMouseButtonState = middleMouseButtonState;
                    lastRightMouseButtonState = rightMouseButtonState;
                }

                if (mouseEvent.dwEventFlags == MouseEventFlags.MOUSE_WHEELED) {
                    MouseWheelEventArgs args = new MouseWheelEventArgs(
                        topMost,
                        Control.PreviewMouseWheelEvent,
                        rawPosition,
                        lastLeftMouseButtonState, lastMiddleMouseButtonState, 
                        lastRightMouseButtonState,
                        mouseEvent.dwButtonState > 0 ? 1 : -1
                    );
                    eventsQueue.Enqueue( args );
                }
            }
            if (inputRecord.EventType == EventType.KEY_EVENT) {
                KEY_EVENT_RECORD keyEvent = inputRecord.KeyEvent;
                KeyEventArgs eventArgs = new KeyEventArgs(
                    ConsoleApplication.Instance.FocusManager.FocusedElement,
                    keyEvent.bKeyDown ? Control.PreviewKeyDownEvent : Control.PreviewKeyUpEvent);
                eventArgs.UnicodeChar = keyEvent.UnicodeChar;
                eventArgs.bKeyDown = keyEvent.bKeyDown;
                eventArgs.dwControlKeyState = keyEvent.dwControlKeyState;
                eventArgs.wRepeatCount = keyEvent.wRepeatCount;
                eventArgs.wVirtualKeyCode = keyEvent.wVirtualKeyCode;
                eventArgs.wVirtualScanCode = keyEvent.wVirtualScanCode;
                eventsQueue.Enqueue(eventArgs);
            }
        }
示例#8
0
 private void onKeyDown( object sender, KeyEventArgs args ) {
     if ( args.wVirtualKeyCode == VirtualKeys.Right ) {
         ConsoleApplication.Instance.FocusManager.MoveFocusNext();
         args.Handled = true;
     }
     if ( args.wVirtualKeyCode == VirtualKeys.Left ) {
         ConsoleApplication.Instance.FocusManager.MoveFocusPrev();
         args.Handled = true;
     }
 }
示例#9
0
        public bool TryMatchGesture( KeyEventArgs args ) {
            Dictionary< KeyGesture, MenuItem > map = getGesturesMap( );
            KeyGesture match = map.Keys.FirstOrDefault( gesture => gesture.Matches( args ) );
            if ( match == null ) return false;

            this.CloseAllSubmenus( );

            // Activate matches menu item
            MenuItem menuItem = map[ match ];
            List<MenuItem> path = new List< MenuItem >();
            MenuItem currentItem = menuItem;
            while ( currentItem != null ) {
                path.Add( currentItem );
                currentItem = currentItem.ParentItem;
            }
            path.Reverse( );

            // Open all menu items in path successively
            int i = 0;
            Action action = null;
            action = new Action(() => {
                if (i < path.Count) {
                    MenuItem item = path[i];
                    if ( item.Type == MenuItemType.Item ) {
                        item.RaiseClick( );
                        return;
                    }

                    // Activate focus on item
                    if ( item.ParentItem == null ) {
                        ConsoleApplication.Instance.FocusManager.SetFocus( this, item );
                    } else {
                        // Set focus to PopupWindow -> item
                        ConsoleApplication.Instance.FocusManager.SetFocus( 
                            item.Parent.Parent, item );
                    }
                    item.Invalidate();
                    EventHandler handler = null;

                    // Wait for layout to be revalidated and expand it
                    handler = (o, eventArgs) => {
                        item.Expand();
                        item.LayoutRevalidated -= handler;
                        i++;
                        if (i < path.Count) {
                            action();
                        }
                    };
                    item.LayoutRevalidated += handler;
                }
            });
            action();

            return true;
        }
示例#10
0
 protected override void OnPreviewKeyDown( object sender, KeyEventArgs args ) {
     switch ( args.wVirtualKeyCode ) {
         case VirtualKeys.Right: {
                 KeyEventArgs newArgs = new KeyEventArgs( this, ControlKeyPressedEvent );
                 newArgs.wVirtualKeyCode = args.wVirtualKeyCode;
                 RaiseEvent(ControlKeyPressedEvent, newArgs);
                 args.Handled = true;
                 break;
             }
         case VirtualKeys.Left: {
                 KeyEventArgs newArgs = new KeyEventArgs(this, ControlKeyPressedEvent);
                 newArgs.wVirtualKeyCode = args.wVirtualKeyCode;
                 RaiseEvent(ControlKeyPressedEvent, newArgs);
                 args.Handled = true;
                 break;
             }
         case VirtualKeys.Down:
             ConsoleApplication.Instance.FocusManager.MoveFocusNext();
             args.Handled = true;
             break;
         case VirtualKeys.Up:
             ConsoleApplication.Instance.FocusManager.MoveFocusPrev();
             args.Handled = true;
             break;
         case VirtualKeys.Escape:
             Close();
             args.Handled = true;
             break;
     }
 }
示例#11
0
 private void onKeyDown(object sender, KeyEventArgs args) {
     if (args.wVirtualKeyCode == VirtualKeys.Return) {
         if (Type == MenuItemType.RootSubmenu || Type == MenuItemType.Submenu)
             openMenu();
         else if ( Type == MenuItemType.Item ) {
             RaiseClick(  );
         }
         args.Handled = true;
     }
 }
示例#12
0
 protected virtual void OnPreviewKeyDown(object sender, KeyEventArgs args) {
     if (args.wVirtualKeyCode == VirtualKeys.Tab) {
         ConsoleApplication.Instance.FocusManager.MoveFocusNext();
         args.Handled = true;
     }
 }
示例#13
0
        private void OnKeyDown( object sender, KeyEventArgs args )
        {
            if ( items.Count == 0 ) {
                args.Handled = true;
                return;
            }
            if ( args.wVirtualKeyCode == VirtualKeys.PageUp ) {
                pageUpCore( PageSize );
            }
            if ( args.wVirtualKeyCode == VirtualKeys.PageDown ) {
                pageDownCore( PageSize );
            }
            if (args.wVirtualKeyCode == VirtualKeys.Up) {
                if ( allItemsAreDisabled ) return;
                do {
                    if ( SelectedItemIndex == 0 || SelectedItemIndex == null )
                        SelectedItemIndex = items.Count - 1;
                    else {
                        SelectedItemIndex--;
                    }
                } while ( disabledItemsIndexes.Contains( SelectedItemIndex.Value ) );

                currentItemShouldBeVisibleAtTop();
            }
            if (args.wVirtualKeyCode == VirtualKeys.Down) {
                if ( allItemsAreDisabled ) return;
                do {
                    if ( SelectedItemIndex == null ) SelectedItemIndex = 0;
                    SelectedItemIndex = ( SelectedItemIndex + 1 )%items.Count;
                } while ( disabledItemsIndexes.Contains( SelectedItemIndex.Value ) );

                currentItemShouldBeVisibleAtBottom(  );
            }
            args.Handled = true;
        }
示例#14
0
 private void OnKeyDown( object sender, KeyEventArgs args ) {
     if ( items.Count == 0 ) {
         args.Handled = true;
         return;
     }
     if ( args.wVirtualKeyCode == VirtualKeys.PageUp ) {
         pageUpCore( PageSize );
     }
     if ( args.wVirtualKeyCode == VirtualKeys.PageDown ) {
         pageDownCore( PageSize );
     }
     if (args.wVirtualKeyCode == VirtualKeys.Up) {
         if ( SelectedItemIndex == 0 )
             SelectedItemIndex = items.Count - 1;
         else {
             SelectedItemIndex--;
         }
         Invalidate(  );
     }
     if (args.wVirtualKeyCode == VirtualKeys.Down) {
         SelectedItemIndex = (SelectedItemIndex + 1) % items.Count;
         Invalidate(  );
     }
     args.Handled = true;
 }
示例#15
0
 private void OnKeyDown( object sender, KeyEventArgs args )
 {
     if (args.wVirtualKeyCode == VirtualKeys.Escape) {
         Close();
     } else base.OnPreviewKeyDown( sender, args );
 }
示例#16
0
 private void OnKeyDown( object sender, KeyEventArgs args )
 {
     if ( args.wVirtualKeyCode == VirtualKeys.Return ) {
         openPopup(  );
     }
 }