set layout in a non-nested fashion

This commit is contained in:
Alex Goodman 2018-08-18 21:29:20 -04:00
parent bbe7d436ce
commit c961041ec3
No known key found for this signature in database
GPG Key ID: 05328C611D8A520E
3 changed files with 50 additions and 48 deletions

@ -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 {

@ -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]

@ -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