From db1fb9452c96833947e395d6d8bd3e163b15bc6b Mon Sep 17 00:00:00 2001 From: Alex Goodman Date: Sun, 3 Jun 2018 23:18:41 -0400 Subject: [PATCH] abstracted layerview --- filetreeview.go | 52 +++++++++++++++++------------------ layerview.go | 73 +++++++++++++++++++++++++++++++++++++------------ main.go | 33 ++++++++-------------- 3 files changed, 93 insertions(+), 65 deletions(-) diff --git a/filetreeview.go b/filetreeview.go index 9eed1cd..1a24fdf 100644 --- a/filetreeview.go +++ b/filetreeview.go @@ -35,50 +35,50 @@ func NewFileTreeView(name string, gui *gocui.Gui, view *gocui.View, tree *FileTr return treeview } -func (treeview *FileTreeView) keybindings() error { - if err := treeview.gui.SetKeybinding(treeview.name, gocui.KeyArrowDown, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return treeview.cursorDown() }); err != nil { +func (view *FileTreeView) keybindings() error { + if err := view.gui.SetKeybinding(view.name, gocui.KeyArrowDown, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.cursorDown() }); err != nil { return err } - if err := treeview.gui.SetKeybinding(treeview.name, gocui.KeyArrowUp, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return treeview.cursorUp() }); err != nil { + if err := view.gui.SetKeybinding(view.name, gocui.KeyArrowUp, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.cursorUp() }); err != nil { return err } - if err := treeview.gui.SetKeybinding(treeview.name, gocui.KeySpace, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return treeview.toggleCollapse() }); err != nil { + if err := view.gui.SetKeybinding(view.name, gocui.KeySpace, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.toggleCollapse() }); err != nil { return err } return nil } // Mehh, this is just a bad method -func (treeview *FileTreeView) reset(tree *FileTree) error { - treeview.tree = tree - treeview.view.SetCursor(0, 0) - treeview.absTreeIndex = 0 - return treeview.render() +func (view *FileTreeView) reset(tree *FileTree) error { + view.tree = tree + view.view.SetCursor(0, 0) + view.absTreeIndex = 0 + return view.render() } -func (treeview *FileTreeView) cursorDown() error { - err := cursorDown(treeview.gui, treeview.view) +func (view *FileTreeView) cursorDown() error { + err := cursorDown(view.gui, view.view) if err == nil { - treeview.absTreeIndex++ + view.absTreeIndex++ } return nil } -func (treeview *FileTreeView) cursorUp() error { - err := cursorUp(treeview.gui, treeview.view) +func (view *FileTreeView) cursorUp() error { + err := cursorUp(view.gui, view.view) if err == nil { - treeview.absTreeIndex-- + view.absTreeIndex-- } return nil } -func (treeview *FileTreeView) getAbsPositionNode() (node *FileNode) { +func (view *FileTreeView) getAbsPositionNode() (node *FileNode) { var visiter func(*FileNode) error var evaluator func(*FileNode) bool var dfsCounter uint visiter = func(curNode *FileNode) error { - if dfsCounter == treeview.absTreeIndex { + if dfsCounter == view.absTreeIndex { node = curNode } dfsCounter++ @@ -89,7 +89,7 @@ func (treeview *FileTreeView) getAbsPositionNode() (node *FileNode) { return !curNode.collapsed } - err := treeview.tree.VisitDepthParentFirst(visiter, evaluator) + err := view.tree.VisitDepthParentFirst(visiter, evaluator) if err != nil { // todo: you guessed it, check errors } @@ -97,17 +97,17 @@ func (treeview *FileTreeView) getAbsPositionNode() (node *FileNode) { return node } -func (treeview *FileTreeView) toggleCollapse() error { - node := treeview.getAbsPositionNode() +func (view *FileTreeView) toggleCollapse() error { + node := view.getAbsPositionNode() node.collapsed = !node.collapsed - return treeview.render() + return view.render() } -func (treeview *FileTreeView) render() error { - renderString := treeview.tree.String() - treeview.gui.Update(func(g *gocui.Gui) error { - treeview.view.Clear() - _, err := fmt.Fprintln(treeview.view, renderString) +func (view *FileTreeView) render() error { + renderString := view.tree.String() + view.gui.Update(func(g *gocui.Gui) error { + view.view.Clear() + _, err := fmt.Fprintln(view.view, renderString) return err }) return nil diff --git a/layerview.go b/layerview.go index 929ad64..1cbd437 100644 --- a/layerview.go +++ b/layerview.go @@ -6,14 +6,51 @@ import ( "github.com/jroimartin/gocui" ) -func renderSideBar(g *gocui.Gui, v *gocui.View) error { - g.Update(func(g *gocui.Gui) error { - v, _ := g.View("side") - // todo: handle above error. - v.Clear() - //_, err := fmt.Fprintf(v, "FileNode:\n%+v\n\n", getAbsPositionNode()) - for ix, layerName := range data.manifest.Layers { - fmt.Fprintf(v, "%d: %s\n", ix+1, layerName[0:25]) +type LayerView struct { + name string + gui *gocui.Gui + view *gocui.View + layerIndex uint + manifest *Manifest +} + +func NewLayerView(name string, gui *gocui.Gui, view *gocui.View, manifest *Manifest) (layerview *LayerView) { + layerview = new(LayerView) + + // populate main fields + layerview.name = name + layerview.gui = gui + layerview.view = view + layerview.manifest = manifest + + // set view options + layerview.view.Wrap = true + layerview.view.Highlight = true + layerview.view.SelBgColor = gocui.ColorGreen + layerview.view.SelFgColor = gocui.ColorBlack + + layerview.render() + + return layerview +} + +func (view *LayerView) keybindings() error { + + if err := view.gui.SetKeybinding("side", gocui.KeyArrowDown, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.cursorDown() }); err != nil { + return err + } + if err := view.gui.SetKeybinding("side", gocui.KeyArrowUp, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.cursorUp() }); err != nil { + return err + } + + return nil +} + +func (view *LayerView) render() error { + view.gui.Update(func(g *gocui.Gui) error { + view.view.Clear() + for ix, layerName := range view.manifest.Layers { + fmt.Fprintf(view.view, "%d: %s\n", ix+1, layerName[0:25]) } return nil }) @@ -21,22 +58,22 @@ func renderSideBar(g *gocui.Gui, v *gocui.View) error { return nil } -func cursorDownLayers(g *gocui.Gui, v *gocui.View) error { - if v != nil && int(view.layerIndex) < len(data.manifest.Layers) { - cursorDown(g, v) +func (view *LayerView) cursorDown() error { + if int(view.layerIndex) < len(data.manifest.Layers) { + cursorDown(view.gui, view.view) view.layerIndex++ - renderSideBar(g, v) - view.treeView.reset(StackRange(data.refTrees, view.layerIndex)) + view.render() + views.treeView.reset(StackRange(data.refTrees, view.layerIndex)) } return nil } -func cursorUpLayers(g *gocui.Gui, v *gocui.View) error { - if v != nil && int(view.layerIndex) > 0 { - cursorUp(g, v) +func (view *LayerView) cursorUp() error { + if int(view.layerIndex) > 0 { + cursorUp(view.gui, view.view) view.layerIndex-- - renderSideBar(g, v) - view.treeView.reset(StackRange(data.refTrees, view.layerIndex)) + view.render() + views.treeView.reset(StackRange(data.refTrees, view.layerIndex)) } return nil } diff --git a/main.go b/main.go index a948250..6ea032c 100644 --- a/main.go +++ b/main.go @@ -19,10 +19,9 @@ var data struct { manifest *Manifest } -var view struct { - treeView *FileTreeView - // layerView *LayerView - layerIndex uint +var views struct { + treeView *FileTreeView + layerView *LayerView } func check(e error) { @@ -119,11 +118,11 @@ func demo() { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// func nextView(g *gocui.Gui, v *gocui.View) error { - if v == nil || v.Name() == "side" { - _, err := g.SetCurrentView("main") + if v == nil || v.Name() == views.layerView.name { + _, err := g.SetCurrentView(views.treeView.name) return err } - _, err := g.SetCurrentView("side") + _, err := g.SetCurrentView(views.layerView.name) return err } @@ -175,12 +174,6 @@ func keybindings(g *gocui.Gui) error { if err := g.SetKeybinding("main", gocui.KeyCtrlSpace, gocui.ModNone, nextView); err != nil { return err } - if err := g.SetKeybinding("side", gocui.KeyArrowDown, gocui.ModNone, cursorDownLayers); err != nil { - return err - } - if err := g.SetKeybinding("side", gocui.KeyArrowUp, gocui.ModNone, cursorUpLayers); err != nil { - return err - } return nil } @@ -192,21 +185,19 @@ func layout(g *gocui.Gui) error { if err != gocui.ErrUnknownView { return err } - v.Wrap = true - v.Highlight = true - v.SelBgColor = gocui.ColorGreen - v.SelFgColor = gocui.ColorBlack - renderSideBar(g, v) + views.layerView = NewLayerView("side", g, v, data.manifest) + views.layerView.keybindings() + } if v, err := g.SetView("main", splitCol, -1, maxX, maxY); err != nil { if err != gocui.ErrUnknownView { return err } - view.treeView = NewFileTreeView("main", g, v, StackRange(data.refTrees, 0)) - view.treeView.keybindings() + views.treeView = NewFileTreeView("main", g, v, StackRange(data.refTrees, 0)) + views.treeView.keybindings() - if _, err := g.SetCurrentView("main"); err != nil { + if _, err := g.SetCurrentView(views.treeView.name); err != nil { return err } }