Пример #1
0
 public MenuItemInfo AddItem(object baseObject, string path, MenuItemData data)
 {
     if (m_definedActions.ContainsKey(path))
     {
         var item = m_definedActions[path];
         if (item.Callable != null)
         {
             item.Callable.AddArgument(baseObject);
         }
         return(item);
     }
     else
     {
         string[] apath = path.Split('/');
         var      item  = Root.FindOrCreateItem(apath);
         item.AssignFrom(data);
         item.Path = path;
         item.Name = apath[apath.Length - 1];
         if (item.Callable != null)
         {
             item.Callable.AddArgument(baseObject);
         }
         m_definedActions[path] = item;
         return(item);
     }
 }
Пример #2
0
        public void AddObject(object obj)
        {
            Dictionary <string, bool> enabled = new Dictionary <string, bool>();
            Dictionary <string, bool> visible = new Dictionary <string, bool>();

            foreach (MethodInfo mtd in obj.GetType().GetMethods())
            {
                foreach (PopupMenuEnabledAttribute attr in mtd.GetCustomAttributes(typeof(PopupMenuEnabledAttribute), true))
                {
                    enabled[attr.Path] = (bool)mtd.Invoke(obj, null);
                }
                foreach (PopupMenuVisibleAttribute attr in mtd.GetCustomAttributes(typeof(PopupMenuVisibleAttribute), true))
                {
                    visible[attr.Path] = (bool)mtd.Invoke(obj, null);
                }
            }

            foreach (MethodAttribute <PopupMenuAttribute> rec in ReflTools.GetMethods <PopupMenuAttribute>(obj))
            {
                if (!LicenseTool.FeatureAllowed(rec.Attribute.RequiredFeature))
                {
                    continue;
                }
                bool v = FindBoolValue(rec.Attribute.Path, visible);
                if (!v)
                {
                    continue;
                }

                bool e = FindBoolValue(rec.Attribute.Path, enabled);

                Bitmap image = Framework.Instance.ImageFromName(rec.Attribute.ImageName, null);
                if (image != null && Framework.IsMono)
                {
                    if (!m_transparencyCache.ContainsKey(image))
                    {
                        m_transparencyCache[image] = image.FixTransparency(SystemColors.ButtonFace);
                    }
                    image = m_transparencyCache[image];
                }

                var data = new MenuItemData();
                data.Image    = image;
                data.Weight   = rec.Attribute.Weight;
                data.Shortcut = rec.Attribute.Shortcut;
                data.ShortcutDisplayString = rec.Attribute.ShortcutDisplayString;
                data.MultiMode             = rec.Attribute.MultiMode;
                data.HideIfNoChildren      = rec.Attribute.HideIfNoChildren;
                data.GroupName             = rec.Attribute.GroupName;
                data.Callable = new MethodCallable(rec.Method);
                data.Enabled  = e;
                AddItem(obj, rec.Attribute.Path, data);
            }
        }
Пример #3
0
 public void AssignFrom(MenuItemData data)
 {
     Weight = data.Weight;
     //Method = data.Method;
     //BaseObject = data.BaseObject;
     Image    = data.Image;
     Shortcut = data.Shortcut;
     ShortcutDisplayString = data.ShortcutDisplayString;
     Callable         = data.Callable;
     MultiMode        = data.MultiMode;
     HideIfNoChildren = data.HideIfNoChildren;
     Enabled          = data.Enabled;
     GroupName        = data.GroupName;
 }