mirror of https://github.com/rivo/tview.git
Added a "clicked" handler to TableCell. Resolves #470
This commit is contained in:
parent
53d50e499b
commit
9b49eb3fef
30
table.go
30
table.go
|
@ -42,6 +42,11 @@ type TableCell struct {
|
|||
// If set to true, this cell cannot be selected.
|
||||
NotSelectable bool
|
||||
|
||||
// An optional handler for mouse clicks. This also fires if the cell is not
|
||||
// selectable. If true is returned, no additional "selected" event is fired
|
||||
// on selectable cells.
|
||||
Clicked func() bool
|
||||
|
||||
// The position and width of the cell the last time table was drawn.
|
||||
x, y, width int
|
||||
}
|
||||
|
@ -160,6 +165,14 @@ func (c *TableCell) GetLastPosition() (x, y, width int) {
|
|||
return c.x, c.y, c.width
|
||||
}
|
||||
|
||||
// SetClickedFunc sets a handler which fires when this cell is clicked. This is
|
||||
// independent of whether the cell is selectable or not. But for selectable
|
||||
// cells, if the function returns "true", the "selected" event is not fired.
|
||||
func (c *TableCell) SetClickedFunc(clicked func() bool) *TableCell {
|
||||
c.Clicked = clicked
|
||||
return c
|
||||
}
|
||||
|
||||
// Table visualizes two-dimensional data consisting of rows and columns. Each
|
||||
// Table cell is defined via SetCell() by the TableCell type. They can be added
|
||||
// dynamically to the table and changed any time.
|
||||
|
@ -1247,8 +1260,21 @@ func (t *Table) MouseHandler() func(action MouseAction, event *tcell.EventMouse,
|
|||
|
||||
switch action {
|
||||
case MouseLeftClick:
|
||||
if t.rowsSelectable || t.columnsSelectable {
|
||||
t.Select(t.cellAt(x, y))
|
||||
selectEvent := true
|
||||
row, column := t.cellAt(x, y)
|
||||
if row >= 0 && row < len(t.cells) && column >= 0 {
|
||||
cells := t.cells[row]
|
||||
if column < len(cells) {
|
||||
cell := cells[column]
|
||||
if cell != nil && cell.Clicked != nil {
|
||||
if noSelect := cell.Clicked(); noSelect {
|
||||
selectEvent = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if selectEvent && (t.rowsSelectable || t.columnsSelectable) {
|
||||
t.Select(row, column)
|
||||
}
|
||||
setFocus(t)
|
||||
consumed = true
|
||||
|
|
|
@ -273,7 +273,8 @@ func (t *TextView) SetText(text string) *TextView {
|
|||
// to true, any region/color tags are stripped from the text.
|
||||
func (t *TextView) GetText(stripTags bool) string {
|
||||
// Get the buffer.
|
||||
buffer := t.buffer
|
||||
buffer := make([]string, len(t.buffer), len(t.buffer)+1)
|
||||
copy(buffer, t.buffer)
|
||||
if !stripTags {
|
||||
buffer = append(buffer, string(t.recentBytes))
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue