diff --git a/ui/filetreeview.go b/ui/filetreeview.go index 520ca39..12d9517 100644 --- a/ui/filetreeview.go +++ b/ui/filetreeview.go @@ -89,9 +89,6 @@ func (view *FileTreeView) Setup(v *gocui.View, header *gocui.View) error { view.updateViewTree() view.Render() - headerStr := fmt.Sprintf(filetree.AttributeFormat+" %s", "P", "ermission", "UID:GID", "Size", "Filetree") - fmt.Fprintln(view.header, Formatting.Header(vtclean.Clean(headerStr, false))) - return nil } @@ -259,6 +256,12 @@ func (view *FileTreeView) Render() error { // print the tree to the view lines := strings.Split(view.ViewTree.String(true), "\n") view.gui.Update(func(g *gocui.Gui) error { + // update the header + view.header.Clear() + headerStr := fmt.Sprintf(filetree.AttributeFormat+" %s", "P", "ermission", "UID:GID", "Size", "Filetree") + fmt.Fprintln(view.header, Formatting.Header(vtclean.Clean(headerStr, false))) + + // update the contents view.view.Clear() for idx, line := range lines { if idx == view.TreeIndex { diff --git a/ui/layerview.go b/ui/layerview.go index 5f3f213..4b9f30f 100644 --- a/ui/layerview.go +++ b/ui/layerview.go @@ -61,10 +61,6 @@ func (view *LayerView) Setup(v *gocui.View, header *gocui.View) error { return err } - - headerStr := fmt.Sprintf("Cmp "+image.LayerFormat, "Image ID", "Size", "Command") - fmt.Fprintln(view.header, Formatting.Header(vtclean.Clean(headerStr, false))) - return view.Render() } @@ -126,6 +122,11 @@ func (view *LayerView) renderCompareBar(layerIdx int) string { func (view *LayerView) Render() error { view.gui.Update(func(g *gocui.Gui) error { + // update header + headerStr := fmt.Sprintf("Cmp "+image.LayerFormat, "Image ID", "Size", "Command") + fmt.Fprintln(view.header, Formatting.Header(vtclean.Clean(headerStr, false))) + + // update contents view.view.Clear() for revIdx := len(view.Layers) - 1; revIdx >= 0; revIdx-- { layer := view.Layers[revIdx] diff --git a/ui/ui.go b/ui/ui.go index 061007f..fa824e3 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -132,6 +132,18 @@ func keybindings(g *gocui.Gui) error { return nil } +func isNewView(errs ...error) bool { + for _, err := range errs { + if err == nil { + return false + } + if err != nil && err != gocui.ErrUnknownView { + return false + } + } + return true +} + func layout(g *gocui.Gui) error { maxX, maxY := g.Size() splitCols := maxX / 2 @@ -142,37 +154,8 @@ func layout(g *gocui.Gui) error { debugCols := maxX - debugWidth bottomRows := 1 headerRows := 1 - - // Layers - if view, err := g.SetView(Views.Layer.Name, -1, -1+headerRows, splitCols, maxY-bottomRows); err != nil { - if err != gocui.ErrUnknownView { - return err - } - if header, err := g.SetView(Views.Layer.Name+"header", -1, -1, splitCols, headerRows); err != nil { - if err != gocui.ErrUnknownView { - return err - } - Views.Layer.Setup(view, header) - - if _, err := g.SetCurrentView(Views.Layer.Name); err != nil { - return err - } - } - - } - // Filetree - if view, err := g.SetView(Views.Tree.Name, splitCols, -1+headerRows, debugCols, maxY-bottomRows); err != nil { - if err != gocui.ErrUnknownView { - return err - } - - if header, err := g.SetView(Views.Tree.Name+"header", splitCols, -1, debugCols, headerRows); err != nil { - if err != gocui.ErrUnknownView { - return err - } - Views.Tree.Setup(view, header) - } - } + var view, header *gocui.View + var viewErr, headerErr, err error // Debug pane if debug { @@ -183,20 +166,35 @@ func layout(g *gocui.Gui) error { } } - // StatusBar - if view, err := g.SetView(Views.Status.Name, -1, maxY-bottomRows-1, maxX, maxY); err != nil { - if err != gocui.ErrUnknownView { + // Layers + view, viewErr = g.SetView(Views.Layer.Name, -1, -1+headerRows, splitCols, maxY-bottomRows) + header, headerErr = g.SetView(Views.Layer.Name+"header", -1, -1, splitCols, headerRows) + if isNewView(viewErr, headerErr) { + Views.Layer.Setup(view, header) + + if _, err = g.SetCurrentView(Views.Layer.Name); err != nil { return err } - Views.Status.Setup(view, nil) - } - if view, err := g.SetView(Views.Command.Name, -1, maxY-bottomRows-2, maxX, maxY-1); err != nil { - if err != gocui.ErrUnknownView { - return err - } - Views.Command.Setup(view, nil) + // Filetree + view, viewErr = g.SetView(Views.Tree.Name, splitCols, -1+headerRows, debugCols, maxY-bottomRows) + header, headerErr = g.SetView(Views.Tree.Name+"header", splitCols, -1, debugCols, headerRows) + if isNewView(viewErr, headerErr) { + Views.Tree.Setup(view, header) + } + + // Status Bar + view, viewErr = g.SetView(Views.Status.Name, -1, maxY-bottomRows-1, maxX, maxY) + if isNewView(viewErr, headerErr) { + Views.Status.Setup(view, nil) + } + + // Command Bar + view, viewErr = g.SetView(Views.Command.Name, -1, maxY-bottomRows-2, maxX, maxY-1) + if isNewView(viewErr, headerErr) { + debugPrint("Setup...") + Views.Command.Setup(view, nil) } return nil