diff options
author | Matt Ward <matt.ward@xamarin.com> | 2017-07-26 23:45:59 +0300 |
---|---|---|
committer | Matt Ward <ward.matt@gmail.com> | 2017-07-27 15:43:55 +0300 |
commit | 161821d21f15680348d20a959b68f426aa0f3d9d (patch) | |
tree | a0d06841ed0ccebf84b73384785b583b5ba6765e /main/src/core/MonoDevelop.Ide | |
parent | f9bc1c19f80f12b0ff5a81b02de2ab811e8e5e9f (diff) |
[Ide] Support selecting multiple rows in Errors pad
Fixed bug #11946 - Need a way to export build errors and warnings
https://bugzilla.xamarin.com/show_bug.cgi?id=11946
Allow multiple rows to be selected in the Errors pad. The Copy menu
will be enabled if multiple rows are selected. The Go to and Show
Error Reference menus will be disabled if multiple rows are selected.
The Copy menu will copy all selected rows to the clipboard.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs | 57 |
1 files changed, 44 insertions, 13 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs index 0e5eead727..2cb207fbad 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs @@ -238,6 +238,7 @@ namespace MonoDevelop.Ide.Gui.Pads sort.SetSortFunc (VisibleColumns.Category, CategoryIterSort); view = new PadTreeView (sort); + view.Selection.Mode = SelectionMode.Multiple; view.ShowExpanders = true; view.RulesHint = true; view.DoPopupMenu = (evnt) => IdeApp.CommandService.ShowContextMenu (view, evnt, CreateMenu ()); @@ -499,6 +500,13 @@ namespace MonoDevelop.Ide.Gui.Pads columnDescription.Active || columnFile.Active || columnPath.Active); + + // Disable Help and Go To if multiple rows selected. + if (help.Sensitive && view.Selection.CountSelectedRows () > 1) { + help.Sensitive = false; + jump.Sensitive = false; + } + string dummyString; help.Sensitive &= GetSelectedErrorReference (out dummyString); }; @@ -508,14 +516,26 @@ namespace MonoDevelop.Ide.Gui.Pads TaskListEntry SelectedTask { get { - TreeModel model; TreeIter iter; - if (view.Selection.GetSelected (out model, out iter)) - return model.GetValue (iter, DataColumns.Task) as TaskListEntry; + var rows = view.Selection.GetSelectedRows (); + if (rows.Any () && view.Model.GetIter (out iter, rows[0])) + return view.Model.GetValue (iter, DataColumns.Task) as TaskListEntry; return null; // no one selected } } + IEnumerable<TaskListEntry> GetSelectedTasks () + { + TreeIter iter; + foreach (var row in view.Selection.GetSelectedRows ()) { + if (view.Model.GetIter (out iter, row)) { + var task = view.Model.GetValue (iter, DataColumns.Task) as TaskListEntry; + if (task != null) + yield return task; + } + } + } + [CommandHandler (EditCommands.Copy)] protected void OnCopy () { @@ -524,9 +544,17 @@ namespace MonoDevelop.Ide.Gui.Pads void OnTaskCopied (object o, EventArgs args) { - TaskListEntry task = SelectedTask; - if (task != null) { - StringBuilder text = new StringBuilder (); + var selectedTasks = GetSelectedTasks ().ToArray (); + if (!selectedTasks.Any ()) + return; + + var text = new StringBuilder (); + + for (int i = 0; i < selectedTasks.Length; i++) { + if (i > 0) + text.Append (Environment.NewLine); + + TaskListEntry task = selectedTasks [i]; if (!string.IsNullOrEmpty (task.FileName)) { text.Append (task.FileName); if (task.Line >= 1) { @@ -549,12 +577,12 @@ namespace MonoDevelop.Ide.Gui.Pads if (!string.IsNullOrEmpty (task.Category)) { text.Append (" ").Append (task.Category); } - - clipboard = Clipboard.Get (Gdk.Atom.Intern ("CLIPBOARD", false)); - clipboard.Text = text.ToString (); - clipboard = Clipboard.Get (Gdk.Atom.Intern ("PRIMARY", false)); - clipboard.Text = text.ToString (); } + + clipboard = Clipboard.Get (Gdk.Atom.Intern ("CLIPBOARD", false)); + clipboard.Text = text.ToString (); + clipboard = Clipboard.Get (Gdk.Atom.Intern ("PRIMARY", false)); + clipboard.Text = text.ToString (); } void OnShowReference (object o, EventArgs args) @@ -586,9 +614,12 @@ namespace MonoDevelop.Ide.Gui.Pads void OnTaskJumpto (object o, EventArgs args) { + var rows = view.Selection.GetSelectedRows (); + if (!rows.Any ()) + return; + TreeIter iter, sortedIter; - TreeModel model; - if (view.Selection.GetSelected (out model, out sortedIter)) { + if (view.Model.GetIter (out sortedIter, rows [0])) { iter = filter.ConvertIterToChildIter (sort.ConvertIterToChildIter (sortedIter)); store.SetValue (iter, DataColumns.Read, true); TaskListEntry task = store.GetValue (iter, DataColumns.Task) as TaskListEntry; |