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