~ubuntu-branches/ubuntu/vivid/monodevelop/vivid-proposed

« back to all changes in this revision

Viewing changes to src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchResultWidget.cs

  • Committer: Package Import Robot
  • Author(s): Jo Shields
  • Date: 2014-10-09 14:09:23 UTC
  • mfrom: (10.3.5)
  • Revision ID: package-import@ubuntu.com-20141009140923-s0d22u5f9kg8jvds
Tags: 5.5.0.227-1
* [b2c8331] Imported Upstream version 5.5.0.227 (Closes: #754316)
* [d210995] Delete obsolete patches
* [1b59ae1] Clear patch fizz, via quilt refresh
* [3dd147d] Fix error in configure.in which applies for tarball builds but 
  not git builds when running autoreconf
* [21c2a57] Remove Metacity references for good
* [3331661] Ensure NUnit 2.6.3 is installed
* [fd85c88] Build-depend on NuGet
* [a1ae116] Add WebKit to build dependencies, for Xwt moduleref resolution
* [9b4cf12] Since the GDB addin is integrated now, declare it in 
  debian/control
* [6231562] Correct NUnit links
* [3d2b693] Fix NuGet addin, by copying libs locally
* [74bf9a8] Don't symlink unused Mocks NUnit assembly
* [ade52b2] Ensure IKVM.Reflection is built with default (4.5) profile

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
using System.Text;
39
39
using MonoDevelop.Components.Commands;
40
40
using MonoDevelop.Ide.Commands;
41
 
using System.IO;
42
41
using MonoDevelop.Ide.Gui.Content;
43
42
using MonoDevelop.Ide.Navigation;
44
43
using MonoDevelop.Ide.Gui.Components;
45
44
using MonoDevelop.Components;
46
45
 
47
 
 
48
46
namespace MonoDevelop.Ide.FindInFiles
49
47
{
50
48
        class SearchResultWidget : HBox, ILocationList
120
118
                        resultsScroll.Add (treeviewSearchResults);
121
119
                        
122
120
                        this.ShowAll ();
123
 
                        
 
121
 
 
122
                        var projectColumn = new TreeViewColumn {
 
123
                                Resizable = true,
 
124
                                SortColumnId = 0,
 
125
                                Title = GettextCatalog.GetString ("Project"),
 
126
                                FixedWidth = 100
 
127
                        };
 
128
 
 
129
                        var projectPixbufRenderer = new CellRendererImage ();
 
130
                        projectColumn.PackStart (projectPixbufRenderer, false);
 
131
                        projectColumn.SetCellDataFunc (projectPixbufRenderer, ResultProjectIconDataFunc);
 
132
 
 
133
                        projectColumn.PackStart (treeviewSearchResults.TextRenderer, true);
 
134
                        projectColumn.SetCellDataFunc (treeviewSearchResults.TextRenderer, ResultProjectDataFunc);
 
135
                        treeviewSearchResults.AppendColumn (projectColumn);
 
136
 
124
137
                        var fileNameColumn = new TreeViewColumn {
125
138
                                Resizable = true,
126
 
                                SortColumnId = 0,
127
 
                                Title = GettextCatalog.GetString("File")
 
139
                                SortColumnId = 1,
 
140
                                Title = GettextCatalog.GetString ("File"),
 
141
                                FixedWidth = 200
128
142
                        };
129
143
 
130
 
                        fileNameColumn.FixedWidth = 200;
131
 
 
132
 
                        var fileNamePixbufRenderer = new CellRendererPixbuf ();
 
144
                        var fileNamePixbufRenderer = new CellRendererImage ();
133
145
                        fileNameColumn.PackStart (fileNamePixbufRenderer, false);
134
146
                        fileNameColumn.SetCellDataFunc (fileNamePixbufRenderer, FileIconDataFunc);
135
147
                        
136
148
                        fileNameColumn.PackStart (treeviewSearchResults.TextRenderer, true);
137
149
                        fileNameColumn.SetCellDataFunc (treeviewSearchResults.TextRenderer, FileNameDataFunc);
138
150
                        treeviewSearchResults.AppendColumn (fileNameColumn);
139
 
                        
140
 
//                      TreeViewColumn lineColumn = treeviewSearchResults.AppendColumn (GettextCatalog.GetString ("Line"), new CellRendererText (), ResultLineDataFunc);
141
 
//                      lineColumn.SortColumnId = 1;
142
 
//                      lineColumn.FixedWidth = 50;
143
 
//                      
144
 
                        
 
151
 
 
152
 
145
153
                        TreeViewColumn textColumn = treeviewSearchResults.AppendColumn (GettextCatalog.GetString ("Text"),
146
154
                                treeviewSearchResults.TextRenderer, ResultTextDataFunc);
147
155
                        textColumn.SortColumnId = 2;
155
163
                        pathColumn.Resizable = true;
156
164
                        pathColumn.FixedWidth = 500;
157
165
 
158
 
                        
159
 
                        store.SetSortFunc (0, CompareFileNames);
160
 
//                      store.SetSortFunc (1, CompareLineNumbers);
 
166
 
 
167
                        store.SetSortFunc (0, CompareProjectFileNames);
 
168
                        store.SetSortFunc (1, CompareFileNames);
161
169
                        store.SetSortFunc (3, CompareFilePaths);
162
170
 
163
171
                        treeviewSearchResults.RowActivated += TreeviewSearchResultsRowActivated;
164
172
                        
165
 
                        buttonStop = new ToolButton (Stock.Stop) { Sensitive = false };
 
173
                        buttonStop = new ToolButton (Ide.Gui.Stock.Stop) { Sensitive = false };
166
174
 
167
175
                        buttonStop.Clicked += ButtonStopClicked;
168
 
                        
 
176
 
169
177
                        buttonStop.TooltipText = GettextCatalog.GetString ("Stop");
170
178
                        toolbar.Insert (buttonStop, -1);
171
179
 
172
 
                        var buttonClear = new ToolButton (Gtk.Stock.Clear);
 
180
                        var buttonClear = new ToolButton (Ide.Gui.Stock.Clear);
173
181
                        buttonClear.Clicked += ButtonClearClicked;
174
182
                        buttonClear.TooltipText = GettextCatalog.GetString ("Clear results");
175
183
                        toolbar.Insert (buttonClear, -1);
195
203
                        base.OnRealized ();
196
204
                        highlightStyle = SyntaxModeService.GetColorStyle (IdeApp.Preferences.ColorScheme);
197
205
                }
198
 
                
199
 
                protected override void OnStyleSet (Gtk.Style previousStyle)
200
 
                {
201
 
                        base.OnStyleSet (previousStyle);
202
 
                }
203
206
 
204
207
                void ButtonPinClicked (object sender, EventArgs e)
205
208
                {
245
248
                public void EndProgress ()
246
249
                {
247
250
                        buttonStop.Sensitive = false;
248
 
                        newStore.SetSortFunc (0, CompareFileNames);
249
 
                        newStore.SetSortFunc (1, CompareLineNumbers);
 
251
                        newStore.SetSortFunc (0, CompareProjectFileNames);
 
252
                        newStore.SetSortFunc (1, CompareFileNames);
250
253
                        newStore.SetSortFunc (3, CompareFilePaths);
251
254
 
252
255
                        treeviewSearchResults.Model = newStore;
307
310
                        int offset = 0;
308
311
 
309
312
 
310
 
 
311
313
                        // This is a workaround for Bug 559804 - Strings in search result pad are near-invisible
312
314
                        // On mac it's not possible to get the white background color with the Base or Background
313
315
                        // methods. If this bug is fixed or a better work around is found - remove this hack.
354
356
                {
355
357
                        if (TreeIter.Zero.Equals (iter))
356
358
                                return;
357
 
                        var fileNamePixbufRenderer = (CellRendererPixbuf) cell;
 
359
                        var fileNamePixbufRenderer = (CellRendererImage) cell;
358
360
                        var searchResult = (SearchResult)store.GetValue (iter, SearchResultColumn);
359
361
                        if (searchResult == null)
360
362
                                return;
361
 
                        if (searchResult.Pixbuf == null)
362
 
                                searchResult.Pixbuf = DesktopService.GetPixbufForFile (searchResult.FileName, IconSize.Menu);
363
 
                        fileNamePixbufRenderer.Pixbuf = searchResult.Pixbuf;
 
363
                        if (searchResult.FileIcon == null)
 
364
                                searchResult.FileIcon = DesktopService.GetIconForFile (searchResult.FileName, IconSize.Menu);
 
365
                        fileNamePixbufRenderer.Image = searchResult.FileIcon;
364
366
                }
365
367
 
366
368
 
408
410
                                return -1;
409
411
                        return System.IO.Path.GetFileName (searchResult1.FileName).CompareTo (System.IO.Path.GetFileName (searchResult2.FileName));
410
412
                }
411
 
                
 
413
 
 
414
                static int CompareProjectFileNames (TreeModel model, TreeIter first, TreeIter second)
 
415
                {
 
416
                        var searchResult1 = (SearchResult)model.GetValue (first, SearchResultColumn);
 
417
                        var searchResult2 = (SearchResult)model.GetValue (second, SearchResultColumn);
 
418
                        if (searchResult1 == null || searchResult2 == null ||
 
419
                                searchResult1.Projects == null || searchResult2.Projects == null ||
 
420
                                searchResult1.Projects.Count == 0 || searchResult2.Projects.Count == 0)
 
421
                                return -1;
 
422
                        return System.IO.Path.GetFileName (searchResult1.Projects[0].FileName).CompareTo (System.IO.Path.GetFileName (searchResult2.Projects[0].FileName));
 
423
                }
 
424
 
412
425
                static int CompareFilePaths (TreeModel model, TreeIter first, TreeIter second)
413
426
                {
414
427
                        var searchResult1 = (SearchResult)model.GetValue (first, SearchResultColumn);
431
444
                        bool didRead = (bool)store.GetValue (iter, DidReadColumn);
432
445
                        pathRenderer.Markup = MarkupText (System.IO.Path.GetDirectoryName (searchResult.FileName), didRead);
433
446
                }
434
 
                
435
 
//              void ResultLineDataFunc (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter)
436
 
//              {
437
 
//                      if (TreeIter.Zero.Equals (iter))
438
 
//                              return;
439
 
//                      var lineRenderer = (CellRendererText)cell;
440
 
//                      var searchResult = (SearchResult)store.GetValue (iter, SearchResultColumn);
441
 
//                      if (searchResult == null)
442
 
//                              return;
443
 
//                      
444
 
//                      Document doc = GetDocument (searchResult);
445
 
//                      int lineNr = doc.OffsetToLineNumber (searchResult.Offset) + 1;
446
 
//                      bool didRead = (bool)store.GetValue (iter, DidReadColumn);
447
 
//                      lineRenderer.Markup = MarkupText (lineNr.ToString (), didRead);
448
 
//              }
449
 
//              
 
447
 
 
448
                void ResultProjectIconDataFunc (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter)
 
449
                {
 
450
                        if (TreeIter.Zero.Equals (iter))
 
451
                                return;
 
452
                        var fileNamePixbufRenderer = (CellRendererImage) cell;
 
453
                        var searchResult = (SearchResult)store.GetValue (iter, SearchResultColumn);
 
454
                        if (searchResult == null)
 
455
                                return;
 
456
                        if (searchResult.ProjectIcon == null && searchResult.Projects.Count > 0)
 
457
                                searchResult.ProjectIcon = ImageService.GetIcon (searchResult.Projects [0].StockIcon).WithSize (Gtk.IconSize.Menu);
 
458
                        fileNamePixbufRenderer.Image = searchResult.ProjectIcon;
 
459
                }
 
460
 
 
461
                void ResultProjectDataFunc (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter)
 
462
                {
 
463
                        if (TreeIter.Zero.Equals (iter))
 
464
                                return;
 
465
                        var pathRenderer = (CellRendererText)cell;
 
466
                        var searchResult = (SearchResult)store.GetValue (iter, SearchResultColumn);
 
467
                        if (searchResult == null)
 
468
                                return;
 
469
                        bool didRead = (bool)store.GetValue (iter, DidReadColumn);
 
470
                        if (searchResult.Projects.Count > 0)
 
471
                                pathRenderer.Markup = MarkupText (String.Join (", ", searchResult.Projects.Select (p => p.Name)), didRead);
 
472
                        else
 
473
                                pathRenderer.Markup = "";
 
474
                }
 
475
 
450
476
                void ResultTextDataFunc (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter)
451
477
                {
452
478
                        if (TreeIter.Zero.Equals (iter))
487
513
                                GLib.Markup.EscapeText (lineText);
488
514
                                searchResult.Markup = AdjustColors (markup.Replace ("\t", new string (' ', TextEditorOptions.DefaultOptions.TabSize)));
489
515
 
490
 
                                uint start;
491
 
                                uint end;
492
 
                                try {
493
 
                                        start = (uint)TextViewMargin.TranslateIndexToUTF8 (lineText, col);
494
 
                                        end = (uint)TextViewMargin.TranslateIndexToUTF8 (lineText, col + searchResult.Length);
495
 
                                } catch (Exception e) {
496
 
                                        LoggingService.LogError ("Exception while translating index to utf8 (column was:" +col + " search result length:" + searchResult.Length + " line text:" + lineText + ")", e);
497
 
                                        return;
 
516
                                if (col >= 0) {
 
517
                                        uint start;
 
518
                                        uint end;
 
519
                                        try {
 
520
                                                start = (uint)TextViewMargin.TranslateIndexToUTF8 (lineText, col);
 
521
                                                end = (uint)TextViewMargin.TranslateIndexToUTF8 (lineText, Math.Min (lineText.Length, col + searchResult.Length));
 
522
                                        } catch (Exception e) {
 
523
                                                LoggingService.LogError ("Exception while translating index to utf8 (column was:" + col + " search result length:" + searchResult.Length + " line text:" + lineText + ")", e);
 
524
                                                return;
 
525
                                        }
 
526
                                        searchResult.StartIndex = start;
 
527
                                        searchResult.EndIndex = end;
498
528
                                }
499
 
                                searchResult.StartIndex = start;
500
 
                                searchResult.EndIndex = end;
501
529
                        }
502
530
 
503
531
 
505
533
                                textRenderer.Markup = searchResult.Markup;
506
534
 
507
535
                                if (!isSelected) {
508
 
                                        var searchColor = highlightStyle.SearchResult.Color;
 
536
                                        var searchColor = searchResult.GetBackgroundMarkerColor (highlightStyle).Color;
509
537
                                        double b1 = Mono.TextEditor.HslColor.Brightness (searchColor);
510
538
                                        double b2 = Mono.TextEditor.HslColor.Brightness (AdjustColor (Style.Base (StateType.Normal), (Mono.TextEditor.HslColor)highlightStyle.PlainText.Foreground));
511
539
                                        double delta = Math.Abs (b1 - b2);
518
546
                                                }
519
547
                                                searchColor = color1;
520
548
                                        }
521
 
                                        var attr = new Pango.AttrBackground ((ushort)(searchColor.R * ushort.MaxValue), (ushort)(searchColor.G * ushort.MaxValue), (ushort)(searchColor.B * ushort.MaxValue));
522
 
                                        attr.StartIndex = searchResult.StartIndex;
523
 
                                        attr.EndIndex = searchResult.EndIndex;
 
549
                                        if (searchResult.StartIndex != searchResult.EndIndex) {
 
550
                                                var attr = new Pango.AttrBackground ((ushort)(searchColor.R * ushort.MaxValue), (ushort)(searchColor.G * ushort.MaxValue), (ushort)(searchColor.B * ushort.MaxValue));
 
551
                                                attr.StartIndex = searchResult.StartIndex;
 
552
                                                attr.EndIndex = searchResult.EndIndex;
524
553
 
525
 
                                        using (var list = textRenderer.Attributes.Copy ()) {
526
 
                                                list.Insert (attr);
527
 
                                                textRenderer.Attributes = list;
 
554
                                                using (var list = textRenderer.Attributes.Copy ()) {
 
555
                                                        list.Insert (attr);
 
556
                                                        textRenderer.Attributes = list;
 
557
                                                }
528
558
                                        }
529
559
                                }
530
560
                        } catch (Exception e) {
635
665
                                return DocumentLocation.Empty;
636
666
                        int lineNr = doc.OffsetToLineNumber (searchResult.Offset);
637
667
                        DocumentLine line = doc.GetLine (lineNr);
 
668
                        if (line == null)
 
669
                                return DocumentLocation.Empty;
638
670
                        return new DocumentLocation (lineNr, searchResult.Offset - line.Offset + 1);
639
671
                }
640
672
                
754
786
                                        return null;
755
787
                                
756
788
                                var buf = doc.GetContent<IEditableTextBuffer> ();
757
 
                                if (buf != null)
758
 
                                        buf.SetCaretTo (Math.Max (Line, 1), Math.Max (Column, 1));
 
789
                                if (buf != null) {
 
790
                                        doc.DisableAutoScroll ();
 
791
                                        buf.RunWhenLoaded (() => {
 
792
                                                buf.SetCaretTo (Math.Max (Line, 1), Math.Max (Column, 1));
 
793
                                        });
 
794
                                }
759
795
                                
760
796
                                return doc;
761
797
                        }