Example #1
0
        /// <summary>
        /// 移除插件
        /// </summary>
        private void UninstallPlugin()
        {
            //移除命令
            foreach (var command in _dicCommand)
            {
                EnvDTE.Command cmd = _applicationObject.Commands.Item(command.Key);
                cmd.Delete();
            }

            //移除菜单
            foreach (var menu in _dicMenu)
            {
                MenuAttribute menuAttribute =
                    Attribute.GetCustomAttribute(menu.Value.GetType(), typeof(MenuAttribute)) as MenuAttribute;

                AdditionalBarAttribute[] additionalBarAttributes =
                    Attribute.GetCustomAttributes(menu.Value.GetType(), typeof(AdditionalBarAttribute)) as
                    AdditionalBarAttribute[];

                foreach (var s in additionalBarAttributes)
                {
                    CommandBar cmdBar = ((CommandBars)_applicationObject.CommandBars)[s.VsCommandBar];
                    cmdBar.Controls[menuAttribute.Caption].Delete();
                }
            }
            //插件卸载
            _initAlreadySetup = false;
        }
Example #2
0
        protected MenuBase()
        {
            this.menuUid = new List <string>();
            MenuAttribute attribute = null;
            int           index     = 0;

            foreach (object obj2 in base.GetType().GetCustomAttributes(false))
            {
                if (obj2 is MenuAttribute)
                {
                    attribute = obj2 as MenuAttribute;



                    this.menuUid.Add(attribute.menuUid);

                    B1AppDomain.RegisterMenuByType(this.menuUid.SingleOrDefault(e => e == attribute.menuUid), this);

                    index++;
                }
            }
            if (attribute == null)
            {
                B1Exception.writeLog("Falha ao indexar Form. Por favor checar os atributos informados");
            }


            this.OnInitializeFormEvents();
        }
        public void Menu_GetOrderNotSetDefaultsToIntMaxValue_ReturnsDefaultOrderValue()
        {
            var systemUnderTest = new MenuAttribute("MenuName");

            var order = systemUnderTest.Order;

            Assert.IsTrue(order == int.MaxValue);
        }
        public void Menu_GetOrderSetValue_ReturnsSetOrderValue()
        {
            var systemUnderTest = new MenuAttribute("MenuName");

            systemUnderTest.Order = 1;

            var order = systemUnderTest.Order;

            Assert.IsTrue(order == 1);
        }
Example #5
0
        static void Init()
        {
            menu = new GenericMenu();

            Assembly asm = Assembly.GetAssembly(typeof(Node));

            Type[] types = asm.GetTypes();

            List <MenuTypeDesc> menu_types = new List <MenuTypeDesc> ();

            foreach (Type t in types)
            {
                object[] attrs = t.GetCustomAttributes(false);
                if (attrs != null && attrs.Length > 0)
                {
                    MenuAttribute attr = attrs[0] as MenuAttribute;
                    if (attr != null)
                    {
                        MenuTypeDesc desc = new MenuTypeDesc();
                        desc.name  = attr.Name;
                        desc.order = attr.Order;
                        desc.type  = t;
                        menu_types.Add(desc);
                    }
                }
            }

            menu_types.Sort(MenuTypeDesc.Compare);

            foreach (MenuTypeDesc desc in menu_types)
            {
                Type t = desc.type;
                if (t.IsSubclassOf(typeof(OutputNode)))
                {
                    if (t == CameraForgeWindow.modifier.output.GetType())
                    {
                        menu.AddItem(new GUIContent("Output Type/" + desc.name), true, () => {});
                    }
                    else
                    {
                        menu.AddItem(new GUIContent("Output Type/" + desc.name), false, MenuFunc, t);
                    }
                }
                else
                {
                    menu.AddItem(new GUIContent("Add Node/" + desc.name), false, MenuFunc, t);
                }
            }

            delete_menu = new GenericMenu();
            delete_menu.AddItem(new GUIContent("Delete"), false, () => { CameraForgeWindow.modifier.DeleteNode(del_node); });

            inited = true;
        }
Example #6
0
 private string MenuSql(MenuAttribute menu)
 {
     return(string.Format(SqlStatement.GenMenu(), new object[] {
         menu.Id,
         menu.ParentId,
         menu.Name,
         menu.Url,
         menu.System,
         menu.Depth,
         menu.Index
     }));
 }
Example #7
0
        /// <summary>
        /// 拦截
        /// </summary>
        /// <param name="basicReturn">基本返回</param>
        /// <param name="invocation">拦截参数</param>
        /// <param name="attr">特性</param>
        /// <param name="isExecProceeded">是否已执行</param>
        protected override void Intercept(BasicReturnInfo basicReturn, IInvocation invocation, FunctionAttribute attr, out bool isExecProceeded)
        {
            isExecProceeded = false;
            var ignorePerAttr = invocation.Method.GetAttribute <IgnorePermissionAttribute>();

            if (ignorePerAttr != null)
            {
                return;
            }
            if (attr.Codes.IsNullOrCount0())
            {
                basicReturn.SetFailureMsg("功能编码不能为空");
                return;
            }
            MenuAttribute menuAttr = invocation.TargetType.GetAttribute <MenuAttribute>();

            if (menuAttr == null)
            {
                return;
            }
            if (string.IsNullOrWhiteSpace(menuAttr.Code))
            {
                basicReturn.SetFailureMsg("菜单编码不能为空");
                return;
            }

            // 这里执行权限验证
            IUserService userService = AutofacTool.Resolve <IUserService>();

            if (userService == null)
            {
                basicReturn.SetFailureMsg("找不到用户服务");
                return;
            }
            ReturnInfo <bool> perReInfo = userService.IsCurrUserPermission(menuAttr.Code, attr.Codes);

            if (perReInfo.Failure())
            {
                basicReturn.FromBasic(perReInfo);
                return;
            }
            if (perReInfo.Data)
            {
                return;
            }
            else
            {
                basicReturn.SetCodeMsg(ErrCodeDefine.NOT_PERMISSION, "Sorry,您没有访问此功能权限");
            }
        }
