public static string GetDisplayName (Extension ext) { ObjectDescription ob = ext.GetExtendedObject (); string desc = ""; string label; Extension lastExtension = ext; while (ob is ExtensionNodeDescription) { ExtensionNodeDescription en = (ExtensionNodeDescription) ob; if (desc.Length > 0) desc = " / " + desc; desc = en.Id + desc; ob = (ObjectDescription) en.Parent; if (ob is Extension) { lastExtension = (Extension) ob; ob = lastExtension.GetExtendedObject (); } } ExtensionPoint ep = ob as ExtensionPoint; if (ep != null) { if (!string.IsNullOrEmpty (ep.Name)) label = ep.Name; else label = ep.Path; } else if (lastExtension != null) { label = lastExtension.Path; } else { label = "(Unknown Extension Point)"; } if (!string.IsNullOrEmpty (desc)) label += " / " + desc; return label; }
public void Fill (Extension ext, ITreeNavigator nav) { labelName.Markup = "<small>Extension</small>\n<big><b>" + GLib.Markup.EscapeText (Util.GetDisplayName (ext)) + "</b></big>"; object parent = ext.GetExtendedObject (); if (parent is ExtensionPoint) { ExtensionPoint ep = (ExtensionPoint) parent; string txt = "<small>Extension Point</small>\n<b>" + GLib.Markup.EscapeText (Util.GetDisplayName (ep)) + "</b>"; if (!string.IsNullOrEmpty (ep.Description)) txt += "\n" + GLib.Markup.EscapeText (ep.Description); Gtk.Label lab = new Gtk.Label (); lab.Xalign = lab.Yalign = 0; lab.Markup = txt; lab.WidthRequest = 400; lab.Wrap = true; Gtk.Image img = new Gtk.Image (ImageService.GetPixbuf ("md-extension-point", Gtk.IconSize.Menu)); img.Yalign = 0; Gtk.HBox box = new Gtk.HBox (false, 6); box.PackStart (img, false, false, 0); box.PackStart (lab, true, true, 0); buttonExt.Add (box); buttonExt.ShowAll (); buttonExt.Clicked += delegate { if (nav.MoveToObject (ext)) { nav.MoveToParent (typeof(Solution)); nav.Expanded = true; if (nav.MoveToObject (ep.ParentAddinDescription)) { nav.Expanded = true; if (nav.MoveToObject (ep)) nav.Selected = true; } } }; } }
public ExtensionDetailWidget (Extension ext) { this.Extension = ext; BorderWidth = 12; PackStart (new Label { Markup = string.Format ("<big><tt>{0}</tt></big>", ext.Path)}, true, false, 0); ShowAll (); }
public void LoadExtension (string addin, Extension extension, ArrayList addedNodes) { TreeNode tnode = GetNode (extension.Path); if (tnode == null) { AddinManager.ReportError ("Can't load extensions for path '" + extension.Path + "'. Extension point not defined.", addin, null, false); return; } int curPos = tnode.ChildCount; LoadExtensionElement (tnode, addin, extension.ExtensionNodes, ref curPos, tnode.Condition, false, addedNodes); }
public void LoadExtension(string addin, Extension extension, ArrayList addedNodes) { TreeNode tnode = GetNode (extension.Path); if (tnode == null) { addinEngine.ReportError ("Can't load extensions for path '" + extension.Path + "'. Extension point not defined.", addin, null, false); return; } int curPos = -1; LoadExtensionElement (tnode, addin, extension.ExtensionNodes, (ModuleDescription) extension.Parent, ref curPos, tnode.Condition, false, addedNodes); }
public void OnAddExtension () { DotNetProject project = (DotNetProject) CurrentNode.DataItem; if (project == null) return; AddinData data = project.GetAddinData (); if (project == null) return; AddinDescription adesc = data.CachedAddinManifest; ExtensionSelectorDialog dlg = new ExtensionSelectorDialog (data.AddinRegistry, adesc, adesc.IsRoot, false); if (dlg.Run () == (int) Gtk.ResponseType.Ok) { foreach (object ob in dlg.GetSelection ()) { AddinDescription desc = null; if (ob is ExtensionPoint) { ExtensionPoint ep = (ExtensionPoint) ob; Extension ext = new Extension (ep.Path); adesc.MainModule.Extensions.Add (ext); desc = (AddinDescription) ep.Parent; } else if (ob is ExtensionNodeDescription) { ExtensionNodeDescription node = (ExtensionNodeDescription) ob; desc = node.ParentAddinDescription; string path = ""; while (node != null && !(node.Parent is Extension)) { if (!node.IsCondition) path = "/" + node.Id + path; node = node.Parent as ExtensionNodeDescription; } Extension eext = (Extension) node.Parent; Extension ext = new Extension (eext.Path + "/" + node.Id + path); adesc.MainModule.Extensions.Add (ext); } if (adesc.AddinId != desc.AddinId && !adesc.MainModule.DependsOnAddin (desc.AddinId)) adesc.MainModule.Dependencies.Add (new AddinDependency (desc.AddinId)); } adesc.Save (); } dlg.Destroy (); }
protected virtual void OnButtonAddClicked(object sender, System.EventArgs e) { ExtensionSelectorDialog dlg = new ExtensionSelectorDialog (data.AddinRegistry, adesc, adesc.IsRoot, false); if (dlg.Run () == (int) Gtk.ResponseType.Ok) { foreach (object ob in dlg.GetSelection ()) { AddinDescription desc = null; if (ob is ExtensionPoint) { ExtensionPoint ep = (ExtensionPoint) ob; Extension ext = new Extension (ep.Path); adesc.MainModule.Extensions.Add (ext); desc = (AddinDescription) ep.Parent; } else if (ob is ExtensionNodeDescription) { ExtensionNodeDescription node = (ExtensionNodeDescription) ob; desc = node.ParentAddinDescription; string path = ""; while (node != null && !(node.Parent is Extension)) { if (!node.IsCondition) path = "/" + node.Id + path; node = node.Parent as ExtensionNodeDescription; } Extension eext = (Extension) node.Parent; Extension ext = new Extension (eext.Path + "/" + node.Id + path); adesc.MainModule.Extensions.Add (ext); } if (adesc.AddinId != desc.AddinId && !adesc.MainModule.DependsOnAddin (desc.AddinId)) adesc.MainModule.Dependencies.Add (new AddinDependency (desc.AddinId)); } NotifyChanged (); Fill (); } dlg.Destroy (); }
TreeIter AddExtensionPoint (ExtensionPoint extep, Extension ext) { string spath = ext.Path.Substring (extep.Path.Length); spath = spath.Trim ('/').Replace ("/", " / "); TreeIter ait = AddAddin (extep.ParentAddinDescription); string name; if (extep.Name.Length > 0) { name = GLib.Markup.EscapeText (extep.Name); if (spath.Length > 0) name += " / " + GLib.Markup.EscapeText (spath); } else if (extep.Description.Length > 0) { name = GLib.Markup.EscapeText (extep.Description); if (spath.Length > 0) name += " / " + GLib.Markup.EscapeText (spath); } else name = GLib.Markup.EscapeText (extep.Path); return store.AppendValues (ait, name, null, ext, null, pixExtensionPoint, true, extep); }
void AddExtension (Extension ext, IEnumerable<AddinDescription> deps) { ExtensionPoint extep = null; foreach (AddinDescription desc in deps) { foreach (ExtensionPoint ep in desc.ExtensionPoints) { if (ep.Path == ext.Path || ext.Path.StartsWith (ep.Path + "/")) { extep = ep; break; } } if (extep != null) break; } if (extep != null) { TreeIter it = AddExtensionPoint (extep, ext); foreach (ExtensionNodeDescription node in ext.ExtensionNodes) AddNode (it, node); } else { string txt = "<b>" + GLib.Markup.EscapeText (ext.Path) + "</b>\n"; txt += "<small><span foreground='red'>" + AddinManager.CurrentLocalizer.GetString ("Unknown extension point") + "</span></small>"; store.AppendValues (txt, null, null, null, pixExtensionPoint, true, null); } }
void CreateNode (TreeIter it, Extension ext, ExtensionNodeDescription node, ExtensionNodeType nt) { ExtensionNodeDescription newNode = new ExtensionNodeDescription (nt.NodeName); if (ext != null) { if (ext.Parent == null) adesc.MainModule.Extensions.Add (ext); ext.ExtensionNodes.Add (newNode); } else node.ChildNodes.Add (newNode); TreeIter nit = AddNode (it, newNode); tree.ExpandRow (store.GetPath (it), false); tree.Selection.SelectIter (nit); NotifyChanged (); }
public void RegisterExtension (AddinDescription description, ModuleDescription module, Extension extension) { if (extension.Path.StartsWith ("$")) { UnresolvedObjectTypeExtension extData = new UnresolvedObjectTypeExtension (); extData.Description = description; extData.ModuleDescription = module; extData.Extension = extension; string[] objectTypes = extension.Path.Substring (1).Split (','); foreach (string s in objectTypes) { ArrayList list = (ArrayList) objectTypeExtensions [s]; if (list == null) { list = new ArrayList (); objectTypeExtensions [s] = list; } list.Add (extData); } } }
void LoadModuleExtensionNodes (Extension extension, string addinId, ExtensionNodeSet nset, ArrayList loadedNodes) { // Now load the extensions ArrayList addedNodes = new ArrayList (); tree.LoadExtension (addinId, extension, addedNodes); RuntimeAddin ad = AddinManager.SessionService.GetAddin (addinId); if (ad != null) { foreach (TreeNode nod in addedNodes) { // Don't call OnAddinLoaded here. Do it when the entire extension point has been loaded. if (nod.ExtensionNode != null) loadedNodes.Add (nod); } } }
public override void Initialize (XElement elem) { XAttribute attr = elem.Attributes [new XName ("path")]; if (attr != null) { ModuleCompletionContext ctx = ParentContext as ModuleCompletionContext; if (ctx != null && ctx.Module != null) extension = ctx.Module.GetExtension (attr.Value); } }
int IComparable.CompareTo(object obj) { Extension other = (Extension)obj; return(Path.CompareTo(other.Path)); }
public void RegisterExtension (AddinDescription description, ModuleDescription module, Extension extension) { if (extension.Path.StartsWith ("$")) { string[] objectTypes = extension.Path.Substring (1).Split (','); bool found = false; foreach (string s in objectTypes) { List<ExtensionPoint> list; if (objectTypeExtensions.TryGetValue (s, out list)) { found = true; foreach (ExtensionPoint ep in list) { if (IsAddinCompatible (ep.ParentAddinDescription, description, module)) { extension.Path = ep.Path; RegisterExtension (description, module, ep.Path); } } } } if (!found) monitor.ReportWarning ("The add-in '" + description.AddinId + "' is trying to register the class '" + extension.Path.Substring (1) + "', but there isn't any add-in defining a suitable extension point"); } else if (extension.Path.StartsWith ("%")) { string[] objectTypes = extension.Path.Substring (1).Split (','); bool found = false; foreach (string s in objectTypes) { List<ExtensionNodeType> list; if (customAttributeTypeExtensions.TryGetValue (s, out list)) { found = true; foreach (ExtensionNodeType nt in list) { ExtensionPoint ep = (ExtensionPoint) ((ExtensionNodeSet)nt.Parent).Parent; if (IsAddinCompatible (ep.ParentAddinDescription, description, module)) { extension.Path = ep.Path; foreach (ExtensionNodeDescription node in extension.ExtensionNodes) node.NodeName = nt.NodeName; RegisterExtension (description, module, ep.Path); } } } } if (!found) monitor.ReportWarning ("The add-in '" + description.AddinId + "' is trying to register the class '" + extension.Path.Substring (1) + "', but there isn't any add-in defining a suitable extension point"); } }
public void Fill (AddinRegistry reg, Extension ex) { Fill (reg, ex.ParentAddinDescription, ex.ParentAddinDescription, ex.Path); }
/// <summary> /// Gets an extension instance. /// </summary> /// <returns> /// The extension instance. /// </returns> /// <param name='path'> /// Path that identifies the extension point that the extension extends. /// </param> /// <remarks> /// This method creates a new Extension object for the provided path if none exist. /// </remarks> public Extension GetExtension(string path) { foreach (Extension e in Extensions) { if (e.Path == path) return e; } Extension ex = new Extension (path); Extensions.Add (ex); return ex; }
public void RegisterExtension (AddinDescription description, ModuleDescription module, Extension extension) { if (extension.Path.StartsWith ("$")) { string[] objectTypes = extension.Path.Substring (1).Split (','); bool found = false; foreach (string s in objectTypes) { ArrayList list = (ArrayList) objectTypeExtensions [s]; if (list != null) { found = true; foreach (ExtensionPoint ep in list) { if (IsAddinCompatible (ep.ParentAddinDescription, description, module)) { extension.Path = ep.Path; RegisterExtension (description, module, ep.Path); } } } } if (!found) monitor.ReportWarning ("The add-in '" + description.AddinId + "' is trying to register the class '" + extension.Path.Substring (1) + "', but there isn't any add-in defining a suitable extension point"); } }