2
0
mirror of https://github.com/rivo/tview.git synced 2024-11-19 03:25:34 +00:00

Merge pull request #29 from maja42/TableSelectionHandling

Thanks.
This commit is contained in:
rivo 2018-01-14 13:40:37 +01:00 committed by GitHub
commit db90355feb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -130,6 +130,11 @@ type Table struct {
// Likewise for entire columns. // Likewise for entire columns.
selected func(row, column int) selected func(row, column int)
// An optional function which gets called when the user changes the selection.
// If entire rows selected, the column value is undefined.
// Likewise for entire columns.
selectionChanged func(row, column int)
// An optional function which gets called when the user presses Escape, Tab, // An optional function which gets called when the user presses Escape, Tab,
// or Backtab. Also when the user presses Enter if nothing is selectable. // or Backtab. Also when the user presses Enter if nothing is selectable.
done func(key tcell.Key) done func(key tcell.Key)
@ -203,6 +208,13 @@ func (t *Table) GetSelectable() (rows, columns bool) {
return t.rowsSelectable, t.columnsSelectable return t.rowsSelectable, t.columnsSelectable
} }
// GetSelection returns the position of the current selection.
// If entire rows are selected, the column index is undefined.
// Likewise for entire columns.
func (t *Table) GetSelection() (row, column int) {
return t.selectedRow, t.selectedColumn
}
// Select sets the selected cell. Depending on the selection settings // Select sets the selected cell. Depending on the selection settings
// specified via SetSelectable(), this may be an entire row or column, or even // specified via SetSelectable(), this may be an entire row or column, or even
// ignored completely. // ignored completely.
@ -230,6 +242,15 @@ func (t *Table) SetSelectedFunc(handler func(row, column int)) *Table {
return t return t
} }
// SetSelectionChangedFunc sets a handler which is called whenever the user changes
// selected cell/row/column. The handler receives the position of the selection.
// If entire rows are selected, the column index is undefined.
// Likewise for entire columns.
func (t *Table) SetSelectionChangedFunc(handler func(row, column int)) *Table {
t.selectionChanged = handler
return t
}
// SetDoneFunc sets a handler which is called whenever the user presses the // SetDoneFunc sets a handler which is called whenever the user presses the
// Escape, Tab, or Backtab key. If nothing is selected, it is also called when // Escape, Tab, or Backtab key. If nothing is selected, it is also called when
// user presses the Enter key (because pressing Enter on a selection triggers // user presses the Enter key (because pressing Enter on a selection triggers
@ -637,6 +658,9 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
return return
} }
var previouslySelectedRow = t.selectedRow
var previouslySelectedColumn = t.selectedColumn
// Movement functions. // Movement functions.
var ( var (
getCell = func(row, column int) *TableCell { getCell = func(row, column int) *TableCell {
@ -819,5 +843,10 @@ func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primi
t.selected(t.selectedRow, t.selectedColumn) t.selected(t.selectedRow, t.selectedColumn)
} }
} }
if t.selectionChanged != nil &&
(previouslySelectedRow != t.selectedRow || previouslySelectedColumn != t.selectedColumn) {
t.selectionChanged(t.selectedRow, t.selectedColumn)
}
} }
} }