Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVsevolod Kukol <sevoku@xamarin.com>2016-07-06 18:32:36 +0300
committerVsevolod Kukol <sevoku@xamarin.com>2016-07-06 18:32:36 +0300
commit2b1ed6bed29783d6267b9963b9b774807450aa88 (patch)
tree35c490c8bd6721c3e8507f0d9df0f69d1d03e971 /main/src/addins/MonoDevelop.AssemblyBrowser
parent4c66c4e547a78f5b13a4bb85214600d8e13063d1 (diff)
[AssemblyBrowser] Fix and optimize navigation history
* show assembly name and member in navigation menu * file based navigation points * reopen closed tab fixed * fixed initial node selection (fixes bug #40314)
Diffstat (limited to 'main/src/addins/MonoDevelop.AssemblyBrowser')
-rw-r--r--main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserNavigationPoint.cs29
-rw-r--r--main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserViewContent.cs3
-rw-r--r--main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs48
3 files changed, 49 insertions, 31 deletions
diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserNavigationPoint.cs b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserNavigationPoint.cs
index f62d47d205..1f1419c025 100644
--- a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserNavigationPoint.cs
+++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserNavigationPoint.cs
@@ -34,18 +34,18 @@ using System.Threading.Tasks;
namespace MonoDevelop.AssemblyBrowser
{
- class AssemblyBrowserNavigationPoint : NavigationPoint
+ class AssemblyBrowserNavigationPoint : DocumentNavigationPoint
{
List<AssemblyLoader> definitions;
string idString;
- public AssemblyBrowserNavigationPoint (List<AssemblyLoader> definitions, string idString)
+ public AssemblyBrowserNavigationPoint (List<AssemblyLoader> definitions, AssemblyLoader assembly, string idString) : base (assembly?.FileName)
{
this.definitions = definitions;
this.idString = idString;
}
- Document DoShow ()
+ protected override async Task<Document> DoShow ()
{
Document result = null;
foreach (var view in Ide.IdeApp.Workbench.Documents) {
@@ -67,6 +67,11 @@ namespace MonoDevelop.AssemblyBrowser
view.Widget.suspendNavigation = true;
view.EnsureDefinitionsLoaded (definitions);
view.Open (idString, expandNode: false);
+ } else if (FileName != null) {
+ var view = result.GetContent<AssemblyBrowserViewContent> ();
+ view.Widget.suspendNavigation = true;
+ view.EnsureDefinitionsLoaded (definitions);
+ await view.Load (FileName);
}
return result;
}
@@ -76,24 +81,26 @@ namespace MonoDevelop.AssemblyBrowser
var other = obj as AssemblyBrowserNavigationPoint;
if (other == null)
return false;
- return other.idString.Equals (idString);
+ if (other.idString != null)
+ return other.idString.Equals (idString);
+ return base.Equals (other);
}
public override int GetHashCode ()
{
- return idString.GetHashCode ();
+ return idString != null ? idString.GetHashCode () : base.GetHashCode ();
}
#region implemented abstract members of NavigationPoint
- public override Task<Document> ShowDocument ()
- {
- return Task.FromResult (DoShow ());
- }
-
public override string DisplayName {
get {
- return GettextCatalog.GetString ("Assembly Browser");
+ if (!string.IsNullOrEmpty (idString)) {
+ if (!string.IsNullOrEmpty (FileName))
+ return String.Format ("{0} : {1}", base.DisplayName, idString);
+ return idString;
+ }
+ return base.DisplayName;
}
}
diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserViewContent.cs b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserViewContent.cs
index 2e83c8e4b1..03ed55ae84 100644
--- a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserViewContent.cs
+++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserViewContent.cs
@@ -75,7 +75,8 @@ namespace MonoDevelop.AssemblyBrowser
public override Task Load (FileOpenInformation fileOpenInformation)
{
ContentName = GettextCatalog.GetString ("Assembly Browser");
- widget.AddReferenceByFileName (fileOpenInformation.FileName);
+ var loader = widget.AddReferenceByFileName (fileOpenInformation.FileName);
+ widget.SelectAssembly (loader.UnresolvedAssembly.AssemblyName);
return Task.FromResult (true);
}
diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs
index d493ae4021..e4e974fb2c 100644
--- a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs
+++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs
@@ -1429,24 +1429,27 @@ namespace MonoDevelop.AssemblyBrowser
{
AssemblyDefinition cu = null;
foreach (var unit in definitions) {
- if (unit.UnresolvedAssembly.AssemblyName == fileName)
+ if (unit.UnresolvedAssembly.AssemblyName == fileName || unit.UnresolvedAssembly.Location == fileName) {
cu = unit.CecilLoader.GetCecilObject (unit.UnresolvedAssembly);
- }
- if (cu == null)
- return;
-
- ITreeNavigator nav = TreeView.GetRootNode ();
- if (nav == null)
- return;
-
- do {
- if (nav.DataItem == cu) {
- nav.ExpandToNode ();
- nav.Selected = true;
- nav.ScrollToNode ();
+ unit.LoadingTask.ContinueWith (t => {
+ Application.Invoke (delegate {
+ ITreeNavigator nav = TreeView.GetRootNode ();
+ if (nav == null)
+ return;
+
+ do {
+ if (nav.DataItem == cu || (nav.DataItem as AssemblyLoader)?.Assembly == cu) {
+ nav.ExpandToNode ();
+ nav.Selected = true;
+ nav.ScrollToNode ();
+ return;
+ }
+ } while (nav.MoveNext ());
+ });
+ });
return;
}
- } while (nav.MoveNext());
+ }
}
void Dispose (ITreeNavigator nav)
@@ -1643,10 +1646,17 @@ namespace MonoDevelop.AssemblyBrowser
public NavigationPoint BuildNavigationPoint ()
{
- var selectedEntity = TreeView.GetSelectedNode ()?.DataItem as IUnresolvedEntity;
- if (selectedEntity == null)
- return null;
- return new AssemblyBrowserNavigationPoint (definitions, GetIdString (selectedEntity));
+ var node = TreeView.GetSelectedNode ();
+ var selectedEntity = node?.DataItem as IUnresolvedEntity;
+ AssemblyLoader loader = null;
+ if (selectedEntity != null) {
+ loader = (AssemblyLoader)this.TreeView.GetSelectedNode ().GetParentDataItem (typeof (AssemblyLoader), true);
+ return new AssemblyBrowserNavigationPoint (definitions, loader, GetIdString (selectedEntity));
+ }
+ loader = node?.DataItem as AssemblyLoader;
+ if (loader != null)
+ return new AssemblyBrowserNavigationPoint (definitions, loader, null);
+ return null;
}
#endregion