summaryrefslogtreecommitdiffstats
path: root/pkg/gui/global_handlers.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-03-29 10:31:34 +1100
committerJesse Duffield <jessedduffield@gmail.com>2020-03-29 11:37:29 +1100
commita8db672ffbeba92a32ad34f475760c78aa73303e (patch)
treee941074a316d4e7df057552a05f9d873ed6fb47a /pkg/gui/global_handlers.go
parent76b66ae26f428c58b3b0993d8da4bf31d5933dc7 (diff)
refactor gui.go
Diffstat (limited to 'pkg/gui/global_handlers.go')
-rw-r--r--pkg/gui/global_handlers.go172
1 files changed, 172 insertions, 0 deletions
diff --git a/pkg/gui/global_handlers.go b/pkg/gui/global_handlers.go
new file mode 100644
index 000000000..5f0752a6c
--- /dev/null
+++ b/pkg/gui/global_handlers.go
@@ -0,0 +1,172 @@
+package gui
+
+import (
+ "math"
+ "strings"
+
+ "github.com/fatih/color"
+ "github.com/jesseduffield/gocui"
+ "github.com/jesseduffield/lazygit/pkg/utils"
+)
+
+func (gui *Gui) nextScreenMode(g *gocui.Gui, v *gocui.View) error {
+ gui.State.ScreenMode = utils.NextIntInCycle([]int{SCREEN_NORMAL, SCREEN_HALF, SCREEN_FULL}, gui.State.ScreenMode)
+ // commits render differently depending on whether we're in fullscreen more or not
+ if err := gui.refreshCommitsViewWithSelection(); err != nil {
+ return err
+ }
+ // same with branches
+ if err := gui.refreshBranchesViewWithSelection(); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (gui *Gui) prevScreenMode(g *gocui.Gui, v *gocui.View) error {
+ gui.State.ScreenMode = utils.PrevIntInCycle([]int{SCREEN_NORMAL, SCREEN_HALF, SCREEN_FULL}, gui.State.ScreenMode)
+ // commits render differently depending on whether we're in fullscreen more or not
+ if err := gui.refreshCommitsViewWithSelection(); err != nil {
+ return err
+ }
+ // same with branches
+ if err := gui.refreshBranchesViewWithSelection(); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (gui *Gui) scrollUpView(viewName string) error {
+ mainView, _ := gui.g.View(viewName)
+ ox, oy := mainView.Origin()
+ newOy := int(math.Max(0, float64(oy-gui.Config.GetUserConfig().GetInt("gui.scrollHeight"))))
+ return mainView.SetOrigin(ox, newOy)
+}
+
+func (gui *Gui) scrollDownView(viewName string) error {
+ mainView, _ := gui.g.View(viewName)
+ ox, oy := mainView.Origin()
+ y := oy
+ if !gui.Config.GetUserConfig().GetBool("gui.scrollPastBottom") {
+ _, sy := mainView.Size()
+ y += sy
+ }
+ scrollHeight := gui.Config.GetUserConfig().GetInt("gui.scrollHeight")
+ if y < mainView.LinesHeight() {
+ if err := mainView.SetOrigin(ox, oy+scrollHeight); err != nil {
+ return err
+ }
+ }
+ if manager, ok := gui.viewBufferManagerMap[viewName]; ok {
+ manager.ReadLines(scrollHeight)
+ }
+ return nil
+}
+
+func (gui *Gui) scrollUpMain(g *gocui.Gui, v *gocui.View) error {
+ return gui.scrollUpView("main")
+}
+
+func (gui *Gui) scrollDownMain(g *gocui.Gui, v *gocui.View) error {
+ return gui.scrollDownView("main")
+}
+
+func (gui *Gui) scrollUpSecondary(g *gocui.Gui, v *gocui.View) error {
+ return gui.scrollUpView("secondary")
+}
+
+func (gui *Gui) scrollDownSecondary(g *gocui.Gui, v *gocui.View) error {
+ return gui.scrollDownView("secondary")
+}
+
+func (gui *Gui) scrollUpConfirmationPanel(g *gocui.Gui, v *gocui.View) error {
+ if v.Editable {
+ return nil
+ }
+ return gui.scrollUpView("confirmation")
+}
+
+func (gui *Gui) scrollDownConfirmationPanel(g *gocui.Gui, v *gocui.View) error {
+ if v.Editable {
+ return nil
+ }
+ return gui.scrollDownView("confirmation")
+}
+
+func (gui *Gui) handleRefresh(g *gocui.Gui, v *gocui.View) error {
+ return gui.refreshSidePanels(refreshOptions{mode: ASYNC})
+}
+
+func (gui *Gui) handleMouseDownMain(g *gocui.Gui, v *gocui.View) error {
+ if gui.popupPanelFocused() {
+ return nil
+ }
+
+ switch g.CurrentView().Name() {
+ case "files":
+ return gui.enterFile(false, v.SelectedLineIdx())
+ case "commitFiles":
+ return gui.enterCommitFile(v.SelectedLineIdx())
+ }
+
+ return nil
+}
+
+func (gui *Gui) handleMouseDownSecondary(g *gocui.Gui, v *gocui.View) error {
+ if gui.popupPanelFocused() {
+ return nil
+ }
+
+ switch g.CurrentView().Name() {
+ case "files":
+ return gui.enterFile(true, v.SelectedLineIdx())
+ }
+
+ return nil
+}
+
+func (gui *Gui) handleInfoClick(g *gocui.Gui, v *gocui.View) error {
+ if !gui.g.Mouse {
+ return nil
+ }
+
+ cx, _ := v.Cursor()
+ width, _ := v.Size()
+
+ // if we're in the normal context there will be a donate button here
+ // if we have ('reset') at the end then
+ if gui.inFilterMode() {
+ if width-cx <= len(gui.Tr.SLocalize("(reset)")) {
+ return gui.exitFilterMode()
+ } else {
+ return nil
+ }
+ }
+
+ if cx <= len(gui.Tr.SLocalize("Donate")) {
+ return gui.OSCommand.OpenLink("https://github.com/sponsors/jesseduffield")
+ }
+ return nil
+}
+
+func (gui *Gui) fetch(g *gocui.Gui, v *gocui.View, canAskForCredentials bool) (unamePassOpend bool, err error) {
+ unamePassOpend = false
+ err = gui.GitCommand.Fetch(func(passOrUname string) string {
+ unamePassOpend = true
+ return gui.waitForPassUname(gui.g, v, passOrUname)
+ }, canAskForCredentials)
+
+ if canAskForCredentials && err != nil && strings.Contains(err.Error(), "exit status 128") {
+ colorFunction := color.New(color.FgRed).SprintFunc()
+ coloredMessage := colorFunction(strings.TrimSpace(gui.Tr.SLocalize("PassUnameWrong")))
+ close := func(g *gocui.Gui, v *gocui.View) error {
+ return nil
+ }
+ _ = gui.createConfirmationPanel(g, v, true, gui.Tr.SLocalize("Error"), coloredMessage, close, close)
+ }
+
+ gui.refreshSidePanels(refreshOptions{scope: []int{BRANCHES, COMMITS, REMOTES, TAGS}, mode: ASYNC})
+
+ return unamePassOpend, err
+}