refactor(guildstree): move help keymap to keymap.go

This commit is contained in:
ayn2op 2026-09-28 00:26:01 -04:00
parent 3de72a697d
commit 2b651a1459
2 changed files with 80 additions and 73 deletions

View file

@ -0,0 +1,80 @@
package guildstree
import (
"github.com/ayn2op/arikawa/v3/discord"
"github.com/ayn2op/tview/help"
"github.com/ayn2op/tview/keybind"
"github.com/ayn2op/tview/tree"
)
var _ help.KeyMap = Model{}
func (m *Model) selectCurrentKeybind() keybind.Keybind {
selectCurrent := m.cfg.Keybinds.GuildsTree.SelectCurrent.Keybind
selectHelp := selectCurrent.Help()
selectDesc := selectHelp.Desc
if node := m.selectionState.CurrentNode(); node != nil {
if len(node.Children()) > 0 {
if node.Expanded() {
selectDesc = "collapse"
} else {
selectDesc = "expand"
}
} else {
switch node.Reference().(type) {
case discord.GuildID, dmNode:
selectDesc = "expand"
}
}
}
return selectCurrent.WithHelp(selectHelp.Key, selectDesc)
}
func (m Model) ShortHelp() []keybind.Keybind {
cfg := m.cfg.Keybinds.GuildsTree
shortHelp := []keybind.Keybind{cfg.SelectUp.Keybind, cfg.SelectDown.Keybind, m.selectCurrentKeybind()}
if m.canCollapseParent(m.selectionState.CurrentNode()) {
shortHelp = append(shortHelp, cfg.CollapseParentNode.Keybind)
}
return shortHelp
}
func (m Model) FullHelp() [][]keybind.Keybind {
cfg := m.cfg.Keybinds.GuildsTree
selectGroup := []keybind.Keybind{m.selectCurrentKeybind(), cfg.MoveToParentNode.Keybind}
selectGroup = append(selectGroup, m.collapseKeybinds()...)
return [][]keybind.Keybind{
{cfg.SelectUp.Keybind, cfg.SelectDown.Keybind, cfg.SelectTop.Keybind, cfg.SelectBottom.Keybind},
selectGroup,
{cfg.YankID.Keybind},
}
}
func (m *Model) collapseKeybinds() []keybind.Keybind {
cfg := m.cfg.Keybinds.GuildsTree
var keybinds []keybind.Keybind
if m.canCollapseParent(m.selectionState.CurrentNode()) {
keybinds = append(keybinds, cfg.CollapseParentNode.Keybind)
}
if m.canCollapseAll() {
keybinds = append(keybinds, cfg.CollapseAll.Keybind)
}
return keybinds
}
func (m *Model) canCollapseParent(node *tree.Node) bool {
return node != nil && len(m.root.PathTo(node)) >= 3
}
func (m *Model) canCollapseAll() bool {
var can bool
for _, node := range m.root.Children() {
if node.Expanded() {
can = true
break
}
}
return can
}

View file

@ -11,7 +11,6 @@ import (
"github.com/ayn2op/ningen/v3" "github.com/ayn2op/ningen/v3"
"github.com/ayn2op/ningen/v3/states/read" "github.com/ayn2op/ningen/v3/states/read"
"github.com/ayn2op/tview" "github.com/ayn2op/tview"
"github.com/ayn2op/tview/help"
"github.com/ayn2op/tview/keybind" "github.com/ayn2op/tview/keybind"
"github.com/ayn2op/tview/tree" "github.com/ayn2op/tview/tree"
"github.com/gdamore/tcell/v3" "github.com/gdamore/tcell/v3"
@ -433,78 +432,6 @@ func (m *Model) expandPathToNode(node *tree.Node) {
} }
} }
var _ help.KeyMap = Model{}
func (m *Model) selectCurrentKeybind() keybind.Keybind {
selectCurrent := m.cfg.Keybinds.GuildsTree.SelectCurrent.Keybind
selectHelp := selectCurrent.Help()
selectDesc := selectHelp.Desc
if node := m.selectionState.CurrentNode(); node != nil {
if len(node.Children()) > 0 {
if node.Expanded() {
selectDesc = "collapse"
} else {
selectDesc = "expand"
}
} else {
switch node.Reference().(type) {
case discord.GuildID, dmNode:
selectDesc = "expand"
}
}
}
return selectCurrent.WithHelp(selectHelp.Key, selectDesc)
}
func (m Model) ShortHelp() []keybind.Keybind {
cfg := m.cfg.Keybinds.GuildsTree
shortHelp := []keybind.Keybind{cfg.SelectUp.Keybind, cfg.SelectDown.Keybind, m.selectCurrentKeybind()}
if m.canCollapseParent(m.selectionState.CurrentNode()) {
shortHelp = append(shortHelp, cfg.CollapseParentNode.Keybind)
}
return shortHelp
}
func (m Model) FullHelp() [][]keybind.Keybind {
cfg := m.cfg.Keybinds.GuildsTree
selectGroup := []keybind.Keybind{m.selectCurrentKeybind(), cfg.MoveToParentNode.Keybind}
selectGroup = append(selectGroup, m.collapseKeybinds()...)
return [][]keybind.Keybind{
{cfg.SelectUp.Keybind, cfg.SelectDown.Keybind, cfg.SelectTop.Keybind, cfg.SelectBottom.Keybind},
selectGroup,
{cfg.YankID.Keybind},
}
}
func (m *Model) collapseKeybinds() []keybind.Keybind {
cfg := m.cfg.Keybinds.GuildsTree
var keybinds []keybind.Keybind
if m.canCollapseParent(m.selectionState.CurrentNode()) {
keybinds = append(keybinds, cfg.CollapseParentNode.Keybind)
}
if m.canCollapseAll() {
keybinds = append(keybinds, cfg.CollapseAll.Keybind)
}
return keybinds
}
func (m *Model) canCollapseParent(node *tree.Node) bool {
return node != nil && len(m.root.PathTo(node)) >= 3
}
func (m *Model) canCollapseAll() bool {
var can bool
for _, node := range m.root.Children() {
if node.Expanded() {
can = true
break
}
}
return can
}
func unreadStyle(indication ningen.UnreadIndication) tcell.Style { func unreadStyle(indication ningen.UnreadIndication) tcell.Style {
var style tcell.Style var style tcell.Style
switch indication { switch indication {