Пример #1
0
        protected Guid cmdGroup;             // the OLE command group
        #endregion

        #region Construction
        public SubMenu(ITaskMenuItem item, List <int> indices) : base(item)
        {
            this.indices = indices;
            // menuItems    = null;
            // subMenuCount = 0;

            // root menu has a single 0 index
            if (this.indices == null)
            {
                this.indices = new List <int>(1);
                this.indices.Add(0);
            }

            // create a command group guid based on the submenu path
            // for example, a submenu of a second submenu in the root menu
            // gets a path: 0,1,0. The guid will end with this path.
            // The CTC file hard-codes these guids
            Byte[] cmdGroupBytes = taskManagerCmdGroup.ToByteArray();
            if (cmdGroupBytes != null)
            {
                for (int i = 0; i < this.indices.Count; i++)
                {
                    cmdGroupBytes[16 - this.indices.Count + i] = (Byte)(this.indices[i]);
                }
            }
            cmdGroup = new Guid(cmdGroupBytes);
        }
Пример #2
0
 // Get a submenu item.
 internal SubMenu GetSubMenu(int index)
 {
     Refresh();
     if (menuItems != null)
     {
         for (int i = 0; i < menuItems.Count && index >= 0; i++)
         {
             MenuItem menuItem = menuItems[i];
             if (menuItem != null)
             {
                 ITaskMenuItem taskItem = menuItem.TaskMenuItem;
                 if (taskItem != null && taskItem.Kind == TaskMenuKind.Submenu)
                 {
                     if (index == 0)
                     {
                         return(menuItem as SubMenu);
                     }
                     else
                     {
                         index--;
                     }
                 }
             }
         }
     }
     return(null);
 }
Пример #3
0
 public int GetMarkerCommandInfo(IVsTextMarker pMarker, int iItem, string[] pbstrText, uint[] pcmdf)
 {
     if (commands != null)
     {
         try
         {
             const OLECMDF OLECMDF_ENABLE = (OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED);
             if (iItem == (int)MarkerCommandValues.mcvBodyDoubleClickCommand &&
                 pcmdf != null)
             {
                 pcmdf[0] = (uint)OLECMDF_ENABLE;
             }
             else if (iItem >= (int)MarkerCommandValues.mcvFirstContextMenuCommand &&
                      iItem <= (int)MarkerCommandValues.mcvLastContextMenuCommand &&
                      pbstrText != null && pcmdf != null)
             {
                 int             item      = iItem - (int)MarkerCommandValues.mcvFirstContextMenuCommand;
                 ITaskMenuItem[] menuItems = commands.GetMenuItems(null);
                 if (menuItems != null && item < menuItems.Length)
                 {
                     ITaskMenuItem menuItem = menuItems[item];
                     if (menuItem != null &&
                         menuItem.Kind != TaskMenuKind.Submenu)
                     {
                         pbstrText[0] = menuItem.Caption;
                         if (commands.IsEnabled(menuItems[item]))
                         {
                             pcmdf[0] = (uint)OLECMDF_ENABLE;
                             if (menuItem.Kind == TaskMenuKind.Checkable)
                             {
                                 if (commands.IsChecked(menuItems[item]))
                                 {
                                     pcmdf[0] |= (uint)(OLECMDF_ENABLE | OLECMDF.OLECMDF_LATCHED);
                                 }
                                 else
                                 {
                                     pcmdf[0] |= (uint)(OLECMDF_ENABLE | OLECMDF.OLECMDF_NINCHED);
                                 }
                             }
                         }
                         else
                         {
                             pcmdf[0] = (uint)OLECMDF.OLECMDF_SUPPORTED;
                         }
                     }
                 }
             }
             return(0);
         }
         catch
         {
             // communication to msbuild task may be broken, need to catch all errors
             return(VSConstants.E_NOTIMPL);
         }
     }
     else
     {
         return(VSConstants.E_NOTIMPL);
     }
 }
Пример #4
0
 internal ITaskMenuItem[] GetMenuItems(ITaskMenuItem parent)
 {
     return(WithCommands(null, delegate()
     {
         return commands.GetMenuItems(parent);
     }));
 }
Пример #5
0
        // Get a menu item at a specified index.
        internal MenuItem GetMenuItem(int index, bool refresh)
        {
            if (refresh)
            {
                Refresh();
            }

            if (menuItems != null)
            {
                for (int i = 0; i < menuItems.Count && index >= 0; i++)
                {
                    MenuItem menuItem = menuItems[i];
                    if (menuItem != null)
                    {
                        ITaskMenuItem taskItem = menuItem.TaskMenuItem;
                        if (taskItem != null && taskItem.Kind != TaskMenuKind.Submenu)
                        {
                            if (index == 0)
                            {
                                return(menuItem);
                            }
                            else
                            {
                                index--;
                            }
                        }
                    }
                }
            }
            return(null);
        }
Пример #6
0
 internal void ExecCommand(ITaskMenuItem menuItem)
 {
     if (commands != null && menuItem != null && location != null)
     {
         WithCommands(delegate() { commands.OnContextMenu(this, menuItem); });
     }
 }
Пример #7
0
 internal ITaskMenuItem[] GetMenuItems(ITaskMenuItem parent)
 {
     if (commands != null)
     {
         return(commands.GetMenuItems(parent));
     }
     else
     {
         return(null);
     }
 }
