Exemplo n.º 1
0
        internal void Deactivate()
        {
            bool redrawbar = (keynav_state != KeyNavState.Idle) && (TopMenu is MainMenu);

            active        = false;
            popup_active  = false;
            hotkey_active = false;
            if (GrabControl != null)
            {
                GrabControl.ActiveTracker = null;
            }
            keynav_state = KeyNavState.Idle;
            if (TopMenu is ContextMenu)
            {
                PopUpWindow puw = TopMenu.Wnd as PopUpWindow;
                DeselectItem(TopMenu.SelectedItem);
                if (puw != null)
                {
                    puw.HideWindow();
                }
            }
            else
            {
                DeselectItem(TopMenu.SelectedItem);
            }
            CurrentMenu = TopMenu;

            if (redrawbar)
            {
                (TopMenu as MainMenu).Draw();
            }
        }
Exemplo n.º 2
0
        void ProcessMenuKey(Msg msg_type)
        {
            if (TopMenu.MenuItems.Count == 0)
            {
                return;
            }

            MainMenu main_menu = TopMenu as MainMenu;

            switch (msg_type)
            {
            case Msg.WM_SYSKEYDOWN:
                switch (keynav_state)
                {
                case KeyNavState.Idle:
                    keynav_state              = KeyNavState.Startup;
                    hotkey_active             = true;
                    GrabControl.ActiveTracker = this;
                    CurrentMenu = TopMenu;
                    main_menu.Draw();
                    break;

                case KeyNavState.Startup:
                    break;

                default:
                    Deactivate();
                    main_menu.Draw();
                    break;
                }
                break;

            case Msg.WM_SYSKEYUP:
                switch (keynav_state)
                {
                case KeyNavState.Idle:
                case KeyNavState.Navigating:
                    break;

                case KeyNavState.Startup:
                    keynav_state = KeyNavState.NoPopups;
                    SelectItem(TopMenu, TopMenu.MenuItems [0], false);
                    break;

                default:
                    Deactivate();
                    main_menu.Draw();
                    break;
                }
                break;
            }
        }
Exemplo n.º 3
0
        bool ProcessMnemonic(Message msg, Keys key_data)
        {
            keynav_state = KeyNavState.Navigating;
            MenuItem item = FindItemByKey(CurrentMenu, msg.WParam);

            if ((item == null) || (GrabControl == null) || (GrabControl.ActiveTracker == null))
            {
                return(false);
            }

            active = true;
            GrabControl.ActiveTracker = this;

            SelectItem(CurrentMenu, item, true);
            if (item.IsPopup)
            {
                CurrentMenu = item;
                SelectItem(item, item.MenuItems [0], false);
            }
            return(true);
        }
