mirror of
https://github.com/VladimirMarkelov/clui.git
synced 2025-04-26 13:49:01 +08:00
#36 - table view control - mouse navigation
This commit is contained in:
parent
ebcb563034
commit
d1cd9ca588
147
tableview.go
147
tableview.go
@ -2,7 +2,6 @@ package clui
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
// xs "github.com/huandu/xstrings"
|
|
||||||
term "github.com/nsf/termbox-go"
|
term "github.com/nsf/termbox-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -477,58 +476,112 @@ func (l *TableView) Clear() {
|
|||||||
l.topCol = 0
|
l.topCol = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *TableView) processMouseClick(ev Event) bool {
|
func (l *TableView) mouseToCol(dx int) int {
|
||||||
// if ev.Key != term.MouseLeft {
|
shift := l.counterWidth()
|
||||||
// return false
|
if l.showVLines {
|
||||||
// }
|
shift++
|
||||||
|
}
|
||||||
|
|
||||||
// dx := ev.X - l.x
|
if dx < shift {
|
||||||
// dy := ev.Y - l.y
|
return l.selectedCol
|
||||||
|
}
|
||||||
|
|
||||||
// if dx == l.width-1 {
|
idx := l.topCol
|
||||||
// if dy < 0 || dy >= l.height || len(l.items) < 2 {
|
selectedCol := l.selectedCol
|
||||||
// return true
|
for {
|
||||||
// }
|
if shift+l.columns[idx].Width > dx {
|
||||||
|
selectedCol = idx
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
// if dy == 0 {
|
if idx == len(l.columns)-1 {
|
||||||
// l.moveUp(1)
|
selectedCol = idx
|
||||||
// return true
|
break
|
||||||
// }
|
}
|
||||||
// if dy == l.height-1 {
|
|
||||||
// l.moveDown(1)
|
|
||||||
// return true
|
|
||||||
// }
|
|
||||||
|
|
||||||
// l.buttonPos = dy
|
shift += l.columns[idx].Width
|
||||||
// l.recalcPositionByScroll()
|
if l.showVLines {
|
||||||
// return true
|
shift++
|
||||||
// }
|
}
|
||||||
|
idx++
|
||||||
|
}
|
||||||
|
|
||||||
// if dx < 0 || dx >= l.width || dy < 0 || dy >= l.height {
|
return selectedCol
|
||||||
// return true
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if dy >= len(l.items) {
|
|
||||||
// return true
|
|
||||||
// }
|
|
||||||
|
|
||||||
// l.SelectItem(l.topLine + dy)
|
|
||||||
// if l.onSelectItem != nil {
|
|
||||||
// ev := Event{Y: l.topLine + dy, Msg: l.SelectedItemText()}
|
|
||||||
// go l.onSelectItem(ev)
|
|
||||||
// }
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *TableView) recalcPositionByScroll() {
|
func (l *TableView) horizontalScrollClick(dx int) {
|
||||||
// newPos := ItemByThumbPosition(l.buttonPos, len(l.items), l.height)
|
if dx == 0 {
|
||||||
// if newPos < 1 {
|
l.moveLeft(1)
|
||||||
// return
|
return
|
||||||
// }
|
} else if dx == l.width-2 {
|
||||||
|
l.moveRight(1)
|
||||||
|
} else if dx > 0 && dx < l.width-2 {
|
||||||
|
pos := ThumbPosition(l.selectedCol, len(l.columns), l.width-1)
|
||||||
|
if pos < dx {
|
||||||
|
l.moveRight(1)
|
||||||
|
} else if pos > dx {
|
||||||
|
l.moveLeft(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// l.currSelection = newPos
|
func (l *TableView) verticalScrollClick(dy int) {
|
||||||
// l.EnsureRowVisible()
|
if dy == 0 {
|
||||||
|
l.moveUp(1)
|
||||||
|
return
|
||||||
|
} else if dy == l.height-2 {
|
||||||
|
l.moveDown(1)
|
||||||
|
} else if dy > 0 && dy < l.height-2 {
|
||||||
|
pos := ThumbPosition(l.selectedRow, l.rowCount, l.height-1)
|
||||||
|
l.Logger().Printf("POS: %v, DY: %v", pos, dy)
|
||||||
|
if pos > dy {
|
||||||
|
l.moveUp(l.height - 3)
|
||||||
|
} else if pos < dy {
|
||||||
|
l.moveDown(l.height - 3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *TableView) processMouseClick(ev Event) bool {
|
||||||
|
if ev.Key != term.MouseLeft {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
dx := ev.X - l.x
|
||||||
|
dy := ev.Y - l.y
|
||||||
|
|
||||||
|
if dy == l.height-1 && dx == l.width-1 {
|
||||||
|
l.selectedRow = l.rowCount - 1
|
||||||
|
l.selectedCol = len(l.columns) - 1
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if dy == l.height-1 {
|
||||||
|
l.horizontalScrollClick(dx)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if dx == l.width-1 {
|
||||||
|
l.verticalScrollClick(dy)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if dy < 2 {
|
||||||
|
// Header - no action now
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
dy -= 2
|
||||||
|
l.selectedRow = l.topRow + dy
|
||||||
|
|
||||||
|
oldCol := l.selectedCol
|
||||||
|
l.selectedCol = l.mouseToCol(dx)
|
||||||
|
|
||||||
|
if oldCol != l.selectedCol {
|
||||||
|
l.EnsureColVisible()
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -594,8 +647,8 @@ func (l *TableView) ProcessEvent(event Event) bool {
|
|||||||
// default:
|
// default:
|
||||||
// return false
|
// return false
|
||||||
}
|
}
|
||||||
// case EventMouse:
|
case EventMouse:
|
||||||
// return l.processMouseClick(event)
|
return l.processMouseClick(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user