summaryrefslogtreecommitdiffstats
path: root/pkg/gui/view_helpers.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-08-16 13:58:29 +1000
committerJesse Duffield <jessedduffield@gmail.com>2020-08-23 14:29:18 +1000
commit7f89113245307be8a1642105014e9ce51a47210f (patch)
tree0b1237c4bdd4a465bedb7cc49c8372d0bfc46ea5 /pkg/gui/view_helpers.go
parent0ea0c486310558e26af7ad6e4fcf17f57c2b62e3 (diff)
WIP
Diffstat (limited to 'pkg/gui/view_helpers.go')
-rw-r--r--pkg/gui/view_helpers.go192
1 files changed, 6 insertions, 186 deletions
diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go
index 423cab90c..ea2ef3263 100644
--- a/pkg/gui/view_helpers.go
+++ b/pkg/gui/view_helpers.go
@@ -6,13 +6,12 @@ import (
"strings"
"sync"
- "github.com/go-errors/errors"
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/utils"
"github.com/spkg/bom"
)
-func (gui *Gui) getCyclableViews() []string {
+func (gui *Gui) getCyclableWindows() []string {
return []string{"status", "files", "branches", "commits", "stash"}
}
@@ -140,157 +139,6 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error {
return nil
}
-func (gui *Gui) nextView(g *gocui.Gui, v *gocui.View) error {
- var focusedViewName string
- cyclableViews := gui.getCyclableViews()
- if v == nil || v.Name() == cyclableViews[len(cyclableViews)-1] {
- focusedViewName = cyclableViews[0]
- } else {
- // if we're in the commitFiles view we'll act like we're in the commits view
- viewName := v.Name()
- if viewName == "commitFiles" {
- viewName = "commits"
- }
- for i := range cyclableViews {
- if viewName == cyclableViews[i] {
- focusedViewName = cyclableViews[i+1]
- break
- }
- if i == len(cyclableViews)-1 {
- message := gui.Tr.TemplateLocalize(
- "IssntListOfViews",
- Teml{
- "name": viewName,
- },
- )
- gui.Log.Info(message)
- return nil
- }
- }
- }
- focusedView, err := g.View(focusedViewName)
- if err != nil {
- panic(err)
- }
- if err := gui.resetOrigin(gui.getMainView()); err != nil {
- return err
- }
- return gui.switchFocus(v, focusedView)
-}
-
-func (gui *Gui) previousView(g *gocui.Gui, v *gocui.View) error {
- cyclableViews := gui.getCyclableViews()
- var focusedViewName string
- if v == nil || v.Name() == cyclableViews[0] {
- focusedViewName = cyclableViews[len(cyclableViews)-1]
- } else {
- // if we're in the commitFiles view we'll act like we're in the commits view
- viewName := v.Name()
- if viewName == "commitFiles" {
- viewName = "commits"
- }
- for i := range cyclableViews {
- if viewName == cyclableViews[i] {
- focusedViewName = cyclableViews[i-1] // TODO: make this work properly
- break
- }
- if i == len(cyclableViews)-1 {
- message := gui.Tr.TemplateLocalize(
- "IssntListOfViews",
- Teml{
- "name": viewName,
- },
- )
- gui.Log.Info(message)
- return nil
- }
- }
- }
- focusedView, err := g.View(focusedViewName)
- if err != nil {
- panic(err)
- }
- if err := gui.resetOrigin(gui.getMainView()); err != nil {
- return err
- }
- return gui.switchFocus(v, focusedView)
-}
-
-func (gui *Gui) newLineFocused(v *gocui.View) error {
- switch v.Name() {
- case "menu":
- return gui.handleMenuSelect()
- case "status":
- return gui.handleStatusSelect()
- case "files":
- return gui.focusAndSelectFile()
- case "branches":
- branchesView := gui.getBranchesView()
- switch branchesView.Context {
- case "local-branches":
- return gui.handleBranchSelect()
- case "remotes":
- return gui.handleRemoteSelect()
- case "remote-branches":
- return gui.handleRemoteBranchSelect()
- case "tags":
- return gui.handleTagSelect()
- default:
- return errors.New("unknown branches panel context: " + branchesView.Context)
- }
- case "commits":
- return gui.handleCommitSelect()
- case "commitFiles":
- return gui.handleCommitFileSelect()
- case "stash":
- return gui.handleStashEntrySelect()
- case "confirmation":
- return nil
- case "commitMessage":
- return gui.handleCommitFocused()
- case "credentials":
- return gui.handleCredentialsViewFocused()
- case "main":
- if gui.State.MainContext == "merging" {
- return gui.refreshMergePanel()
- }
- v.Highlight = false
- return nil
- case "search":
- return nil
- default:
- panic(gui.Tr.SLocalize("NoViewMachingNewLineFocusedSwitchStatement"))
- }
-}
-
-func (gui *Gui) returnFocus(v *gocui.View) error {
- previousView, err := gui.g.View(gui.State.PreviousView)
- if err != nil {
- // always fall back to files view if there's no 'previous' view stored
- previousView, err = gui.g.View("files")
- if err != nil {
- gui.Log.Error(err)
- }
- }
- return gui.switchFocus(v, previousView)
-}
-
-func (gui *Gui) goToSideView(sideViewName string) func(g *gocui.Gui, v *gocui.View) error {
- return func(g *gocui.Gui, v *gocui.View) error {
- view, err := g.View(sideViewName)
- if err != nil {
- gui.Log.Error(err)
- return nil
- }
- err = gui.closePopupPanels()
- if err != nil {
- gui.Log.Error(err)
- return nil
- }
- return gui.switchFocus(nil, view)
- }
-}
-
func (gui *Gui) closePopupPanels() error {
gui.onNewPopupPanel()
err := gui.closeConfirmationPrompt(true)
@@ -301,39 +149,6 @@ func (gui *Gui) closePopupPanels() error {
return nil
}
-// pass in oldView = nil if you don't want to be able to return to your old view
-// TODO: move some of this logic into our onFocusLost and onFocus hooks
-func (gui *Gui) switchFocus(oldView, newView *gocui.View) error {
- // we assume we'll never want to return focus to a popup panel i.e.
- // we should never stack popup panels
- if oldView != nil && !gui.isPopupPanel(oldView.Name()) {
- gui.State.PreviousView = oldView.Name()
- }
-
- gui.Log.Info("setting highlight to true for view" + newView.Name())
- message := gui.Tr.TemplateLocalize(
- "newFocusedViewIs",
- Teml{
- "newFocusedView": newView.Name(),
- },
- )
- gui.Log.Info(message)
- if _, err := gui.g.SetCurrentView(newView.Name()); err != nil {
- return err
- }
- if _, err := gui.g.SetViewOnTop(newView.Name()); err != nil {
- return err
- }
-
- gui.g.Cursor = newView.Editable
-
- if err := gui.renderPanelOptions(); err != nil {
- return err
- }
-
- return gui.newLineFocused(newView)
-}
-
func (gui *Gui) resetOrigin(v *gocui.View) error {
_ = v.SetCursor(0, 0)
return v.SetOrigin(0, 0)
@@ -442,6 +257,11 @@ func (gui *Gui) getStatusView() *gocui.View {
return v
}
+func (gui *Gui) getConfirmationView() *gocui.View {
+ v, _ := gui.g.View("confirmation")
+ return v
+}
+
func (gui *Gui) trimmedContent(v *gocui.View) string {
return strings.TrimSpace(v.Buffer())
}