From 09f052e6ca98338816034b46842dff647edd4933 Mon Sep 17 00:00:00 2001 From: Oliver <480930+rivo@users.noreply.github.com> Date: Thu, 17 Nov 2022 07:52:07 +0100 Subject: [PATCH] Fixed finding of previous/next selectable cell in Table. Fixes #768 --- table.go | 54 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/table.go b/table.go index 391c757..5797498 100644 --- a/table.go +++ b/table.go @@ -1337,8 +1337,8 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi } var ( previous = func() { - startRow := t.selectedRow - startColumn := t.selectedColumn + startRow, previousRow := t.selectedRow, t.selectedRow + startColumn, previousColumn := t.selectedColumn, t.selectedColumn for { cell := t.content.GetCell(t.selectedRow, t.selectedColumn) if cell != nil && !cell.NotSelectable { @@ -1346,10 +1346,18 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi } t.selectedColumn-- if t.selectedColumn < 0 { - t.selectedColumn = lastColumn - t.selectedRow-- - if t.selectedRow < 0 { - t.selectedRow = rowCount - 1 + if t.wrapHorizontally { + t.selectedColumn = lastColumn + t.selectedRow-- + if t.selectedRow < 0 { + if t.wrapVertically { + t.selectedRow = rowCount - 1 + } else { + t.selectedRow = 0 + } + } + } else { + t.selectedColumn = 0 } } if t.selectedColumn == startColumn && t.selectedRow == startRow { @@ -1357,12 +1365,16 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi t.selectedRow = 0 return } + if t.selectedColumn == previousColumn && t.selectedRow == previousRow { + return + } + previousRow, previousColumn = t.selectedRow, t.selectedColumn } } next = func() { - startRow := t.selectedRow - startColumn := t.selectedColumn + startRow, previousRow := t.selectedRow, t.selectedRow + startColumn, previousColumn := t.selectedColumn, t.selectedColumn for { if t.selectedColumn <= lastColumn { cell := t.content.GetCell(t.selectedRow, t.selectedColumn) @@ -1370,21 +1382,33 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi return } } - if t.selectedColumn >= lastColumn { - t.selectedColumn = 0 - if t.selectedRow >= rowCount-1 { - t.selectedRow = 0 + if t.selectedColumn < lastColumn { + t.selectedColumn++ + } else { + if t.wrapHorizontally { + t.selectedColumn = 0 + if t.selectedRow >= rowCount-1 { + if t.wrapVertically { + t.selectedRow = 0 + } else { + t.selectedRow = rowCount - 1 + } + } else { + t.selectedRow++ + } } else { - t.selectedRow++ + t.selectedColumn = lastColumn } - } else { - t.selectedColumn++ } if t.selectedColumn == startColumn && t.selectedRow == startRow { t.selectedColumn = 0 t.selectedRow = 0 return } + if t.selectedColumn == previousColumn && t.selectedRow == previousRow { + return + } + previousRow, previousColumn = t.selectedRow, t.selectedColumn } }