~ubuntu-branches/ubuntu/trusty/monodevelop/trusty-proposed

« back to all changes in this revision

Viewing changes to src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs

  • Committer: Package Import Robot
  • Author(s): Jo Shields
  • Date: 2013-05-12 09:46:03 UTC
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: package-import@ubuntu.com-20130512094603-mad323bzcxvmcam0
Tags: upstream-4.0.5+dfsg
ImportĀ upstreamĀ versionĀ 4.0.5+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
49
49
using Mono.TextEditor.Theatrics;
50
50
using MonoDevelop.SourceEditor;
51
51
using XmlDocIdLib;
 
52
using MonoDevelop.Ide.Gui;
 
53
using MonoDevelop.Components;
52
54
 
53
55
namespace MonoDevelop.AssemblyBrowser
54
56
{
56
58
        [System.ComponentModel.ToolboxItem(true)]
57
59
        partial class AssemblyBrowserWidget : Gtk.Bin
58
60
        {
 
61
                Gtk.Button buttonBack;
 
62
                Gtk.Button buttonForeward;
 
63
                Gtk.ComboBox comboboxVisibilty;
 
64
                MonoDevelop.Components.SearchEntry searchentry1;
 
65
                Gtk.ComboBox languageCombobox;
 
66
 
59
67
                public AssemblyBrowserTreeView TreeView {
60
68
                        get;
61
69
                        private set;
73
81
                }
74
82
                
75
83
                DocumentationPanel documentationPanel = new DocumentationPanel ();
76
 
                TextEditorContainer textEditorContainer;
77
84
                readonly TextEditor inspectEditor;
78
85
 
79
86
                public class AssemblyBrowserTreeView : ExtensibleTreeView
102
109
                public AssemblyBrowserWidget ()
103
110
                {
104
111
                        this.Build ();
 
112
 
 
113
                        buttonBack = new Gtk.Button (new Gtk.Image (ImageService.GetPixbuf ("md-breadcrumb-prev")));
 
114
                        buttonBack.Clicked += OnNavigateBackwardActionActivated;
 
115
 
 
116
                        buttonForeward = new Gtk.Button (new Gtk.Image (ImageService.GetPixbuf ("md-breadcrumb-next")));
 
117
                        buttonForeward.Clicked += OnNavigateForwardActionActivated;
 
118
 
 
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;
 
125
                                FillInspectLabel ();
 
126
                        };
 
127
 
 
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;
 
135
 
 
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;
 
141
                                        CreateColumns ();
 
142
                                        StartSearch ();
 
143
                                }
 
144
                        };
 
145
                        
 
146
                        CheckMenuItem checkMenuItem1 = this.searchentry1.AddFilterOption (1, GettextCatalog.GetString ("Members"));
 
147
                        checkMenuItem1.Toggled += delegate {
 
148
                                if (checkMenuItem1.Active) {
 
149
                                        searchMode = AssemblyBrowserWidget.SearchMode.Member;
 
150
                                        CreateColumns ();
 
151
                                        StartSearch ();
 
152
                                }
 
153
                        };
 
154
 
 
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;
 
161
 
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 ();
133
 
                        
 
189
 
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));
139
195
                        var options = new MonoDevelop.Ide.Gui.CommonTextEditorOptions () {
140
196
                                ShowFoldMargin = false,
141
197
                                ShowIconMargin = false,
142
 
                                ShowInvalidLines = false,
143
198
                                ShowLineNumberMargin = false,
144
 
                                ShowSpaces = false,
145
 
                                ShowTabs = false,
146
199
                                HighlightCaretLine = true,
147
200
                        };
148
201
                        inspectEditor = new TextEditor (new TextDocument (), options);
180
233
                                return referencedSegment.Reference.ToString ();
181
234
                        };
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);
190
237
 
191
 
//                      this.inspectLabel.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (255, 255, 250));
192
 
                        
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;
198
 
                        };*/
199
 
 
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;
210
 
                        
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;
216
 
                                        CreateColumns ();
