summaryrefslogtreecommitdiffstats
path: root/pkg/gui
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2019-11-13 23:18:31 +1100
committerJesse Duffield <jessedduffield@gmail.com>2019-11-21 22:07:14 +1100
commite6be849eb2f01861ad29caa92595f32c2854bfb0 (patch)
tree3401bc68cc867a95181cc5a07702e8c518e5f33b /pkg/gui
parent092f27495a6b362537d2f8b7ff95bf29ee21f285 (diff)
add remotes context to branches view
Diffstat (limited to 'pkg/gui')
-rw-r--r--pkg/gui/branches_panel.go41
-rw-r--r--pkg/gui/gui.go11
-rw-r--r--pkg/gui/keybindings.go5
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
}