From 093f648cc20498055bd479b8e8cc710bdb9bce94 Mon Sep 17 00:00:00 2001 From: Alex Goodman <wagoodman@gmail.com> Date: Fri, 8 Jun 2018 20:39:13 -0400 Subject: [PATCH] keep collapsed state in view while changing layers; closes #4 --- filetree/tree.go | 5 ++--- ui/filetreeview.go | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/filetree/tree.go b/filetree/tree.go index 6ba0703..83532d2 100644 --- a/filetree/tree.go +++ b/filetree/tree.go @@ -209,9 +209,8 @@ func (tree *FileTree) MarkRemoved(path string) error { } func StackRange(trees []*FileTree, index int) *FileTree { - // TMP TMP TMP: TODO: later change the index of both of these to 0 - tree := trees[1].Copy() - for idx := 1; idx <= index; idx++ { + tree := trees[0].Copy() + for idx := 0; idx <= index; idx++ { tree.Stack(trees[idx]) } return tree diff --git a/ui/filetreeview.go b/ui/filetreeview.go index 097a4d3..2516acd 100644 --- a/ui/filetreeview.go +++ b/ui/filetreeview.go @@ -55,13 +55,26 @@ func (view *FileTreeView) Setup(v *gocui.View) error { } func (view *FileTreeView) setLayer(layerIndex int) error { - view.Tree = filetree.StackRange(view.RefTrees, layerIndex-1) - view.Tree.Compare(view.RefTrees[layerIndex]) + newTree := filetree.StackRange(view.RefTrees, layerIndex-1) + newTree.Compare(view.RefTrees[layerIndex]) + + visitor := func(node *filetree.FileNode) error { + if node.Collapsed { + newNode, err := newTree.GetNode(node.Path()) + if err == nil { + newNode.Collapsed = true + } + } + return nil + } + view.Tree.Visit(visitor) + // v, _ := view.gui.View("debug") // v.Clear() // _, _ = fmt.Fprintln(v, view.RefTrees[layerIndex]) view.view.SetCursor(0, 0) view.TreeIndex = 0 + view.Tree = newTree return view.Render() }