コード例 #1
0
ファイル: SwAddInEx.cs プロジェクト: reikus/swex-addin
 /// <inheritdoc/>
 /// <exception cref="GroupIdAlreadyExistsException"/>
 /// <exception cref="InvalidMenuToolbarOptionsException"/>
 /// <exception cref="ArgumentException"/>
 /// <exception cref="CallbackNotSpecifiedException"/>
 public CommandGroup AddCommandGroup <TCmdEnum>(Action <TCmdEnum> callback,
                                                EnableMethodDelegate <TCmdEnum> enable = null)
     where TCmdEnum : IComparable, IFormattable, IConvertible
 {
     return(AddCommandGroup(
                new EnumCommandGroupSpec <TCmdEnum>(App, callback, enable, GetNextAvailableGroupId(), m_CommandGroups.Keys)));
 }
コード例 #2
0
 /// <inheritdoc/>
 /// <exception cref="GroupIdAlreadyExistsException"/>
 /// <exception cref="InvalidMenuToolbarOptionsException"/>
 /// <exception cref="ArgumentException"/>
 /// <exception cref="CallbackNotSpecifiedException"/>
 public CommandGroup AddContextMenu <TCmdEnum>(Action <TCmdEnum> callback,
                                               swSelectType_e contextMenuSelectType   = swSelectType_e.swSelEVERYTHING,
                                               EnableMethodDelegate <TCmdEnum> enable = null)
     where TCmdEnum : IComparable, IFormattable, IConvertible
 {
     return(AddCommandGroupOrContextMenu(callback, enable, true, contextMenuSelectType));
 }
コード例 #3
0
ファイル: SwAddInEx.cs プロジェクト: reikus/swex-addin
 /// <inheritdoc/>
 /// <exception cref="GroupIdAlreadyExistsException"/>
 /// <exception cref="InvalidMenuToolbarOptionsException"/>
 /// <exception cref="ArgumentException"/>
 /// <exception cref="CallbackNotSpecifiedException"/>
 public CommandGroup AddContextMenu <TCmdEnum>(Action <TCmdEnum> callback,
                                               swSelectType_e contextMenuSelectType   = swSelectType_e.swSelEVERYTHING,
                                               EnableMethodDelegate <TCmdEnum> enable = null)
     where TCmdEnum : IComparable, IFormattable, IConvertible
 {
     return(AddContextMenu(
                new EnumCommandGroupSpec <TCmdEnum>(App, callback, enable, GetNextAvailableGroupId(), m_CommandGroups.Keys),
                contextMenuSelectType));
 }
コード例 #4
0
        private void ExtractCommandGroupInfo(Type cmdGroupType, ISldWorks app, Action <TCmdEnum> callback,
                                             EnableMethodDelegate <TCmdEnum> enable, int nextGroupId, IEnumerable <ICommandGroupSpec> groups)
        {
            CommandGroupInfoAttribute grpInfoAtt;

            if (cmdGroupType.TryGetAttribute(out grpInfoAtt))
            {
                if (grpInfoAtt.UserId != -1)
                {
                    Id = grpInfoAtt.UserId;
                }
                else
                {
                    Id = nextGroupId;
                }

                if (grpInfoAtt.ParentGroupType != null)
                {
                    var parentGrpSpec = groups.OfType <EnumCommandGroupSpecBase>()
                                        .FirstOrDefault(g => g.CmdGrpEnumType == grpInfoAtt.ParentGroupType);

                    if (parentGrpSpec == null)
                    {
                        //TODO: create a specific exception
                        throw new NullReferenceException("Parent group is not created");
                    }

                    if (grpInfoAtt.ParentGroupType == cmdGroupType)
                    {
                        throw new InvalidOperationException("Group cannot be a parent of itself");
                    }

                    Parent = parentGrpSpec;
                }
            }
            else
            {
                Id = nextGroupId;
            }

            Icon = DisplayInfoExtractor.ExtractCommandDisplayIcon <CommandIconAttribute, CommandGroupIcon>(
                cmdGroupType, i => new MasterIcon(i), a => a.Icon);

            if (!cmdGroupType.TryGetAttribute <DisplayNameAttribute>(a => Title = a.DisplayName))
            {
                Title = cmdGroupType.ToString();
            }

            if (!cmdGroupType.TryGetAttribute <DescriptionAttribute>(a => Tooltip = a.Description))
            {
                Tooltip = cmdGroupType.ToString();
            }

            Commands = Enum.GetValues(cmdGroupType).Cast <TCmdEnum>().Select(
                c => new EnumCommandSpec <TCmdEnum>(app, c, callback, enable)).ToArray();
        }
