Browse Source

If target assembly is not in ClassBrowser's workspace, now "Show in Class Browser" automatically loads the assembly temporarily (as unpinned) into the workspace. Added a separate icon for unpinned assemblies.

pull/80/head
Andreas Weizel 12 years ago
parent
commit
581148863f
  1. 6
      src/Main/Base/Project/Dom/ClassBrowser/AssemblyTreeNode.cs
  2. 48
      src/Main/Base/Project/Dom/ClassBrowser/ClassBrowserTreeView.cs
  3. 6
      src/Main/SharpDevelop/Dom/ClassBrowser/Commands.cs
  4. BIN
      src/Main/SharpDevelop/Resources/BitmapResources.resources

6
src/Main/Base/Project/Dom/ClassBrowser/AssemblyTreeNode.cs

@ -56,7 +56,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -56,7 +56,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public override object Icon {
get {
if (model.Context.IsValid) {
return SD.ResourceService.GetImageSource("Icons.16x16.Assembly");
if (model.IsUnpinned()) {
return SD.ResourceService.GetImageSource("Icons.16x16.AssemblyUnpinned");
} else {
return SD.ResourceService.GetImageSource("Icons.16x16.Assembly");
}
} else {
return SD.ResourceService.GetImageSource("Icons.16x16.AssemblyError");
}

48
src/Main/Base/Project/Dom/ClassBrowser/ClassBrowserTreeView.cs

@ -8,6 +8,7 @@ using System.Windows.Controls; @@ -8,6 +8,7 @@ using System.Windows.Controls;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.TreeView;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
@ -61,6 +62,24 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -61,6 +62,24 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
}
}
private SharpTreeNode FindAssemblyTreeNode(string fullAssemblyName)
{
var assemblyTreeNode = this.Root.Children.FirstOrDefault(
node => {
if (node is AssemblyTreeNode) {
var asmTreeNode = (AssemblyTreeNode) node;
if (node.Model is IAssemblyModel) {
var asmModel = (IAssemblyModel) node.Model;
return asmModel.FullAssemblyName == fullAssemblyName;
}
}
return false;
});
return assemblyTreeNode;
}
public bool GoToEntity(IEntity entity)
{
// Try to find assembly in workspace
@ -102,25 +121,28 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -102,25 +121,28 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
if (namespaceChildren == null) {
// Try to find assembly of passed entity among additional assemblies
var assemblyTreeNode = this.Root.Children.FirstOrDefault(
node => {
if (node is AssemblyTreeNode) {
var asmTreeNode = (AssemblyTreeNode) node;
if (node.Model is IAssemblyModel) {
var asmModel = (IAssemblyModel) node.Model;
return asmModel.FullAssemblyName == entityAssembly.FullAssemblyName;
}
}
return false;
});
var assemblyTreeNode = FindAssemblyTreeNode(entityAssembly.FullAssemblyName);
if (assemblyTreeNode != null) {
assemblyTreeNode.EnsureLazyChildren();
namespaceChildren = assemblyTreeNode.Children;
}
}
// TODO Add assembly to workspace, if not available in ClassBrowser
if (namespaceChildren == null) {
// Add assembly to workspace (unpinned), if not available in ClassBrowser
IAssemblyParserService assemblyParser = SD.GetService<IAssemblyParserService>();
if (assemblyParser != null) {
IAssemblyModel unpinnedAssemblyModel = assemblyParser.GetAssemblyModel(new FileName(entityAssembly.UnresolvedAssembly.Location));
if (unpinnedAssemblyModel != null) {
this.UnpinnedAssemblies.Assemblies.Add(unpinnedAssemblyModel);
var assemblyTreeNode = FindAssemblyTreeNode(entityAssembly.FullAssemblyName);
if (assemblyTreeNode != null) {
assemblyTreeNode.EnsureLazyChildren();
namespaceChildren = assemblyTreeNode.Children;
}
}
}
}
if (namespaceChildren != null) {
var nsTreeNode = namespaceChildren.FirstOrDefault(

6
src/Main/SharpDevelop/Dom/ClassBrowser/Commands.cs

@ -101,7 +101,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -101,7 +101,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
var classBrowser = SD.GetService<IClassBrowser>();
if (classBrowser != null) {
IAssemblyModel assemblyModel = (IAssemblyModel) parameter;
classBrowser.MainAssemblyList.Assemblies.Remove(assemblyModel);
if (assemblyModel.IsUnpinned()) {
classBrowser.UnpinnedAssemblies.Assemblies.Remove(assemblyModel);
} else {
classBrowser.MainAssemblyList.Assemblies.Remove(assemblyModel);
}
}
}
}

BIN
src/Main/SharpDevelop/Resources/BitmapResources.resources

Binary file not shown.
Loading…
Cancel
Save