/// <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))); }
/// <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)); }
/// <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)); }
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(); }
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); }
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); }
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); }
/// <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)); }