move cursor when a service moves

This commit is contained in:
Jesse Duffield 2019-06-03 20:52:07 +10:00
parent 113abbf59b
commit 54a5890485
2 changed files with 30 additions and 7 deletions

View file

@ -208,10 +208,33 @@ func (gui *Gui) refreshContainersAndServices() error {
// if the containersView hasn't been instantiated yet we just return
return nil
}
// keep track of current service selected so that we can reposition our cursor if it moves position in the list
sl := gui.State.Panels.Services.SelectedLine
var selectedService *commands.Service
if len(gui.DockerCommand.Services) > 0 {
selectedService = gui.DockerCommand.Services[sl]
}
if err := gui.refreshStateContainersAndServices(); err != nil {
return err
}
// see if our selected service has moved
if selectedService != nil {
for i, service := range gui.DockerCommand.Services {
if service.ID == selectedService.ID {
if i == sl {
break
}
gui.State.Panels.Services.SelectedLine = i
if err := gui.focusPoint(0, i, len(gui.DockerCommand.Services), gui.getServicesView()); err != nil {
return err
}
}
}
}
if len(gui.DockerCommand.Containers) > 0 && gui.State.Panels.Containers.SelectedLine == -1 {
gui.State.Panels.Containers.SelectedLine = 0
}

View file

@ -17,7 +17,7 @@ func (gui *Gui) getServiceContexts() []string {
return []string{"logs", "config", "stats"}
}
func (gui *Gui) getSelectedService(g *gocui.Gui) (*commands.Service, error) {
func (gui *Gui) getSelectedService() (*commands.Service, error) {
selectedLine := gui.State.Panels.Services.SelectedLine
if selectedLine == -1 {
return &commands.Service{}, errors.New("no service selected")
@ -55,7 +55,7 @@ func (gui *Gui) handleServiceSelect(g *gocui.Gui, v *gocui.View) error {
return err
}
service, err := gui.getSelectedService(g)
service, err := gui.getSelectedService()
if err != nil {
return err
}
@ -123,7 +123,7 @@ func (gui *Gui) renderServiceStats(mainView *gocui.View, service *commands.Servi
}
func (gui *Gui) renderServiceLogs(mainView *gocui.View, service *commands.Service) error {
service, err := gui.getSelectedService(gui.g)
service, err := gui.getSelectedService()
if err != nil {
return nil
}
@ -194,7 +194,7 @@ func (r *removeServiceOption) GetDisplayStrings(isFocused bool) []string {
}
func (gui *Gui) handleServiceRemoveMenu(g *gocui.Gui, v *gocui.View) error {
service, err := gui.getSelectedService(g)
service, err := gui.getSelectedService()
if err != nil {
return nil
}
@ -232,7 +232,7 @@ func (gui *Gui) handleServiceRemoveMenu(g *gocui.Gui, v *gocui.View) error {
}
func (gui *Gui) handleServiceStop(g *gocui.Gui, v *gocui.View) error {
service, err := gui.getSelectedService(g)
service, err := gui.getSelectedService()
if err != nil {
return nil
}
@ -250,7 +250,7 @@ func (gui *Gui) handleServiceStop(g *gocui.Gui, v *gocui.View) error {
}
func (gui *Gui) handleServiceRestart(g *gocui.Gui, v *gocui.View) error {
service, err := gui.getSelectedService(g)
service, err := gui.getSelectedService()
if err != nil {
return nil
}
@ -265,7 +265,7 @@ func (gui *Gui) handleServiceRestart(g *gocui.Gui, v *gocui.View) error {
}
func (gui *Gui) handleServiceAttach(g *gocui.Gui, v *gocui.View) error {
service, err := gui.getSelectedService(g)
service, err := gui.getSelectedService()
if err != nil {
return nil
}