217
 
                                        StartSearch ();
218
 
                                }
219
 
                        };
220
 
                        
221
 
                        CheckMenuItem checkMenuItem1 = this.searchentry1.AddFilterOption (1, GettextCatalog.GetString ("Members"));
222
 
                        checkMenuItem1.Toggled += delegate {
223
 
                                if (checkMenuItem1.Active) {
224
 
                                        searchMode = AssemblyBrowserWidget.SearchMode.Member;
225
 
                                        CreateColumns ();
226
 
                                        StartSearch ();
227
 
                                }
228
 
                        };
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;
234
 
 
235
 
                                FillInspectLabel ();
236
 
                        };
237
 
                        /*
238
 
                        this.searchInCombobox.Active = 0;
239
 
                        this.searchInCombobox.Changed += SearchInComboboxhandleChanged;
240
 
                        */
 
239
                        hpaned1 = hpaned1.ReplaceWithWidget (new HPanedThin (), true);
 
240
                        hpaned1.Position = 271;
 
241
 
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
                        notebook1.Page = 0;
244
245
                        //this.searchWidget.Visible = false;
245
246
                                
246
247
                        typeListStore = new Gtk.ListStore (typeof(Gdk.Pixbuf), // type image
257
258
                                                               typeof(IMember)
258
259
                                                          );
259
260
                        CreateColumns ();
260
 
                        SetInspectWidget ();
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;
268
264
                        this.ShowAll ();
269
265
                }
 
266
 
 
267
                internal void SetToolbar (DocumentToolbar toolbar)
 
268
                {
 
269
                        toolbar.Add (buttonBack);
 
270
 
 
271
                        toolbar.Add (buttonForeward);
 
272
 
 
273
                        toolbar.Add (new VSeparator ());
 
274
 
 
275
                        Gtk.Label la = new Label (GettextCatalog.GetString ("Visibility"));
 
276
                        toolbar.Add (la);
 
277
 
 
278
                        toolbar.Add (comboboxVisibilty);
 
279
 
 
280
                        la = new Label ("");
 
281
                        toolbar.Add (la, true);
 
282
 
 
283
                        toolbar.Add (searchentry1);
 
284
 
 
285
                        la = new Label (GettextCatalog.GetString ("Language"));
 
286
                        toolbar.Add (la);
 
287
 
 
288
                        toolbar.Add (languageCombobox);
 
289
 
 
290
                        toolbar.ShowAll ();
 
291
                }
270
292
                
271
293
                [CommandHandler (EditCommands.Copy)]
272
294
                protected void OnCopyCommand ()
312
334
                {
313
335
                        this.notebook1.Page = 0;
314
336
                        PropertyService.Set ("AssemblyBrowser.InspectLanguage", this.languageCombobox.Active);
315
 
                        SetInspectWidget ();
316
337
                        FillInspectLabel ();
317
338
                }
318
339
 
319
340
                void InspectEditorhandleLinkRequest (object sender, Mono.TextEditor.LinkEventArgs args)
320
341
                {
 
342
                        var loader = (AssemblyLoader)this.TreeView.GetSelectedNode ().GetParentDataItem (typeof(AssemblyLoader), true);
 
343
 
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) {
326
349
                                IdeApp.Workbench.OpenDocument (assemblyBrowserView, true);
327
350
                                ((AssemblyBrowserWidget)assemblyBrowserView.Control).Open (args.Link);
328
351
                        } else {
329
 
                                this.Open (args.Link);
 
352
                                this.Open (args.Link, loader);
330
353
                        }
331
354
                }
332
355
                
353
376
                
354
377
                static void AppendTypeReference (StringBuilder result, ITypeReference type)
355
378
                {
 
379
                        if (type is ByReferenceTypeReference) {
 
380
                                var brtr = (ByReferenceTypeReference)type;
 
381
                                AppendTypeReference (result, brtr.ElementType);
 
382
                                return;
 
383
                        }
 
384
 
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 ("]");
362
391
                                return;
363
392
                        }
