102
109
public AssemblyBrowserWidget ()
113
buttonBack = new Gtk.Button (new Gtk.Image (ImageService.GetPixbuf ("md-breadcrumb-prev")));
114
buttonBack.Clicked += OnNavigateBackwardActionActivated;
116
buttonForeward = new Gtk.Button (new Gtk.Image (ImageService.GetPixbuf ("md-breadcrumb-next")));
117
buttonForeward.Clicked += OnNavigateForwardActionActivated;
119
comboboxVisibilty = ComboBox.NewText ();
120
comboboxVisibilty.InsertText (0, GettextCatalog.GetString ("Only public members"));
121
comboboxVisibilty.InsertText (1, GettextCatalog.GetString ("All members"));
122
comboboxVisibilty.Active = 0;
123
comboboxVisibilty.Changed += delegate {
124
TreeView.PublicApiOnly = comboboxVisibilty.Active == 0;
128
searchentry1 = new MonoDevelop.Components.SearchEntry ();
129
searchentry1.Ready = true;
130
searchentry1.HasFrame = true;
131
searchentry1.WidthRequest = 200;
132
searchentry1.Visible = true;
133
searchentry1.EmptyMessage = GettextCatalog.GetString ("Search for types or members");
134
searchentry1.InnerEntry.Changed += SearchEntryhandleChanged;
136
CheckMenuItem checkMenuItem = this.searchentry1.AddFilterOption (0, GettextCatalog.GetString ("Types"));
137
checkMenuItem.Active = true;
138
checkMenuItem.Toggled += delegate {
139
if (checkMenuItem.Active) {
140
searchMode = AssemblyBrowserWidget.SearchMode.Type;
146
CheckMenuItem checkMenuItem1 = this.searchentry1.AddFilterOption (1, GettextCatalog.GetString ("Members"));
147
checkMenuItem1.Toggled += delegate {
148
if (checkMenuItem1.Active) {
149
searchMode = AssemblyBrowserWidget.SearchMode.Member;
155
languageCombobox = Gtk.ComboBox.NewText ();
156
languageCombobox.AppendText (GettextCatalog.GetString ("Summary"));
157
languageCombobox.AppendText (GettextCatalog.GetString ("IL"));
158
languageCombobox.AppendText (GettextCatalog.GetString ("C#"));
159
languageCombobox.Active = PropertyService.Get ("AssemblyBrowser.InspectLanguage", 2);
160
languageCombobox.Changed += LanguageComboboxhandleChanged;
105
162
loader = new CecilLoader (true);
106
163
loader.IncludeInternalMembers = true;
107
164
TreeView = new AssemblyBrowserTreeView (new NodeBuilder[]Ā {
126
183
TreeView.Tree.CursorChanged += HandleCursorChanged;
127
184
TreeView.ShadowType = ShadowType.None;
128
185
TreeView.BorderWidth = 1;
129
TreeView.ShowBorderLine = true;
186
TreeView.ShowBorderLine = false;
130
187
TreeView.Zoom = 1.0;
131
188
treeViewPlaceholder.Add (TreeView);
132
treeViewPlaceholder.ShowAll ();
134
190
// this.descriptionLabel.ModifyFont (Pango.FontDescription.FromString ("Sans 9"));
135
191
// this.documentationLabel.ModifyFont (Pango.FontDescription.FromString ("Sans 12"));
136
192
// this.documentationLabel.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (255, 255, 225));
180
233
return referencedSegment.Reference.ToString ();
182
235
this.inspectEditor.LinkRequest += InspectEditorhandleLinkRequest;
183
var scrolledWindow = new SmartScrolledWindow ();
184
scrolledWindow.Show ();
185
textEditorContainer = new TextEditorContainer (inspectEditor);
186
scrolledWindow.Child = textEditorContainer;
187
notebookInspection.Add (scrolledWindow);
188
var notebookChild = ((Notebook.NotebookChild)(notebookInspection [scrolledWindow]));
189
notebookChild.Position = 1;
236
documentationScrolledWindow.Add (inspectEditor);
191
// this.inspectLabel.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (255, 255, 250));
193
// this.vpaned1.ExposeEvent += VPaneExpose;
194
238
this.hpaned1.ExposeEvent += HPaneExpose;
195
/* this.notebook1.SwitchPage += delegate {
196
// Hack for the switch page select all bug.
197
// this.inspectLabel.Selectable = false;
200
languageCombobox.AppendText (GettextCatalog.GetString ("Summary"));
201
languageCombobox.AppendText (GettextCatalog.GetString ("IL"));
202
languageCombobox.AppendText (GettextCatalog.GetString ("C#"));
203
languageCombobox.Active = PropertyService.Get ("AssemblyBrowser.InspectLanguage", 2);
204
languageCombobox.Changed += LanguageComboboxhandleChanged;
205
searchentry1.Ready = true;
206
searchentry1.WidthRequest = 200;
207
searchentry1.Visible = true;
208
searchentry1.EmptyMessage = GettextCatalog.GetString ("Search for types or members");
209
searchentry1.InnerEntry.Changed += SearchEntryhandleChanged;
211
CheckMenuItem checkMenuItem = this.searchentry1.AddFilterOption (0, GettextCatalog.GetString ("Types"));
212
checkMenuItem.Active = true;
213
checkMenuItem.Toggled += delegate {
214
if (checkMenuItem.Active) {
215
searchMode = AssemblyBrowserWidget.SearchMode.Type;
221
CheckMenuItem checkMenuItem1 = this.searchentry1.AddFilterOption (1, GettextCatalog.GetString ("Members"));
222
checkMenuItem1.Toggled += delegate {
223
if (checkMenuItem1.Active) {
224
searchMode = AssemblyBrowserWidget.SearchMode.Member;
229
comboboxVisibilty.InsertText (0, GettextCatalog.GetString ("Only public members"));
230
comboboxVisibilty.InsertText (1, GettextCatalog.GetString ("All members"));
231
comboboxVisibilty.Active = 0;
232
comboboxVisibilty.Changed += delegate {
233
TreeView.PublicApiOnly = comboboxVisibilty.Active == 0;
238
this.searchInCombobox.Active = 0;
239
this.searchInCombobox.Changed += SearchInComboboxhandleChanged;
239
hpaned1 = hpaned1.ReplaceWithWidget (new HPanedThin (), true);
240
hpaned1.Position = 271;
241
242
this.notebook1.SetTabLabel (this.documentationScrolledWindow, new Label (GettextCatalog.GetString ("Documentation")));
242
this.notebook1.SetTabLabel (this.notebookInspection, new Label (GettextCatalog.GetString ("Inspect")));
243
243
this.notebook1.SetTabLabel (this.searchWidget, new Label (GettextCatalog.GetString ("Search")));
244
245
//this.searchWidget.Visible = false;
246
247
typeListStore = new Gtk.ListStore (typeof(Gdk.Pixbuf), // type image
259
260
CreateColumns ();
261
261
// this.searchEntry.Changed += SearchEntryhandleChanged;
262
262
this.searchTreeview.RowActivated += SearchTreeviewhandleRowActivated;
263
this.searchentry1.ShowAll ();
264
this.buttonBack.Clicked += this.OnNavigateBackwardActionActivated;
265
this.buttonForeward.Clicked += this.OnNavigateForwardActionActivated;
266
263
this.notebook1.ShowTabs = false;
267
this.notebookInspection.ShowTabs = false;
267
internal void SetToolbar (DocumentToolbar toolbar)
269
toolbar.Add (buttonBack);
271
toolbar.Add (buttonForeward);
273
toolbar.Add (new VSeparator ());
275
Gtk.Label la = new Label (GettextCatalog.GetString ("Visibility"));
278
toolbar.Add (comboboxVisibilty);
281
toolbar.Add (la, true);
283
toolbar.Add (searchentry1);
285
la = new Label (GettextCatalog.GetString ("Language"));
288
toolbar.Add (languageCombobox);
271
293
[CommandHandler (EditCommands.Copy)]
272
294
protected void OnCopyCommand ()
313
335
this.notebook1.Page = 0;
314
336
PropertyService.Set ("AssemblyBrowser.InspectLanguage", this.languageCombobox.Active);
316
337
FillInspectLabel ();
319
340
void InspectEditorhandleLinkRequest (object sender, Mono.TextEditor.LinkEventArgs args)
342
var loader = (AssemblyLoader)this.TreeView.GetSelectedNode ().GetParentDataItem (typeof(AssemblyLoader), true);
321
344
if (args.Button == 2 || (args.Button == 1 && (args.ModifierState & Gdk.ModifierType.ShiftMask) == Gdk.ModifierType.ShiftMask)) {
322
345
AssemblyBrowserViewContent assemblyBrowserView = new AssemblyBrowserViewContent ();
323
346
foreach (var cu in definitions) {
354
377
static void AppendTypeReference (StringBuilder result, ITypeReference type)
379
if (type is ByReferenceTypeReference) {
380
var brtr = (ByReferenceTypeReference)type;
381
AppendTypeReference (result, brtr.ElementType);
356
385
if (type is ArrayTypeReference) {
357
386
var array = (ArrayTypeReference)type;
358
387
AppendTypeReference (result, array.ElementType);
359
388
result.Append ("[");
360
result.Append (new string (',', array.Dimensions));
389
result.Append (new string (',', array.Dimensions - 1));
361
390
result.Append ("]");
365
394
if (type is PointerTypeReference) {
366
395
var ptr = (PointerTypeReference)type;
367
396
AppendTypeReference (result, ptr.ElementType);
368
397
result.Append ("*");
372
if (type is IUnresolvedTypeDefinition)
401
if (type is GetClassTypeReference) {
402
var r = (GetClassTypeReference)type;
403
var n = r.FullTypeName.TopLevelTypeName;
404
result.Append (n.Namespace + "." + n.Name);
408
if (type is IUnresolvedTypeDefinition) {
373
409
result.Append (((IUnresolvedTypeDefinition)type).FullName);
376
413
static void AppendHelpParameterList (StringBuilder result, IList<IUnresolvedParameter> parameters)
425
467
case EntityType.Destructor: // todo
427
469
case EntityType.Property:
428
return "P:" + member.FullName;
470
sb = new StringBuilder ();
472
sb.Append (member.DeclaringTypeDefinition.ReflectionName);
474
sb.Append (member.Name);
475
return sb.ToString ();
429
476
case EntityType.Indexer:
430
477
var indexer = (IUnresolvedProperty)member;
431
478
sb = new StringBuilder ();
432
479
sb.Append ("P:");
433
sb.Append (indexer.DeclaringTypeDefinition.FullName);
480
sb.Append (indexer.DeclaringTypeDefinition.ReflectionName);
434
481
sb.Append (".Item");
435
482
AppendHelpParameterList (sb, indexer.Parameters);
436
483
return sb.ToString ();
437
484
case EntityType.Field:
438
return "F:" + member.FullName;
485
sb = new StringBuilder ();
487
sb.Append (member.DeclaringTypeDefinition.ReflectionName);
489
sb.Append (member.Name);
490
return sb.ToString ();
439
491
case EntityType.Event:
440
return "E:" + member.FullName;
492
sb = new StringBuilder ();
494
sb.Append (member.DeclaringTypeDefinition.ReflectionName);
496
sb.Append (member.Name);
497
return sb.ToString ();
441
498
case EntityType.Operator: // todo
1020
1071
string text = inspectEditor.GetTextAt (seg);
1021
1072
if (text != null && text.Length == 1 && !(char.IsLetter (text [0]) || text [0] == 'ā¦'))
1023
var marker = new UnderlineMarker ("blue", 1 + seg.Offset - line.Offset, 1 + seg.EndOffset - line.Offset);
1074
var marker = new UnderlineMarker (new Cairo.Color (0, 0, 1.0), 1 + seg.Offset - line.Offset, 1 + seg.EndOffset - line.Offset);
1024
1075
marker.Wave = false;
1025
1076
underlineMarkers.Add (marker);
1026
1077
inspectEditor.Document.AddMarker (line, marker);
1117
1168
this.hpaned1.Position = Math.Min (350, this.Allocation.Width * 2 / 3);
1120
public void Open (string url)
1171
public void Open (string url, AssemblyLoader currentAssembly = null)
1122
1173
ITreeNavigator nav = SearchMember (url);
1123
1174
if (definitions == null) // we've been disposed
1125
1176
if (nav == null) {
1126
foreach (var definition in definitions.ToArray ()) {
1127
var cecilObject = loader.GetCecilObject (definition.UnresolvedAssembly);
1128
if (cecilObject == null)
1130
foreach (var assemblyNameReference in cecilObject.MainModule.AssemblyReferences) {
1131
AddReferenceByAssemblyName (assemblyNameReference);
1177
if (currentAssembly != null) {
1178
var cecilObject = loader.GetCecilObject (currentAssembly.UnresolvedAssembly);
1179
if (cecilObject != null) {
1180
foreach (var reference in cecilObject.MainModule.AssemblyReferences) {
1181
string fileName = currentAssembly.LookupAssembly (reference.FullName);
1182
if (string.IsNullOrEmpty (fileName))
1184
AddReferenceByFileName (fileName, true);
1185
nav = SearchMember (url);
1192
foreach (var definition in definitions.ToArray ()) {
1193
var cecilObject = loader.GetCecilObject (definition.UnresolvedAssembly);
1194
if (cecilObject == null)
1196
foreach (var assemblyNameReference in cecilObject.MainModule.AssemblyReferences) {
1197
AddReferenceByAssemblyName (assemblyNameReference);
1134
1201
nav = SearchMember (url);
1218
1289
this.UIManager.Dispose ();
1219
1290
this.UIManager = null;
1221
1294
this.languageCombobox.Changed -= LanguageComboboxhandleChanged;
1222
1295
// this.searchInCombobox.Changed -= SearchInComboboxhandleChanged;
1223
1296
// this.searchEntry.Changed -= SearchEntryhandleChanged;
1224
1297
this.searchTreeview.RowActivated -= SearchTreeviewhandleRowActivated;
1225
1298
hpaned1.ExposeEvent -= HPaneExpose;
1299
if (NavigateBackwardAction != null) {
1300
this.NavigateBackwardAction.Dispose ();
1301
this.NavigateBackwardAction = null;
1304
if (NavigateForwardAction != null) {
1305
this.NavigateForwardAction.Dispose ();
1306
this.NavigateForwardAction = null;
1226
1308
base.OnDestroyed ();
1275
1356
result = new AssemblyLoader (this, fileName);
1277
1358
definitions.Add (result);
1278
ITreeBuilder builder;
1279
if (definitions.Count + projects.Count == 1) {
1280
builder = TreeView.LoadTree (result);
1282
builder = TreeView.AddChild (result);
1359
result.LoadingTask.ContinueWith (delegate {
1360
Application.Invoke (delegate {
1361
if (definitions == null)
1363
ITreeBuilder builder;
1364
if (definitions.Count + projects.Count == 1) {
1365
builder = TreeView.LoadTree (result);
1367
builder = TreeView.AddChild (result);
1369
builder.Selected = builder.Expanded = selectReference;
1284
builder.Selected = builder.Expanded = selectReference;
1329
1417
inspectEditor.GrabFocus ();
1331
1419
searchAndReplaceWidget.UpdateSearchPattern ();
1332
textEditorContainer.AddAnimatedWidget (popupWidgetFrame, 300, Easing.ExponentialInOut, Blocking.Downstage, inspectEditor.Allocation.Width - 400, -searchAndReplaceWidget.Allocation.Height);
1420
inspectEditor.AddAnimatedWidget (popupWidgetFrame, 300, Mono.TextEditor.Theatrics.Easing.ExponentialInOut, Blocking.Downstage, inspectEditor.Allocation.Width - 400, -searchAndReplaceWidget.Allocation.Height);
1333
1421
searchAndReplaceWidget.IsReplaceMode = false;
1366
1454
if (inspectEditor.IsRealized)
1367
1455
inspectEditor.GrabFocus ();
1369
textEditorContainer.AddAnimatedWidget (popupWidgetFrame, 300, Easing.ExponentialInOut, Blocking.Downstage, inspectEditor.Allocation.Width - 400, -gotoLineNumberWidget.Allocation.Height);
1457
inspectEditor.AddAnimatedWidget (popupWidgetFrame, 300, Mono.TextEditor.Theatrics.Easing.ExponentialInOut, Blocking.Downstage, inspectEditor.Allocation.Width - 400, -gotoLineNumberWidget.Allocation.Height);
1372
1460
gotoLineNumberWidget.Focus ();
1395
1483
void UpdateNavigationActions ()
1397
buttonBack.Sensitive = navigationBackwardHistory.Count != 0;
1398
buttonForeward.Sensitive = navigationForwardHistory.Count != 0;
1485
if (buttonBack != null) {
1486
buttonBack.Sensitive = navigationBackwardHistory.Count != 0;
1487
buttonForeward.Sensitive = navigationForwardHistory.Count != 0;
1402
1491
protected virtual void OnNavigateBackwardActionActivated (object sender, System.EventArgs e)