abstracted layerview
This commit is contained in:
parent
0b86d01864
commit
db1fb9452c
@ -35,50 +35,50 @@ func NewFileTreeView(name string, gui *gocui.Gui, view *gocui.View, tree *FileTr
|
|||||||
return treeview
|
return treeview
|
||||||
}
|
}
|
||||||
|
|
||||||
func (treeview *FileTreeView) keybindings() error {
|
func (view *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 {
|
if err := view.gui.SetKeybinding(view.name, gocui.KeyArrowDown, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.cursorDown() }); err != nil {
|
||||||
return err
|
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
|
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 err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mehh, this is just a bad method
|
// Mehh, this is just a bad method
|
||||||
func (treeview *FileTreeView) reset(tree *FileTree) error {
|
func (view *FileTreeView) reset(tree *FileTree) error {
|
||||||
treeview.tree = tree
|
view.tree = tree
|
||||||
treeview.view.SetCursor(0, 0)
|
view.view.SetCursor(0, 0)
|
||||||
treeview.absTreeIndex = 0
|
view.absTreeIndex = 0
|
||||||
return treeview.render()
|
return view.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (treeview *FileTreeView) cursorDown() error {
|
func (view *FileTreeView) cursorDown() error {
|
||||||
err := cursorDown(treeview.gui, treeview.view)
|
err := cursorDown(view.gui, view.view)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
treeview.absTreeIndex++
|
view.absTreeIndex++
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (treeview *FileTreeView) cursorUp() error {
|
func (view *FileTreeView) cursorUp() error {
|
||||||
err := cursorUp(treeview.gui, treeview.view)
|
err := cursorUp(view.gui, view.view)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
treeview.absTreeIndex--
|
view.absTreeIndex--
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (treeview *FileTreeView) getAbsPositionNode() (node *FileNode) {
|
func (view *FileTreeView) getAbsPositionNode() (node *FileNode) {
|
||||||
var visiter func(*FileNode) error
|
var visiter func(*FileNode) error
|
||||||
var evaluator func(*FileNode) bool
|
var evaluator func(*FileNode) bool
|
||||||
var dfsCounter uint
|
var dfsCounter uint
|
||||||
|
|
||||||
visiter = func(curNode *FileNode) error {
|
visiter = func(curNode *FileNode) error {
|
||||||
if dfsCounter == treeview.absTreeIndex {
|
if dfsCounter == view.absTreeIndex {
|
||||||
node = curNode
|
node = curNode
|
||||||
}
|
}
|
||||||
dfsCounter++
|
dfsCounter++
|
||||||
@ -89,7 +89,7 @@ func (treeview *FileTreeView) getAbsPositionNode() (node *FileNode) {
|
|||||||
return !curNode.collapsed
|
return !curNode.collapsed
|
||||||
}
|
}
|
||||||
|
|
||||||
err := treeview.tree.VisitDepthParentFirst(visiter, evaluator)
|
err := view.tree.VisitDepthParentFirst(visiter, evaluator)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// todo: you guessed it, check errors
|
// todo: you guessed it, check errors
|
||||||
}
|
}
|
||||||
@ -97,17 +97,17 @@ func (treeview *FileTreeView) getAbsPositionNode() (node *FileNode) {
|
|||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
func (treeview *FileTreeView) toggleCollapse() error {
|
func (view *FileTreeView) toggleCollapse() error {
|
||||||
node := treeview.getAbsPositionNode()
|
node := view.getAbsPositionNode()
|
||||||
node.collapsed = !node.collapsed
|
node.collapsed = !node.collapsed
|
||||||
return treeview.render()
|
return view.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (treeview *FileTreeView) render() error {
|
func (view *FileTreeView) render() error {
|
||||||
renderString := treeview.tree.String()
|
renderString := view.tree.String()
|
||||||
treeview.gui.Update(func(g *gocui.Gui) error {
|
view.gui.Update(func(g *gocui.Gui) error {
|
||||||
treeview.view.Clear()
|
view.view.Clear()
|
||||||
_, err := fmt.Fprintln(treeview.view, renderString)
|
_, err := fmt.Fprintln(view.view, renderString)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
|
73
layerview.go
73
layerview.go
@ -6,14 +6,51 @@ import (
|
|||||||
"github.com/jroimartin/gocui"
|
"github.com/jroimartin/gocui"
|
||||||
)
|
)
|
||||||
|
|
||||||
func renderSideBar(g *gocui.Gui, v *gocui.View) error {
|
type LayerView struct {
|
||||||
g.Update(func(g *gocui.Gui) error {
|
name string
|
||||||
v, _ := g.View("side")
|
gui *gocui.Gui
|
||||||
// todo: handle above error.
|
view *gocui.View
|
||||||
v.Clear()
|
layerIndex uint
|
||||||
//_, err := fmt.Fprintf(v, "FileNode:\n%+v\n\n", getAbsPositionNode())
|
manifest *Manifest
|
||||||
for ix, layerName := range data.manifest.Layers {
|
}
|
||||||
fmt.Fprintf(v, "%d: %s\n", ix+1, layerName[0:25])
|
|
||||||
|
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
|
return nil
|
||||||
})
|
})
|
||||||
@ -21,22 +58,22 @@ func renderSideBar(g *gocui.Gui, v *gocui.View) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func cursorDownLayers(g *gocui.Gui, v *gocui.View) error {
|
func (view *LayerView) cursorDown() error {
|
||||||
if v != nil && int(view.layerIndex) < len(data.manifest.Layers) {
|
if int(view.layerIndex) < len(data.manifest.Layers) {
|
||||||
cursorDown(g, v)
|
cursorDown(view.gui, view.view)
|
||||||
view.layerIndex++
|
view.layerIndex++
|
||||||
renderSideBar(g, v)
|
view.render()
|
||||||
view.treeView.reset(StackRange(data.refTrees, view.layerIndex))
|
views.treeView.reset(StackRange(data.refTrees, view.layerIndex))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func cursorUpLayers(g *gocui.Gui, v *gocui.View) error {
|
func (view *LayerView) cursorUp() error {
|
||||||
if v != nil && int(view.layerIndex) > 0 {
|
if int(view.layerIndex) > 0 {
|
||||||
cursorUp(g, v)
|
cursorUp(view.gui, view.view)
|
||||||
view.layerIndex--
|
view.layerIndex--
|
||||||
renderSideBar(g, v)
|
view.render()
|
||||||
view.treeView.reset(StackRange(data.refTrees, view.layerIndex))
|
views.treeView.reset(StackRange(data.refTrees, view.layerIndex))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
33
main.go
33
main.go
@ -19,10 +19,9 @@ var data struct {
|
|||||||
manifest *Manifest
|
manifest *Manifest
|
||||||
}
|
}
|
||||||
|
|
||||||
var view struct {
|
var views struct {
|
||||||
treeView *FileTreeView
|
treeView *FileTreeView
|
||||||
// layerView *LayerView
|
layerView *LayerView
|
||||||
layerIndex uint
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func check(e error) {
|
func check(e error) {
|
||||||
@ -119,11 +118,11 @@ func demo() {
|
|||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
func nextView(g *gocui.Gui, v *gocui.View) error {
|
func nextView(g *gocui.Gui, v *gocui.View) error {
|
||||||
if v == nil || v.Name() == "side" {
|
if v == nil || v.Name() == views.layerView.name {
|
||||||
_, err := g.SetCurrentView("main")
|
_, err := g.SetCurrentView(views.treeView.name)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err := g.SetCurrentView("side")
|
_, err := g.SetCurrentView(views.layerView.name)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,12 +174,6 @@ func keybindings(g *gocui.Gui) error {
|
|||||||
if err := g.SetKeybinding("main", gocui.KeyCtrlSpace, gocui.ModNone, nextView); err != nil {
|
if err := g.SetKeybinding("main", gocui.KeyCtrlSpace, gocui.ModNone, nextView); err != nil {
|
||||||
return err
|
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
|
return nil
|
||||||
}
|
}
|
||||||
@ -192,21 +185,19 @@ func layout(g *gocui.Gui) error {
|
|||||||
if err != gocui.ErrUnknownView {
|
if err != gocui.ErrUnknownView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
v.Wrap = true
|
views.layerView = NewLayerView("side", g, v, data.manifest)
|
||||||
v.Highlight = true
|
views.layerView.keybindings()
|
||||||
v.SelBgColor = gocui.ColorGreen
|
|
||||||
v.SelFgColor = gocui.ColorBlack
|
|
||||||
renderSideBar(g, v)
|
|
||||||
}
|
}
|
||||||
if v, err := g.SetView("main", splitCol, -1, maxX, maxY); err != nil {
|
if v, err := g.SetView("main", splitCol, -1, maxX, maxY); err != nil {
|
||||||
if err != gocui.ErrUnknownView {
|
if err != gocui.ErrUnknownView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
view.treeView = NewFileTreeView("main", g, v, StackRange(data.refTrees, 0))
|
views.treeView = NewFileTreeView("main", g, v, StackRange(data.refTrees, 0))
|
||||||
view.treeView.keybindings()
|
views.treeView.keybindings()
|
||||||
|
|
||||||
if _, err := g.SetCurrentView("main"); err != nil {
|
if _, err := g.SetCurrentView(views.treeView.name); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user