summaryrefslogtreecommitdiffstats
path: root/ui/layerview.go
blob: b211ba6a5cb8af201c802ad2dbb45a6e93f82a49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package ui

import (
	"fmt"

	"github.com/jroimartin/gocui"
	"github.com/wagoodman/docker-image-explorer/image"
)

type LayerView struct {
	Name       string
	gui        *gocui.Gui
	view       *gocui.View
	LayerIndex int
	Layers     []*image.Layer
}

func NewLayerView(name string, gui *gocui.Gui, layers []*image.Layer) (layerview *LayerView) {
	layerview = new(LayerView)

	// populate main fields
	layerview.Name = name
	layerview.gui = gui
	layerview.Layers = layers

	return layerview
}

func (view *LayerView) Setup(v *gocui.View) error {

	// set view options
	view.view = v
	view.view.Wrap = false
	view.view.Highlight = true
	view.view.SelBgColor = gocui.ColorGreen
	view.view.SelFgColor = gocui.ColorBlack
	view.view.Frame = false

	// set keybindings
	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 := view.gui.SetKeybinding(view.Name, gocui.KeyArrowUp, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.CursorUp() }); err != nil {
		return err
	}

	view.Render()

	return nil
}

func (view *LayerView) Render() error {
	view.gui.Update(func(g *gocui.Gui) error {
		view.view.Clear()
		for idx := len(view.Layers) - 1; idx >= 0; idx-- {
			layer := view.Layers[idx]
			fmt.Fprintln(view.view, layer.String())
		}
		return nil
	})
	// todo: blerg
	return nil
}

func (view *LayerView) CursorDown() error {
	if int(view.LayerIndex) < len(view.Layers) {
		err := CursorDown(view.gui, view.view)
		if err == nil {
			view.LayerIndex++
			view.Render()
			Views.Tree.setLayer(view.LayerIndex)
		}
	}
	return nil
}

func (view *LayerView) CursorUp() error {
	if int(view.LayerIndex) > 0 {
		err := CursorUp(view.gui, view.view)
		if err == nil {
			view.LayerIndex--
			view.Render()
			Views.Tree.setLayer(view.LayerIndex)
		}
	}
	return nil
}