Example #8
0
            internal void AddNewEntry(PropertyWrapper <TMenu> wrapper, MenuAttribute settings)
            {
                if (settings.orderInSection > 0)
                {
                    this.sectionMembers.Add(settings.orderInSection, wrapper);
                }
                else
                {
                    this.sectionMembers.Add(this.defaultPosition++, wrapper);
                }

                if (settings.sectionOrder != 0)
                {
                    this.order = settings.sectionOrder;
                }
            }
Example #9
0
        private bool NotAuthorized(MenuAttribute menu)
        {
            var obj = ContainerManager.Container.Resolve(menu.OriginalType);
            var ret = menu.With(x => x.OriginalType)
                      .With(x => x.GetMethod(
                                menu.Return(y => y.ValidateMethod, string.Empty)))
                      .With(x => x.Invoke(obj, null));

            if (!(ret is bool))
            {
                Logger.Error(String.Format(Messages.AuthorizationMessage, menu.OriginalType, menu.ValidateMethod));
                return(false);
            }

            return(!(bool)ret);
        }
Example #10
0
        /// <summary>
        /// Map between menu related attributes to equivelant models.
        /// </summary>
        public static MenuModel  ToMenuModel(this MenuAttribute src)
        {
            var dest = new MenuModel();

            dest.Action             = src.Action;
            dest.ActionSecurity     = ToSecurityModel(src.ActionSecurity);
            dest.Area               = src.Area;
            dest.Controller         = src.Controller;
            dest.ControllerSecurity = ToSecurityModel(src.ControllerSecurity);
            dest.Name               = src.Name;
            dest.Order              = src.Order;
            dest.ParentAction       = src.ParentAction;
            dest.ParentArea         = src.ParentArea;
            dest.ParentController   = src.ParentController;
            dest.Parameters         = src.Parameters;
            return(dest);
        }
Example #11
0
        internal TextureWrapper(PropertyInfo property, MenuAttribute settings)
        {
            var getMethod = property.GetGetMethod(true);

            if (getMethod == null)
            {
                throw new ArgumentException(property.Name + " is missing get method");
            }
            this.getter   = base.CompileGetter <MaterialBase.TextureData>(getMethod);
            this.settings = settings;
            if (String.IsNullOrEmpty(this.settings.name))
            {
                this.name = property.Name;
            }
            else
            {
                this.name = this.settings.name;
            }
        }
Example #12
0
        internal EnumWrapper(PropertyInfo property, MenuAttribute settings)
        {
            var getMethod = property.GetGetMethod(true);
            var setMethod = property.GetSetMethod(true);

            if (getMethod == null || setMethod == null)
            {
                throw new ArgumentException(property.Name + " is missing a get or set method");
            }
            this.getter   = base.CompileGetter <TEnum>(getMethod);
            this.setter   = base.CompileSetter <TEnum>(setMethod);
            this.settings = settings;
            if (String.IsNullOrEmpty(this.settings.name))
            {
                this.name = property.Name;
            }
            else
            {
                this.name = this.settings.name;
            }
        }
Example #13
0
        private bool RemoveIfNotEqual(MenuAttribute menu)
        {
            string sapMenuFileName = string.Empty;
            var    sapMenu         = application.Menus.Item(menu.UniqueID);

            if (sapMenu.Image != null)
            {
                sapMenuFileName = Path.GetFileName(sapMenu.Image);
            }

            bool same = sapMenu.Checked == menu.Return(x => x.Checked, "0").Equals("1") &&
                        sapMenu.Enabled == menu.Return(x => x.Enabled, "0").Equals("1") &&
                        sapMenuFileName == menu.Return(x => x.Image, string.Empty) &&
                        sapMenu.String == menu.String &&
                        sapMenu.Type == menu.Type &&
                        sapMenu.UID == menu.UniqueID;

            if (!same)
            {
                application.Menus.RemoveEx(menu.UniqueID);
            }
            return(same);
        }
