diff --git a/grid.go b/grid.go index fdd48db..3fc2d42 100644 --- a/grid.go +++ b/grid.go @@ -76,9 +76,12 @@ func (g *Grid) redrawRows() { // build layout if config.GetSwitchVal("enableHeader") { + ui.Body.Y = g.header.Height() g.header.SetCount(len(g.containers)) g.header.SetFilter(config.GetVal("filterStr")) - ui.Body.AddRows(g.header.Row()) + g.header.Render() + } else { + ui.Body.Y = 0 } ui.Body.AddRows(fieldHeader()) for _, c := range g.containers { @@ -100,10 +103,7 @@ func (g *Grid) redrawRows() { func resizeIndicator() { xShift := 1 toWidth := 3 - for i, r := range ui.Body.Rows { - if config.GetSwitchVal("enableHeader") && i == 0 { - continue - } + for _, r := range ui.Body.Rows { wDiff := r.Cols[0].Width - (toWidth + xShift) // set indicator x, width r.Cols[0].SetX(xShift) @@ -137,14 +137,10 @@ func headerPar(s string) *ui.Par { return p } -func ResetView() { - ui.DefaultEvtStream.ResetHandlers() - ui.Clear() -} - func (g *Grid) ExpandView() { - ResetView() - defer ResetView() + ui.Clear() + ui.DefaultEvtStream.ResetHandlers() + defer ui.DefaultEvtStream.ResetHandlers() container := g.cmap.Get(g.cursorID) container.Expand() container.widgets.Render() @@ -167,8 +163,7 @@ func Display(g *Grid) bool { ui.DefaultEvtStream.Hook(logEvent) - // calculate layout - ui.Body.Align() + // initial draw g.redrawCursor() g.redrawRows() diff --git a/widgets/header.go b/widgets/header.go index 4c4af3c..3df8098 100644 --- a/widgets/header.go +++ b/widgets/header.go @@ -11,23 +11,45 @@ type CTopHeader struct { Time *ui.Par Count *ui.Par Filter *ui.Par + bg *ui.Par } func NewCTopHeader() *CTopHeader { return &CTopHeader{ - Time: headerPar(timeStr()), - Count: headerPar("-"), - Filter: headerPar(""), + Time: headerPar(2, timeStr()), + Count: headerPar(22, "-"), + Filter: headerPar(42, ""), + bg: headerBg(), } } -func (c *CTopHeader) Row() *ui.Row { +func (c *CTopHeader) Render() { c.Time.Text = timeStr() - return ui.NewRow( - ui.NewCol(2, 0, c.Time), - ui.NewCol(2, 0, c.Count), - ui.NewCol(8, 0, c.Filter), - ) + ui.Render(c.bg) + ui.Render(c.Time, c.Count, c.Filter) +} + +func (c *CTopHeader) Height() int { + return c.bg.Height +} + +func headerBgBordered() *ui.Par { + bg := ui.NewPar("") + bg.X = 1 + bg.Width = ui.TermWidth() - 1 + bg.Height = 3 + bg.Bg = ui.ColorWhite + return bg +} + +func headerBg() *ui.Par { + bg := ui.NewPar("") + bg.X = 1 + bg.Width = ui.TermWidth() - 1 + bg.Height = 1 + bg.Border = false + bg.Bg = ui.ColorWhite + return bg } func (c *CTopHeader) SetCount(val int) { @@ -46,8 +68,9 @@ func timeStr() string { return time.Now().Local().Format("15:04:05 MST") } -func headerPar(s string) *ui.Par { +func headerPar(x int, s string) *ui.Par { p := ui.NewPar(fmt.Sprintf(" %s", s)) + p.X = x p.Border = false p.Height = 1 p.Width = 20