WhspBrd/internal/tui/layout.go
copilot-swe-agent[bot] cfedfd3550 Refactor codebase: fix formatting, error handling, and remove magic numbers
Co-authored-by: foglar <82380203+foglar@users.noreply.github.com>
2025-10-09 09:06:18 +00:00

94 lines
1.8 KiB
Go

package tui
import (
"github.com/jroimartin/gocui"
)
const (
sidebarWidth = 20
inputHeight = 4
chatXOffset = 21
)
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 _, err := g.View("users"); err == nil {
updateContactsView(g)
}
}
if err := layoutSidebar(g, maxY); err != nil {
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", chatXOffset, 0, maxX-1, maxY-inputHeight-1); 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", chatXOffset, maxY-inputHeight, 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, sidebarWidth, 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 {
viewWidth := maxX - maxX/3
if viewWidth < chatXOffset {
viewWidth = 50
}
if v, err := g.SetView("profile", viewWidth, 0, maxX-1, maxY-inputHeight-1); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = " Profile "
v.Wrap = true
}
return nil
}