Exemplo n.º 4
0
        public bool ProcessKeys(ref Message msg, Keys keyData)
        {
            // We should process Alt+key only if we don't have an active menu,
            // and hide it otherwise.
            if ((keyData & Keys.Alt) == Keys.Alt && active)
            {
                Deactivate();
                return(false);
            }

            // If we get Alt-F4, Windows will ignore it because we have a capture,
            // release the capture and the program will exit.  (X11 doesn't care.)
            if ((keyData & Keys.Alt) == Keys.Alt && (keyData & Keys.F4) == Keys.F4)
            {
                if (GrabControl != null)
                {
                    GrabControl.ActiveTracker = null;
                }

                return(false);
            }

            if ((Msg)msg.Msg != Msg.WM_SYSKEYUP && ProcessShortcut(keyData))
            {
                return(true);
            }
            else if ((keyData & Keys.KeyCode) == Keys.Menu && TopMenu is MainMenu)
            {
                ProcessMenuKey((Msg)msg.Msg);
                return(true);
            }
            else if ((keyData & Keys.Alt) == Keys.Alt)
            {
                return(ProcessMnemonic(msg, keyData));
            }
            else if ((Msg)msg.Msg == Msg.WM_SYSKEYUP)
            {
                return(false);
            }
            else if (!Navigating)
            {
                return(false);
            }

            MenuItem item;

            switch (keyData)
            {
            case Keys.Up:
                if (CurrentMenu is MainMenu)
                {
                    return(true);
                }
                else if (CurrentMenu.MenuItems.Count == 1 && CurrentMenu.parent_menu == TopMenu)
                {
                    DeselectItem(CurrentMenu.SelectedItem);
                    CurrentMenu = TopMenu;
                    return(true);
                }
                item = GetNextItem(CurrentMenu, ItemNavigation.Previous);
                if (item != null)
                {
                    SelectItem(CurrentMenu, item, false);
                }
                break;

            case Keys.Down:
                if (CurrentMenu is MainMenu)
                {
                    if (CurrentMenu.SelectedItem != null && CurrentMenu.SelectedItem.IsPopup)
                    {
                        keynav_state = KeyNavState.Navigating;
                        item         = CurrentMenu.SelectedItem;
                        ShowSubPopup(CurrentMenu, item);
                        SelectItem(item, item.MenuItems [0], false);
                        CurrentMenu = item;
                        active      = true;
                        GrabControl.ActiveTracker = this;
                    }
                    return(true);
                }
                item = GetNextItem(CurrentMenu, ItemNavigation.Next);
                if (item != null)
                {
                    SelectItem(CurrentMenu, item, false);
                }
                break;

            case Keys.Right:
                if (CurrentMenu is MainMenu)
                {
                    item = GetNextItem(CurrentMenu, ItemNavigation.Next);
                    bool popup = item.IsPopup && keynav_state != KeyNavState.NoPopups;
                    SelectItem(CurrentMenu, item, popup);
                    if (popup)
                    {
                        SelectItem(item, item.MenuItems [0], false);
                        CurrentMenu = item;
                    }
                }
                else if (CurrentMenu.SelectedItem != null && CurrentMenu.SelectedItem.IsPopup)
                {
                    item = CurrentMenu.SelectedItem;
                    ShowSubPopup(CurrentMenu, item);
                    SelectItem(item, item.MenuItems [0], false);
                    CurrentMenu = item;
                }
                else
                {
                    //Search up for a main menu
                    Menu Prnt = CurrentMenu.parent_menu;
                    while (Prnt != null && !(Prnt is MainMenu))
                    {
                        Prnt = Prnt.parent_menu;
                    }
                    if (Prnt is MainMenu)
                    {
                        item = GetNextItem(Prnt, ItemNavigation.Next);
                        SelectItem(Prnt, item, item.IsPopup);
                        if (item.IsPopup)
                        {
                            SelectItem(item, item.MenuItems[0], false);
                            CurrentMenu = item;
                        }
                    }
                }
                break;

            case Keys.Left:
                if (CurrentMenu is MainMenu)
                {
                    item = GetNextItem(CurrentMenu, ItemNavigation.Previous);
                    bool popup = item.IsPopup && keynav_state != KeyNavState.NoPopups;
                    SelectItem(CurrentMenu, item, popup);
                    if (popup)
                    {
                        SelectItem(item, item.MenuItems [0], false);
                        CurrentMenu = item;
                    }
                }
                else if (CurrentMenu.parent_menu is MainMenu)
                {
                    item = GetNextItem(CurrentMenu.parent_menu, ItemNavigation.Previous);
                    SelectItem(CurrentMenu.parent_menu, item, item.IsPopup);
                    if (item.IsPopup)
                    {
                        SelectItem(item, item.MenuItems [0], false);
                        CurrentMenu = item;
                    }
                }
                else if (!(CurrentMenu is ContextMenu))                     // ContextMenu root remains active.
                {
                    HideSubPopups(CurrentMenu, TopMenu);
                    if (CurrentMenu.parent_menu != null)
                    {
                        CurrentMenu = CurrentMenu.parent_menu;
                    }
                }
                break;

            case Keys.Return:
                if (CurrentMenu.SelectedItem != null && CurrentMenu.SelectedItem.IsPopup)
                {
                    keynav_state = KeyNavState.Navigating;
                    item         = CurrentMenu.SelectedItem;
                    ShowSubPopup(CurrentMenu, item);
                    SelectItem(item, item.MenuItems [0], false);
                    CurrentMenu = item;
                    active      = true;
                    GrabControl.ActiveTracker = this;
                }
                else
                {
                    ExecFocusedItem(CurrentMenu, CurrentMenu.SelectedItem);
                }
                break;

            case Keys.Escape:
                Deactivate();
                break;

            default:
                ProcessMnemonic(msg, keyData);
                break;
            }

            return(active);
        }
