diff options
| author | Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> | 2018-12-10 03:00:24 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-12-10 03:00:24 +0300 |
| commit | 0f55d3652c215074df03de4390856d4389a1b729 (patch) | |
| tree | 852ca843d5a67852d69054f816bb8b746df8b49e /pkg/gui/gui-util.go | |
| parent | Merge pull request #28 from isacikgoz/develop (diff) | |
| parent | added recursive option and some minor code formating (diff) | |
| download | gitbatch-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.go | 100 |
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 |
