summaryrefslogtreecommitdiffstats
path: root/pkg/gui/files_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2018-12-04 19:50:11 +1100
committerJesse Duffield <jessedduffield@gmail.com>2018-12-08 11:51:47 +1100
commit99a8b1ae8bb93565df8acbe168749278dc768979 (patch)
tree06f3707ff08a879cf9fac550cf71f42bbe0215bf /pkg/gui/files_panel.go
parentccc771d8b13d5b0d4635db4463556366470fd4f6 (diff)
making a start on unidirectional data binding to fix these UI bugs
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r--pkg/gui/files_panel.go65
1 files changed, 39 insertions, 26 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index 5eb8f63f1..13ce48d10 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -140,15 +140,12 @@ func (gui *Gui) handleAddPatch(g *gocui.Gui, v *gocui.View) error {
}
func (gui *Gui) getSelectedFile(g *gocui.Gui) (*commands.File, error) {
- if len(gui.State.Files) == 0 {
+ selectedLine := gui.State.Panels.Files.SelectedLine
+ if selectedLine == -1 {
return &commands.File{}, gui.Errors.ErrNoFiles
}
- filesView, err := g.View("files")
- if err != nil {
- panic(err)
- }
- lineNumber := gui.getItemPosition(filesView)
- return gui.State.Files[lineNumber], nil
+
+ return gui.State.Files[selectedLine], nil
}
func (gui *Gui) handleFileRemove(g *gocui.Gui, v *gocui.View) error {
@@ -194,26 +191,23 @@ func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error {
return gui.refreshFiles(g)
}
-func (gui *Gui) renderfilesOptions(g *gocui.Gui, file *commands.File) error {
- return gui.renderGlobalOptions(g)
-}
-
func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View) error {
file, err := gui.getSelectedFile(g)
if err != nil {
if err != gui.Errors.ErrNoFiles {
return err
}
- gui.renderString(g, "main", gui.Tr.SLocalize("NoChangedFiles"))
- return gui.renderfilesOptions(g, nil)
- }
- if err := gui.renderfilesOptions(g, file); err != nil {
- return err
+ return gui.renderString(g, "main", gui.Tr.SLocalize("NoChangedFiles"))
}
+
if file.HasMergeConflicts {
return gui.refreshMergePanel(g)
}
+ if err := gui.focusPoint(0, gui.State.Panels.Files.SelectedLine, v); err != nil {
+ return err
+ }
+
content := gui.GitCommand.Diff(file, false)
return gui.renderString(g, "main", content)
}
@@ -309,6 +303,7 @@ func (gui *Gui) refreshStateFiles() {
// get files to stage
files := gui.GitCommand.GetStatusFiles()
gui.State.Files = gui.GitCommand.MergeStatusFiles(gui.State.Files, files)
+ gui.refreshSelectedLine(&gui.State.Panels.Files.SelectedLine, len(gui.State.Files))
gui.updateHasMergeConflictStatus()
}
@@ -340,6 +335,20 @@ func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) {
return cat, nil
}
+func (gui *Gui) handleFilesNextLine(g *gocui.Gui, v *gocui.View) error {
+ panelState := gui.State.Panels.Files
+ gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Files), false)
+
+ return gui.handleFileSelect(gui.g, v)
+}
+
+func (gui *Gui) handleFilesPrevLine(g *gocui.Gui, v *gocui.View) error {
+ panelState := gui.State.Panels.Files
+ gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Files), true)
+
+ return gui.handleFileSelect(gui.g, v)
+}
+
func (gui *Gui) refreshFiles(g *gocui.Gui) error {
filesView, err := g.View("files")
if err != nil {
@@ -347,17 +356,21 @@ func (gui *Gui) refreshFiles(g *gocui.Gui) error {
}
gui.refreshStateFiles()
- filesView.Clear()
- list, err := utils.RenderList(gui.State.Files)
- if err != nil {
- return err
- }
- fmt.Fprint(filesView, list)
+ gui.g.Update(func(g *gocui.Gui) error {
+
+ filesView.Clear()
+ list, err := utils.RenderList(gui.State.Files)
+ if err != nil {
+ return err
+ }
+ fmt.Fprint(filesView, list)
+
+ if filesView == g.CurrentView() {
+ gui.handleFileSelect(g, filesView)
+ }
+ return nil
+ })
- gui.correctCursor(filesView)
- if filesView == g.CurrentView() {
- gui.handleFileSelect(g, filesView)
- }
return nil
}