diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2023-03-26 16:33:52 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2023-04-30 13:19:53 +1000 |
commit | f2c85c5b19176a959ac5d98f57749ee6bc9c362b (patch) | |
tree | 4e9578df83dd22464d62deaaf816b4811d2bdf18 /pkg/gui/controllers/side_window_controller.go | |
parent | 0faa41e6f8e13818c611ad923fa424c83653d06a (diff) |
move side window actions to controllers package
Diffstat (limited to 'pkg/gui/controllers/side_window_controller.go')
-rw-r--r-- | pkg/gui/controllers/side_window_controller.go | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/pkg/gui/controllers/side_window_controller.go b/pkg/gui/controllers/side_window_controller.go new file mode 100644 index 000000000..a2325c54d --- /dev/null +++ b/pkg/gui/controllers/side_window_controller.go @@ -0,0 +1,96 @@ +package controllers + +import ( + "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/gui/types" +) + +type SideWindowControllerFactory struct { + c *ControllerCommon +} + +func NewSideWindowControllerFactory(common *ControllerCommon) *SideWindowControllerFactory { + return &SideWindowControllerFactory{c: common} +} + +func (self *SideWindowControllerFactory) Create(context types.Context) types.IController { + return NewSideWindowController(self.c, context) +} + +type SideWindowController struct { + baseController + c *ControllerCommon + context types.Context +} + +func NewSideWindowController( + common *ControllerCommon, + context types.Context, +) *SideWindowController { + return &SideWindowController{ + baseController: baseController{}, + c: common, + context: context, + } +} + +func (self *SideWindowController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding { + return []*types.Binding{ + {Key: opts.GetKey(opts.Config.Universal.PrevBlock), Modifier: gocui.ModNone, Handler: self.previousSideWindow}, + {Key: opts.GetKey(opts.Config.Universal.NextBlock), Modifier: gocui.ModNone, Handler: self.nextSideWindow}, + {Key: opts.GetKey(opts.Config.Universal.PrevBlockAlt), Modifier: gocui.ModNone, Handler: self.previousSideWindow}, + {Key: opts.GetKey(opts.Config.Universal.NextBlockAlt), Modifier: gocui.ModNone, Handler: self.nextSideWindow}, + {Key: opts.GetKey(opts.Config.Universal.PrevBlockAlt2), Modifier: gocui.ModNone, Handler: self.previousSideWindow}, + {Key: opts.GetKey(opts.Config.Universal.NextBlockAlt2), Modifier: gocui.ModNone, Handler: self.nextSideWindow}, + } +} + +func (self *SideWindowController) Context() types.Context { + return nil +} + +func (self *SideWindowController) previousSideWindow() error { + windows := self.c.Helpers().Window.SideWindows() + currentWindow := self.c.Helpers().Window.CurrentWindow() + var newWindow string + if currentWindow == "" || currentWindow == windows[0] { + newWindow = windows[len(windows)-1] + } else { + for i := range windows { + if currentWindow == windows[i] { + newWindow = windows[i-1] + break + } + if i == len(windows)-1 { + return nil + } + } + } + + context := self.c.Helpers().Window.GetContextForWindow(newWindow) + + return self.c.PushContext(context) +} + +func (self *SideWindowController) nextSideWindow() error { + windows := self.c.Helpers().Window.SideWindows() + currentWindow := self.c.Helpers().Window.CurrentWindow() + var newWindow string + if currentWindow == "" || currentWindow == windows[len(windows)-1] { + newWindow = windows[0] + } else { + for i := range windows { + if currentWindow == windows[i] { + newWindow = windows[i+1] + break + } + if i == len(windows)-1 { + return nil + } + } + } + + context := self.c.Helpers().Window.GetContextForWindow(newWindow) + + return self.c.PushContext(context) +} |