コード例 #1
0
ファイル: Util.cs プロジェクト: Kalnor/monodevelop
		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;
		}
コード例 #2
0
ファイル: ExtensionView.cs プロジェクト: Kalnor/monodevelop
		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;
						}
					}
				};
			}
		}
コード例 #3
0
		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 ();
		}
コード例 #4
0
		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);
		}
コード例 #5
0
ファイル: ExtensionTree.cs プロジェクト: mono/mono-addins
        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);
        }
コード例 #6
0
		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 ();
		}
コード例 #7
0
		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 ();
		}
コード例 #8
0
		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);
		}
コード例 #9
0
		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);
			}
		}
コード例 #10
0
		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 ();
		}
コード例 #11
0
		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);
				}
			}
		}
コード例 #12
0
		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);
				}
			}
		}
コード例 #13
0
		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);
			}
		}
コード例 #14
0
        int IComparable.CompareTo(object obj)
        {
            Extension other = (Extension)obj;

            return(Path.CompareTo(other.Path));
        }
コード例 #15
0
		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");
			}
		}
コード例 #16
0
		public void Fill (AddinRegistry reg, Extension ex)
		{
			Fill (reg, ex.ParentAddinDescription, ex.ParentAddinDescription, ex.Path);
		}
コード例 #17
0
 /// <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;
 }
コード例 #18
0
		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");
			}
		}