364
 
                        
 
393
 
365
394
                        if (type is PointerTypeReference) {
366
395
                                var ptr = (PointerTypeReference)type;
367
396
                                AppendTypeReference (result, ptr.ElementType);
368
397
                                result.Append ("*");
369
398
                                return;
370
399
                        }
371
 
                        
372
 
                        if (type is IUnresolvedTypeDefinition)
 
400
 
 
401
                        if (type is GetClassTypeReference) {
 
402
                                var r = (GetClassTypeReference)type;
 
403
                                var n = r.FullTypeName.TopLevelTypeName;
 
404
                                result.Append (n.Namespace + "." + n.Name);
 
405
                                return;
 
406
                        }
 
407
 
 
408
                        if (type is IUnresolvedTypeDefinition) {
373
409
                                result.Append (((IUnresolvedTypeDefinition)type).FullName);
 
410
                        }
374
411
                }
375
412
                
376
413
                static void AppendHelpParameterList (StringBuilder result, IList<IUnresolvedParameter> parameters)
385
422
                                        var p = parameters [i];
386
423
                                        if (p == null)
387
424
                                                continue;
388
 
                                        if (p.IsRef || p.IsOut)
 
425
                                        AppendTypeReference (result, p.Type);
 
426
                                        if (p.IsRef)
389
427
                                                result.Append ("&");
390
 
                                        AppendTypeReference (result, p.Type);
 
428
                                        if (p.IsOut) {
 
429
                                                result.Append ("@");
 
430
                                        }
391
431
                                }
392
432
                        }
393
433
                        result.Append (')');
407
447
                                var method = (IUnresolvedMethod)member;
408
448
                                sb = new StringBuilder ();
409
449
                                sb.Append ("M:");
410
 
                                sb.Append (method.FullName);
 
450
                                sb.Append (method.DeclaringTypeDefinition.ReflectionName);
 
451
                                sb.Append (".");
 
452
                                sb.Append (method.Name);
411
453
                                if (method.TypeParameters.Count > 0) {
412
454
                                        sb.Append ("`");
413
455
                                        sb.Append (method.TypeParameters.Count);
425
467
                        case EntityType.Destructor: // todo
426
468
                                return "todo";
427
469
                        case EntityType.Property:
428
 
                                return "P:" + member.FullName;
 
470
                                sb = new StringBuilder ();
 
471
                                sb.Append ("P:");
 
472
                                sb.Append (member.DeclaringTypeDefinition.ReflectionName);
 
473
                                sb.Append (".");
 
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 ();
 
486
                                sb.Append ("F:");
 
487
                                sb.Append (member.DeclaringTypeDefinition.ReflectionName);
 
488
                                sb.Append (".");
 
489
                                sb.Append (member.Name);
 
490
                                return sb.ToString ();
439
491
                        case EntityType.Event:
440
 
                                return "E:" + member.FullName;
 
492
                                sb = new StringBuilder ();
 
493
                                sb.Append ("E:");
 
494
                                sb.Append (member.DeclaringTypeDefinition.ReflectionName);
 
495
                                sb.Append (".");
 
496
                                sb.Append (member.Name);
 
497
                                return sb.ToString ();
441
498
                        case EntityType.Operator: // todo
442
499
                                return "todo";
443
500
                        }
474
531
                                if (member is IUnresolvedTypeDefinition)
475
532
                                        return GetIdString (member) == helpUrl;
476
533
                        } else {
477
 
                                if (member is IUnresolvedMember)
 
534
                                if (member is IUnresolvedMember) {
478
535
                                        return GetIdString (member) == helpUrl;
 
536
                                }
479
537
                        }
480
538
                        return false;
481
539
                }
509
567
                
510
568
                ITreeNavigator SearchMember (ITreeNavigator nav, string helpUrl)
