forked from tslocum/cview
Do not wrap around TableCell selection
This commit is contained in:
parent
ed5e6d94dd
commit
86d39b1867
5
FORK.md
5
FORK.md
|
@ -56,6 +56,11 @@ to disable this behavior.
|
|||
Call [List.SetWrapAround](https://docs.rocketnine.space/gitlab.com/tslocum/cview/#List.SetWrapAround)
|
||||
to wrap around when navigating.
|
||||
|
||||
## Tables do not wrap around when selecting a cell
|
||||
|
||||
Attempting to move outside of the range of the table results in the selection
|
||||
remaining unchanged.
|
||||
|
||||
## Setting a primitive's background color to `tcell.ColorDefault` does not result in transparency
|
||||
|
||||
Call [Box.SetBackgroundTransparent](https://docs.rocketnine.space/gitlab.com/tslocum/cview/#Box.SetBackgroundTransparent)
|
||||
|
|
75
table.go
75
table.go
|
@ -1272,56 +1272,18 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
|
|||
// Movement functions.
|
||||
previouslySelectedRow, previouslySelectedColumn := t.selectedRow, t.selectedColumn
|
||||
var (
|
||||
getCell = func(row, column int) *TableCell {
|
||||
if row < 0 || column < 0 || row >= len(t.cells) || column >= len(t.cells[row]) {
|
||||
return nil
|
||||
validSelection = func(row, column int) bool {
|
||||
if row < t.fixedRows || row >= len(t.cells) || column < t.fixedColumns || column > t.lastColumn {
|
||||
return false
|
||||
}
|
||||
return t.cells[row][column]
|
||||
}
|
||||
|
||||
previous = func() {
|
||||
for t.selectedRow >= 0 {
|
||||
cell := getCell(t.selectedRow, t.selectedColumn)
|
||||
if cell == nil || !cell.NotSelectable {
|
||||
return
|
||||
}
|
||||
t.selectedColumn--
|
||||
if t.selectedColumn < 0 {
|
||||
t.selectedColumn = t.lastColumn
|
||||
t.selectedRow--
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
next = func() {
|
||||
if t.selectedColumn > t.lastColumn {
|
||||
t.selectedColumn = 0
|
||||
t.selectedRow++
|
||||
if t.selectedRow >= len(t.cells) {
|
||||
t.selectedRow = len(t.cells) - 1
|
||||
}
|
||||
}
|
||||
for t.selectedRow < len(t.cells) {
|
||||
cell := getCell(t.selectedRow, t.selectedColumn)
|
||||
if cell == nil || !cell.NotSelectable {
|
||||
return
|
||||
}
|
||||
t.selectedColumn++
|
||||
if t.selectedColumn > t.lastColumn {
|
||||
t.selectedColumn = 0
|
||||
t.selectedRow++
|
||||
}
|
||||
}
|
||||
t.selectedColumn = t.lastColumn
|
||||
t.selectedRow = len(t.cells) - 1
|
||||
previous()
|
||||
cell := t.cells[row][column]
|
||||
return cell == nil || !cell.NotSelectable
|
||||
}
|
||||
|
||||
home = func() {
|
||||
if t.rowsSelectable {
|
||||
t.selectedRow = 0
|
||||
t.selectedColumn = 0
|
||||
next()
|
||||
} else {
|
||||
t.trackEnd = false
|
||||
t.rowOffset = 0
|
||||
|
@ -1333,7 +1295,6 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
|
|||
if t.rowsSelectable {
|
||||
t.selectedRow = len(t.cells) - 1
|
||||
t.selectedColumn = t.lastColumn
|
||||
previous()
|
||||
} else {
|
||||
t.trackEnd = true
|
||||
t.columnOffset = 0
|
||||
|
@ -1342,11 +1303,9 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
|
|||
|
||||
down = func() {
|
||||
if t.rowsSelectable {
|
||||
t.selectedRow++
|
||||
if t.selectedRow >= len(t.cells) {
|
||||
t.selectedRow = len(t.cells) - 1
|
||||
if validSelection(t.selectedRow+1, t.selectedColumn) {
|
||||
t.selectedRow++
|
||||
}
|
||||
next()
|
||||
} else {
|
||||
t.rowOffset++
|
||||
}
|
||||
|
@ -1354,11 +1313,9 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
|
|||
|
||||
up = func() {
|
||||
if t.rowsSelectable {
|
||||
t.selectedRow--
|
||||
if t.selectedRow < 0 {
|
||||
t.selectedRow = 0
|
||||
if validSelection(t.selectedRow-1, t.selectedColumn) {
|
||||
t.selectedRow--
|
||||
}
|
||||
previous()
|
||||
} else {
|
||||
t.trackEnd = false
|
||||
t.rowOffset--
|
||||
|
@ -1367,11 +1324,9 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
|
|||
|
||||
left = func() {
|
||||
if t.columnsSelectable {
|
||||
t.selectedColumn--
|
||||
if t.selectedColumn < 0 {
|
||||
t.selectedColumn = 0
|
||||
if validSelection(t.selectedRow, t.selectedColumn-1) {
|
||||
t.selectedColumn--
|
||||
}
|
||||
previous()
|
||||
} else {
|
||||
t.columnOffset--
|
||||
}
|
||||
|
@ -1379,11 +1334,9 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
|
|||
|
||||
right = func() {
|
||||
if t.columnsSelectable {
|
||||
t.selectedColumn++
|
||||
if t.selectedColumn > t.lastColumn {
|
||||
t.selectedColumn = t.lastColumn
|
||||
if validSelection(t.selectedRow, t.selectedColumn+1) {
|
||||
t.selectedColumn++
|
||||
}
|
||||
next()
|
||||
} else {
|
||||
t.columnOffset++
|
||||
}
|
||||
|
@ -1400,7 +1353,6 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
|
|||
if t.selectedRow >= len(t.cells) {
|
||||
t.selectedRow = len(t.cells) - 1
|
||||
}
|
||||
next()
|
||||
} else {
|
||||
t.rowOffset += offsetAmount
|
||||
}
|
||||
|
@ -1417,7 +1369,6 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
|
|||
if t.selectedRow < 0 {
|
||||
t.selectedRow = 0
|
||||
}
|
||||
previous()
|
||||
} else {
|
||||
t.trackEnd = false
|
||||
t.rowOffset -= offsetAmount
|
||||
|
|
Loading…
Reference in New Issue