2022-01-29 19:09:20 +11:00
package context
import (
"fmt"
"github.com/jesseduffield/lazygit/pkg/gui/types"
"github.com/jesseduffield/lazygit/pkg/utils"
)
type ListContextTrait struct {
2022-02-05 17:04:10 +11:00
types . Context
2022-01-29 19:09:20 +11:00
2022-02-06 15:54:26 +11:00
c * types . HelperCommon
2022-02-05 17:04:10 +11:00
list types . IList
getDisplayStrings func ( startIdx int , length int ) [ ] [ ] string
}
2022-01-29 19:09:20 +11:00
2022-02-05 17:04:10 +11:00
func ( self * ListContextTrait ) GetList ( ) types . IList {
return self . list
2022-01-29 19:09:20 +11:00
}
func ( self * ListContextTrait ) FocusLine ( ) {
// we need a way of knowing whether we've rendered to the view yet.
2022-06-13 11:01:26 +10:00
self . GetViewTrait ( ) . FocusPoint ( self . list . GetSelectedLineIdx ( ) )
2022-04-16 15:59:02 +10:00
self . setFooter ( )
}
func ( self * ListContextTrait ) setFooter ( ) {
2022-06-13 11:01:26 +10:00
self . GetViewTrait ( ) . SetFooter ( formatListFooter ( self . list . GetSelectedLineIdx ( ) , self . list . Len ( ) ) )
2022-01-29 19:09:20 +11:00
}
func formatListFooter ( selectedLineIdx int , length int ) string {
return fmt . Sprintf ( "%d of %d" , selectedLineIdx + 1 , length )
}
2022-06-13 11:01:26 +10:00
func ( self * ListContextTrait ) HandleFocus ( opts types . OnFocusOpts ) error {
2022-01-29 19:09:20 +11:00
self . FocusLine ( )
2022-06-13 11:01:26 +10:00
self . GetViewTrait ( ) . SetHighlight ( self . list . Len ( ) > 0 )
2022-04-15 14:01:13 +10:00
2022-06-13 11:01:26 +10:00
return self . Context . HandleFocus ( opts )
2022-01-29 19:09:20 +11:00
}
2022-06-13 11:01:26 +10:00
func ( self * ListContextTrait ) HandleFocusLost ( opts types . OnFocusLostOpts ) error {
self . GetViewTrait ( ) . SetOriginX ( 0 )
2022-01-29 19:09:20 +11:00
2022-06-13 11:01:26 +10:00
return self . Context . HandleFocusLost ( opts )
2022-01-29 19:09:20 +11:00
}
2022-02-05 17:04:10 +11:00
// OnFocus assumes that the content of the context has already been rendered to the view. OnRender is the function which actually renders the content to the view
func ( self * ListContextTrait ) HandleRender ( ) error {
self . list . RefreshSelectedIdx ( )
2022-03-19 09:31:52 +11:00
content := utils . RenderDisplayStrings ( self . getDisplayStrings ( 0 , self . list . Len ( ) ) )
2022-06-13 11:01:26 +10:00
self . GetViewTrait ( ) . SetContent ( content )
2022-02-05 17:04:10 +11:00
self . c . Render ( )
2022-04-16 15:59:02 +10:00
self . setFooter ( )
2022-01-29 19:09:20 +11:00
return nil
}
func ( self * ListContextTrait ) OnSearchSelect ( selectedLineIdx int ) error {
2022-02-05 17:04:10 +11:00
self . GetList ( ) . SetSelectedLineIdx ( selectedLineIdx )
2022-06-13 11:01:26 +10:00
return self . HandleFocus ( types . OnFocusOpts { } )
2022-01-29 19:09:20 +11:00
}