diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-13 23:18:31 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-21 22:07:14 +1100 |
commit | e6be849eb2f01861ad29caa92595f32c2854bfb0 (patch) | |
tree | 3401bc68cc867a95181cc5a07702e8c518e5f33b | |
parent | 092f27495a6b362537d2f8b7ff95bf29ee21f285 (diff) |
add remotes context to branches view
-rw-r--r-- | pkg/gui/branches_panel.go | 41 | ||||
-rw-r--r-- | pkg/gui/gui.go | 11 | ||||
-rw-r--r-- | pkg/gui/keybindings.go | 5 |
3 files changed, 57 insertions, 0 deletions
diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go index adea31072..205adf236 100644 --- a/pkg/gui/branches_panel.go +++ b/pkg/gui/branches_panel.go @@ -84,6 +84,10 @@ func (gui *Gui) RenderSelectedBranchUpstreamDifferences() error { // gui.refreshStatus is called at the end of this because that's when we can // be sure there is a state.Branches array to pick the current branch from func (gui *Gui) refreshBranches(g *gocui.Gui) error { + if err := gui.refreshRemotes(); err != nil { + return err + } + g.Update(func(g *gocui.Gui) error { builder, err := commands.NewBranchListBuilder(gui.Log, gui.GitCommand) if err != nil { @@ -358,3 +362,40 @@ func (gui *Gui) handleFastForward(g *gocui.Gui, v *gocui.View) error { }() return nil } + +func (gui *Gui) onBranchesTabClick(tabIndex int) error { + gui.State.Panels.Branches.ContextIndex = tabIndex + branchesView := gui.getBranchesView() + branchesView.TabIndex = tabIndex + + switch tabIndex { + case 0: + if err := gui.renderListPanel(branchesView, gui.State.Branches); err != nil { + return err + } + case 1: + if err := gui.renderListPanel(branchesView, gui.State.Remotes); err != nil { + return err + } + } + + return nil +} + +// gui.refreshStatus is called at the end of this because that's when we can +// be sure there is a state.Branches array to pick the current branch from +func (gui *Gui) refreshRemotes() error { + remotes, err := gui.GitCommand.GetRemotes() + if err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + + gui.State.Remotes = remotes + + gui.g.Update(func(g *gocui.Gui) error { + gui.refreshSelectedLine(&gui.State.Panels.Remotes.SelectedLine, len(gui.State.Remotes)) + return nil + }) + + return nil +} diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index a3bcb1666..f7a6d1b68 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -107,8 +107,14 @@ type filePanelState struct { SelectedLine int } +// TODO: consider splitting this out into the window and the branches view type branchPanelState struct { SelectedLine int + ContextIndex int +} + +type remotePanelState struct { + SelectedLine int } type commitPanelState struct { @@ -137,6 +143,7 @@ type statusPanelState struct { type panelStates struct { Files *filePanelState Branches *branchPanelState + Remotes *remotePanelState Commits *commitPanelState Stash *stashPanelState Menu *menuPanelState @@ -153,6 +160,7 @@ type guiState struct { StashEntries []*commands.StashEntry CommitFiles []*commands.CommitFile DiffEntries []*commands.Commit + Remotes []*commands.Remote MenuItemCount int // can't store the actual list because it's of interface{} type PreviousView string Platform commands.Platform @@ -183,6 +191,7 @@ func NewGui(log *logrus.Entry, gitCommand *commands.GitCommand, oSCommand *comma Panels: &panelStates{ Files: &filePanelState{SelectedLine: -1}, Branches: &branchPanelState{SelectedLine: 0}, + Remotes: &remotePanelState{SelectedLine: -1}, Commits: &commitPanelState{SelectedLine: -1}, CommitFiles: &commitFilesPanelState{SelectedLine: -1}, Stash: &stashPanelState{SelectedLine: -1}, @@ -480,6 +489,8 @@ func (gui *Gui) layout(g *gocui.Gui) error { return err } branchesView.Title = gui.Tr.SLocalize("BranchesTitle") + branchesView.Tabs = []string{"Local Branches", "Remotes"} + branchesView.TabIndex = gui.State.Panels.Branches.ContextIndex branchesView.FgColor = textColor } diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index c02176a4f..a31a8123b 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -631,6 +631,11 @@ func (gui *Gui) keybindings(g *gocui.Gui) error { if err := gui.setInitialContext(); err != nil { return err } + + if err := g.SetTabClickBinding("branches", gui.onBranchesTabClick); err != nil { + return err + } + return nil } |