Exemplo n.º 5
0
        // UIA Framework Note: Used to select MenuItems
        public void OnMotion(MouseEventArgs args)
        {
            // Windows helpfully sends us MOUSEMOVE messages when any key is pressed.
            // So if the mouse hasn't actually moved since the last MOUSEMOVE, ignore it.
            if (args.Location == last_motion)
            {
                return;
            }

            last_motion = args.Location;

            MenuItem item = GetItemAtXY(args.X, args.Y);

            UpdateCursor();

            if (CurrentMenu.SelectedItem == item)
            {
                return;
            }

            GrabControl.ActiveTracker = (active || item != null) ? this : null;

            if (item == null)
            {
                MenuItem old_item = CurrentMenu.SelectedItem;

                // Return when is a popup with visible subitems for MainMenu
                if ((active && old_item.VisibleItems && old_item.IsPopup && (CurrentMenu is MainMenu)))
                {
                    return;
                }

                // Also returns when keyboard navigating
                if (keynav_state == KeyNavState.Navigating)
                {
                    return;
                }

                // Select parent menu when move outside of menu item
                if (old_item.Parent is MenuItem)
                {
                    MenuItem new_item = (old_item.Parent as MenuItem);
                    if (new_item.IsPopup)
                    {
                        SelectItem(new_item.Parent, new_item, false);
                        return;
                    }
                }
                if (CurrentMenu != TopMenu)
                {
                    CurrentMenu = CurrentMenu.parent_menu;
                }

                DeselectItem(old_item);
            }
            else
            {
                keynav_state = KeyNavState.Idle;
                SelectItem(item.Parent, item, active && item.IsPopup && popup_active && (CurrentMenu.SelectedItem != item));
            }
        }
Exemplo n.º 6
0
		internal void Deactivate ()
		{
			bool redrawbar = (keynav_state != KeyNavState.Idle) && (TopMenu is MainMenu); 

			active = false;
			popup_active = false;
			hotkey_active = false;
			if (GrabControl != null)
				GrabControl.ActiveTracker = null;
			keynav_state = KeyNavState.Idle;
			if (TopMenu is ContextMenu) {
				PopUpWindow puw = TopMenu.Wnd as PopUpWindow;
				DeselectItem (TopMenu.SelectedItem);
				if (puw != null)
					puw.HideWindow ();
			} else {
				DeselectItem (TopMenu.SelectedItem);
			}
			CurrentMenu = TopMenu;

			if (redrawbar)
				(TopMenu as MainMenu).Draw ();			
		}