コード例 #5
0
        internal EnumCommandGroupSpec(ISldWorks app, Action <TCmdEnum> callback,
                                      EnableMethodDelegate <TCmdEnum> enable, int nextGroupId,
                                      IEnumerable <ICommandGroupSpec> groups) : base(typeof(TCmdEnum))
        {
            if (!(typeof(TCmdEnum).IsEnum))
            {
                throw new ArgumentException($"{typeof(TCmdEnum)} must be an Enum");
            }

            ExtractCommandGroupInfo(typeof(TCmdEnum), app, callback, enable, nextGroupId, groups);
        }
コード例 #6
0
ファイル: EnumCommandSpec.cs プロジェクト: reikus/swex-addin
        internal EnumCommandSpec(ISldWorks app, TCmdEnum cmd, Action <TCmdEnum> callback,
                                 EnableMethodDelegate <TCmdEnum> enable)
        {
            if (!(typeof(TCmdEnum).IsEnum))
            {
                throw new ArgumentException($"{typeof(TCmdEnum)} must be an Enum");
            }

            if (callback == null)
            {
                throw new ArgumentNullException(nameof(callback));
            }

            m_App      = app;
            m_Cmd      = cmd;
            m_Callback = callback;
            m_Enable   = enable;

            ExtractCommandInfo(cmd);
        }
コード例 #7
0
        private CommandGroup AddCommandGroupOrContextMenu <TCmdEnum>(Action <TCmdEnum> callback,
                                                                     EnableMethodDelegate <TCmdEnum> enable, bool isContextMenu, swSelectType_e contextMenuSelectType)
            where TCmdEnum : IComparable, IFormattable, IConvertible
        {
            if (!(typeof(TCmdEnum).IsEnum))
            {
                throw new ArgumentException($"{typeof(TCmdEnum)} must be an Enum");
            }

            if (callback == null)
            {
                throw new CallbackNotSpecifiedException();
            }

            var cmdGroupType = typeof(TCmdEnum);

            int    groupId;
            string title;
            string toolTip;

            GetCommandGroupAttribution(cmdGroupType, out groupId, out title, out toolTip);

            var cmds = Enum.GetValues(cmdGroupType).Cast <Enum>().ToArray();

            var cmdGroup = CreateCommandGroup(groupId, title, toolTip, cmds, isContextMenu, contextMenuSelectType);

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

                CreateCommandItems(cmdGroup, groupId, cmds, callback, enable);

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

            return(cmdGroup);
        }
コード例 #8
0
 /// <inheritdoc/>
 /// <exception cref="GroupIdAlreadyExistsException"/>
 /// <exception cref="InvalidMenuToolbarOptionsException"/>
 /// <exception cref="ArgumentException"/>
 /// <exception cref="CallbackNotSpecifiedException"/>
 public CommandGroup AddCommandGroup <TCmdEnum>(Action <TCmdEnum> callback,
                                                EnableMethodDelegate <TCmdEnum> enable = null)
     where TCmdEnum : IComparable, IFormattable, IConvertible
 {
     return(AddCommandGroupOrContextMenu(callback, enable, false, 0));
 }