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:
authorMike Krüger <mkrueger@xamarin.com>2015-08-13 13:16:51 +0300
committerMike Krüger <mkrueger@xamarin.com>2015-08-13 13:16:51 +0300
commit7e50cf6a66443965a3c3410e81d21caf8085aa67 (patch)
tree0ec13b65da957f28350f97d04ac3443aa2b866df /main/src/addins/MonoDevelop.AssemblyBrowser
parent2859c1b560651946e52873466e90f7513bd1437d (diff)
Fixed 'Bug 33025 - Assembly browser should search both types and
members'.
Diffstat (limited to 'main/src/addins/MonoDevelop.AssemblyBrowser')
-rw-r--r--main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs114
1 files changed, 109 insertions, 5 deletions
diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs
index e248eae4a3..b8024bee97 100644
--- a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs
+++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs
@@ -56,6 +56,11 @@ using MonoDevelop.Ide.Gui.Content;
namespace MonoDevelop.AssemblyBrowser
{
+ enum SearchMemberState {
+ TypesAndMembers,
+ Types,
+ Members
+ }
[System.ComponentModel.Category("MonoDevelop.AssemblyBrowser")]
[System.ComponentModel.ToolboxItem(true)]
partial class AssemblyBrowserWidget : Gtk.Bin
@@ -180,27 +185,47 @@ namespace MonoDevelop.AssemblyBrowser
searchentry1.HasFrame = true;
searchentry1.WidthRequest = 200;
searchentry1.Visible = true;
- searchentry1.EmptyMessage = GettextCatalog.GetString ("Search for types or members");
+ UpdateSearchEntryMessage ();
searchentry1.InnerEntry.Changed += SearchEntryhandleChanged;
- CheckMenuItem checkMenuItem = this.searchentry1.AddFilterOption (0, GettextCatalog.GetString ("Types"));
- checkMenuItem.Active = PropertyService.Get ("AssemblyBrowser.SearchMemberState", true);
+ CheckMenuItem checkMenuItem = this.searchentry1.AddFilterOption (0, GettextCatalog.GetString ("Types and Members"));
+ checkMenuItem.Active = PropertyService.Get ("AssemblyBrowser.SearchMemberState", SearchMemberState.TypesAndMembers) == SearchMemberState.TypesAndMembers;
checkMenuItem.Toggled += delegate {
if (checkMenuItem.Active) {
+ searchMode = AssemblyBrowserWidget.SearchMode.TypeAndMembers;
+ CreateColumns ();
+ StartSearch ();
+ }
+ if (checkMenuItem.Active)
+ PropertyService.Set ("AssemblyBrowser.SearchMemberState", SearchMemberState.TypesAndMembers);
+ UpdateSearchEntryMessage ();
+ };
+
+ CheckMenuItem checkMenuItem2 = this.searchentry1.AddFilterOption (0, GettextCatalog.GetString ("Types"));
+ checkMenuItem2.Active = PropertyService.Get ("AssemblyBrowser.SearchMemberState", SearchMemberState.TypesAndMembers) == SearchMemberState.Types;
+ checkMenuItem2.Toggled += delegate {
+ if (checkMenuItem2.Active) {
searchMode = AssemblyBrowserWidget.SearchMode.Type;
CreateColumns ();
StartSearch ();
}
- PropertyService.Set ("AssemblyBrowser.SearchMemberState", checkMenuItem.Active);
+ if (checkMenuItem.Active)
+ PropertyService.Set ("AssemblyBrowser.SearchMemberState", SearchMemberState.Types);
+ UpdateSearchEntryMessage ();
};
CheckMenuItem checkMenuItem1 = this.searchentry1.AddFilterOption (1, GettextCatalog.GetString ("Members"));
+ checkMenuItem.Active = PropertyService.Get ("AssemblyBrowser.SearchMemberState", SearchMemberState.TypesAndMembers) == SearchMemberState.Members;
checkMenuItem1.Toggled += delegate {
if (checkMenuItem1.Active) {
searchMode = AssemblyBrowserWidget.SearchMode.Member;
CreateColumns ();
StartSearch ();
}
+ if (checkMenuItem.Active)
+ PropertyService.Set ("AssemblyBrowser.SearchMemberState", SearchMemberState.Members);
+ UpdateSearchEntryMessage ();
+
};
languageCombobox = Gtk.ComboBox.NewText ();
@@ -286,6 +311,24 @@ namespace MonoDevelop.AssemblyBrowser
this.ShowAll ();
}
+ void UpdateSearchEntryMessage ()
+ {
+ switch (PropertyService.Get ("AssemblyBrowser.SearchMemberState", SearchMemberState.TypesAndMembers)) {
+ case SearchMemberState.TypesAndMembers:
+ searchentry1.EmptyMessage = GettextCatalog.GetString ("Search for types and members");
+ break;
+ case SearchMemberState.Types:
+ searchentry1.EmptyMessage = GettextCatalog.GetString ("Search for types");
+ break;
+ case SearchMemberState.Members:
+ searchentry1.EmptyMessage = GettextCatalog.GetString ("Search for members");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ();
+ }
+
+ }
+
internal void SetToolbar (DocumentToolbar toolbar)
{
Gtk.Label la = new Label (GettextCatalog.GetString ("Visibility"));
@@ -625,7 +668,8 @@ namespace MonoDevelop.AssemblyBrowser
Type = 0,
Member = 1,
Disassembler = 2,
- Decompiler = 3
+ Decompiler = 3,
+ TypeAndMembers = 4
}
SearchMode searchMode = SearchMode.Type;
@@ -659,6 +703,23 @@ namespace MonoDevelop.AssemblyBrowser
col.Resizable = true;
searchTreeview.Model = memberListStore;
break;
+ case SearchMode.TypeAndMembers:
+ col = new TreeViewColumn ();
+ col.Title = GettextCatalog.GetString ("Results");
+ crp = new CellRendererImage ();
+ crt = new Gtk.CellRendererText ();
+ col.PackStart (crp, false);
+ col.PackStart (crt, true);
+ col.AddAttribute (crp, "image", 0);
+ col.AddAttribute (crt, "text", 1);
+ searchTreeview.AppendColumn (col);
+ col.Resizable = true;
+ col = searchTreeview.AppendColumn (GettextCatalog.GetString ("Parent"), new Gtk.CellRendererText (), "text", 2);
+ col.Resizable = true;
+ col = searchTreeview.AppendColumn (GettextCatalog.GetString ("Assembly"), new Gtk.CellRendererText (), "text", 3);
+ col.Resizable = true;
+ searchTreeview.Model = typeListStore;
+ break;
case SearchMode.Type:
col = new TreeViewColumn ();
col.Title = GettextCatalog.GetString ("Type");
@@ -706,6 +767,9 @@ namespace MonoDevelop.AssemblyBrowser
case SearchMode.Type:
IdeApp.Workbench.StatusBar.BeginProgress (GettextCatalog.GetString ("Searching type..."));
break;
+ case SearchMode.TypeAndMembers:
+ IdeApp.Workbench.StatusBar.BeginProgress (GettextCatalog.GetString ("Searching types and members..."));
+ break;
}
memberListStore.Clear ();
typeListStore.Clear ();
@@ -864,6 +928,46 @@ namespace MonoDevelop.AssemblyBrowser
});
break;
+ case SearchMode.TypeAndMembers:
+ var typeDict2 = new Dictionary<AssemblyLoader, List<IUnresolvedEntity>> ();
+ foreach (var unit in this.definitions) {
+ var typeList = new List<IUnresolvedEntity> ();
+ foreach (var type in unit.UnresolvedAssembly.TopLevelTypeDefinitions) {
+ if (worker.CancellationPending)
+ return;
+ if (!type.IsPublic && publicOnly)
+ continue;
+ if (type.FullName.ToUpper ().IndexOf (pattern) >= 0)
+ typeList.Add (type);
+ foreach (var member in type.Members) {
+ if (worker.CancellationPending)
+ return;
+ if (!member.IsPublic && publicOnly)
+ continue;
+ if (member.Name.ToUpper ().Contains (pattern)) {
+ typeList.Add (member);
+ }
+ }
+
+ }
+ typeDict2 [unit] = typeList;
+ }
+
+ Gtk.Application.Invoke (delegate {
+ foreach (var kv in typeDict2) {
+ foreach (var type in kv.Value) {
+ if (worker.CancellationPending)
+ return;
+ typeListStore.AppendValues (ImageService.GetIcon (type.GetStockIcon (), Gtk.IconSize.Menu),
+ type.Name,
+ type.Namespace,
+ kv.Key.Assembly.FullName,
+ type);
+ }
+ }
+ });
+
+ break;
}
} finally {
Gtk.Application.Invoke (delegate {