summaryrefslogtreecommitdiff
path: root/pkg/gui/gui-util.go
diff options
context:
space:
mode:
authorIbrahim Serdar Acikgoz <serdaracikgoz86@gmail.com>2018-12-10 03:00:24 +0300
committerGitHub <noreply@github.com>2018-12-10 03:00:24 +0300
commit0f55d3652c215074df03de4390856d4389a1b729 (patch)
tree852ca843d5a67852d69054f816bb8b746df8b49e /pkg/gui/gui-util.go
parentMerge pull request #28 from isacikgoz/develop (diff)
parentadded recursive option and some minor code formating (diff)
downloadgitbatch-0f55d3652c215074df03de4390856d4389a1b729.tar.gz
Merge pull request #29 from isacikgoz/develop
Develop
Diffstat (limited to 'pkg/gui/gui-util.go')
-rw-r--r--pkg/gui/gui-util.go100
1 files changed, 65 insertions, 35 deletions
diff --git a/pkg/gui/gui-util.go b/pkg/gui/gui-util.go
index 2ae8cae..2462723 100644
--- a/pkg/gui/gui-util.go
+++ b/pkg/gui/gui-util.go
@@ -1,11 +1,10 @@
package gui
import (
- "sort"
-
"github.com/isacikgoz/gitbatch/pkg/git"
"github.com/isacikgoz/gitbatch/pkg/helpers"
"github.com/jroimartin/gocui"
+ log "github.com/sirupsen/logrus"
)
// refreshes the side views of the application for given git.RepoEntity struct
@@ -26,18 +25,70 @@ func (gui *Gui) refreshViews(g *gocui.Gui, entity *git.RepoEntity) error {
return err
}
+// focus to next view
+func (gui *Gui) nextViewOfGroup(g *gocui.Gui, v *gocui.View, group []viewFeature) error {
+ var focusedViewName string
+ if v == nil || v.Name() == group[len(group)-1].Name {
+ focusedViewName = group[0].Name
+ } else {
+ for i := range group {
+ if v.Name() == group[i].Name {
+ focusedViewName = group[i+1].Name
+ break
+ }
+ if i == len(group)-1 {
+ return nil
+ }
+ }
+ }
+ if _, err := g.SetCurrentView(focusedViewName); err != nil {
+ log.WithFields(log.Fields{
+ "view": focusedViewName,
+ }).Warn("View cannot be focused.")
+ return nil
+ }
+ gui.updateKeyBindingsView(g, focusedViewName)
+ return nil
+}
+
+// focus to previous view
+func (gui *Gui) previousViewOfGroup(g *gocui.Gui, v *gocui.View, group []viewFeature) error {
+ var focusedViewName string
+ if v == nil || v.Name() == group[0].Name {
+ focusedViewName = group[len(group)-1].Name
+ } else {
+ for i := range group {
+ if v.Name() == group[i].Name {
+ focusedViewName = group[i-1].Name
+ break
+ }
+ if i == len(group)-1 {
+ return nil
+ }
+ }
+ }
+ if _, err := g.SetCurrentView(focusedViewName); err != nil {
+ log.WithFields(log.Fields{
+ "view": focusedViewName,
+ }).Warn("View cannot be focused.")
+ return nil
+ }
+ gui.updateKeyBindingsView(g, focusedViewName)
+ return nil
+}
+
// siwtch the app mode
// TODO: switching can be made with conventional iteration
func (gui *Gui) switchMode(g *gocui.Gui, v *gocui.View) error {
- switch mode := gui.State.Mode.ModeID; mode {
- case FetchMode:
- gui.State.Mode = pullMode
- case PullMode:
- gui.State.Mode = mergeMode
- case MergeMode:
- gui.State.Mode = fetchMode
- default:
- gui.State.Mode = fetchMode
+ for i, mode := range modes {
+ if mode == gui.State.Mode {
+ if i == len(modes)-1 {
+ gui.State.Mode = modes[0]
+ break
+ }
+ gui.State.Mode = modes[i+1]
+ break
+ }
}
gui.updateKeyBindingsView(g, mainViewFeature.Name)
return nil
@@ -110,35 +161,14 @@ func writeRightHandSide(v *gocui.View, text string, cx, cy int) error {
return nil
}
-// sortByName sorts the repositories by A to Z order
-func (gui *Gui) sortByName(g *gocui.Gui, v *gocui.View) error {
- sort.Sort(git.Alphabetical(gui.State.Repositories))
- gui.refreshAfterSort(g)
- return nil
-}
-
-// sortByMod sorts the repositories according to last modifed date
-// the top element will be the last modified
-func (gui *Gui) sortByMod(g *gocui.Gui, v *gocui.View) error {
- sort.Sort(git.LastModified(gui.State.Repositories))
- gui.refreshAfterSort(g)
- return nil
-}
-
-// utility function that refreshes main and side views after that
-func (gui *Gui) refreshAfterSort(g *gocui.Gui) error {
- gui.refreshMain(g)
- entity := gui.getSelectedRepository()
- gui.refreshViews(g, entity)
- return nil
-}
-
// cursor down acts like half-page down for faster scrolling
func (gui *Gui) fastCursorDown(g *gocui.Gui, v *gocui.View) error {
if v != nil {
ox, oy := v.Origin()
_, vy := v.Size()
-
+ if len(v.BufferLines())+len(v.ViewBufferLines()) <= vy+oy || len(v.ViewBufferLines()) < vy {
+ return nil
+ }
// TODO: do something when it hits bottom
if err := v.SetOrigin(ox, oy+vy/2); err != nil {
return err