Beispiel #1
0
        internal SwCommandGroup AddCommandGroupOrContextMenu(CommandGroupSpec cmdBar,
                                                             bool isContextMenu, swSelectType_e?contextMenuSelectType)
        {
            m_Logger.Log($"Creating command group: {cmdBar.Id}", LoggerMessageSeverity_e.Debug);

            if (m_CommandBars.FirstOrDefault(b => b.Spec.Id == cmdBar.Id) != null)
            {
                throw new GroupIdAlreadyExistsException(cmdBar);
            }

            var title = GetMenuPath(cmdBar);

            var cmdGroup = CreateCommandGroup(cmdBar.Id, title, cmdBar.Tooltip,
                                              cmdBar.Commands.Select(c => c.UserId).ToArray(), isContextMenu,
                                              contextMenuSelectType);

            using (var iconsConv = m_SvcProvider.GetService <IIconsCreator>())
            {
                CreateIcons(cmdGroup, cmdBar, iconsConv);

                var bar = new SwCommandGroup(m_App, cmdBar, cmdGroup, isContextMenu);

                CreateCommandItems(bar);

                m_CommandBars.Add(bar);

                return(bar);
            }
        }
        private Dictionary <CommandSpec, int> CreateCommandItems(SwCommandGroup cmdGroup, int groupId, CommandSpec[] cmds)
        {
            var createdCmds = new Dictionary <CommandSpec, int>();

            var callbackMethodName = nameof(SwAddInEx.OnCommandClick);
            var enableMethodName   = nameof(SwAddInEx.OnCommandEnable);

            for (int i = 0; i < cmds.Length; i++)
            {
                var cmd = cmds[i];

                swCommandItemType_e menuToolbarOpts = 0;

                if (cmd.HasMenu)
                {
                    menuToolbarOpts |= swCommandItemType_e.swMenuItem;
                }

                if (cmd.HasToolbar)
                {
                    menuToolbarOpts |= swCommandItemType_e.swToolbarItem;
                }

                if (menuToolbarOpts == 0)
                {
                    throw new InvalidMenuToolbarOptionsException(cmd);
                }

                var cmdName = $"{groupId}.{cmd.UserId}";

                m_Commands.Add(cmdName, new CommandInfo(cmdGroup, cmd));

                var callbackFunc = $"{callbackMethodName}({cmdName})";
                var enableFunc   = $"{enableMethodName}({cmdName})";

                if (cmd.HasSpacer)
                {
                    cmdGroup.CommandGroup.AddSpacer2(-1, (int)menuToolbarOpts);
                }

                var cmdIndex = cmdGroup.CommandGroup.AddCommandItem2(cmd.Title, -1, cmd.Tooltip,
                                                                     cmd.Title, i, callbackFunc, enableFunc, cmd.UserId,
                                                                     (int)menuToolbarOpts);

                createdCmds.Add(cmd, cmdIndex);

                m_Logger.Log($"Created command {cmdIndex} for {cmd}");
            }

            cmdGroup.CommandGroup.HasToolbar = true;
            cmdGroup.CommandGroup.HasMenu    = true;
            cmdGroup.CommandGroup.Activate();

            return(createdCmds.ToDictionary(p => p.Key, p => cmdGroup.CommandGroup.CommandID[p.Value]));
        }
Beispiel #3
0
        internal SwCommandGroup AddCommandGroupOrContextMenu(CommandGroupSpec cmdBar,
                                                             bool isContextMenu, swSelectType_e?contextMenuSelectType)
        {
            m_Logger.Log($"Creating command group: {cmdBar.Id}");

            if (m_CommandBars.FirstOrDefault(b => b.Spec.Id == cmdBar.Id) != null)
            {
                throw new GroupIdAlreadyExistsException(cmdBar);
            }

            var title = GetMenuPath(cmdBar);

            var cmdGroup = CreateCommandGroup(cmdBar.Id, title, cmdBar.Tooltip,
                                              cmdBar.Commands.Select(c => c.UserId).ToArray(), isContextMenu,
                                              contextMenuSelectType);

            var bar = new SwCommandGroup(m_App, cmdBar, cmdGroup);

            m_CommandBars.Add(bar);

            using (var iconsConv = new IconsConverter())
            {
                CreateIcons(cmdGroup, cmdBar, iconsConv);

                var createdCmds = CreateCommandItems(bar, cmdBar.Id, cmdBar.Commands);

                var tabGroup = GetRootCommandGroup(cmdBar);

                try
                {
                    CreateCommandTabBox(tabGroup, createdCmds);
                }
                catch (Exception ex)
                {
                    m_Logger.Log(ex);
                    //not critical error - continue operation
                }
            }

            return(bar);
        }
Beispiel #4
0
 internal CommandInfo(SwCommandGroup grp, CommandSpec spec)
 {
     Grp  = grp;
     Spec = spec;
 }
Beispiel #5
0
 internal CommandInfo(CommandSpec spec, SwCommandGroup parent, int commandId)
 {
     Spec      = spec;
     Group     = parent;
     CommandId = commandId;
 }
Beispiel #6
0
 internal TabCommandGroupInfo(SwCommandGroup group)
 {
     Group    = group;
     Commands = new List <TabCommandInfo>();
 }
