WhspBrd/internal/tui/sidebar.go

75 lines
1.3 KiB
Go

package tui
import (
"fmt"
"github.com/jroimartin/gocui"
)
var selectedUserIdx int = 0
// LAYOUT
func layoutSidebar(g *gocui.Gui, maxY int) error {
if v, err := g.SetView("users", 0, 0, 20, maxY-1); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Users"
v.Clear()
updateUsersView(g)
}
return nil
}
func updateUsersView(g *gocui.Gui) error {
v, err := g.View("users")
if err != nil {
return err
}
v.Clear()
messages = nil
LoadMessages(users[selectedUserIdx])
// TODO: Render profile image of users and change colors of each user maybe?
for i, u := range users {
// Change Selected User In The TUI Window
if i == selectedUserIdx {
fmt.Fprintf(v, "%s%s%s\n", Colors.base06, u, Colors.base16)
_, y := v.Size()
if i == 0 {
v.SetOrigin(0, 0)
} else {
v.SetOrigin(0, i-y+1)
}
} else {
fmt.Fprintln(v, u)
}
}
return nil
}
// KEYBINDINGS
func nextContact(g *gocui.Gui, v *gocui.View) error {
if len(users) == 0 {
return nil
}
selectedUserIdx = (selectedUserIdx + 1) % len(users)
err := updateUsersView(g)
updateChatView(g.Views()[1])
return err
}
func prevContact(g *gocui.Gui, v *gocui.View) error {
if len(users) == 0 {
return nil
}
selectedUserIdx = (selectedUserIdx - 1 + len(users)) % len(users)
err := updateUsersView(g)
updateChatView(g.Views()[1])
return err
}