Пример #1
0
        internal static void UpdateFocus(IFocusableWidget widget, bool focus)
        {
            IWindowContainer window = ((WindowObject)widget).Window;

            if (window == null)
            {
                return; // no window, no crime
            }
            int windowHash = window.GetHashCode();

            IFocusableWidget focusedWidget;

            s_focusedWidgets.TryGetValue(windowHash, out focusedWidget);

            // Nomad: PVS analyzer indicated some amount of fuzzy logic here.
            // I think that whole focusing and unfocusing logic should be refactored

            if (widget == focusedWidget)
            {
                if (!focus && focusedWidget != null)
                {
                    focusedWidget.SetFocused(false);
                    s_focusedWidgets.Remove(windowHash);
                    WindowController.Instance.ShowKeyboard(false);
                }

                return;
            }

            if (focusedWidget != null)
            {
                IFocusableWidget oldWidget = focusedWidget;
                s_focusedWidgets.Remove(windowHash);
                oldWidget.SetFocused(false);
            }

            focusedWidget = widget;

            WindowController.Instance.ShowKeyboard(focus && (focusedWidget is WidgetTextEdit || focusedWidget is WidgetTextField));

            if (focusedWidget == null)
            {
                s_focusedWidgets.Remove(windowHash);
            }
            else
            {
                if (focus)
                {
                    focusedWidget.SetFocused(true);
                }
                s_focusedWidgets[windowHash] = focusedWidget;
            }
        }
Пример #2
0
        internal static void UpdateFocus(IFocusableWidget widget, bool focus)
        {
            IWindowContainer window = ((WindowObject)widget).Window;

            if (window == null)
            {
                return; // no window, no crime
            }
            int windowHash = window.GetHashCode();

            IFocusableWidget focusedWidget = null;

            s_focusedWidgets.TryGetValue(windowHash, out focusedWidget);

            if (!focus)
            {
                if (widget == focusedWidget)
                {
                    s_focusedWidgets.Remove(windowHash);
                }
                return;
            }

            if (focus && widget == focusedWidget)
            {
                return;
            }

            if (focusedWidget != null && focus)
            {
                IFocusableWidget oldWidget = focusedWidget;
                s_focusedWidgets.Remove(windowHash);
                oldWidget.SetFocused(false);
            }

            if (focus)
            {
                focusedWidget = widget;
                focusedWidget.SetFocused(true);
            }

            if (focusedWidget == null)
            {
                s_focusedWidgets.Remove(windowHash);
            }
            else
            {
                s_focusedWidgets[windowHash] = focusedWidget;
            }
        }
Пример #3
0
        public static bool HasFocus(IWindowContainer window)
        {
            if (window == null)
            {
                return(false); // no window, no crime
            }
            int windowHash = window.GetHashCode();

            IFocusableWidget focusedWidget = null;

            if (s_focusedWidgets.TryGetValue(windowHash, out focusedWidget))
            {
                return(focusedWidget != null);
            }

            return(false);
        }
Пример #4
0
        public static void RemoveFocus(IWindowContainer window)
        {
            int windowHash = window.GetHashCode();

            List <WindowObject> focusables = new List <WindowObject>();

            Window.FindChildren(window, (WindowObject arg) => arg is IFocusableWidget, focusables);

            for (int i = 0; i < focusables.Count; i++)
            {
                if (((IFocusableWidget)focusables[i]).IsFocusable)
                {
                    ((IFocusableWidget)focusables[i]).SetFocused(false);
                }
            }

            s_focusedWidgets.Remove(windowHash);
            WindowController.Instance.ShowKeyboard(false);
        }