Example #14
0
        internal void InitializeSettingsMenu(bool ignoreAttribute = false)//ignoreAttribute - for Core plugins
        {
            SettingPropertyDrawers.Clear();
            StashTabNodesToUnload.ForEach(x => StashTabController.UnregisterStashNode(x));
            StashTabNodesToUnload.Clear();

            var settingsProps = Settings.GetType().GetProperties();

            foreach (var property in settingsProps)
            {
                if (property.Name == "Enable")
                {
                    continue;
                }

                if (property.GetCustomAttribute <IgnoreMenuAttribute>() != null)
                {
                    continue;
                }

                var menuAttrib = property.GetCustomAttribute <MenuAttribute>();
                if (ignoreAttribute && menuAttrib == null)
                {
                    menuAttrib = new MenuAttribute(System.Text.RegularExpressions.Regex.Replace(property.Name, "(\\B[A-Z])", " $1"));//fix camel case
                }
                if (menuAttrib != null)
                {
                    BaseSettingsDrawer drawer = null;
                    int drawerId = menuAttrib.index == -1 ? GetUniqDrawerId() : menuAttrib.index;
                    if (DrawersIds.Contains(drawerId))
                    {
                        BasePlugin.LogError($"{PluginName}: Already contain settings child with id {menuAttrib.parentIndex}. Fixed by giving a new uniq ID. Property " + property.Name, 5);
                        // drawer.SettingId = GetUniqDrawerId();
                    }
                    var propType = property.PropertyType;

                    if (propType == typeof(ButtonNode) || propType.IsSubclassOf(typeof(ButtonNode)))
                    {
                        drawer = new ButtonSettingDrawer(property.GetValue(Settings) as ButtonNode, menuAttrib.MenuName, drawerId);
                    }
                    else if (propType == typeof(TextNode) || propType.IsSubclassOf(typeof(TextNode)))
                    {
                        drawer = new TextSettingsDrawer(property.GetValue(Settings) as TextNode, menuAttrib.MenuName, drawerId);
                    }
                    else if (propType == typeof(EmptyNode) || propType.IsSubclassOf(typeof(EmptyNode)))
                    {
                        drawer = new LabelSettingDrawer(menuAttrib.MenuName, drawerId);
                    }
                    else if (propType == typeof(HotkeyNode) || propType.IsSubclassOf(typeof(HotkeyNode)))
                    {
                        drawer = new HotkeySettingDrawer(property.GetValue(Settings) as HotkeyNode, menuAttrib.MenuName, drawerId);
                    }
                    else if (propType == typeof(ToggleNode) || propType.IsSubclassOf(typeof(ToggleNode)))
                    {
                        drawer = new CheckboxSettingDrawer(property.GetValue(Settings) as ToggleNode, menuAttrib.MenuName, drawerId);
                    }
                    else if (propType == typeof(ColorNode) || propType.IsSubclassOf(typeof(ColorNode)))
                    {
                        drawer = new ColorSettingDrawer(property.GetValue(Settings) as ColorNode, menuAttrib.MenuName, drawerId);
                    }
                    else if (propType == typeof(ListNode) || propType.IsSubclassOf(typeof(ListNode)))
                    {
                        drawer = new ComboBoxSettingDrawer(property.GetValue(Settings) as ListNode, menuAttrib.MenuName, drawerId);
                    }
                    else if (propType == typeof(FileNode) || propType.IsSubclassOf(typeof(FileNode)))
                    {
                        drawer = new FilePickerDrawer(property.GetValue(Settings) as FileNode, menuAttrib.MenuName, drawerId);
                    }
                    else if (propType == typeof(StashTabNode) || propType.IsSubclassOf(typeof(StashTabNode)))
                    {
                        var stashNode = property.GetValue(Settings) as StashTabNode;
                        StashTabNodesToUnload.Add(stashNode);
                        StashTabController.RegisterStashNode(stashNode);
                        drawer = new StashTabNodeSettingDrawer(stashNode, menuAttrib.MenuName, drawerId);
                    }
                    else if (propType.IsGenericType)
                    {
                        var genericType = propType.GetGenericTypeDefinition();

                        if (genericType == typeof(RangeNode <>))
                        {
                            var genericParameter = propType.GenericTypeArguments;

                            if (genericParameter.Length > 0)
                            {
                                var argType     = genericParameter[0];
                                var valueDrawer = new CustomSettingsDrawer(menuAttrib.MenuName, drawerId);

                                if (argType == typeof(int))
                                {
                                    var rangeInt = property.GetValue(Settings) as RangeNode <int>;
                                    valueDrawer.DrawDelegate = delegate
                                    {
                                        rangeInt.Value = ImGuiExtension.IntSlider(valueDrawer.ImguiUniqLabel, rangeInt.Value, rangeInt.Min, rangeInt.Max);
                                    };
                                }
                                else if (argType == typeof(float))
                                {
                                    var rangeInt = property.GetValue(Settings) as RangeNode <float>;
                                    valueDrawer.DrawDelegate = delegate
                                    {
                                        rangeInt.Value = ImGuiExtension.FloatSlider(valueDrawer.ImguiUniqLabel, rangeInt.Value, rangeInt.Min, rangeInt.Max);
                                    };
                                }
                                else if (argType == typeof(double))
                                {
                                    var rangeInt = property.GetValue(Settings) as RangeNode <double>;
                                    valueDrawer.DrawDelegate = delegate
                                    {
                                        rangeInt.Value = ImGuiExtension.FloatSlider(valueDrawer.ImguiUniqLabel, (float)rangeInt.Value, (float)rangeInt.Min, (float)rangeInt.Max);
                                    };
                                }
                                else if (argType == typeof(byte))
                                {
                                    var rangeInt = property.GetValue(Settings) as RangeNode <byte>;
                                    valueDrawer.DrawDelegate = delegate
                                    {
                                        rangeInt.Value = (byte)ImGuiExtension.IntSlider(valueDrawer.ImguiUniqLabel, rangeInt.Value, rangeInt.Min, rangeInt.Max);
                                    };
                                }
                                else if (argType == typeof(long))
                                {
                                    var rangeInt = property.GetValue(Settings) as RangeNode <long>;
                                    valueDrawer.DrawDelegate = delegate
                                    {
                                        rangeInt.Value = ImGuiExtension.IntSlider(valueDrawer.ImguiUniqLabel, (int)rangeInt.Value, (int)rangeInt.Min, (int)rangeInt.Max);
                                    };
                                }
                                else if (argType == typeof(short))
                                {
                                    var rangeInt = property.GetValue(Settings) as RangeNode <short>;
                                    valueDrawer.DrawDelegate = delegate
                                    {
                                        rangeInt.Value = (short)ImGuiExtension.IntSlider(valueDrawer.ImguiUniqLabel, rangeInt.Value, rangeInt.Min, rangeInt.Max);
                                    };
                                }
                                else if (argType == typeof(ushort))
                                {
                                    var rangeInt = property.GetValue(Settings) as RangeNode <ushort>;
                                    valueDrawer.DrawDelegate = delegate
                                    {
                                        rangeInt.Value = (ushort)ImGuiExtension.IntSlider(valueDrawer.ImguiUniqLabel, rangeInt.Value, rangeInt.Min, rangeInt.Max);
                                    };
                                }
                                else if (argType == typeof(Vector2))
                                {
                                    var vect = property.GetValue(Settings) as RangeNode <Vector2>;
                                    valueDrawer.DrawDelegate = delegate
                                    {
                                        var val = vect.Value;
                                        ImGui.SliderVector2(valueDrawer.ImguiUniqLabel, ref val, vect.Min.X, vect.Max.X, "%.0f", 1);
                                        vect.Value = val;
                                    };
                                }
                                else
                                {
                                    BasePlugin.LogError($"{PluginName}: Generic node argument for range node '{argType.Name}' is not defined in code. Range node type: " + propType.Name, 5);
                                }

                                drawer = valueDrawer;
                            }
                            else
                            {
                                BasePlugin.LogError($"{PluginName}: Can't get GenericTypeArguments from option type: " + propType.Name, 5);
                            }
                        }
                        else
                        {
                            BasePlugin.LogError($"{PluginName}: Generic option node is not defined in code: " + genericType.Name, 5);
                        }
                    }
                    else
                    {
                        BasePlugin.LogError($"{PluginName}: Type of option node is not defined: " + propType.Name, 5);
                    }

                    if (drawer != null)
                    {
                        drawer.SettingTooltip = menuAttrib.Tooltip;

                        if (menuAttrib.parentIndex != -1)
                        {
                            var parent = GetAllDrawers().Find(x => x.SettingId == menuAttrib.parentIndex);
                            if (parent != null)
                            {
                                parent.Children.Add(drawer);
                                continue;
                            }
                            BasePlugin.LogError($"{PluginName}: Can't find child with id {menuAttrib.parentIndex} to parent node. Property " + property.Name, 5);
                        }
                        SettingPropertyDrawers.Add(drawer);
                    }
                    else
                    {
                        BasePlugin.LogError($"{PluginName}: Type of option node is not defined: " + propType.Name, 5);
                    }
                }
            }
        }
