discordo/internal/ui/chat/keybinds.go

71 lines
1.7 KiB
Go

package chat
import (
"github.com/ayn2op/tview/help"
"github.com/ayn2op/tview/keybind"
)
var _ help.KeyMap = (*Model)(nil)
func (v *Model) ShortHelp() []keybind.Keybind {
short := make([]keybind.Keybind, 0, 16)
if active := v.activeKeyMap(); active != nil {
short = append(short, active.ShortHelp()...)
}
short = append(short, v.baseShortHelp()...)
return short
}
func (v *Model) FullHelp() [][]keybind.Keybind {
full := make([][]keybind.Keybind, 0, 8)
if active := v.activeKeyMap(); active != nil {
full = append(full, active.FullHelp()...)
}
full = append(full, v.baseFullHelp()...)
return full
}
func (v *Model) activeKeyMap() help.KeyMap {
if v.GetVisible(channelsPickerLayerName) {
return v.channelsPicker
}
if v.app == nil {
return nil
}
switch v.app.Focused() {
case v.guildsTree:
return v.guildsTree
case v.messagesList:
return v.messagesList
case v.messageInput:
return v.messageInput
default:
return nil
}
}
func (v *Model) baseShortHelp() []keybind.Keybind {
cfg := v.cfg.Keybinds
short := []keybind.Keybind{cfg.FocusGuildsTree.Keybind, cfg.FocusMessagesList.Keybind}
if !v.messageInput.GetDisabled() {
short = append(short, cfg.FocusMessageInput.Keybind)
}
short = append(short, cfg.ToggleGuildsTree.Keybind, cfg.ToggleChannelsPicker.Keybind)
return short
}
func (v *Model) baseFullHelp() [][]keybind.Keybind {
cfg := v.cfg.Keybinds
focus := []keybind.Keybind{cfg.FocusGuildsTree.Keybind, cfg.FocusMessagesList.Keybind}
if !v.messageInput.GetDisabled() {
focus = append(focus, cfg.FocusMessageInput.Keybind)
}
return [][]keybind.Keybind{
focus,
{cfg.FocusPrevious.Keybind, cfg.FocusNext.Keybind},
{cfg.ToggleGuildsTree.Keybind, cfg.ToggleChannelsPicker.Keybind},
{cfg.Logout.Keybind},
}
}