diff options
author | dwillist <dthornton@vmware.com> | 2020-12-19 12:23:55 -0500 |
---|---|---|
committer | dwillist <dthornton@vmware.com> | 2020-12-19 12:28:19 -0500 |
commit | 52b326c040fa0e41d380b2a437b7c36d16fe260f (patch) | |
tree | f5ca7b1eee32050a0537195d05233406eb15fb18 /runtime | |
parent | 6666e841eb26eff7fbb33ca42f4cbb5f484a71ee (diff) |
hide image details and layer details for height constrained windows
Signed-off-by: dwillist <dthornton@vmware.com>
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/ui/app.go | 9 | ||||
-rw-r--r-- | runtime/ui/components/visible_grid.go | 35 | ||||
-rw-r--r-- | runtime/ui/components/visible_primitive.go | 13 | ||||
-rw-r--r-- | runtime/ui/components/wrapper_primative.go | 2 |
4 files changed, 51 insertions, 8 deletions
diff --git a/runtime/ui/app.go b/runtime/ui/app.go index 019420d..9897b68 100644 --- a/runtime/ui/app.go +++ b/runtime/ui/app.go @@ -49,6 +49,8 @@ func newApp(app *tview.Application, analysis *image.AnalysisResult, cache filetr layerModel = layerViewModel layerDetailsBox = components.NewWrapper("Layer Details", "", regularLayerDetailsView).Setup() } + layerDetailsBox.SetVisibility(components.MinHeightVisibility(10)) + //layerViewModel := viewmodels.NewLayersViewModel(analysis.Layers) treeViewModel, err := viewmodels.NewTreeViewModel(cache, layerModel, filterViewModel) if err != nil { @@ -59,6 +61,7 @@ func newApp(app *tview.Application, analysis *image.AnalysisResult, cache filetr // initialize views imageDetailsView := components.NewImageDetailsView(analysis) imageDetailsBox := components.NewWrapper("Image Details", "", imageDetailsView).Setup() + imageDetailsBox.SetVisibility(components.MinHeightVisibility(10)) filterView := components.NewFilterView(treeViewModel).Setup() @@ -78,11 +81,13 @@ func newApp(app *tview.Application, analysis *image.AnalysisResult, cache filetr leftVisibleGrid.AddItem(layersBox, 0, 3, true). AddItem(layerDetailsBox, 0, 1, false). - AddItem(imageDetailsBox, 0, 1, false) + AddItem(imageDetailsBox, 0, 1, false). + SetConsumers(layerDetailsBox, layersBox). + SetConsumers(imageDetailsBox, layersBox) rightVisibleGrid.AddItem(fileTreeBox, 0, 1, false). AddItem(filterView, 1, 0, false). - SetConsumers(filterView, []int{0}) + SetConsumers(filterView, fileTreeBox) totalVisibleGrid.AddItem(leftVisibleGrid, 0, 1, true). AddItem(rightVisibleGrid, 0, 1, false) diff --git a/runtime/ui/components/visible_grid.go b/runtime/ui/components/visible_grid.go index 0b198af..d31ae5d 100644 --- a/runtime/ui/components/visible_grid.go +++ b/runtime/ui/components/visible_grid.go @@ -33,7 +33,7 @@ func NewVisibleFlex() *VisibleFlex { return &VisibleFlex{ Box: tview.NewBox().SetBackgroundColor(tcell.ColorDefault), direction: tview.FlexColumn, - visible: AlwaysVisible, + visible: Always(true), } } @@ -82,10 +82,39 @@ func (f *VisibleFlex) ResizeItem(p tview.Primitive, fixedSize, proportion int) * } // TODO: update the API here this is pretty rough -func (f *VisibleFlex) SetConsumers(p VisiblePrimitive, consumes []int) *VisibleFlex { +// Method provided to give configuration that would otherwise not be possible when primitives are repeated +func (f *VisibleFlex) SetConsumersByIndex(p VisiblePrimitive, consumeIndicies []int) *VisibleFlex { for i, item := range f.items { if item.Item == p { - f.consume[i] = consumes + f.consume[i] = consumeIndicies + } + } + return f +} + +// TODO: update the API here this is pretty rough +// Implementation notes: +// we want a list of indicies []int{} where each visible primitive corresponds to the first matching primitive +// in our list of items +func (f *VisibleFlex) SetConsumers(p VisiblePrimitive, consumes ...VisiblePrimitive) *VisibleFlex { + indexMap := map[VisiblePrimitive]int{} + for _, item := range f.items { + _, ok := indexMap[item.Item] + if !ok { + indexMap[item.Item] = len(indexMap) + } + } + + consumeIndicies := []int{} + for _, consumee := range consumes { + if idx, ok := indexMap[consumee]; ok { + consumeIndicies = append(consumeIndicies, idx) + } + } + + for i, item := range f.items { + if item.Item == p { + f.consume[i] = consumeIndicies } } return f diff --git a/runtime/ui/components/visible_primitive.go b/runtime/ui/components/visible_primitive.go index 02c92de..3c64025 100644 --- a/runtime/ui/components/visible_primitive.go +++ b/runtime/ui/components/visible_primitive.go @@ -15,8 +15,17 @@ type VisiblePrimitive interface { type VisibleFunc func(tview.Primitive) bool -func AlwaysVisible(_ tview.Primitive) bool { - return true +func Always(alwaysVal bool) VisibleFunc { + return func (_ tview.Primitive) bool { + return alwaysVal + } +} + +func MinHeightVisibility(minHeight int) VisibleFunc { + return func(p tview.Primitive) bool { + _, _, _, height := p.GetRect() + return height >= minHeight + } } // How can we actually implement this???? diff --git a/runtime/ui/components/wrapper_primative.go b/runtime/ui/components/wrapper_primative.go index 75badf8..ce9e375 100644 --- a/runtime/ui/components/wrapper_primative.go +++ b/runtime/ui/components/wrapper_primative.go @@ -41,7 +41,7 @@ func NewWrapper(title, subtitle string, inner wrapable) *Wrapper { titleTextView: tview.NewTextView(), subtitleTextView: tview.NewTextView().SetText(subtitle), inner: inner, - visible: AlwaysVisible, + visible: Always(true), } w.setTitle(w.inner.getBox().HasFocus()) return w |