diff options
author | Vsevolod Kukol <sevoku@xamarin.com> | 2016-07-06 18:32:36 +0300 |
---|---|---|
committer | Vsevolod Kukol <sevoku@xamarin.com> | 2016-07-06 18:32:36 +0300 |
commit | 2b1ed6bed29783d6267b9963b9b774807450aa88 (patch) | |
tree | 35c490c8bd6721c3e8507f0d9df0f69d1d03e971 /main/src/addins/MonoDevelop.AssemblyBrowser | |
parent | 4c66c4e547a78f5b13a4bb85214600d8e13063d1 (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')
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 |