コード例 #1
0
        public MenuItemLink(MenuItemData menuItem)
        {
            _menuItem = menuItem;

            OriginalPath = _menuItem.TargetAttribute.menuItem;
            OriginalName = OriginalPath;
            Key          = OriginalPath.ToLower();

            DeclaringType = menuItem.TargetMethod.DeclaringType;
            if (DeclaringType != null)
            {
                AssemlyFilePath = DeclaringType.Assembly.Location;
                AssemblyName    = DeclaringType.Assembly.GetName().Name;
                IsUnityMenu     = AssemblyName.Split('.')[0].Contains("Unity");
            }

            IsContextMenu = Key.Substring(0, 7) == "context";

            if (menuItem.TargetMethod.GetParameters().Length > 0)
            {
                var parameter = menuItem.TargetMethod.GetParameters()[0];

                if (parameter.ParameterType == typeof(MenuCommand))
                {
                    _hasMenuCommandParameter = true;
                    var startIndex = IsContextMenu
                                         ? 8
                                         : 0;
                    var endIndex = OriginalPath.IndexOf('/', startIndex + 1);
                    _menuCommandContextType = OriginalPath.Substring(startIndex, endIndex - startIndex);
                }
            }
        }
コード例 #2
0
        private void ExtractMenuItem(MethodInfo method, Dictionary <string, MenuItemData> dict)
        {
            var items = method.GetCustomAttributes(typeof(MenuItem), false).Cast <MenuItem>().ToArray();

            if (items.Length != 1)
            {
                return;
            }

            var key = items[0].menuItem;

            MenuItemData data;

            dict.TryGetValue(key, out data);
            if (data == null)
            {
                data = new MenuItemData();
                dict.Add(key, data);
            }

            if (items[0].validate)
            {
                data.TargetAttributeValidate = items[0];
                data.TargetMethodValidate    = method;
            }
            else
            {
                data.TargetAttribute = items[0];
                data.TargetMethod    = method;
            }
        }