511
569
                {
 
570
                        if (nav == null)
 
571
                                return null;
512
572
                        bool searchType = helpUrl.StartsWith ("T:");
513
573
                        do {
514
574
                                if (IsMatch (nav, helpUrl, searchType)) {
 
575
                                        inspectEditor.ClearSelection ();
515
576
                                        nav.ExpandToNode ();
516
577
                                        nav.Selected = nav.Expanded = true;
517
578
                                        return nav;
761
822
                                                                typeList.Add (type);
762
823
                                                }
763
824
                                                typeDict [unit] = typeList;
764
 
                                                Console.WriteLine (unit.UnresolvedAssembly.AssemblyName);
765
825
                                        }
766
826
                                        Gtk.Application.Invoke (delegate {
767
827
                                                foreach (var kv in typeDict) {
988
1048
                        return result.ToString ();
989
1049
                }
990
1050
                
991
 
                void SetInspectWidget ()
992
 
                {
993
 
                        if (this.languageCombobox.Active <= 0) {
994
 
                                notebookInspection.Page = 0;
995
 
                        } else {
996
 
                                notebookInspection.Page = 1;
997
 
                        }
998
 
                }
999
 
                
1000
1051
                List<ReferenceSegment> ReferencedSegments = new List<ReferenceSegment>();
1001
1052
                List<UnderlineMarker> underlineMarkers = new List<UnderlineMarker> ();
1002
1053
                
1020
1071
                                string text = inspectEditor.GetTextAt (seg);
1021
1072
                                if (text != null && text.Length == 1 && !(char.IsLetter (text [0]) || text [0] == 'ā€¦'))
1022
1073
                                        continue;
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);
1118
1169
                }
1119
1170
                
1120
 
                public void Open (string url)
 
1171
                public void Open (string url, AssemblyLoader currentAssembly = null)
1121
1172
                {
1122
1173
                        ITreeNavigator nav = SearchMember (url);
1123
1174
                        if (definitions == null) // we've been disposed
1124
1175
                                return;
1125
1176
                        if (nav == null) {
1126
 
                                foreach (var definition in definitions.ToArray ()) {
1127
 
                                        var cecilObject = loader.GetCecilObject (definition.UnresolvedAssembly);
1128
 
                                        if (cecilObject == null)
1129
 
                                                continue;
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))
 
1183
                                                                continue;
 
1184
                                                        AddReferenceByFileName (fileName, true);
 
1185
                                                        nav = SearchMember (url);
 
1186
                                                        if (nav != null)
 
1187
                                                                break;
 
1188
                                                }
 
1189
                                        }
 
1190
 
 
1191
                                } else {
 
1192
                                        foreach (var definition in definitions.ToArray ()) {
 
1193
                                                var cecilObject = loader.GetCecilObject (definition.UnresolvedAssembly);
 
1194
                                                if (cecilObject == null)
 
1195
                                                        continue;
 
1196
                                                foreach (var assemblyNameReference in cecilObject.MainModule.AssemblyReferences) {
 
1197
                                                        AddReferenceByAssemblyName (assemblyNameReference);
 
1198
                                                }
1132
1199
                                        }
1133
1200
                                }
1134
1201
                                nav = SearchMember (url);
1176
1243
                
1177
1244
                protected override void OnDestroyed ()
1178
1245
                {
 
1246
                        ClearReferenceSegment ();
1179
1247
                        if (searchBackgoundWorker != null && searchBackgoundWorker.IsBusy) {
1180
1248
                                searchBackgoundWorker.CancelAsync ();
1181
1249
                                searchBackgoundWorker.Dispose ();
1183
1251
                        }
1184
1252
                        
1185
1253
                        if (this.TreeView != null) {
1186
 
                        //      Dispose (TreeView.GetRootNode ());
 
1254
                                //      Dispose (TreeView.GetRootNode ());
1187
1255
                                TreeView.Tree.CursorChanged -= HandleCursorChanged;
1188
1256
                                this.TreeView.Clear ();
1189
1257
                                this.TreeView = null;
1190
1258
                        }
1191
1259
                        
1192
1260
                        if (definitions != null) {
 
1261
                                foreach (var def in definitions)
 
1262
                                        def.Dispose ();
1193
1263
                                definitions.Clear ();
1194
1264
                                definitions = null;
1195
1265
                        }
1210
1280
                                documentationPanel = null;
1211
1281
                        }
