Much Work

- Definable KeyMaps
- Change 'Tabbable' to just use 'Focusable'
This commit is contained in:
2025-09-04 11:09:34 -05:00
parent c1db729bb3
commit f571b13a31
26 changed files with 881 additions and 615 deletions

View File

@@ -40,9 +40,10 @@ type DebugWidget struct {
drawRulers bool
active bool
visible bool
tabbable bool
focusable bool
mTL, mBR Coord // Margins (Top-Right & Bottom Left)
keyMap KeyMap
logger func(string, ...any)
}
@@ -60,9 +61,10 @@ func (w *DebugWidget) Init(id string, s tcell.Style) {
w.id = id
w.style = s
w.visible = true
w.tabbable = true
w.focusable = true
w.drawRulers = true
w.setW, w.setH = -1, -1
w.keyMap = BlankKeyMap()
}
func (w *DebugWidget) SetLogger(l func(string, ...any)) { w.logger = l }
@@ -104,8 +106,24 @@ func (w *DebugWidget) HandleResize(ev *tcell.EventResize) {
w.widget.HandleResize(tcell.NewEventResize(w.w-w.mTL.X-w.mBR.X, w.h-w.mTL.Y-w.mBR.Y))
}
func (w *DebugWidget) HandleKey(ev *tcell.EventKey) bool { return w.widget.HandleKey(ev) }
func (w *DebugWidget) HandleTime(ev *tcell.EventTime) { w.widget.HandleTime(ev) }
func (w *DebugWidget) SetKeyMap(km KeyMap) { w.keyMap = km }
func (w *DebugWidget) AddToKeyMap(km KeyMap) { w.keyMap.Merge(km) }
func (w *DebugWidget) RemoveFromKeyMap(km KeyMap) {
for k := range km.Keys {
w.keyMap.Remove(k)
}
for r := range km.Runes {
w.keyMap.RemoveRune(r)
}
}
func (w *DebugWidget) HandleKey(ev *tcell.EventKey) bool {
if ok := w.keyMap.Handle(ev); ok {
return true
}
return w.widget.HandleKey(ev)
}
func (w *DebugWidget) HandleTime(ev *tcell.EventTime) { w.widget.HandleTime(ev) }
func (w *DebugWidget) Draw(screen tcell.Screen) {
if !w.visible {
@@ -160,19 +178,18 @@ func (w *DebugWidget) SetActive(a bool) {
w.active = a
w.widget.SetActive(a)
}
func (w *DebugWidget) Visible() bool { return w.visible }
func (w *DebugWidget) SetVisible(a bool) { w.visible = a }
func (w *DebugWidget) Focusable() bool { return true }
func (w *DebugWidget) SetTabbable(b bool) { w.tabbable = b }
func (w *DebugWidget) Tabbable() bool { return w.tabbable }
func (w *DebugWidget) SetX(x int) { w.x = x }
func (w *DebugWidget) SetY(y int) { w.y = y }
func (w *DebugWidget) GetX() int { return w.x }
func (w *DebugWidget) GetY() int { return w.y }
func (w *DebugWidget) GetPos() Coord { return Coord{X: w.x, Y: w.y} }
func (w *DebugWidget) SetPos(c Coord) { w.x, w.y = c.X, c.Y }
func (w *DebugWidget) GetW() int { return w.w }
func (w *DebugWidget) GetH() int { return w.h }
func (w *DebugWidget) Visible() bool { return w.visible }
func (w *DebugWidget) SetVisible(a bool) { w.visible = a }
func (w *DebugWidget) Focusable() bool { return w.focusable }
func (w *DebugWidget) SetFocusable(b bool) { w.focusable = b }
func (w *DebugWidget) SetX(x int) { w.x = x }
func (w *DebugWidget) SetY(y int) { w.y = y }
func (w *DebugWidget) GetX() int { return w.x }
func (w *DebugWidget) GetY() int { return w.y }
func (w *DebugWidget) GetPos() Coord { return Coord{X: w.x, Y: w.y} }
func (w *DebugWidget) SetPos(c Coord) { w.x, w.y = c.X, c.Y }
func (w *DebugWidget) GetW() int { return w.w }
func (w *DebugWidget) GetH() int { return w.h }
func (w *DebugWidget) SetW(wd int) {
w.setW = wd
w.w = wd