mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-23 07:31:03 +00:00
fix up click events on list panels
This commit is contained in:
parent
8b99753ab8
commit
dcb8b3329f
6 changed files with 65 additions and 104 deletions
|
|
@ -33,28 +33,12 @@ func (gui *Gui) getSelectedContainer() (*commands.Container, error) {
|
|||
return gui.DockerCommand.DisplayContainers[selectedLine], nil
|
||||
}
|
||||
|
||||
func (gui *Gui) handleContainersFocus(g *gocui.Gui, v *gocui.View) error {
|
||||
if gui.popupPanelFocused() {
|
||||
return nil
|
||||
}
|
||||
func (gui *Gui) handleContainersClick(g *gocui.Gui, v *gocui.View) error {
|
||||
itemCount := len(gui.DockerCommand.DisplayContainers)
|
||||
handleSelect := gui.handleContainerSelect
|
||||
selectedLine := &gui.State.Panels.Containers.SelectedLine
|
||||
|
||||
cx, cy := v.Cursor()
|
||||
_, oy := v.Origin()
|
||||
|
||||
prevSelectedLine := gui.State.Panels.Containers.SelectedLine
|
||||
newSelectedLine := cy - oy
|
||||
|
||||
if newSelectedLine > len(gui.DockerCommand.DisplayContainers)-1 || len(utils.Decolorise(gui.DockerCommand.DisplayContainers[newSelectedLine].Name)) < cx {
|
||||
return gui.handleContainerSelect(gui.g, v)
|
||||
}
|
||||
|
||||
gui.State.Panels.Containers.SelectedLine = newSelectedLine
|
||||
|
||||
if prevSelectedLine == newSelectedLine && gui.currentViewName() == v.Name() {
|
||||
return nil
|
||||
}
|
||||
|
||||
return gui.handleContainerSelect(gui.g, v)
|
||||
return gui.handleClick(v, itemCount, selectedLine, handleSelect)
|
||||
}
|
||||
|
||||
func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View) error {
|
||||
|
|
@ -70,15 +54,15 @@ func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
if err := gui.focusPoint(0, gui.State.Panels.Containers.SelectedLine, len(gui.DockerCommand.DisplayContainers), v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
key := "containers-" + container.ID + "-" + gui.getContainerContexts()[gui.State.Panels.Containers.ContextIndex]
|
||||
if !gui.shouldRefresh(key) {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := gui.focusPoint(0, gui.State.Panels.Containers.SelectedLine, len(gui.DockerCommand.DisplayContainers), v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mainView := gui.getMainView()
|
||||
mainView.Tabs = gui.getContainerContextTitles()
|
||||
mainView.TabIndex = gui.State.Panels.Containers.ContextIndex
|
||||
|
|
|
|||
|
|
@ -32,28 +32,12 @@ func (gui *Gui) getSelectedImage(g *gocui.Gui) (*commands.Image, error) {
|
|||
return gui.DockerCommand.Images[selectedLine], nil
|
||||
}
|
||||
|
||||
func (gui *Gui) handleImagesFocus(g *gocui.Gui, v *gocui.View) error {
|
||||
if gui.popupPanelFocused() {
|
||||
return nil
|
||||
}
|
||||
func (gui *Gui) handleImagesClick(g *gocui.Gui, v *gocui.View) error {
|
||||
itemCount := len(gui.DockerCommand.Images)
|
||||
handleSelect := gui.handleImageSelect
|
||||
selectedLine := &gui.State.Panels.Images.SelectedLine
|
||||
|
||||
cx, cy := v.Cursor()
|
||||
_, oy := v.Origin()
|
||||
|
||||
prevSelectedLine := gui.State.Panels.Images.SelectedLine
|
||||
newSelectedLine := cy - oy
|
||||
|
||||
if newSelectedLine > len(gui.DockerCommand.Images)-1 || len(utils.Decolorise(gui.DockerCommand.Images[newSelectedLine].Name)) < cx {
|
||||
return gui.handleImageSelect(gui.g, v)
|
||||
}
|
||||
|
||||
gui.State.Panels.Images.SelectedLine = newSelectedLine
|
||||
|
||||
if !(prevSelectedLine == newSelectedLine && gui.currentViewName() == v.Name()) {
|
||||
return gui.handleImageSelect(gui.g, v)
|
||||
}
|
||||
|
||||
return nil
|
||||
return gui.handleClick(v, itemCount, selectedLine, handleSelect)
|
||||
}
|
||||
|
||||
func (gui *Gui) handleImageSelect(g *gocui.Gui, v *gocui.View) error {
|
||||
|
|
@ -69,15 +53,15 @@ func (gui *Gui) handleImageSelect(g *gocui.Gui, v *gocui.View) error {
|
|||
return gui.renderString(g, "main", gui.Tr.NoImages)
|
||||
}
|
||||
|
||||
if err := gui.focusPoint(0, gui.State.Panels.Images.SelectedLine, len(gui.DockerCommand.Images), v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
key := "images-" + Image.ID + "-" + gui.getImageContexts()[gui.State.Panels.Images.ContextIndex]
|
||||
if !gui.shouldRefresh(key) {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := gui.focusPoint(0, gui.State.Panels.Images.SelectedLine, len(gui.DockerCommand.Images), v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mainView := gui.getMainView()
|
||||
mainView.Tabs = gui.getImageContextTitles()
|
||||
mainView.TabIndex = gui.State.Panels.Images.ContextIndex
|
||||
|
|
|
|||
|
|
@ -160,6 +160,12 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
|
|||
Handler: gui.handleViewAllLogs,
|
||||
Description: gui.Tr.ViewLogs,
|
||||
},
|
||||
{
|
||||
ViewName: "status",
|
||||
Key: gocui.MouseLeft,
|
||||
Modifier: gocui.ModNone,
|
||||
Handler: gui.handleStatusSelect,
|
||||
},
|
||||
{
|
||||
ViewName: "menu",
|
||||
Key: gocui.KeyEsc,
|
||||
|
|
@ -379,10 +385,10 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
|
|||
focus func(*gocui.Gui, *gocui.View) error
|
||||
}{
|
||||
"menu": {prevLine: gui.handleMenuPrevLine, nextLine: gui.handleMenuNextLine, focus: gui.handleMenuSelect},
|
||||
"services": {prevLine: gui.handleServicesPrevLine, nextLine: gui.handleServicesNextLine, focus: gui.handleServicesFocus},
|
||||
"containers": {prevLine: gui.handleContainersPrevLine, nextLine: gui.handleContainersNextLine, focus: gui.handleContainersFocus},
|
||||
"images": {prevLine: gui.handleImagesPrevLine, nextLine: gui.handleImagesNextLine, focus: gui.handleImagesFocus},
|
||||
"volumes": {prevLine: gui.handleVolumesPrevLine, nextLine: gui.handleVolumesNextLine, focus: gui.handleVolumesFocus},
|
||||
"services": {prevLine: gui.handleServicesPrevLine, nextLine: gui.handleServicesNextLine, focus: gui.handleServicesClick},
|
||||
"containers": {prevLine: gui.handleContainersPrevLine, nextLine: gui.handleContainersNextLine, focus: gui.handleContainersClick},
|
||||
"images": {prevLine: gui.handleImagesPrevLine, nextLine: gui.handleImagesNextLine, focus: gui.handleImagesClick},
|
||||
"volumes": {prevLine: gui.handleVolumesPrevLine, nextLine: gui.handleVolumesNextLine, focus: gui.handleVolumesClick},
|
||||
}
|
||||
|
||||
for viewName, functions := range listPanelMap {
|
||||
|
|
|
|||
|
|
@ -30,28 +30,12 @@ func (gui *Gui) getSelectedService() (*commands.Service, error) {
|
|||
return gui.DockerCommand.Services[selectedLine], nil
|
||||
}
|
||||
|
||||
func (gui *Gui) handleServicesFocus(g *gocui.Gui, v *gocui.View) error {
|
||||
if gui.popupPanelFocused() {
|
||||
return nil
|
||||
}
|
||||
func (gui *Gui) handleServicesClick(g *gocui.Gui, v *gocui.View) error {
|
||||
itemCount := len(gui.DockerCommand.Services)
|
||||
handleSelect := gui.handleServiceSelect
|
||||
selectedLine := &gui.State.Panels.Services.SelectedLine
|
||||
|
||||
cx, cy := v.Cursor()
|
||||
_, oy := v.Origin()
|
||||
|
||||
prevSelectedLine := gui.State.Panels.Services.SelectedLine
|
||||
newSelectedLine := cy - oy
|
||||
|
||||
if newSelectedLine > len(gui.DockerCommand.Services)-1 || len(utils.Decolorise(gui.DockerCommand.Services[newSelectedLine].Name)) < cx {
|
||||
return gui.handleServiceSelect(gui.g, v)
|
||||
}
|
||||
|
||||
gui.State.Panels.Services.SelectedLine = newSelectedLine
|
||||
|
||||
if prevSelectedLine == newSelectedLine && gui.currentViewName() == v.Name() {
|
||||
return nil
|
||||
}
|
||||
|
||||
return gui.handleServiceSelect(gui.g, v)
|
||||
return gui.handleClick(v, itemCount, selectedLine, handleSelect)
|
||||
}
|
||||
|
||||
func (gui *Gui) handleServiceSelect(g *gocui.Gui, v *gocui.View) error {
|
||||
|
|
@ -69,15 +53,15 @@ func (gui *Gui) handleServiceSelect(g *gocui.Gui, v *gocui.View) error {
|
|||
containerID = service.Container.ID
|
||||
}
|
||||
|
||||
if err := gui.focusPoint(0, gui.State.Panels.Services.SelectedLine, len(gui.DockerCommand.Services), v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
key := "services-" + service.ID + "-" + containerID + "-" + gui.getServiceContexts()[gui.State.Panels.Services.ContextIndex]
|
||||
if !gui.shouldRefresh(key) {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := gui.focusPoint(0, gui.State.Panels.Services.SelectedLine, len(gui.DockerCommand.Services), v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mainView := gui.getMainView()
|
||||
|
||||
mainView.Tabs = gui.getServiceContextTitles()
|
||||
|
|
|
|||
|
|
@ -383,3 +383,22 @@ func (gui *Gui) clearMainView() {
|
|||
mainView.SetOrigin(0, 0)
|
||||
mainView.SetCursor(0, 0)
|
||||
}
|
||||
|
||||
func (gui *Gui) handleClick(v *gocui.View, itemCount int, selectedLine *int, handleSelect func(*gocui.Gui, *gocui.View) error) error {
|
||||
if gui.popupPanelFocused() {
|
||||
return nil
|
||||
}
|
||||
|
||||
_, cy := v.Cursor()
|
||||
_, oy := v.Origin()
|
||||
|
||||
newSelectedLine := cy - oy
|
||||
|
||||
if newSelectedLine > itemCount-1 {
|
||||
newSelectedLine = itemCount - 1
|
||||
}
|
||||
|
||||
*selectedLine = newSelectedLine
|
||||
|
||||
return handleSelect(gui.g, v)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,28 +29,12 @@ func (gui *Gui) getSelectedVolume() (*commands.Volume, error) {
|
|||
return gui.DockerCommand.Volumes[selectedLine], nil
|
||||
}
|
||||
|
||||
func (gui *Gui) handleVolumesFocus(g *gocui.Gui, v *gocui.View) error {
|
||||
if gui.popupPanelFocused() {
|
||||
return nil
|
||||
}
|
||||
func (gui *Gui) handleVolumesClick(g *gocui.Gui, v *gocui.View) error {
|
||||
itemCount := len(gui.DockerCommand.Volumes)
|
||||
handleSelect := gui.handleVolumeSelect
|
||||
selectedLine := &gui.State.Panels.Volumes.SelectedLine
|
||||
|
||||
cx, cy := v.Cursor()
|
||||
_, oy := v.Origin()
|
||||
|
||||
prevSelectedLine := gui.State.Panels.Volumes.SelectedLine
|
||||
newSelectedLine := cy - oy
|
||||
|
||||
if newSelectedLine > len(gui.DockerCommand.Volumes)-1 || len(utils.Decolorise(gui.DockerCommand.Volumes[newSelectedLine].Name)) < cx {
|
||||
return gui.handleVolumeSelect(gui.g, v)
|
||||
}
|
||||
|
||||
gui.State.Panels.Volumes.SelectedLine = newSelectedLine
|
||||
|
||||
if !(prevSelectedLine == newSelectedLine && gui.currentViewName() == v.Name()) {
|
||||
return gui.handleVolumeSelect(gui.g, v)
|
||||
}
|
||||
|
||||
return nil
|
||||
return gui.handleClick(v, itemCount, selectedLine, handleSelect)
|
||||
}
|
||||
|
||||
func (gui *Gui) handleVolumeSelect(g *gocui.Gui, v *gocui.View) error {
|
||||
|
|
@ -66,15 +50,15 @@ func (gui *Gui) handleVolumeSelect(g *gocui.Gui, v *gocui.View) error {
|
|||
return gui.renderString(g, "main", gui.Tr.NoVolumes)
|
||||
}
|
||||
|
||||
if err := gui.focusPoint(0, gui.State.Panels.Volumes.SelectedLine, len(gui.DockerCommand.Volumes), v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
key := "volumes-" + volume.Name + "-" + gui.getVolumeContexts()[gui.State.Panels.Volumes.ContextIndex]
|
||||
if !gui.shouldRefresh(key) {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := gui.focusPoint(0, gui.State.Panels.Volumes.SelectedLine, len(gui.DockerCommand.Volumes), v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mainView := gui.getMainView()
|
||||
mainView.Tabs = gui.getVolumeContextTitles()
|
||||
mainView.TabIndex = gui.State.Panels.Volumes.ContextIndex
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue