diff --git a/internal/ui/chat/guildstree/keymap.go b/internal/ui/chat/guildstree/keymap.go new file mode 100644 index 0000000..f3cacb8 --- /dev/null +++ b/internal/ui/chat/guildstree/keymap.go @@ -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 +} diff --git a/internal/ui/chat/guildstree/model.go b/internal/ui/chat/guildstree/model.go index 9ef688b..9446dc5 100644 --- a/internal/ui/chat/guildstree/model.go +++ b/internal/ui/chat/guildstree/model.go @@ -11,7 +11,6 @@ import ( "github.com/ayn2op/ningen/v3" "github.com/ayn2op/ningen/v3/states/read" "github.com/ayn2op/tview" - "github.com/ayn2op/tview/help" "github.com/ayn2op/tview/keybind" "github.com/ayn2op/tview/tree" "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 { var style tcell.Style switch indication {