Exemplo n.º 1
0
        public bool PreFilterMessage(ref Message m)
        {
            if (m.Msg != keyPressedMessage /*&& m.Msg != leftMouseButtonDownMessage*/)
            {
                return(false);
            }

            FormsDesignerViewContent formDesigner = WorkbenchSingleton.Workbench.ActiveContent as FormsDesignerViewContent;

            if (formDesigner == null || formDesigner.Host == null)
            {
                return(false);
            }
            if (formDesigner.UserContent != null && !((Control)formDesigner.UserContent).ContainsFocus)
            {
                return(false);
            }

            Control originControl = Control.FromChildHandle(m.HWnd);

            if (originControl != null && formDesigner.UserContent != null && !(formDesigner.UserContent == originControl || formDesigner.UserContent.Contains(originControl)))
            {
                // Ignore if message origin not in forms designer
                // (e.g. navigating the main menu)
                return(false);
            }

            Keys keyPressed = (Keys)m.WParam.ToInt32() | Control.ModifierKeys;

            if (keyPressed == Keys.Escape)
            {
                if (formDesigner.IsTabOrderMode)
                {
                    formDesigner.HideTabOrder();
                    return(true);
                }
            }

            CommandWrapper commandWrapper;

            if (keyTable.TryGetValue(keyPressed, out commandWrapper))
            {
                if (commandWrapper.CommandID == MenuCommands.Delete)
                {
                    // Check Delete menu is enabled.
                    if (!formDesigner.EnableDelete)
                    {
                        return(false);
                    }
                }
                LoggingService.Debug("Run menu command: " + commandWrapper.CommandID);

                IMenuCommandService menuCommandService = (IMenuCommandService)formDesigner.Host.GetService(typeof(IMenuCommandService));
                ISelectionService   selectionService   = (ISelectionService)formDesigner.Host.GetService(typeof(ISelectionService));
                ICollection         components         = selectionService.GetSelectedComponents();
                if (components.Count == 1)
                {
                    foreach (IComponent component in components)
                    {
                        if (HandleMenuCommand(formDesigner, component, keyPressed))
                        {
                            return(false);
                        }
                    }
                }

                menuCommandService.GlobalInvoke(commandWrapper.CommandID);

                if (commandWrapper.RestoreSelection)
                {
                    selectionService.SetSelectedComponents(components);
                }
                return(true);
            }

            return(false);
        }