Exemplo n.º 7
0
		public bool ProcessKeys (ref Message msg, Keys keyData)
		{
			// We should process Alt+key only if we don't have an active menu,
			// and hide it otherwise.
			if ((keyData & Keys.Alt) == Keys.Alt && active) {
				Deactivate ();
				return false;
			}

			// If we get Alt-F4, Windows will ignore it because we have a capture,
			// release the capture and the program will exit.  (X11 doesn't care.)
			if ((keyData & Keys.Alt) == Keys.Alt && (keyData & Keys.F4) == Keys.F4) {
				if (GrabControl != null)
					GrabControl.ActiveTracker = null;
					
				return false;
			}
			
			if ((Msg)msg.Msg != Msg.WM_SYSKEYUP && ProcessShortcut (keyData))
				return true;
			else if ((keyData & Keys.KeyCode) == Keys.Menu && TopMenu is MainMenu) {
				ProcessMenuKey ((Msg) msg.Msg);
				return true;
			} else if ((keyData & Keys.Alt) == Keys.Alt)
				return ProcessMnemonic (msg, keyData);
			else if ((Msg)msg.Msg == Msg.WM_SYSKEYUP)
				return false;
			else if (!Navigating)
				return false;

			MenuItem item;
			
			switch (keyData) {
			case Keys.Up:
				if (CurrentMenu is MainMenu)
					return true;
				else if (CurrentMenu.MenuItems.Count == 1 && CurrentMenu.parent_menu == TopMenu) {
					DeselectItem (CurrentMenu.SelectedItem);
					CurrentMenu = TopMenu;
					return true;
				}
				item = GetNextItem (CurrentMenu, ItemNavigation.Previous);
				if (item != null)
					SelectItem (CurrentMenu, item, false);
				break;
			
			case Keys.Down:
				if (CurrentMenu is MainMenu) {
					if (CurrentMenu.SelectedItem != null && CurrentMenu.SelectedItem.IsPopup) {
						keynav_state = KeyNavState.Navigating;
						item = CurrentMenu.SelectedItem;
						ShowSubPopup (CurrentMenu, item);
						SelectItem (item, item.MenuItems [0], false);
						CurrentMenu = item;
						active = true;
						GrabControl.ActiveTracker = this;
					}
					return true;
				}
				item = GetNextItem (CurrentMenu, ItemNavigation.Next);
				if (item != null)
					SelectItem (CurrentMenu, item, false);
				break;
			
			case Keys.Right:
				if (CurrentMenu is MainMenu) {
					item = GetNextItem (CurrentMenu, ItemNavigation.Next);
					bool popup = item.IsPopup && keynav_state != KeyNavState.NoPopups;
					SelectItem (CurrentMenu, item, popup);
					if (popup) {
						SelectItem (item, item.MenuItems [0], false);
						CurrentMenu = item;
					}
				} else if (CurrentMenu.SelectedItem != null && CurrentMenu.SelectedItem.IsPopup) {
					item = CurrentMenu.SelectedItem;
					ShowSubPopup (CurrentMenu, item);
					SelectItem (item, item.MenuItems [0], false);
					CurrentMenu = item;
				} else {
					//Search up for a main menu
					Menu Prnt = CurrentMenu.parent_menu;
					while (Prnt != null && !(Prnt is MainMenu)) {
						Prnt = Prnt.parent_menu;
 					}
					if (Prnt is MainMenu)
					{
						item = GetNextItem(Prnt, ItemNavigation.Next);
						SelectItem(Prnt, item, item.IsPopup);
						if (item.IsPopup)
						{
							SelectItem(item, item.MenuItems[0], false);
							CurrentMenu = item;
						}
					}
				}
				break;
			
			case Keys.Left:
				if (CurrentMenu is MainMenu) {
					item = GetNextItem (CurrentMenu, ItemNavigation.Previous);
					bool popup = item.IsPopup && keynav_state != KeyNavState.NoPopups;
					SelectItem (CurrentMenu, item, popup);
					if (popup) {
						SelectItem (item, item.MenuItems [0], false);
						CurrentMenu = item;
					}
				} else if (CurrentMenu.parent_menu is MainMenu) {
					item = GetNextItem (CurrentMenu.parent_menu, ItemNavigation.Previous);
					SelectItem (CurrentMenu.parent_menu, item, item.IsPopup);
					if (item.IsPopup) {
						SelectItem (item, item.MenuItems [0], false);
						CurrentMenu = item;
					}
				} else if (!(CurrentMenu is ContextMenu)) { // ContextMenu root remains active.
					HideSubPopups (CurrentMenu, TopMenu);
					if (CurrentMenu.parent_menu != null)
						CurrentMenu = CurrentMenu.parent_menu;
				}
				break;

			case Keys.Return:
				if (CurrentMenu.SelectedItem != null && CurrentMenu.SelectedItem.IsPopup) {
					keynav_state = KeyNavState.Navigating;
					item = CurrentMenu.SelectedItem;
					ShowSubPopup (CurrentMenu, item);
					SelectItem (item, item.MenuItems [0], false);
					CurrentMenu = item;
					active = true;
					GrabControl.ActiveTracker = this;
				} else {
					ExecFocusedItem (CurrentMenu, CurrentMenu.SelectedItem);
				}
				break;
				
			case Keys.Escape:
				Deactivate ();
				break;

			default:
				ProcessMnemonic (msg, keyData);
				break;
			}

			return active;
		}
