WhspBrd/internal/tui/layout.go
2025-10-09 10:50:59 +02:00

96 lines
1.9 KiB
Go

package tui
import (
"github.com/jroimartin/gocui"
)
func layout(g *gocui.Gui) error {
maxX, maxY := g.Size()
if maxX != prevWidth || maxY != prevHeight {
prevWidth, prevHeight = maxX, maxY
if chatView, err := g.View("chat"); err == nil {
updateChatView(chatView)
}
//if profileView, err := g.View("profile"); err == nil {
// updateProfileView(profileView)
//}
if _, err := g.View("users"); err == nil {
updateContactsView(g)
}
}
if err := layoutSidebar(g, maxY); err != nil {
updateContactsView(g)
return err
}
if err := layoutChat(g, maxX, maxY); err != nil {
return err
}
if err := layoutInput(g, maxX, maxY); err != nil {
return err
}
return nil
}
func layoutChat(g *gocui.Gui, maxX, maxY int) error {
if v, err := g.SetView("chat", 21, 0, maxX-1, maxY-5); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = " Chat "
v.Wrap = true
v.Autoscroll = true
updateChatView(v)
}
return nil
}
func layoutInput(g *gocui.Gui, maxX, maxY int) error {
if v, err := g.SetView("input", 21, maxY-4, maxX-1, maxY-1); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = " Type your message: "
v.Editable = true
v.Wrap = true
if _, err := g.SetCurrentView("input"); err != nil {
return err
}
}
return nil
}
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()
updateContactsView(g)
}
return nil
}
func layoutProfile(g *gocui.Gui, maxX, maxY int) error {
var VIEW_WIDTH int
if maxX-maxX/6 < 21 {
VIEW_WIDTH = 50
} else {
VIEW_WIDTH = maxX - maxX/3
}
if v, err := g.SetView("profile", VIEW_WIDTH, 0, maxX-1, maxY-5); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = " Profile "
v.Wrap = true
//updateProfileView(v)
}
return nil
}