Example #15
0
        public static void Parse(ISettings settings, List <ISettingsHolder> draws, int id = -1)
        {
            if (settings == null)
            {
                DebugWindow.LogError("Cant parse null settings.");
                return;
            }

            var props = settings.GetType().GetProperties();

            foreach (var property in props)
            {
                if (property.GetCustomAttribute <IgnoreMenuAttribute>() != null)
                {
                    continue;
                }
                var menuAttribute = property.GetCustomAttribute <MenuAttribute>();
                var isSettings    = property.PropertyType.GetInterfaces().ContainsF(typeof(ISettings));

                if (property.Name == "Enable" && menuAttribute == null)
                {
                    continue;
                }

                if (menuAttribute == null)
                {
                    menuAttribute = new MenuAttribute(Regex.Replace(property.Name, "(\\B[A-Z])", " $1"));
                }

                var holder = new SettingsHolder
                {
                    Name    = menuAttribute.MenuName,
                    Tooltip = menuAttribute.Tooltip,
                    ID      = menuAttribute.index == -1 ? MathHepler.Randomizer.Next(int.MaxValue) : menuAttribute.index
                };

                if (isSettings)
                {
                    var innerSettings = (ISettings)property.GetValue(settings);

                    if (menuAttribute.index != -1)
                    {
                        holder.Type = HolderChildType.Tab;
                        draws.Add(holder);
                        Parse(innerSettings, draws, menuAttribute.index);
                        var parent = GetAllDrawers(draws).Find(x => x.ID == menuAttribute.parentIndex);
                        parent?.Children.Add(holder);
                    }
                    else
                    {
                        Parse(innerSettings, draws);
                    }

                    continue;
                }

                var type = property.GetValue(settings);

                if (menuAttribute.parentIndex != -1)
                {
                    var parent = GetAllDrawers(draws).Find(x => x.ID == menuAttribute.parentIndex);
                    parent?.Children.Add(holder);
                }
                else if (id != -1)
                {
                    var parent = GetAllDrawers(draws).Find(x => x.ID == id);
                    parent?.Children.Add(holder);
                }
                else
                {
                    draws.Add(holder);
                }

                switch (type)
                {
                case ButtonNode n:
                    holder.DrawDelegate = () =>
                    {
                        if (ImGui.Button(holder.Unique))
                        {
                            n.OnPressed();
                        }
                    };

                    break;

                case EmptyNode n:

                    break;

                case HotkeyNode n:
                    holder.DrawDelegate = () =>
                    {
                        var holderName = $"{holder.Name} {n.Value}##{n.Value}";
                        var open       = true;

                        if (ImGui.Button(holderName))
                        {
                            ImGui.OpenPopup(holderName);
                            open = true;
                        }

                        if (ImGui.BeginPopupModal(holderName, ref open, (ImGuiWindowFlags)35))
                        {
                            if (Input.GetKeyState(Keys.Escape))
                            {
                                ImGui.CloseCurrentPopup();
                                ImGui.EndPopup();
                                return;
                            }

                            foreach (var key in Enum.GetValues(typeof(Keys)))
                            {
                                var keyState = Input.GetKeyState((Keys)key);

                                if (keyState)
                                {
                                    n.Value = (Keys)key;
                                    ImGui.CloseCurrentPopup();
                                    break;
                                }
                            }

                            ImGui.Text($" Press new key to change '{n.Value}' or Esc for exit.");

                            ImGui.EndPopup();
                        }
                    };

                    break;

                case ToggleNode n:
                    holder.DrawDelegate = () =>
                    {
                        var value = n.Value;
                        ImGui.Checkbox(holder.Unique, ref value);
                        n.Value = value;
                    };

                    break;

                case ColorNode n:
                    holder.DrawDelegate = () =>
                    {
                        var vector4 = n.Value.ToVector4().ToVector4Num();

                        if (ImGui.ColorEdit4(holder.Unique, ref vector4,
                                             ImGuiColorEditFlags.AlphaBar | ImGuiColorEditFlags.NoInputs |
                                             ImGuiColorEditFlags.AlphaPreviewHalf))
                        {
                            n.Value = vector4.ToSharpColor();
                        }
                    };

                    break;

                case ListNode n:
                    holder.DrawDelegate = () =>
                    {
                        if (ImGui.BeginCombo(holder.Unique, n.Value))
                        {
                            foreach (var t in n.Values)
                            {
                                if (ImGui.Selectable(t))
                                {
                                    n.Value = t;
                                    ImGui.EndCombo();
                                    return;
                                }
                            }

                            ImGui.EndCombo();
                        }
                    };

                    break;

                case FileNode n:
                    holder.DrawDelegate = () =>
                    {
                        if (ImGui.TreeNode(holder.Unique))
                        {
                            var selected = n.Value;

                            if (ImGui.BeginChildFrame(1, new Vector2(0, 300)))
                            {
                                var di = new DirectoryInfo("config");

                                if (di.Exists)
                                {
                                    foreach (var file in di.GetFiles())
                                    {
                                        if (ImGui.Selectable(file.Name, selected == file.FullName))
                                        {
                                            n.Value = file.FullName;
                                        }
                                    }
                                }

                                ImGui.EndChildFrame();
                            }

                            ImGui.TreePop();
                        }
                    };

                    break;

                case RangeNode <int> n:
                    holder.DrawDelegate = () =>
                    {
                        var r = n.Value;
                        ImGui.SliderInt(holder.Unique, ref r, n.Min, n.Max);
                        n.Value = r;
                    };

                    break;

                case RangeNode <float> n:

                    holder.DrawDelegate = () =>
                    {
                        var r = n.Value;
                        ImGui.SliderFloat(holder.Unique, ref r, n.Min, n.Max);
                        n.Value = r;
                    };

                    break;

                case RangeNode <long> n:
                    holder.DrawDelegate = () =>
                    {
                        var r = (int)n.Value;
                        ImGui.SliderInt(holder.Unique, ref r, (int)n.Min, (int)n.Max);
                        n.Value = r;
                    };

                    break;

                case RangeNode <Vector2> n:
                    holder.DrawDelegate = () =>
                    {
                        var vect = n.Value;
                        ImGui.SliderFloat2(holder.Unique, ref vect, n.Min.X, n.Max.X);
                        n.Value = vect;
                    };

                    break;

                default:
                    Core.Logger.Warning($"{type} not supported for menu now. Ask developers to add this type.");
                    break;
                }
            }
        }
