Skip to content

Commit

Permalink
Normalize item movement for MoreDataGridView (stevencohn#1469)
Browse files Browse the repository at this point in the history
  • Loading branch information
stevencohn authored and weissm committed Jul 15, 2024
1 parent 89505ba commit 0f260b6
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 56 deletions.
32 changes: 4 additions & 28 deletions OneMore/Commands/Settings/FavoritesSheet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}


Expand Down
32 changes: 4 additions & 28 deletions OneMore/Commands/Settings/SearchEngineSheet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}


Expand Down
81 changes: 81 additions & 0 deletions OneMore/UI/MoreDataGridView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

namespace River.OneMoreAddIn.UI
{
using System;
using System.ComponentModel;
using System.Linq;
using System.Media;
using System.Windows.Forms;

Expand Down Expand Up @@ -79,5 +82,83 @@ protected override bool ProcessDialogKey(Keys keyData)

return base.ProcessDialogKey(keyData);
}


/// <summary>
/// Moves the first selected row down in the grid, also updating is position in the
/// given BindingList.
/// </summary>
/// <typeparam name="T">Type of the items in the BindingList</typeparam>
/// <param name="items">The BindingList of items to modify</param>
public void MoveSelectedItemDown<T>(BindingList<T> items)
{
if (SelectedCells.Count == 0)
{
return;
}

int rowIndex = SelectedCells[0].RowIndex;
if (rowIndex < items.Count - 1)
{
var lastDisplayed = Math.Max(0, Rows.Cast<DataGridViewRow>()
.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];
}
}


/// <summary>
/// Moves the first selected row up in the grid, also updating is position in the
/// given BindingList.
/// </summary>
/// <typeparam name="T">Type of the items in the BindingList</typeparam>
/// <param name="items">The BindingList of items to modify</param>
public void MoveSelectedItemUp<T>(BindingList<T> items)
{
if (SelectedCells.Count == 0)
{
return;
}

int rowIndex = SelectedCells[0].RowIndex;
if (rowIndex > 0 && rowIndex < items.Count)
{
var firstDisplayed = Math.Max(0, Rows.Cast<DataGridViewRow>()
.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];
}
}
}
}

0 comments on commit 0f260b6

Please sign in to comment.