Exemplo n.º 8
0
		bool ProcessMnemonic (Message msg, Keys key_data)
		{
			keynav_state = KeyNavState.Navigating;
			MenuItem item = FindItemByKey (CurrentMenu, msg.WParam);
			if ((item == null) || (GrabControl == null) || (GrabControl.ActiveTracker == null))
				return false;

			active = true;
			GrabControl.ActiveTracker = this;
			
			SelectItem (CurrentMenu, item, true);
			if (item.IsPopup) {
				CurrentMenu = item;
				SelectItem (item, item.MenuItems [0], false);
			}
			return true;
		}
Exemplo n.º 9
0
		void ProcessMenuKey (Msg msg_type)
		{
			if (TopMenu.MenuItems.Count == 0)
				return;

			MainMenu main_menu = TopMenu as MainMenu;

			switch (msg_type) {
			case Msg.WM_SYSKEYDOWN:
				switch (keynav_state) {
				case KeyNavState.Idle:
					keynav_state = KeyNavState.Startup;
					hotkey_active = true;
					GrabControl.ActiveTracker = this;
					CurrentMenu = TopMenu;
					main_menu.Draw ();
					break;
				case KeyNavState.Startup:
					break;
				default:
					Deactivate ();
					main_menu.Draw ();
					break;
				}
				break;

			case Msg.WM_SYSKEYUP:
				switch (keynav_state) {
				case KeyNavState.Idle:
				case KeyNavState.Navigating:
					break;
				case KeyNavState.Startup:
					keynav_state = KeyNavState.NoPopups;
					SelectItem (TopMenu, TopMenu.MenuItems [0], false);
					break;
				default:
					Deactivate ();
					main_menu.Draw ();
					break;
				}
				break;
			}
		}
Exemplo n.º 10
0
		// UIA Framework Note: Used to select MenuItems
		public void OnMotion (MouseEventArgs args)
		{
			// Windows helpfully sends us MOUSEMOVE messages when any key is pressed.
			// So if the mouse hasn't actually moved since the last MOUSEMOVE, ignore it.
			if (args.Location == last_motion)
				return;
				
			last_motion = args.Location;
			
			MenuItem item = GetItemAtXY (args.X, args.Y);

			UpdateCursor ();

			if (CurrentMenu.SelectedItem == item)
				return;

			GrabControl.ActiveTracker = (active || item != null) ? this : null;

			if (item == null) {
				MenuItem old_item = CurrentMenu.SelectedItem;
				
				// Return when is a popup with visible subitems for MainMenu 
				if  ((active && old_item.VisibleItems && old_item.IsPopup && (CurrentMenu is MainMenu)))
					return;

				// Also returns when keyboard navigating
				if (keynav_state == KeyNavState.Navigating)
					return;
				
				// Select parent menu when move outside of menu item
				if (old_item.Parent is MenuItem) {
					MenuItem new_item = (old_item.Parent as MenuItem);
					if (new_item.IsPopup) {
						SelectItem (new_item.Parent, new_item, false);
						return;
					}
				}
				if (CurrentMenu != TopMenu)
					CurrentMenu = CurrentMenu.parent_menu;
								
				DeselectItem (old_item);
			} else {
				keynav_state = KeyNavState.Idle;
				SelectItem (item.Parent, item, active && item.IsPopup && popup_active && (CurrentMenu.SelectedItem != item));
			}
		}