Example #16
0
        private static void HandleSubSettings(ISettings settings, List <ISettingsHolder> draws, PropertyInfo property, MenuAttribute menuAttribute, SettingsHolder holder)
        {
            var innerSettings = (ISettings)property.GetValue(settings);

            if (menuAttribute.index != -1)
            {
                holder.Type = HolderChildType.Tab;
                draws.Add(holder);
                Parse(innerSettings, draws, menuAttribute.index);
                var parent = GetAllDrawers(draws).Find(x => x.ID == menuAttribute.parentIndex);
                parent?.Children.Add(holder);
            }
            else
            {
                Parse(innerSettings, draws);
            }
        }
Example #17
0
        private bool RemoveIfNotEqual(MenuAttribute menu)
        {
            string sapMenuFileName = string.Empty;
            var sapMenu = application.Menus.Item(menu.UniqueID);
            if (sapMenu.Image != null)
                sapMenuFileName = Path.GetFileName(sapMenu.Image);

            bool same = sapMenu.Checked == menu.Return(x => x.Checked, "0").Equals("1")
                && sapMenu.Enabled == menu.Return(x => x.Enabled, "0").Equals("1")
                && sapMenuFileName == menu.Return(x => x.Image, string.Empty)
                && sapMenu.String == menu.String
                && sapMenu.Type == menu.Type
                && sapMenu.UID == menu.UniqueID;

            if (!same)
                application.Menus.RemoveEx(menu.UniqueID);
            return same;
        }
