refactor some more

This commit is contained in:
Jesse Duffield 2022-10-23 12:38:45 -07:00
parent aab8bcfbcc
commit 751dbef42e
5 changed files with 68 additions and 140 deletions

View file

@ -130,7 +130,6 @@ func NewGui(log *logrus.Entry, dockerCommand *commands.DockerCommand, oSCommand
Log: log, Log: log,
DockerCommand: dockerCommand, DockerCommand: dockerCommand,
OSCommand: oSCommand, OSCommand: oSCommand,
// TODO: look into this warning
State: initialState, State: initialState,
Config: config, Config: config,
Tr: tr, Tr: tr,

View file

@ -109,7 +109,7 @@ func (gui *Gui) refreshStateImages() error {
return nil return nil
} }
func (gui *Gui) filterString(view *gocui.View) string { func (gui *Gui) FilterString(view *gocui.View) string {
if gui.State.Filter.panel != nil && gui.State.Filter.panel.View() != view { if gui.State.Filter.panel != nil && gui.State.Filter.panel.View() != view {
return "" return ""
} }
@ -117,11 +117,6 @@ func (gui *Gui) filterString(view *gocui.View) string {
return gui.State.Filter.needle return gui.State.Filter.needle
} }
// TODO: merge into the above
func (gui *Gui) FilterString(view *gocui.View) string {
return gui.filterString(view)
}
func (gui *Gui) handleImagesRemoveMenu(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleImagesRemoveMenu(g *gocui.Gui, v *gocui.View) error {
type removeImageOption struct { type removeImageOption struct {
description string description string

View file

@ -78,25 +78,25 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
ViewName: "", ViewName: "",
Key: gocui.KeyPgup, Key: gocui.KeyPgup,
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.scrollUpMain, Handler: wrappedHandler(gui.scrollUpMain),
}, },
{ {
ViewName: "", ViewName: "",
Key: gocui.KeyPgdn, Key: gocui.KeyPgdn,
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.scrollDownMain, Handler: wrappedHandler(gui.scrollDownMain),
}, },
{ {
ViewName: "", ViewName: "",
Key: gocui.KeyCtrlU, Key: gocui.KeyCtrlU,
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.scrollUpMain, Handler: wrappedHandler(gui.scrollUpMain),
}, },
{ {
ViewName: "", ViewName: "",
Key: gocui.KeyCtrlD, Key: gocui.KeyCtrlD,
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.scrollDownMain, Handler: wrappedHandler(gui.scrollDownMain),
}, },
{ {
ViewName: "", ViewName: "",
@ -142,20 +142,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handleOpenConfig, Handler: gui.handleOpenConfig,
Description: gui.Tr.OpenConfig, Description: gui.Tr.OpenConfig,
}, },
{
ViewName: "project",
Key: '[',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Projects.OnPrevContext),
Description: gui.Tr.PreviousContext,
},
{
ViewName: "project",
Key: ']',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Projects.OnNextContext),
Description: gui.Tr.NextContext,
},
{ {
ViewName: "project", ViewName: "project",
Key: 'm', Key: 'm',
@ -163,12 +149,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handleViewAllLogs, Handler: gui.handleViewAllLogs,
Description: gui.Tr.ViewLogs, Description: gui.Tr.ViewLogs,
}, },
{
ViewName: "project",
Key: gocui.MouseLeft,
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Projects.OnClick),
},
{ {
ViewName: "menu", ViewName: "menu",
Key: gocui.KeyEsc, Key: gocui.KeyEsc,
@ -205,20 +185,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleDonate, Handler: gui.handleDonate,
}, },
{
ViewName: "containers",
Key: '[',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Containers.OnPrevContext),
Description: gui.Tr.PreviousContext,
},
{
ViewName: "containers",
Key: ']',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Containers.OnNextContext),
Description: gui.Tr.NextContext,
},
{ {
ViewName: "containers", ViewName: "containers",
Key: 'd', Key: 'd',
@ -366,20 +332,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handleProjectDown, Handler: gui.handleProjectDown,
Description: gui.Tr.DownProject, Description: gui.Tr.DownProject,
}, },
{
ViewName: "services",
Key: '[',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Services.OnPrevContext),
Description: gui.Tr.PreviousContext,
},
{
ViewName: "services",
Key: ']',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Services.OnNextContext),
Description: gui.Tr.NextContext,
},
{ {
ViewName: "services", ViewName: "services",
Key: 'R', Key: 'R',
@ -415,20 +367,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handleServicesOpenInBrowserCommand, Handler: gui.handleServicesOpenInBrowserCommand,
Description: gui.Tr.OpenInBrowser, Description: gui.Tr.OpenInBrowser,
}, },
{
ViewName: "images",
Key: '[',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Images.OnPrevContext),
Description: gui.Tr.PreviousContext,
},
{
ViewName: "images",
Key: ']',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Images.OnNextContext),
Description: gui.Tr.NextContext,
},
{ {
ViewName: "images", ViewName: "images",
Key: 'c', Key: 'c',
@ -450,20 +388,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handleImagesBulkCommand, Handler: gui.handleImagesBulkCommand,
Description: gui.Tr.ViewBulkCommands, Description: gui.Tr.ViewBulkCommands,
}, },
{
ViewName: "volumes",
Key: '[',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Volumes.OnPrevContext),
Description: gui.Tr.PreviousContext,
},
{
ViewName: "volumes",
Key: ']',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.Panels.Volumes.OnNextContext),
Description: gui.Tr.NextContext,
},
{ {
ViewName: "volumes", ViewName: "volumes",
Key: 'c', Key: 'c',
@ -532,13 +456,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
ViewName: "", ViewName: "",
Key: 'J', Key: 'J',
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.scrollDownMain, Handler: wrappedHandler(gui.scrollDownMain),
}, },
{ {
ViewName: "", ViewName: "",
Key: 'K', Key: 'K',
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.scrollUpMain, Handler: wrappedHandler(gui.scrollUpMain),
}, },
{ {
ViewName: "", ViewName: "",
@ -566,62 +490,69 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
}, },
} }
// TODO: add more views here for _, panel := range gui.allSidePanels() {
for _, viewName := range []string{"project", "services", "containers", "images", "volumes"} {
bindings = append(bindings, []*Binding{ bindings = append(bindings, []*Binding{
{ViewName: viewName, Key: gocui.KeyArrowLeft, Modifier: gocui.ModNone, Handler: gui.previousView}, {ViewName: panel.View().Name(), Key: gocui.KeyArrowLeft, Modifier: gocui.ModNone, Handler: gui.previousView},
{ViewName: viewName, Key: gocui.KeyArrowRight, Modifier: gocui.ModNone, Handler: gui.nextView}, {ViewName: panel.View().Name(), Key: gocui.KeyArrowRight, Modifier: gocui.ModNone, Handler: gui.nextView},
{ViewName: viewName, Key: 'h', Modifier: gocui.ModNone, Handler: gui.previousView}, {ViewName: panel.View().Name(), Key: 'h', Modifier: gocui.ModNone, Handler: gui.previousView},
{ViewName: viewName, Key: 'l', Modifier: gocui.ModNone, Handler: gui.nextView}, {ViewName: panel.View().Name(), Key: 'l', Modifier: gocui.ModNone, Handler: gui.nextView},
{ViewName: viewName, Key: gocui.KeyTab, Modifier: gocui.ModNone, Handler: gui.nextView}, {ViewName: panel.View().Name(), Key: gocui.KeyTab, Modifier: gocui.ModNone, Handler: gui.nextView},
{ViewName: viewName, Key: gocui.KeyBacktab, Modifier: gocui.ModNone, Handler: gui.previousView}, {ViewName: panel.View().Name(), Key: gocui.KeyBacktab, Modifier: gocui.ModNone, Handler: gui.previousView},
}...) }...)
} }
panelMap := map[string]struct { setUpDownClickBindings := func(viewName string, onUp func() error, onDown func() error, onClick func() error) {
onKeyUpPress func(*gocui.Gui, *gocui.View) error
onKeyDownPress func(*gocui.Gui, *gocui.View) error
onClick func(*gocui.Gui, *gocui.View) error
}{
"menu": {onKeyUpPress: wrappedHandler(gui.Panels.Menu.OnPrevLine), onKeyDownPress: wrappedHandler(gui.Panels.Menu.OnNextLine), onClick: wrappedHandler(gui.Panels.Menu.OnClick)},
"services": {onKeyUpPress: wrappedHandler(gui.Panels.Services.OnPrevLine), onKeyDownPress: wrappedHandler(gui.Panels.Services.OnNextLine), onClick: wrappedHandler(gui.Panels.Services.OnClick)},
"containers": {onKeyUpPress: wrappedHandler(gui.Panels.Containers.OnPrevLine), onKeyDownPress: wrappedHandler(gui.Panels.Containers.OnNextLine), onClick: wrappedHandler(gui.Panels.Containers.OnClick)},
"images": {onKeyUpPress: wrappedHandler(gui.Panels.Images.OnPrevLine), onKeyDownPress: wrappedHandler(gui.Panels.Images.OnNextLine), onClick: wrappedHandler(gui.Panels.Images.OnClick)},
"volumes": {onKeyUpPress: wrappedHandler(gui.Panels.Volumes.OnPrevLine), onKeyDownPress: wrappedHandler(gui.Panels.Volumes.OnNextLine), onClick: wrappedHandler(gui.Panels.Volumes.OnClick)},
"main": {onKeyUpPress: gui.scrollUpMain, onKeyDownPress: gui.scrollDownMain, onClick: gui.handleMainClick},
}
for viewName, functions := range panelMap {
bindings = append(bindings, []*Binding{ bindings = append(bindings, []*Binding{
{ViewName: viewName, Key: 'k', Modifier: gocui.ModNone, Handler: functions.onKeyUpPress}, {ViewName: viewName, Key: 'k', Modifier: gocui.ModNone, Handler: wrappedHandler(onUp)},
{ViewName: viewName, Key: gocui.KeyArrowUp, Modifier: gocui.ModNone, Handler: functions.onKeyUpPress}, {ViewName: viewName, Key: gocui.KeyArrowUp, Modifier: gocui.ModNone, Handler: wrappedHandler(onUp)},
{ViewName: viewName, Key: gocui.MouseWheelUp, Modifier: gocui.ModNone, Handler: functions.onKeyUpPress}, {ViewName: viewName, Key: gocui.MouseWheelUp, Modifier: gocui.ModNone, Handler: wrappedHandler(onUp)},
{ViewName: viewName, Key: 'j', Modifier: gocui.ModNone, Handler: functions.onKeyDownPress}, {ViewName: viewName, Key: 'j', Modifier: gocui.ModNone, Handler: wrappedHandler(onDown)},
{ViewName: viewName, Key: gocui.KeyArrowDown, Modifier: gocui.ModNone, Handler: functions.onKeyDownPress}, {ViewName: viewName, Key: gocui.KeyArrowDown, Modifier: gocui.ModNone, Handler: wrappedHandler(onDown)},
{ViewName: viewName, Key: gocui.MouseWheelDown, Modifier: gocui.ModNone, Handler: functions.onKeyDownPress}, {ViewName: viewName, Key: gocui.MouseWheelDown, Modifier: gocui.ModNone, Handler: wrappedHandler(onDown)},
{ViewName: viewName, Key: gocui.MouseLeft, Modifier: gocui.ModNone, Handler: functions.onClick}, {ViewName: viewName, Key: gocui.MouseLeft, Modifier: gocui.ModNone, Handler: wrappedHandler(onClick)},
}...) }...)
} }
for _, sidePanel := range gui.allSidePanels() {
bindings = append(bindings, &Binding{
ViewName: sidePanel.View().Name(),
Key: gocui.KeyEnter,
Modifier: gocui.ModNone,
Handler: gui.handleEnterMain,
Description: gui.Tr.FocusMain,
})
}
for _, panel := range gui.allListPanels() { for _, panel := range gui.allListPanels() {
setUpDownClickBindings(panel.View().Name(), panel.OnPrevLine, panel.OnNextLine, panel.OnClick)
}
setUpDownClickBindings("main", gui.scrollUpMain, gui.scrollDownMain, gui.handleMainClick)
for _, panel := range gui.allSidePanels() {
bindings = append(bindings, bindings = append(bindings,
&Binding{ &Binding{
ViewName: panel.View().Name(), ViewName: panel.View().Name(),
Key: '/', Key: gocui.KeyEnter,
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.handleOpenFilter), Handler: gui.handleEnterMain,
Description: gui.Tr.LcFilter, Description: gui.Tr.FocusMain,
}) },
&Binding{
ViewName: panel.View().Name(),
Key: '[',
Modifier: gocui.ModNone,
Handler: wrappedHandler(panel.OnPrevContext),
Description: gui.Tr.PreviousContext,
},
&Binding{
ViewName: panel.View().Name(),
Key: ']',
Modifier: gocui.ModNone,
Handler: wrappedHandler(panel.OnNextContext),
Description: gui.Tr.NextContext,
},
)
}
for _, panel := range gui.allListPanels() {
bindings = append(bindings, &Binding{
ViewName: panel.View().Name(),
Key: '/',
Modifier: gocui.ModNone,
Handler: wrappedHandler(gui.handleOpenFilter),
Description: gui.Tr.LcFilter,
})
} }
return bindings return bindings