Пример #8
0
 internal bool IsEnabled(ITaskMenuItem menuItem)
 {
     if (commands != null && menuItem != null)
     {
         return(WithCommands(false, delegate() { return commands.IsEnabled(menuItem); }));
     }
     else
     {
         return(false);
     }
 }
Пример #9
0
 internal bool IsEnabled(ITaskMenuItem menuItem)
 {
     if (commands != null && menuItem != null)
     {
         return(commands.IsEnabled(menuItem));
     }
     else
     {
         return(false);
     }
 }
Пример #10
0
 internal MenuItem(ITaskMenuItem menuItem)
 {
     this.taskMenuItem = menuItem;
     tasks             = new List <Task>(1);
     status            = MenuStatus.Disabled;
 }
Пример #11
0
 internal ITaskMenuItem[] GetMenuItems(ITaskMenuItem parent)
 {
   if (commands != null)
     return commands.GetMenuItems(parent);
   else
     return null;
 }
Пример #12
0
 internal bool IsEnabled(ITaskMenuItem menuItem)
 {
   if (commands != null && menuItem != null)
     return commands.IsEnabled(menuItem);
   else
     return false;
 }
Пример #13
0
 public void OnContextMenu(Microsoft.VisualStudio.CodeTools.ITask task, ITaskMenuItem menuItem)
 {
   if (menuItem == menuJumpToRelated) {
     OnDoubleClick(task);
   }
 }
Пример #14
0
 public bool IsEnabled(ITaskMenuItem menuItem)
 {
   if (menuItem == menuJumpToRelated) 
     return (location != null && location.projectName != null);
   else
     return true;
 }
Пример #15
0
 public bool IsChecked(ITaskMenuItem menuItem)
 {
   Contract.Assume(menuItem.Kind == TaskMenuKind.Checkable);
   return false;
 }
Пример #16
0
    protected Guid cmdGroup;            // the OLE command group
    #endregion

    #region Construction
    public SubMenu(ITaskMenuItem item, List<int> indices ) : base(item)    
    {
      this.indices = indices;
      // menuItems    = null;
      // subMenuCount = 0;

      // root menu has a single 0 index
      if (this.indices == null) {
        this.indices = new List<int>(1);
        this.indices.Add(0);
      }

      // create a command group guid based on the submenu path
      // for example, a submenu of a second submenu in the root menu
      // gets a path: 0,1,0. The guid will end with this path.
      // The CTC file hard-codes these guids 
      Byte[] cmdGroupBytes = taskManagerCmdGroup.ToByteArray();
      if (cmdGroupBytes != null) {
        for (int i = 0; i < this.indices.Count; i++) {
          cmdGroupBytes[16 - this.indices.Count + i] = (Byte)(this.indices[i]);
        }
      }
      cmdGroup = new Guid(cmdGroupBytes);
    }
Пример #17
0
 internal void ExecCommand(ITaskMenuItem menuItem)
 {
   if (commands != null && menuItem != null && location != null) {
     commands.OnContextMenu(this, menuItem);
   }
 }
Пример #18
0
        protected void Reload()
        {
            // Common.Trace("Reload menu info: " + Caption);

            // Build a new menu
            menuItems    = new List <MenuItem>(1);
            subMenuCount = 0;

            foreach (Task task in tasks)
            {
                ITaskMenuItem[] taskMenuItems = (task == null ? null : task.GetMenuItems(this.taskMenuItem));

                // add to the context menu item list
                if (taskMenuItems != null)
                {
                    for (int i = 0; i < taskMenuItems.Length; i++)
                    {
                        ITaskMenuItem taskMenuItem = taskMenuItems[i];
                        if (taskMenuItem != null)
                        {
                            // update an existing menu or add a new one
                            int index = menuItems.FindIndex(delegate(MenuItem inf) {
                                return(inf == null ? false : inf.TaskMenuItem == taskMenuItem);
                            });
                            MenuItem item;
                            if (index >= 0)
                            {
                                item = menuItems[index];
                            }
                            else
                            {
                                if (taskMenuItem.Kind == TaskMenuKind.Submenu)
                                {
                                    List <int> path = new List <int>(indices);
                                    path.Add(subMenuCount);
                                    subMenuCount++;
                                    item = new SubMenu(taskMenuItem, path);
                                }
                                else
                                {
                                    item = new MenuItem(taskMenuItem);
                                }
                                menuItems.Add(item);
                            }
                            item.AddTask(task);
                        }
                    }
                }
            }

            // finally, set the status of each command:
            // - disable those menus that are not supported by all selected tasks
            // - set checkable menus
            // - disable those checkable menus that disagree on the checked state
            for (int item = 0; item < menuItems.Count; item++)
            {
                MenuItem menuItem = menuItems[item];
                if (menuItem != null)
                {
                    menuItem.SetStatus(tasks.Count);
                }
            }
        }
Пример #19
0
 internal MenuItem(ITaskMenuItem menuItem)
 {
   this.taskMenuItem = menuItem;
   tasks = new List<Task>(1);
   status = MenuStatus.Disabled;
 }
Пример #20
0
 public ITaskMenuItem[] GetMenuItems(ITaskMenuItem parent)
 {
   if (parent == null)
     return groupMain;
   else 
     return null;
 }