Example #18
0
        /// <summary>实现 IDTExtensibility2 接口的 OnConnection 方法。接收正在加载外接程序的通知。</summary>
        /// <param term='application'>宿主应用程序的根对象。</param>
        /// <param term='connectMode'>描述外接程序的加载方式。</param>
        /// <param term='addInInst'>表示此外接程序的对象。</param>
        /// <seealso class='IDTExtensibility2' />
        public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
        {
            _applicationObject = (DTE2)application;
            _addInInstance     = (EnvDTE.AddIn)addInInst;
            bool abc = _addInInstance.Connected;

            //初始化工具箱
            _dteHelper = new DTEHelper(_applicationObject, _addInInstance);

            if (!_initAlreadySetup && (ext_ConnectMode.ext_cm_UISetup == connectMode ||
                                       ext_ConnectMode.ext_cm_Startup == connectMode ||
                                       ext_ConnectMode.ext_cm_AfterStartup == connectMode))
            {
                CommandBars commandBars = (CommandBars)_applicationObject.CommandBars;

                try
                {
                    IDictionary <string, EnvDTE.Command> dicCmd = new Dictionary <string, EnvDTE.Command>(3);

                    //注册插件命令
                    foreach (var command in CommandManager.GetAllCommands())
                    {
                        if (!Attribute.IsDefined(command.GetType(), typeof(CommandAttribute)))
                        {
                            continue;
                        }
                        //命令基本信息
                        CommandAttribute cmdAttribute =
                            Attribute.GetCustomAttribute(command.GetType(), typeof(CommandAttribute)) as CommandAttribute;

                        if (null == cmdAttribute || dicCmd.ContainsKey(cmdAttribute.Key))
                        {
                            continue;
                        }

                        try
                        {
                            //注册命令
                            EnvDTE.Command cmd = _dteHelper.RegisterCommand(cmdAttribute.Key, cmdAttribute.Caption, cmdAttribute.Tooltip, cmdAttribute.UseMsoButton, cmdAttribute.IconResource, CommonHelper.Convert2VsCmdStatus(cmdAttribute.InitViewStatus));

                            dicCmd.Add(cmdAttribute.Key, cmd);
                        }
                        catch
                        {
                            // 可能是由于同名的命令已经存在了,忽略该异常
                        }
                    }

                    foreach (IMenuBar menuBar in MenuManager.GetAddinMenu())
                    {
                        if (!Attribute.IsDefined(menuBar.GetType(), typeof(MenuAttribute)))
                        {
                            continue;
                        }

                        //菜单信息
                        MenuAttribute menuAttribute =
                            Attribute.GetCustomAttribute(menuBar.GetType(), typeof(MenuAttribute)) as MenuAttribute;

                        //附加栏信息
                        AdditionalBarAttribute[] additionalBarAttribute =
                            Attribute.GetCustomAttributes(menuBar.GetType(), typeof(AdditionalBarAttribute)) as
                            AdditionalBarAttribute[];

                        if (null == menuAttribute || null == additionalBarAttribute)
                        {
                            continue;
                        }

                        //缓存菜单项,以便卸载
                        _dicMenu.Add(menuAttribute.Key, menuBar);

                        foreach (var s in additionalBarAttribute)
                        {
                            CommandBar menuBarCommandBar = commandBars[s.VsCommandBar];
                            //添加菜单
                            CommandBarControl menu = menuBarCommandBar.Controls.Add(menuAttribute.ControlType,
                                                                                    Type.Missing, Type.Missing,
                                                                                    menuAttribute.Position <= 0 ? menuBarCommandBar.Controls.Count : menuAttribute.Position,
                                                                                    true);
                            //菜单名
                            menu.Caption = menuAttribute.Caption;
                            //提示文本
                            menu.TooltipText = menuAttribute.Tooltip;

                            foreach (ICommand command in menuBar.CommandList)
                            {
                                if (!Attribute.IsDefined(command.GetType(), typeof(CommandAttribute)))
                                {
                                    continue;
                                }


                                //命令基本信息
                                CommandAttribute cmdAttribute =
                                    Attribute.GetCustomAttribute(command.GetType(), typeof(CommandAttribute)) as CommandAttribute;

                                if (null == cmdAttribute)
                                {
                                    continue;
                                }

                                string strCmdName = FormatCommandName(cmdAttribute.Key);

                                try
                                {
                                    //给菜单附加命令
                                    if (dicCmd.ContainsKey(cmdAttribute.Key))
                                    {
                                        if (menu is CommandBarPopup)
                                        {
                                            dicCmd[cmdAttribute.Key].AddControl(((CommandBarPopup)menu).CommandBar,
                                                                                cmdAttribute.Position);
                                        }
                                        else
                                        {
                                            dicCmd[cmdAttribute.Key].AddControl(menu, cmdAttribute.Position);
                                        }

                                        if (!_dicCommand.ContainsKey(strCmdName))
                                        {
                                            command.DteHelper = _dteHelper;
                                            _dicCommand.Add(strCmdName, command);
                                        }
                                    }
                                }
                                catch
                                {
                                }

                                /*
                                 * CommandBarButton cbc = MsoControlType.msoControlPopup == menuBar.CommandMenu.ControlType
                                 *                         ? DTEHelper.GetInstance().AddButtonToPopup(
                                 *                             menu as CommandBarPopup, command.CommandButton.Position,
                                 *                             command.CommandButton.Caption,
                                 *                             command.CommandButton.Tooltip)
                                 *                         : DTEHelper.GetInstance().AddButtonToCmdBar(
                                 *                             menu as CommandBar, command.CommandButton.Position,
                                 *                             command.CommandButton.Caption,
                                 *                             command.CommandButton.Tooltip);
                                 *
                                 * //参数区分命令来源
                                 * cbc.Parameter = string.Format("{0}.{1}.{2}", kvp.Key, menuBar.CommandMenu.Key,
                                 *                            command.CommandButton.Key);
                                 * //添加按钮事件
                                 * cbc.Click += (CommandBarButton ctrl, ref bool @default) =>
                                 *               {
                                 *                   //第1位是窗口名,每2位是菜单名,每3位是命令名
                                 *                   string[] strPara = ctrl.Parameter.Split('.');
                                 *                   //取出菜单
                                 *                   IMenuBar customMenu = this._dicMenuBar[strPara[1]];
                                 *
                                 *                   foreach (ICommand cmd in customMenu.CommandList)
                                 *                   {
                                 *                       if (strPara[2].Equals(cmd.CommandButton.Key))
                                 *                       {
                                 *                           CommandResult result = cmd.Exec(ctrl.Parameter);
                                 *                           if (0 != result.ErrCode)
                                 *                               MessageBox.Show(result.ErrMsg);
                                 *                           break;
                                 *                       }
                                 *                   }
                                 *               };
                                 */
                            }
                        }
                    }

                    //插件加载标识
                    _initAlreadySetup = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }
Example #19
0
        private static void HandleType(MenuAttribute menuAttribute, SettingsHolder holder, object type)
        {
            switch (type)
            {
            case ButtonNode n:
                holder.DrawDelegate = () =>
                {
                    if (ImGui.Button(holder.Unique))
                    {
                        n.OnPressed();
                    }
                };

                break;

            case EmptyNode n:

                break;

            case HotkeyNode n:
                holder.DrawDelegate = () =>
                {
                    var holderName = $"{holder.Name} {n.Value}##{n.Value}";
                    var open       = true;

                    if (ImGui.Button(holderName))
                    {
                        ImGui.OpenPopup(holderName);
                        open = true;
                    }

                    if (ImGui.BeginPopupModal(holderName, ref open, (ImGuiWindowFlags)35))
                    {
                        if (Input.GetKeyState(Keys.Escape))
                        {
                            ImGui.CloseCurrentPopup();
                            ImGui.EndPopup();
                            return;
                        }

                        foreach (var key in Enum.GetValues(typeof(Keys)))
                        {
                            var keyState = Input.GetKeyState((Keys)key);

                            if (keyState)
                            {
                                n.Value = (Keys)key;
                                ImGui.CloseCurrentPopup();
                                break;
                            }
                        }

                        ImGui.Text($" Press new key to change '{n.Value}' or Esc for exit.");

                        ImGui.EndPopup();
                    }
                };

                break;

            case ToggleNode n:
                holder.DrawDelegate = () =>
                {
                    var value = n.Value;
                    ImGui.Checkbox(holder.Unique, ref value);
                    n.Value = value;
                };

                break;

            case ColorNode n:
                holder.DrawDelegate = () =>
                {
                    var vector4 = n.Value.ToVector4().ToVector4Num();

                    if (ImGui.ColorEdit4(holder.Unique, ref vector4,
                                         ImGuiColorEditFlags.AlphaBar | ImGuiColorEditFlags.NoInputs |
                                         ImGuiColorEditFlags.AlphaPreviewHalf))
                    {
                        n.Value = vector4.ToSharpColor();
                    }
                };

                break;

            case ListNode n:
                holder.DrawDelegate = () =>
                {
                    if (ImGui.BeginCombo(holder.Unique, n.Value))
                    {
                        foreach (var t in n.Values)
                        {
                            if (ImGui.Selectable(t))
                            {
                                n.Value = t;
                                ImGui.EndCombo();
                                return;
                            }
                        }

                        ImGui.EndCombo();
                    }
                };

                break;

            case FileNode n:
                holder.DrawDelegate = () =>
                {
                    if (ImGui.TreeNode(holder.Unique))
                    {
                        var selected = n.Value;

                        if (ImGui.BeginChildFrame(1, new Vector2(0, 300)))
                        {
                            var di = new DirectoryInfo("config");

                            if (di.Exists)
                            {
                                foreach (var file in di.GetFiles())
                                {
                                    if (ImGui.Selectable(file.Name, selected == file.FullName))
                                    {
                                        n.Value = file.FullName;
                                    }
                                }
                            }

                            ImGui.EndChildFrame();
                        }

                        ImGui.TreePop();
                    }
                };

                break;

            case RangeNode <int> n:
                holder.DrawDelegate = () =>
                {
                    var r = n.Value;
                    ImGui.SliderInt(holder.Unique, ref r, n.Min, n.Max);
                    n.Value = r;
                };

                break;

            case RangeNode <float> n:

                holder.DrawDelegate = () =>
                {
                    var r = n.Value;
                    ImGui.SliderFloat(holder.Unique, ref r, n.Min, n.Max);
                    n.Value = r;
                };

                break;

            case RangeNode <long> n:
                holder.DrawDelegate = () =>
                {
                    var r = (int)n.Value;
                    ImGui.SliderInt(holder.Unique, ref r, (int)n.Min, (int)n.Max);
                    n.Value = r;
                };

                break;

            case RangeNode <Vector2> n:
                holder.DrawDelegate = () =>
                {
                    var vect = n.Value;
                    ImGui.SliderFloat2(holder.Unique, ref vect, n.Min.X, n.Max.X);
                    n.Value = vect;
                };

                break;

            case TextNode n:
                holder.DrawDelegate = () =>
                {
                    var input = n.Value;
                    ImGui.InputText(holder.Unique, ref input, 200);
                    n.Value = input;
                };
                break;

            default:
                DebugWindow.LogDebug($"{type} not supported for menu now. Ask developers to add this type.");
                break;
            }
        }
Example #20
0
        internal static PropertyWrapper <TMenu> CreatePropertyWrapper(PropertyInfo property, MenuAttribute settings)
        {
            Type type = property.PropertyType;

            if (type == typeof(Single))
            {
                return(new SingleWrapper <TMenu>(property, settings));
            }
            else if (type == typeof(Boolean))
            {
                return(new BooleanWrapper <TMenu>(property, settings));
            }
            else if (type == typeof(Int32))
            {
                return(new Int32Wrapper <TMenu>(property, settings));
            }
            else if (type == typeof(Vector2))
            {
                return(new Vector2Wrapper <TMenu>(property, settings));
            }
            else if (type == typeof(Vector3))
            {
                return(new Vector3Wrapper <TMenu>(property, settings));
            }
            else if (type == typeof(Vector4))
            {
                return(new Vector4Wrapper <TMenu>(property, settings));
            }
            else if (type == typeof(Color))
            {
                return(new ColorWrapper <TMenu>(property, settings));
            }
            else if (type == typeof(MaterialBase.TextureData))
            {
                return(new TextureWrapper <TMenu>(property, settings));
            }
            else if (type == typeof(MaterialBase.ScaleOffsetTextureData))
            {
                return(new TextureWrapper <TMenu>(property, settings));
            }
            else if (type == typeof(EliteIndex))
            {
                return(new EnumWrapper <TMenu, EliteIndex>(property, settings));
            }
            else if (type == typeof(StandardMaterial.RampInfo))
            {
                return(new EnumWrapper <TMenu, StandardMaterial.RampInfo>(property, settings));
            }
            else if (type == typeof(StandardMaterial.DecalLayer))
            {
                return(new EnumWrapper <TMenu, StandardMaterial.DecalLayer>(property, settings));
            }
            else if (type == typeof(StandardMaterial.CullMode))
            {
                return(new EnumWrapper <TMenu, StandardMaterial.CullMode>(property, settings));
            }
            else if (type == typeof(StandardMaterial.PrintDirection))
            {
                return(new EnumWrapper <TMenu, StandardMaterial.PrintDirection>(property, settings));
            }
            else if (type.BaseType == typeof(Enum))
            {
                var t           = typeof(EnumWrapper <,>).MakeGenericType(typeof(TMenu), type);
                var constructor = t.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, default, new Type[]
Example #21
0
        static void Init()
        {
            menu = new GenericMenu();

            Assembly asm = Assembly.GetAssembly(typeof(Node));

            Type[] types = asm.GetTypes();

            List <MenuTypeDesc> menu_types = new List <MenuTypeDesc> ();

            foreach (Type t in types)
            {
                object[] attrs = t.GetCustomAttributes(false);
                if (attrs != null && attrs.Length > 0)
                {
                    MenuAttribute attr = attrs[0] as MenuAttribute;
                    if (attr != null)
                    {
                        MenuTypeDesc desc = new MenuTypeDesc();
                        desc.name  = attr.Name;
                        desc.order = attr.Order;
                        desc.type  = t;
                        menu_types.Add(desc);
                    }
                }
            }

            menu_types.Sort(MenuTypeDesc.Compare);

            foreach (MenuTypeDesc desc in menu_types)
            {
                Type t = desc.type;
                if (!t.IsSubclassOf(typeof(OutputNode)))
                {
                    menu.AddItem(new GUIContent("Add Node/" + desc.name), false, MenuFunc, t);
                }
            }

            foreach (Type t in types)
            {
                if (t.IsAbstract)
                {
                    continue;
                }
                if (t.IsSubclassOf(typeof(MediaPoseNode)))
                {
                    menu.AddItem(new GUIContent("Add Pose Node/Variable/" + t.Name), false, MenuFunc, t);
                }
                else if (t == typeof(Modifier))
                {
                    menu.AddItem(new GUIContent("Add Modifier"), false, MenuFunc, t);
                }
                else if (t.IsSubclassOf(typeof(ScriptModifier)))
                {
                    menu.AddItem(new GUIContent("Add Script Modifier/" + t.Name), false, MenuFunc, t);
                }
                else if (t.IsSubclassOf(typeof(PoseNode)) && t != typeof(FinalPose) && t != typeof(Controller))
                {
                    menu.AddItem(new GUIContent("Add Pose Node/" + t.Name), false, MenuFunc, t);
                }
            }

            delete_menu = new GenericMenu();

            delete_menu.AddItem(new GUIContent("Delete"), false, () =>
            {
                if (del_node != null)
                {
                    CameraForgeWindow.controller.DeleteNode(del_node);
                }
                else if (del_pose_node != null)
                {
                    CameraForgeWindow.controller.DeletePoseNode(del_pose_node);
                }

                del_node      = null;
                del_pose_node = null;
            });

            inited = true;
        }
Example #22
0
        private bool NotAuthorized(MenuAttribute menu)
        {
            var obj = ContainerManager.Container.Resolve(menu.OriginalType);
            var ret = menu.With(x => x.OriginalType)
                .With(x => x.GetMethod(
                    menu.Return(y => y.ValidateMethod, string.Empty)))
                .With(x => x.Invoke(obj, null));

            if (!(ret is bool))
            {
                Logger.Error(String.Format(Messages.AuthorizationMessage, menu.OriginalType, menu.ValidateMethod));
                return false;
            }

            return !(bool)ret;
        }
Example #23
0
        public static void Parse(ISettings settings, List <ISettingsHolder> draws, int id = -1)
        {
            if (settings == null)
            {
                DebugWindow.LogError("Cant parse null settings.");
                return;
            }

            var props = settings.GetType().GetProperties();

            foreach (var property in props)
            {
                if (property.GetCustomAttribute <IgnoreMenuAttribute>() != null)
                {
                    continue;
                }
                var menuAttribute = property.GetCustomAttribute <MenuAttribute>();
                var isSettings    = property.PropertyType.GetInterfaces().ContainsF(typeof(ISettings));

                if (property.Name == "Enable" && menuAttribute == null)
                {
                    continue;
                }

                if (menuAttribute == null)
                {
                    menuAttribute = new MenuAttribute(Regex.Replace(property.Name, "(\\B[A-Z])", " $1"));
                }

                var holder = new SettingsHolder
                {
                    Name    = menuAttribute.MenuName,
                    Tooltip = menuAttribute.Tooltip,
                    ID      = menuAttribute.index == -1 ? MathHepler.Randomizer.Next(int.MaxValue) : menuAttribute.index
                };


                if (isSettings)
                {
                    HandleSubSettings(settings, draws, property, menuAttribute, holder);
                    continue;
                }

                if (IsISettingsList(property, settings))
                {
                    IList list = property.GetValue(settings) as IList;
                    foreach (var item in list)
                    {
                        Parse(item as ISettings, draws);
                    }
                    continue;
                }

                if (menuAttribute.parentIndex != -1)
                {
                    var parent = GetAllDrawers(draws).Find(x => x.ID == menuAttribute.parentIndex);
                    parent?.Children.Add(holder);
                }
                else if (id != -1)
                {
                    var parent = GetAllDrawers(draws).Find(x => x.ID == id);
                    parent?.Children.Add(holder);
                }
                else
                {
                    draws.Add(holder);
                }



                var type = property.GetValue(settings);
                HandleType(menuAttribute, holder, type);
            }
        }