dive/runtime/ui/view/views.go
Alex Goodman d5e8a92968
Rework CI validation workflow and makefile (#460)
* rework CI validation workflow and makefile

* enable push

* fix job names

* fix license check

* fix snapshot builds

* fix acceptance tests

* fix linting

* disable pull request event

* rework windows runner caching

* disable release pipeline and add issue templates
2023-07-06 22:01:46 -04:00

86 lines
1.6 KiB
Go

package view
import (
"github.com/awesome-gocui/gocui"
"github.com/wagoodman/dive/dive/filetree"
"github.com/wagoodman/dive/dive/image"
)
type IView interface {
Setup(*gocui.View, *gocui.View) error
Name() string
IsVisible() bool
}
type Views struct {
Tree *FileTree
Layer *Layer
Status *Status
Filter *Filter
LayerDetails *LayerDetails
ImageDetails *ImageDetails
Debug *Debug
}
var _ []IView = []IView{
&FileTree{},
&Layer{},
&Filter{},
&LayerDetails{},
&ImageDetails{},
&Debug{},
}
func NewViews(g *gocui.Gui, imageName string, analysis *image.AnalysisResult, cache filetree.Comparer) (*Views, error) {
Layer, err := newLayerView(g, analysis.Layers)
if err != nil {
return nil, err
}
treeStack := analysis.RefTrees[0]
Tree, err := newFileTreeView(g, treeStack, analysis.RefTrees, cache)
if err != nil {
return nil, err
}
Status := newStatusView(g)
// set the layer view as the first selected view
Status.SetCurrentView(Layer)
Filter := newFilterView(g)
LayerDetails := &LayerDetails{gui: g}
ImageDetails := &ImageDetails{
gui: g,
imageName: imageName,
imageSize: analysis.SizeBytes,
efficiency: analysis.Efficiency,
inefficiencies: analysis.Inefficiencies,
}
Debug := newDebugView(g)
return &Views{
Tree: Tree,
Layer: Layer,
Status: Status,
Filter: Filter,
ImageDetails: ImageDetails,
LayerDetails: LayerDetails,
Debug: Debug,
}, nil
}
func (views *Views) All() []Renderer {
return []Renderer{
views.Tree,
views.Layer,
views.Status,
views.Filter,
views.LayerDetails,
views.ImageDetails,
}
}