From b8be396489324290c48345f4995ff5d0fb3c785e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=9E=E3=83=AA=E3=82=A6=E3=82=B9?= Date: Wed, 4 Jan 2023 21:43:11 -0500 Subject: [PATCH] Implemented header selection switcher --- ui/header/header.go | 10 ++++++- ui/ui.go | 61 +++++++++++++++++++++++++++++++++-------- ui/views/posts/posts.go | 4 ++- 3 files changed, 61 insertions(+), 14 deletions(-) diff --git a/ui/header/header.go b/ui/header/header.go index d311b8c..427a789 100644 --- a/ui/header/header.go +++ b/ui/header/header.go @@ -1,6 +1,8 @@ package header import ( + "fmt" + "github.com/mrusme/gobbs/config" "github.com/mrusme/gobbs/ui/ctx" @@ -69,7 +71,13 @@ func (m Model) View() string { Padding(0, 1, 0, 1). Width(40) - systemSelector := selector.Render("⏷ All") + curSysIdx := m.ctx.GetCurrentSystem() + var currentSystem string = "All" + if curSysIdx >= 0 { + currentSystem = string((*m.ctx.Systems[curSysIdx]).GetID()) + } + + systemSelector := selector.Render(fmt.Sprintf("⏷ %s", currentSystem)) forumSelector := selector.Render("⏷ All") selectorColumn := lipgloss.JoinVertical(lipgloss.Center, diff --git a/ui/ui.go b/ui/ui.go index 0868587..c5ee7e2 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -5,37 +5,41 @@ import ( "strings" + "github.com/mrusme/gobbs/models/forum" + "github.com/mrusme/gobbs/system" "github.com/mrusme/gobbs/ui/cmd" "github.com/mrusme/gobbs/ui/ctx" "github.com/mrusme/gobbs/ui/header" "github.com/mrusme/gobbs/ui/views/posts" "github.com/mrusme/gobbs/ui/windowmanager" "github.com/mrusme/gobbs/ui/windows/msgerror" + "github.com/mrusme/gobbs/ui/windows/popuplist" "github.com/mrusme/gobbs/ui/windows/postcreate" "github.com/mrusme/gobbs/ui/windows/postshow" "github.com/mrusme/gobbs/ui/views" "github.com/charmbracelet/bubbles/key" + "github.com/charmbracelet/bubbles/list" "github.com/charmbracelet/bubbles/spinner" tea "github.com/charmbracelet/bubbletea" ) type KeyMap struct { - Up key.Binding - Down key.Binding - Close key.Binding + SystemSelect key.Binding + ForumSelect key.Binding + Close key.Binding } var DefaultKeyMap = KeyMap{ - // Up: key.NewBinding( - // key.WithKeys("k", "up"), - // key.WithHelp("↑/k", "move up"), - // ), - // Down: key.NewBinding( - // key.WithKeys("j", "down"), - // key.WithHelp("↓/j", "move down"), - // ), + SystemSelect: key.NewBinding( + key.WithKeys("ctrl+s"), + key.WithHelp("C-s", "System selector"), + ), + ForumSelect: key.NewBinding( + key.WithKeys("ctrl+f"), + key.WithHelp("C-f", "Forum selector"), + ), Close: key.NewBinding( key.WithKeys("q", "esc"), key.WithHelp("q/esc", "close"), @@ -97,6 +101,30 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, tea.Quit } return m, tea.Batch(ccmds...) + case key.Matches(msg, m.keymap.SystemSelect): + var listItems []list.Item + for _, sys := range m.ctx.Systems { + listItems = append(listItems, *sys) + } + + ccmds := m.wm.Open( + popuplist.WIN_ID, + popuplist.NewModel(m.ctx), + [4]int{ + int(m.ctx.Content[1] / 2), + int(m.ctx.Content[1] / 4), + int(m.ctx.Content[1] / 2), + int(m.ctx.Content[1] / 4), + }, + cmd.New( + cmd.WinOpen, + popuplist.WIN_ID, + cmd.Arg{Name: "selectionID", Value: "system"}, + cmd.Arg{Name: "items", Value: listItems}, + ), + ) + return m, tea.Batch(ccmds...) + default: if m.wm.GetNumberOpen() > 0 { cmd := m.wm.Update(m.wm.Focused(), msg) @@ -156,10 +184,19 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg.Target { case postcreate.WIN_ID: m.ctx.Logger.Debugln("received WinClose") + case popuplist.WIN_ID: + switch msg.GetArg("selectionID").(string) { + case "system": + selected := msg.GetArg("selected").(system.System) + m.ctx.SetCurrentSystem(selected.GetID()) + case "forum": + selected := msg.GetArg("selected").(forum.Forum) + m.ctx.SetCurrentForum(selected.ID) + } } case cmd.WMCloseWin: - if ok, clcmds := m.wm.Close(msg.Target); ok { + if ok, clcmds := m.wm.Close(msg.Target, msg.GetArgs()...); ok { cmds = append(cmds, clcmds...) } diff --git a/ui/views/posts/posts.go b/ui/views/posts/posts.go index abdfc71..d62d731 100644 --- a/ui/views/posts/posts.go +++ b/ui/views/posts/posts.go @@ -112,9 +112,11 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.ctx.Theme.PostsList.List.Focused.Height(listHeight) m.ctx.Theme.PostsList.List.Blurred.Height(listHeight) m.list.SetSize( - listWidth-2, + listWidth-2+60, listHeight-2, ) + msg.Width = listWidth + 60 + msg.Height = listHeight case cmd.Command: switch msg.Call {