diff --git a/OneMore/Commands/Settings/FavoritesSheet.cs b/OneMore/Commands/Settings/FavoritesSheet.cs
index b0ec5052da..cdbce91a45 100644
--- a/OneMore/Commands/Settings/FavoritesSheet.cs
+++ b/OneMore/Commands/Settings/FavoritesSheet.cs
@@ -156,48 +156,24 @@ private void DeleteItems(object sender, EventArgs e)
first--;
if (first < 0 && gridView.Rows.Count > 0)
{
- gridView.Rows[0].Cells[0].Selected = true;
+ gridView.Rows[0].Selected = true;
}
else if (first < gridView.Rows.Count && first >= 0)
{
- gridView.Rows[first].Cells[0].Selected = true;
+ gridView.Rows[first].Selected = true;
}
}
private void MoveItemDown(object sender, EventArgs e)
{
- if (gridView.SelectedCells.Count > 0)
- {
- int colIndex = gridView.SelectedCells[0].ColumnIndex;
- int rowIndex = gridView.SelectedCells[0].RowIndex;
- if (rowIndex < favorites.Count - 1)
- {
- var item = favorites[rowIndex];
- favorites.RemoveAt(rowIndex);
- favorites.Insert(rowIndex + 1, item);
-
- gridView.Rows[rowIndex + 1].Cells[colIndex].Selected = true;
- }
- }
+ gridView.MoveSelectedItemDown(favorites);
}
private void MoveItemUp(object sender, EventArgs e)
{
- if (gridView.SelectedCells.Count > 0)
- {
- int colIndex = gridView.SelectedCells[0].ColumnIndex;
- int rowIndex = gridView.SelectedCells[0].RowIndex;
- if (rowIndex > 0 && rowIndex < favorites.Count)
- {
- var item = favorites[rowIndex];
- favorites.RemoveAt(rowIndex);
- favorites.Insert(rowIndex - 1, item);
-
- gridView.Rows[rowIndex - 1].Cells[colIndex].Selected = true;
- }
- }
+ gridView.MoveSelectedItemUp(favorites);
}
diff --git a/OneMore/Commands/Settings/SearchEngineSheet.cs b/OneMore/Commands/Settings/SearchEngineSheet.cs
index f828341f0e..12761b9fd1 100644
--- a/OneMore/Commands/Settings/SearchEngineSheet.cs
+++ b/OneMore/Commands/Settings/SearchEngineSheet.cs
@@ -223,39 +223,15 @@ private void deleteButton_Click(object sender, EventArgs e)
}
- private void upButton_Click(object sender, EventArgs e)
+ private void downButton_Click(object sender, EventArgs e)
{
- if (gridView.SelectedCells.Count > 0)
- {
- int colIndex = gridView.SelectedCells[0].ColumnIndex;
- int rowIndex = gridView.SelectedCells[0].RowIndex;
- if (rowIndex > 0 && rowIndex < engines.Count)
- {
- var item = engines[rowIndex];
- engines.RemoveAt(rowIndex);
- engines.Insert(rowIndex - 1, item);
-
- gridView.Rows[rowIndex - 1].Cells[colIndex].Selected = true;
- }
- }
+ gridView.MoveSelectedItemDown(engines);
}
- private void downButton_Click(object sender, EventArgs e)
+ private void upButton_Click(object sender, EventArgs e)
{
- if (gridView.SelectedCells.Count > 0)
- {
- int colIndex = gridView.SelectedCells[0].ColumnIndex;
- int rowIndex = gridView.SelectedCells[0].RowIndex;
- if (rowIndex < engines.Count - 1)
- {
- var item = engines[rowIndex];
- engines.RemoveAt(rowIndex);
- engines.Insert(rowIndex + 1, item);
-
- gridView.Rows[rowIndex + 1].Cells[colIndex].Selected = true;
- }
- }
+ gridView.MoveSelectedItemUp(engines);
}
diff --git a/OneMore/UI/MoreDataGridView.cs b/OneMore/UI/MoreDataGridView.cs
index 60033b5387..990dafafc9 100644
--- a/OneMore/UI/MoreDataGridView.cs
+++ b/OneMore/UI/MoreDataGridView.cs
@@ -4,6 +4,9 @@
namespace River.OneMoreAddIn.UI
{
+ using System;
+ using System.ComponentModel;
+ using System.Linq;
using System.Media;
using System.Windows.Forms;
@@ -79,5 +82,83 @@ protected override bool ProcessDialogKey(Keys keyData)
return base.ProcessDialogKey(keyData);
}
+
+
+ ///
+ /// Moves the first selected row down in the grid, also updating is position in the
+ /// given BindingList.
+ ///
+ /// Type of the items in the BindingList
+ /// The BindingList of items to modify
+ public void MoveSelectedItemDown(BindingList items)
+ {
+ if (SelectedCells.Count == 0)
+ {
+ return;
+ }
+
+ int rowIndex = SelectedCells[0].RowIndex;
+ if (rowIndex < items.Count - 1)
+ {
+ var lastDisplayed = Math.Max(0, Rows.Cast()
+ .Last(row => row.Displayed)
+ .Index - 1);
+
+ // clear all selections and must set CurrentCell to null; reset below
+ ClearSelection();
+ CurrentCell = null;
+
+ var item = items[rowIndex];
+ items.RemoveAt(rowIndex);
+ items.Insert(++rowIndex, item);
+
+ if (rowIndex > lastDisplayed)
+ {
+ FirstDisplayedScrollingRowIndex++;
+ }
+
+ Rows[rowIndex].Selected = true;
+ CurrentCell = Rows[rowIndex].Cells[0];
+ }
+ }
+
+
+ ///
+ /// Moves the first selected row up in the grid, also updating is position in the
+ /// given BindingList.
+ ///
+ /// Type of the items in the BindingList
+ /// The BindingList of items to modify
+ public void MoveSelectedItemUp(BindingList items)
+ {
+ if (SelectedCells.Count == 0)
+ {
+ return;
+ }
+
+ int rowIndex = SelectedCells[0].RowIndex;
+ if (rowIndex > 0 && rowIndex < items.Count)
+ {
+ var firstDisplayed = Math.Max(0, Rows.Cast()
+ .First(row => row.Displayed)
+ .Index);
+
+ // clear all selections and must set CurrentCell to null; reset below
+ ClearSelection();
+ CurrentCell = null;
+
+ var item = items[rowIndex];
+ items.RemoveAt(rowIndex);
+ items.Insert(--rowIndex, item);
+
+ if (rowIndex < firstDisplayed)
+ {
+ FirstDisplayedScrollingRowIndex--;
+ }
+
+ Rows[rowIndex].Selected = true;
+ CurrentCell = Rows[rowIndex].Cells[0];
+ }
+ }
}
}