* rework CI validation workflow and makefile * enable push * fix job names * fix license check * fix snapshot builds * fix acceptance tests * fix linting * disable pull request event * rework windows runner caching * disable release pipeline and add issue templates
125 lines
2.9 KiB
Go
125 lines
2.9 KiB
Go
package view
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/awesome-gocui/gocui"
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"github.com/wagoodman/dive/runtime/ui/format"
|
|
"github.com/wagoodman/dive/utils"
|
|
)
|
|
|
|
// Debug is just for me :)
|
|
type Debug struct {
|
|
name string
|
|
gui *gocui.Gui
|
|
view *gocui.View
|
|
header *gocui.View
|
|
|
|
selectedView Helper
|
|
}
|
|
|
|
// newDebugView creates a new view object attached the the global [gocui] screen object.
|
|
func newDebugView(gui *gocui.Gui) (controller *Debug) {
|
|
controller = new(Debug)
|
|
|
|
// populate main fields
|
|
controller.name = "debug"
|
|
controller.gui = gui
|
|
|
|
return controller
|
|
}
|
|
|
|
func (v *Debug) SetCurrentView(r Helper) {
|
|
v.selectedView = r
|
|
}
|
|
|
|
func (v *Debug) Name() string {
|
|
return v.name
|
|
}
|
|
|
|
// Setup initializes the UI concerns within the context of a global [gocui] view object.
|
|
func (v *Debug) Setup(view *gocui.View, header *gocui.View) error {
|
|
logrus.Tracef("view.Setup() %s", v.Name())
|
|
|
|
// set controller options
|
|
v.view = view
|
|
v.view.Editable = false
|
|
v.view.Wrap = false
|
|
v.view.Frame = false
|
|
|
|
v.header = header
|
|
v.header.Editable = false
|
|
v.header.Wrap = false
|
|
v.header.Frame = false
|
|
|
|
return v.Render()
|
|
}
|
|
|
|
// IsVisible indicates if the status view pane is currently initialized.
|
|
func (v *Debug) IsVisible() bool {
|
|
return v != nil
|
|
}
|
|
|
|
// Update refreshes the state objects for future rendering (currently does nothing).
|
|
func (v *Debug) Update() error {
|
|
return nil
|
|
}
|
|
|
|
// OnLayoutChange is called whenever the screen dimensions are changed
|
|
func (v *Debug) OnLayoutChange() error {
|
|
err := v.Update()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return v.Render()
|
|
}
|
|
|
|
// Render flushes the state objects to the screen.
|
|
func (v *Debug) Render() error {
|
|
logrus.Tracef("view.Render() %s", v.Name())
|
|
|
|
v.gui.Update(func(g *gocui.Gui) error {
|
|
// update header...
|
|
v.header.Clear()
|
|
width, _ := g.Size()
|
|
headerStr := format.RenderHeader("Debug", width, false)
|
|
_, _ = fmt.Fprintln(v.header, headerStr)
|
|
|
|
// update view...
|
|
v.view.Clear()
|
|
_, err := fmt.Fprintln(v.view, "blerg")
|
|
if err != nil {
|
|
logrus.Debug("unable to write to buffer: ", err)
|
|
}
|
|
|
|
return nil
|
|
})
|
|
return nil
|
|
}
|
|
|
|
func (v *Debug) Layout(g *gocui.Gui, minX, minY, maxX, maxY int) error {
|
|
logrus.Tracef("view.Layout(minX: %d, minY: %d, maxX: %d, maxY: %d) %s", minX, minY, maxX, maxY, v.Name())
|
|
|
|
// header
|
|
headerSize := 1
|
|
// note: maxY needs to account for the (invisible) border, thus a +1
|
|
header, headerErr := g.SetView(v.Name()+"header", minX, minY, maxX, minY+headerSize+1, 0)
|
|
// we are going to overlap the view over the (invisible) border (so minY will be one less than expected).
|
|
// additionally, maxY will be bumped by one to include the border
|
|
view, viewErr := g.SetView(v.Name(), minX, minY+headerSize, maxX, maxY+1, 0)
|
|
if utils.IsNewView(viewErr, headerErr) {
|
|
err := v.Setup(view, header)
|
|
if err != nil {
|
|
logrus.Error("unable to setup debug controller", err)
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (v *Debug) RequestedSize(available int) *int {
|
|
return nil
|
|
}
|