diff options
author | dwillist <dthornton@vmware.com> | 2021-01-04 00:01:59 -0500 |
---|---|---|
committer | dwillist <dthornton@vmware.com> | 2021-01-04 00:03:02 -0500 |
commit | 92ce00a1a95fd4905e0cf9da5e28bf25133463ed (patch) | |
tree | 88bb0d4595bbffd05915f7472aacdab631b65b14 /runtime/ui/viewmodels | |
parent | 00a1b771a844063f8dbeceb13b70f3cb2f15b5e0 (diff) |
viper configured filetree keybindings
- implement remaining filetree navegation commands
Signed-off-by: dwillist <dthornton@vmware.com>
Diffstat (limited to 'runtime/ui/viewmodels')
-rw-r--r-- | runtime/ui/viewmodels/tree_view_model.go | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/runtime/ui/viewmodels/tree_view_model.go b/runtime/ui/viewmodels/tree_view_model.go index 4e50dcc..462540e 100644 --- a/runtime/ui/viewmodels/tree_view_model.go +++ b/runtime/ui/viewmodels/tree_view_model.go @@ -23,24 +23,26 @@ type LayersModel interface { } type TreeViewModel struct { - currentTree *filetree.FileTree - cache filetree.Comparer + currentTree *filetree.FileTree + cache filetree.Comparer + hiddenDiffTypes []bool // Make this an interface that is composed with the FilterView FilterModel LayersModel } -func NewTreeViewModel(cache filetree.Comparer, lModel LayersModel, fmodel FilterModel) (*TreeViewModel, error) { +func NewTreeViewModel(cache filetree.Comparer, lModel LayersModel, fModel FilterModel) (*TreeViewModel, error) { curTreeIndex := filetree.NewTreeIndexKey(0, 0, 0, 0) tree, err := cache.GetTree(curTreeIndex) if err != nil { return nil, err } return &TreeViewModel{ - currentTree: tree, - cache: cache, - FilterModel: fmodel, - LayersModel: lModel, + currentTree: tree, + cache: cache, + hiddenDiffTypes: make([]bool, 4), + FilterModel: fModel, + LayersModel: lModel, }, nil } @@ -70,17 +72,28 @@ func (tvm *TreeViewModel) SetFilter(filterRegex *regexp.Regexp) { } } +// TODO: this seems like a very expensive operration, look for ways to optimize. +// TODO make type int a strongly typed argument +// TODO: handle errors correctly +func (tvm *TreeViewModel) ToggleHiddenFileType(filetype filetree.DiffType) bool { + tvm.hiddenDiffTypes[filetype] = !tvm.hiddenDiffTypes[filetype] + if err := tvm.FilterUpdate(); err != nil { + zap.S().Error("error updating file type filter ", err.Error()) + //panic(err) + return false + } + return true + +} + +// TODO: maek this method private, cant think of a reason for this to be public func (tvm *TreeViewModel) FilterUpdate() error { // keep the t selection in parity with the current DiffType selection filter := tvm.GetFilter() err := tvm.currentTree.VisitDepthChildFirst(func(node *filetree.FileNode) error { + node.Data.ViewInfo.Hidden = tvm.hiddenDiffTypes[node.Data.DiffType] visibleChild := false - if filter == nil { - node.Data.ViewInfo.Hidden = false - return nil - } - for _, child := range node.Children { if !child.Data.ViewInfo.Hidden { visibleChild = true @@ -89,7 +102,7 @@ func (tvm *TreeViewModel) FilterUpdate() error { } } - if !visibleChild { // hide nodes that do not match the current file filter regex (also don't unhide nodes that are already hidden) + if filter != nil && !node.Data.ViewInfo.Hidden && !visibleChild { // hide nodes that do not match the current file filter regex (also don't unhide nodes that are already hidden) match := filter.FindString(node.Path()) node.Data.ViewInfo.Hidden = len(match) == 0 } |