Beispiel #7
0
        private void CreateCommandItems(SwCommandGroup parentGroup)
        {
            var cmdGrpSpec = parentGroup.Spec;
            var cmdGrp     = parentGroup.CommandGroup;
            int groupId    = cmdGrpSpec.Id;
            var cmds       = cmdGrpSpec.Commands;

            var dupIds = cmds.Where(c => c.UserId > 0).GroupBy(c => c.UserId).Where(g => g.Count() > 1).ToArray();

            if (dupIds.Any())
            {
                throw new DuplicateCommandUserIdsException(cmdGrpSpec.Title, groupId, dupIds.Select(x => x.Key).ToArray());
            }

            var createdCmds = new List <Tuple <CommandSpec, int, string> >();

            var callbackMethodName = nameof(SwAddInEx.OnCommandClick);
            var enableMethodName   = nameof(SwAddInEx.OnCommandEnable);

            for (int i = 0; i < cmds.Length; i++)
            {
                var cmd = cmds[i];

                swCommandItemType_e menuToolbarOpts = 0;

                if (cmd.HasMenu)
                {
                    menuToolbarOpts |= swCommandItemType_e.swMenuItem;
                }

                if (cmd.HasToolbar)
                {
                    menuToolbarOpts |= swCommandItemType_e.swToolbarItem;
                }

                if (menuToolbarOpts == 0)
                {
                    throw new InvalidMenuToolbarOptionsException(cmd);
                }

                var cmdName = $"{groupId}.{cmd.UserId}";

                var callbackFunc = $"{callbackMethodName}({cmdName})";
                var enableFunc   = $"{enableMethodName}({cmdName})";

                if (cmd.HasSpacer)
                {
                    cmdGrp.AddSpacer2(-1, (int)menuToolbarOpts);
                }

                var cmdIndex = cmdGrp.AddCommandItem2(cmd.Title, -1, cmd.Tooltip,
                                                      cmd.Title, i, callbackFunc, enableFunc, cmd.UserId,
                                                      (int)menuToolbarOpts);

                createdCmds.Add(new Tuple <CommandSpec, int, string>(cmd, cmdIndex, cmdName));

                m_Logger.Log($"Created command {cmd.Title}:{cmdIndex} for {cmd.UserId}", LoggerMessageSeverity_e.Debug);
            }

            cmdGrp.HasToolbar = cmds.Any(c => c.HasToolbar);
            cmdGrp.HasMenu    = cmds.Any(c => c.HasMenu);

            if (!cmdGrp.Activate())
            {
                m_Logger.Log("Command group activation failed", LoggerMessageSeverity_e.Error);
            }

            m_Logger.Log($"Command group-{groupId} Id: {(cmdGrp.HasToolbar ? cmdGrp.ToolbarId.ToString() : "No Toolbar")}", LoggerMessageSeverity_e.Debug);

            foreach (var createdCmd in createdCmds)
            {
                var cmdId   = cmdGrp.CommandID[createdCmd.Item2];
                var cmdInfo = new CommandInfo(createdCmd.Item1, parentGroup, cmdId);
                m_Commands.Add(createdCmd.Item3, cmdInfo);
            }
        }
        private Dictionary <CommandSpec, int> CreateCommandItems(SwCommandGroup cmdGroup, int groupId, CommandSpec[] cmds)
        {
            var createdCmds = new Dictionary <CommandSpec, int>();

            var callbackMethodName = nameof(SwAddInEx.OnCommandClick);
            var enableMethodName   = nameof(SwAddInEx.OnCommandEnable);

            for (int i = 0; i < cmds.Length; i++)
            {
                var cmd = cmds[i];

                swCommandItemType_e menuToolbarOpts = 0;

                if (cmd.HasMenu)
                {
                    menuToolbarOpts |= swCommandItemType_e.swMenuItem;
                }

                if (cmd.HasToolbar)
                {
                    menuToolbarOpts |= swCommandItemType_e.swToolbarItem;
                }

                if (menuToolbarOpts == 0)
                {
                    throw new InvalidMenuToolbarOptionsException(cmd);
                }

                var cmdName = $"{groupId}.{cmd.UserId}";

                m_Commands.Add(cmdName, new CommandInfo(cmdGroup, cmd));

                var callbackFunc = $"{callbackMethodName}({cmdName})";
                var enableFunc   = $"{enableMethodName}({cmdName})";

                if (cmd.HasSpacer)
                {
                    cmdGroup.CommandGroup.AddSpacer2(-1, (int)menuToolbarOpts);
                }

                var cmdIndex = cmdGroup.CommandGroup.AddCommandItem2(cmd.Title, -1, cmd.Tooltip,
                                                                     cmd.Title, i, callbackFunc, enableFunc, cmd.UserId,
                                                                     (int)menuToolbarOpts);

                createdCmds.Add(cmd, cmdIndex);

                m_Logger.Log($"Created command {cmd.Title}:{cmdIndex} for {cmd.UserId}", LoggerMessageSeverity_e.Debug);
            }

            cmdGroup.CommandGroup.HasToolbar = cmds.Any(c => c.HasToolbar);
            cmdGroup.CommandGroup.HasMenu    = cmds.Any(c => c.HasMenu);

            if (!cmdGroup.CommandGroup.Activate())
            {
                m_Logger.Log("Command group activation failed", LoggerMessageSeverity_e.Error);
            }

            m_Logger.Log($"Command group-{groupId} Id: {(cmdGroup.CommandGroup.HasToolbar ? cmdGroup.CommandGroup.ToolbarId.ToString() : "No Toolbar")}", LoggerMessageSeverity_e.Debug);

            return(createdCmds.ToDictionary(p => p.Key, p =>
            {
                var cmdId = cmdGroup.CommandGroup.CommandID[p.Value];
                m_Logger.Log($"Command-{p.Value} Id: {cmdId}", LoggerMessageSeverity_e.Debug);
                return cmdId;
            }));
        }