1212
1282
                        if (inspectEditor != null) {
 
1283
                                inspectEditor.TextViewMargin.GetLink = null;
1213
1284
                                inspectEditor.LinkRequest -= InspectEditorhandleLinkRequest;
1214
1285
                                inspectEditor.Destroy ();
1215
1286
                        }
1218
1289
                                this.UIManager.Dispose ();
1219
1290
                                this.UIManager = null;
1220
1291
                        }
 
1292
 
 
1293
                        this.loader = 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;
 
1302
                        }
 
1303
 
 
1304
                        if (NavigateForwardAction != null) {
 
1305
                                this.NavigateForwardAction.Dispose ();
 
1306
                                this.NavigateForwardAction = null;
 
1307
                        }
1226
1308
                        base.OnDestroyed ();
1227
1309
                }
1228
1310
                
1253
1335
                public AssemblyLoader AddReferenceByAssemblyName (string assemblyFullName, bool selectReference = false)
1254
1336
                {
1255
1337
                        string assemblyFile = Runtime.SystemAssemblyService.DefaultAssemblyContext.GetAssemblyLocation (assemblyFullName, null);
1256
 
                        
1257
1338
                        if (assemblyFile == null || !System.IO.File.Exists (assemblyFile)) {
1258
1339
                                foreach (var wrapper in definitions) {
1259
1340
                                        assemblyFile = wrapper.LookupAssembly (assemblyFullName);
1275
1356
                        result = new AssemblyLoader (this, fileName);
1276
1357
                        
1277
1358
                        definitions.Add (result);
1278
 
                        ITreeBuilder builder;
1279
 
                        if (definitions.Count + projects.Count == 1) {
1280
 
                                builder = TreeView.LoadTree (result);
1281
 
                        } else {
1282
 
                                builder = TreeView.AddChild (result);
 
1359
                        result.LoadingTask.ContinueWith (delegate {
 
1360
                                Application.Invoke (delegate {
 
1361
                                        if (definitions == null)
 
1362
                                                return;
 
1363
                                        ITreeBuilder builder;
 
1364
                                        if (definitions.Count + projects.Count == 1) {
 
1365
                                                builder = TreeView.LoadTree (result);
 
1366
                                        } else {
 
1367
                                                builder = TreeView.AddChild (result);
 
1368
                                        }
 
1369
                                        builder.Selected = builder.Expanded = selectReference;
 
1370
                                });
1283
1371
                        }
1284
 
                        builder.Selected = builder.Expanded = selectReference;
 
1372
                        );
1285
1373
                        return result;
1286
1374
                }
1287
1375
                
1329
1417
                                                inspectEditor.GrabFocus ();
1330
1418
                                };
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;
1334
1422
                        }
1335
1423
                        
1366
1454
                                        if (inspectEditor.IsRealized)
1367
1455
                                                inspectEditor.GrabFocus ();
1368
1456
                                };
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);
1370
1458
                        }
1371
1459
                        
1372
1460
                        gotoLineNumberWidget.Focus ();
1394
1482
                
1395
1483
                void UpdateNavigationActions ()
1396
1484
                {
1397
 
                        buttonBack.Sensitive = navigationBackwardHistory.Count != 0;
1398
 
                        buttonForeward.Sensitive = navigationForwardHistory.Count != 0;
1399
 
                        
 
1485
                        if (buttonBack != null) {
 
1486
                                buttonBack.Sensitive = navigationBackwardHistory.Count != 0;
 
1487
                                buttonForeward.Sensitive = navigationForwardHistory.Count != 0;
 
1488
                        }
1400
1489
                }
1401
1490
                
1402
1491
                protected virtual void OnNavigateBackwardActionActivated (object sender, System.EventArgs e)