1package nonogram23import (4 "charm.land/bubbles/v2/key"5 "github.com/FelineStateMachine/puzzletea/game"6)78type KeyMap struct {9 game.CursorKeyMap10 FillTile key.Binding11 MarkTile key.Binding12 ClearTile key.Binding13}1415var DefaultKeyMap = KeyMap{16 CursorKeyMap: game.DefaultCursorKeyMap,1718 FillTile: key.NewBinding(19 key.WithKeys("z"),20 key.WithHelp("z", "Fill"),21 ),22 MarkTile: key.NewBinding(23 key.WithKeys("x"),24 key.WithHelp("x", "Mark"),25 ),26 ClearTile: key.NewBinding(27 key.WithKeys("backspace"),28 key.WithHelp("bkspc", "Clear"),29 ),30}3132func (m *Model) updateKeyBindings() {33 m.keys.Up.SetEnabled(m.cursor.Y > 0)34 m.keys.Down.SetEnabled(m.cursor.Y < m.height-1)35 m.keys.Left.SetEnabled(m.cursor.X > 0)36 m.keys.Right.SetEnabled(m.cursor.X < m.width-1)3738 cursorVal := m.grid[m.cursor.Y][m.cursor.X]39 switch cursorVal {40 case filledTile:41 m.keys.FillTile.SetEnabled(false)42 m.keys.MarkTile.SetEnabled(true)43 m.keys.ClearTile.SetEnabled(true)44 case emptyTile:45 m.keys.FillTile.SetEnabled(true)46 m.keys.MarkTile.SetEnabled(true)47 m.keys.ClearTile.SetEnabled(false)48 case markedTile:49 m.keys.FillTile.SetEnabled(true)50 m.keys.MarkTile.SetEnabled(false)51 m.keys.ClearTile.SetEnabled(true)52 }53}5455func (m Model) GetFullHelp() [][]key.Binding {56 return [][]key.Binding{57 {m.keys.Up, m.keys.Down, m.keys.Left, m.keys.Right},58 {m.keys.FillTile, m.keys.MarkTile, m.keys.ClearTile},59 }60}