View file

@ -85,6 +85,11 @@ type ISideListPanel interface {
Refocus() Refocus()
RerenderList() error RerenderList() error
IsFilterDisabled() bool IsFilterDisabled() bool
OnNextLine() error
OnPrevLine() error
OnClick() error
OnPrevContext() error
OnNextContext() error
} }
var _ ISideListPanel = &SideListPanel[int]{} var _ ISideListPanel = &SideListPanel[int]{}

View file

@ -6,7 +6,7 @@ import (
"github.com/jesseduffield/gocui" "github.com/jesseduffield/gocui"
) )
func (gui *Gui) scrollUpMain(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) scrollUpMain() error {
mainView := gui.Views.Main mainView := gui.Views.Main
mainView.Autoscroll = false mainView.Autoscroll = false
ox, oy := mainView.Origin() ox, oy := mainView.Origin()
@ -14,7 +14,7 @@ func (gui *Gui) scrollUpMain(g *gocui.Gui, v *gocui.View) error {
return mainView.SetOrigin(ox, newOy) return mainView.SetOrigin(ox, newOy)
} }
func (gui *Gui) scrollDownMain(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) scrollDownMain() error {
mainView := gui.Views.Main mainView := gui.Views.Main
mainView.Autoscroll = false mainView.Autoscroll = false
ox, oy := mainView.Origin() ox, oy := mainView.Origin()
@ -105,18 +105,16 @@ func (gui *Gui) handleExitMain(g *gocui.Gui, v *gocui.View) error {
return gui.returnFocus() return gui.returnFocus()
} }
func (gui *Gui) handleMainClick(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleMainClick() error {
if gui.popupPanelFocused() { if gui.popupPanelFocused() {
return nil return nil
} }
currentView := gui.g.CurrentView() currentView := gui.g.CurrentView()
if currentView != nil && currentView.Name() == "main" { if currentView.Name() != "main" {
currentView = nil gui.Views.Main.ParentView = currentView
} else {
v.ParentView = currentView
} }
return gui.switchFocus(v) return gui.switchFocus(gui.Views.Main)
} }