summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
authordwillist <dthornton@vmware.com>2020-12-19 12:23:55 -0500
committerdwillist <dthornton@vmware.com>2020-12-19 12:28:19 -0500
commit52b326c040fa0e41d380b2a437b7c36d16fe260f (patch)
treef5ca7b1eee32050a0537195d05233406eb15fb18 /runtime
parent6666e841eb26eff7fbb33ca42f4cbb5f484a71ee (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.go9
-rw-r--r--runtime/ui/components/visible_grid.go35
-rw-r--r--runtime/ui/components/visible_primitive.go13
-rw-r--r--runtime/ui/components/wrapper_primative.go2
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