Skip to content
This repository was archived by the owner on Apr 11, 2022. It is now read-only.

Commit dc5fc4f

Browse files
committed
fixed collapseAll bug
1 parent a172266 commit dc5fc4f

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

jsonui.go

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ func layout(g *gocui.Gui) error {
164164
}
165165
if v.Name() == treeView {
166166
v.Highlight = true
167-
tree.draw(v, 2, 0)
167+
drawTree(g, v, tree)
168168
// v.Autoscroll = true
169169
}
170170
if v.Name() == textView {
@@ -198,11 +198,7 @@ func layout(g *gocui.Gui) error {
198198

199199
}
200200
func getPath(g *gocui.Gui, v *gocui.View) string {
201-
tv, err := g.View(treeView)
202-
if err != nil {
203-
log.Fatal("failed to get treeView", err)
204-
}
205-
p := findTreePosition(tv)
201+
p := findTreePosition(g)
206202
for i, s := range p {
207203
transformed := s
208204
if !strings.HasPrefix(s, "[") && !strings.HasSuffix(s, "]") {
@@ -228,11 +224,7 @@ func drawJSON(g *gocui.Gui, v *gocui.View) error {
228224
if err != nil {
229225
log.Fatal("failed to get textView", err)
230226
}
231-
tv, err := g.View(treeView)
232-
if err != nil {
233-
log.Fatal("failed to get treeView", err)
234-
}
235-
p := findTreePosition(tv)
227+
p := findTreePosition(g)
236228
treeTodraw := tree.find(p)
237229
if treeTodraw != nil {
238230
dv.Clear()
@@ -270,7 +262,11 @@ var cleanPatterns = []string{
270262
" (+)",
271263
}
272264

273-
func findTreePosition(v *gocui.View) treePosition {
265+
func findTreePosition(g *gocui.Gui) treePosition {
266+
v, err := g.View(treeView)
267+
if err != nil {
268+
log.Fatal("failed to get treeview", err)
269+
}
274270
path := treePosition{}
275271
ci := -1
276272
_, yOffset := v.Origin()
@@ -296,30 +292,41 @@ func findTreePosition(v *gocui.View) treePosition {
296292
return path[1:]
297293
}
298294

295+
func drawTree(g *gocui.Gui, v *gocui.View, tree treeNode) error {
296+
tv, err := g.View(treeView)
297+
if err != nil {
298+
log.Fatal("failed to get treeView", err)
299+
}
300+
tv.Clear()
301+
tree.draw(tv, 2, 0)
302+
maxY := tv.BufferLen()
303+
cx, cy := tv.Cursor()
304+
lastLine := maxY - 2
305+
if cy > lastLine {
306+
tv.SetCursor(cx, lastLine)
307+
tv.SetOrigin(0, 0)
308+
}
309+
310+
return nil
311+
}
312+
299313
func expandAll(g *gocui.Gui, v *gocui.View) error {
300314
tree.expandAll()
301-
v.Clear()
302-
tree.draw(v, 2, 0)
303-
return nil
315+
return drawTree(g, v, tree)
304316
}
317+
305318
func collapseAll(g *gocui.Gui, v *gocui.View) error {
306319
tree.collapseAll()
307-
v.Clear()
308-
tree.draw(v, 2, 0)
309-
return nil
320+
return drawTree(g, v, tree)
310321
}
322+
311323
func toggleExpand(g *gocui.Gui, v *gocui.View) error {
312-
tv, err := g.View(treeView)
313-
if err != nil {
314-
log.Fatal("failed to get treeView", err)
315-
}
316-
p := findTreePosition(tv)
324+
p := findTreePosition(g)
317325
subTree := tree.find(p)
318326
subTree.toggleExpanded()
319-
tv.Clear()
320-
tree.draw(tv, 2, 0)
321-
return nil
327+
return drawTree(g, v, tree)
322328
}
329+
323330
func cursorMovement(d int) func(g *gocui.Gui, v *gocui.View) error {
324331
return func(g *gocui.Gui, v *gocui.View) error {
325332
dir := 1
@@ -329,7 +336,6 @@ func cursorMovement(d int) func(g *gocui.Gui, v *gocui.View) error {
329336
distance := int(math.Abs(float64(d)))
330337
for ; distance > 0; distance-- {
331338
if lineBelow(v, distance*dir) {
332-
logFile(fmt.Sprintf("jumped distance: %v", distance*dir))
333339
v.MoveCursor(0, distance*dir, false)
334340
drawJSON(g, v)
335341
drawPath(g, v)

0 commit comments

Comments
 (0)