diff options
| author | Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> | 2018-12-08 03:12:52 +0300 |
|---|---|---|
| committer | Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> | 2018-12-08 03:12:52 +0300 |
| commit | 46e22a8968f72895622c56b1e7fa554bb501371c (patch) | |
| tree | 61e5a168cadccebfc9e994613be1aeb8a1ac7542 /pkg/gui/statusview.go | |
| parent | reduced coupling in view navigation logic and minor refactor (diff) | |
| download | gitbatch-46e22a8968f72895622c56b1e7fa554bb501371c.tar.gz | |
status implementation cntd.. added display and navigation
Diffstat (limited to 'pkg/gui/statusview.go')
| -rw-r--r-- | pkg/gui/statusview.go | 119 |
1 files changed, 72 insertions, 47 deletions
diff --git a/pkg/gui/statusview.go b/pkg/gui/statusview.go index f9ab29d..b1873e8 100644 --- a/pkg/gui/statusview.go +++ b/pkg/gui/statusview.go @@ -3,6 +3,7 @@ package gui import ( "fmt" + "github.com/isacikgoz/gitbatch/pkg/git" "github.com/jroimartin/gocui" ) @@ -41,72 +42,62 @@ func (gui *Gui) previousStatusView(g *gocui.Gui, v *gocui.View) error { return nil } -// header og the status layout -func (gui *Gui) openStatusHeaderView(g *gocui.Gui) error { - maxX, _ := g.Size() - entity := gui.getSelectedRepository() - v, err := g.SetView(statusHeaderViewFeature.Name, 6, 2, maxX-6, 4) - if err != nil { - if err != gocui.ErrUnknownView { - return err - } - fmt.Fprintln(v, entity.AbsPath) - // v.Frame = false - v.Wrap = true - } - return nil -} +// moves the cursor downwards for the main view and if it goes to bottom it +// prevents from going further +func (gui *Gui) statusCursorDown(g *gocui.Gui, v *gocui.View) error { + if v != nil { + cx, cy := v.Cursor() + ox, oy := v.Origin() + ly := len(v.BufferLines()) - 2 // why magic number? have no idea -// staged view -func (gui *Gui) openStageView(g *gocui.Gui) error { - maxX, maxY := g.Size() + // if we are at the end we just return + if cy+oy == ly { + return nil + } + if err := v.SetCursor(cx, cy+1); err != nil { - v, err := g.SetView(stageViewFeature.Name, 6, 5, maxX/2-1, int(0.75*float32(maxY))-1) - if err != nil { - if err != gocui.ErrUnknownView { + if err := v.SetOrigin(ox, oy+1); err != nil { + return err + } + } + entity := gui.getSelectedRepository() + if err := refreshStatusView(v.Name(), g, entity); err != nil { return err } - v.Title = stageViewFeature.Title - v.Wrap = true - } - gui.updateKeyBindingsView(g, stageViewFeature.Name) - if _, err := g.SetCurrentView(stageViewFeature.Name); err != nil { - return err } return nil } -// not staged view -func (gui *Gui) openUnStagedView(g *gocui.Gui) error { - maxX, maxY := g.Size() - - v, err := g.SetView(unstageViewFeature.Name, maxX/2+1, 5, maxX-6, int(0.75*float32(maxY))-1) - if err != nil { - if err != gocui.ErrUnknownView { +// moves the cursor upwards for the main view +func (gui *Gui) statusCursorUp(g *gocui.Gui, v *gocui.View) error { + if v != nil { + ox, oy := v.Origin() + cx, cy := v.Cursor() + if err := v.SetCursor(cx, cy-1); err != nil && oy > 0 { + if err := v.SetOrigin(ox, oy-1); err != nil { + return err + } + } + entity := gui.getSelectedRepository() + if err := refreshStatusView(v.Name(), g, entity); err != nil { return err } - v.Title = unstageViewFeature.Title - v.Wrap = true } return nil } -// stash view -func (gui *Gui) openStashView(g *gocui.Gui) error { - maxX, maxY := g.Size() - - v, err := g.SetView(stashViewFeature.Name, 6, int(0.75*float32(maxY)), maxX-6, maxY-3) +// header og the status layout +func (gui *Gui) openStatusHeaderView(g *gocui.Gui) error { + maxX, _ := g.Size() + entity := gui.getSelectedRepository() + v, err := g.SetView(statusHeaderViewFeature.Name, 6, 2, maxX-6, 4) if err != nil { if err != gocui.ErrUnknownView { return err } - v.Title = stashViewFeature.Title + fmt.Fprintln(v, entity.AbsPath) + // v.Frame = false v.Wrap = true - entity := gui.getSelectedRepository() - stashedItems := entity.Stasheds - for _, stashedItem := range stashedItems { - fmt.Fprintln(v, stashedItem) - } } return nil } @@ -131,3 +122,37 @@ func (gui *Gui) closeStatusView(g *gocui.Gui, v *gocui.View) error { gui.updateKeyBindingsView(g, mainViewFeature.Name) return nil } + +func generateFileLists(entity *git.RepoEntity) (staged, unstaged []*git.File, err error) { + files, err := entity.LoadFiles() + if err != nil { + return nil, nil, err + } + for _, file := range files { + if file.X != git.StatusNotupdated && file.X != git.StatusUntracked && file.X != git.StatusIgnored { + staged = append(staged, file) + } + if file.Y != git.StatusNotupdated { + unstaged = append(unstaged, file) + } + } + return staged, unstaged, err +} + +func refreshStatusView(viewName string, g *gocui.Gui, entity *git.RepoEntity) error { + switch viewName { + case stageViewFeature.Name: + if err := refreshStagedView(g, entity); err != nil { + return err + } + case unstageViewFeature.Name: + if err := refreshUnstagedView(g, entity); err != nil { + return err + } + case stashViewFeature.Name: + if err := refreshStashView(g, entity); err != nil { + return err + } + } + return nil +} |
