diff --git a/pkg/gui/commit_files_panel.go b/pkg/gui/commit_files_panel.go index 0ada68090..21afc54f4 100644 --- a/pkg/gui/commit_files_panel.go +++ b/pkg/gui/commit_files_panel.go @@ -12,7 +12,7 @@ func (gui *Gui) onCommitFileFocus() error { } func (gui *Gui) commitFilesRenderToMain() error { - node := gui.State.Contexts.CommitFiles.GetSelectedFileNode() + node := gui.State.Contexts.CommitFiles.GetSelected() if node == nil { return nil } @@ -78,7 +78,7 @@ func (gui *Gui) refreshCommitFilesView() error { } func (gui *Gui) getSelectedCommitFileName() string { - node := gui.State.Contexts.CommitFiles.GetSelectedFileNode() + node := gui.State.Contexts.CommitFiles.GetSelected() if node == nil { return "" } diff --git a/pkg/gui/context/basic_view_model.go b/pkg/gui/context/basic_view_model.go new file mode 100644 index 000000000..a53be4d91 --- /dev/null +++ b/pkg/gui/context/basic_view_model.go @@ -0,0 +1,34 @@ +package context + +import "github.com/jesseduffield/lazygit/pkg/gui/context/traits" + +type BasicViewModel[T any] struct { + *traits.ListCursor + getModel func() []T +} + +func NewBasicViewModel[T any](getModel func() []T) *BasicViewModel[T] { + self := &BasicViewModel[T]{ + getModel: getModel, + } + + self.ListCursor = traits.NewListCursor(self) + + return self +} + +func (self *BasicViewModel[T]) Len() int { + return len(self.getModel()) +} + +func (self *BasicViewModel[T]) GetSelected() T { + if self.Len() == 0 { + return Zero[T]() + } + + return self.getModel()[self.GetSelectedLineIdx()] +} + +func Zero[T any]() T { + return *new(T) +} diff --git a/pkg/gui/context/branches_context.go b/pkg/gui/context/branches_context.go index 146810a86..e5de639d9 100644 --- a/pkg/gui/context/branches_context.go +++ b/pkg/gui/context/branches_context.go @@ -3,12 +3,11 @@ package context import ( "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) type BranchesContext struct { - *BranchesViewModel + *BasicViewModel[*models.Branch] *ListContextTrait } @@ -25,10 +24,10 @@ func NewBranchesContext( c *types.HelperCommon, ) *BranchesContext { - viewModel := NewBranchesViewModel(getModel) + viewModel := NewBasicViewModel(getModel) return &BranchesContext{ - BranchesViewModel: viewModel, + BasicViewModel: viewModel, ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ ViewName: "branches", @@ -58,34 +57,7 @@ func (self *BranchesContext) GetSelectedItemId() string { return item.ID() } -type BranchesViewModel struct { - *traits.ListCursor - getModel func() []*models.Branch -} - -func NewBranchesViewModel(getModel func() []*models.Branch) *BranchesViewModel { - self := &BranchesViewModel{ - getModel: getModel, - } - - self.ListCursor = traits.NewListCursor(self) - - return self -} - -func (self *BranchesViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *BranchesViewModel) GetSelected() *models.Branch { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} - -func (self *BranchesViewModel) GetSelectedRefName() string { +func (self *BranchesContext) GetSelectedRefName() string { item := self.GetSelected() if item == nil { return "" diff --git a/pkg/gui/context/commit_files_context.go b/pkg/gui/context/commit_files_context.go index 8f9bd91f7..0576be102 100644 --- a/pkg/gui/context/commit_files_context.go +++ b/pkg/gui/context/commit_files_context.go @@ -52,7 +52,7 @@ func NewCommitFilesContext( } func (self *CommitFilesContext) GetSelectedItemId() string { - item := self.GetSelectedFileNode() + item := self.GetSelected() if item == nil { return "" } diff --git a/pkg/gui/context/list_context_trait.go b/pkg/gui/context/list_context_trait.go index e508c8029..a10f0e3e9 100644 --- a/pkg/gui/context/list_context_trait.go +++ b/pkg/gui/context/list_context_trait.go @@ -27,7 +27,7 @@ func (self *ListContextTrait) GetViewTrait() types.IViewTrait { func (self *ListContextTrait) FocusLine() { // we need a way of knowing whether we've rendered to the view yet. self.viewTrait.FocusPoint(self.list.GetSelectedLineIdx()) - self.viewTrait.SetFooter(formatListFooter(self.list.GetSelectedLineIdx(), self.list.GetItemsLength())) + self.viewTrait.SetFooter(formatListFooter(self.list.GetSelectedLineIdx(), self.list.Len())) } func formatListFooter(selectedLineIdx int, length int) string { @@ -49,7 +49,7 @@ func (self *ListContextTrait) HandleFocusLost() error { // 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() - content := utils.RenderDisplayStrings(self.getDisplayStrings(0, self.list.GetItemsLength())) + content := utils.RenderDisplayStrings(self.getDisplayStrings(0, self.list.Len())) self.viewTrait.SetContent(content) self.c.Render() diff --git a/pkg/gui/context/local_commits_context.go b/pkg/gui/context/local_commits_context.go index 2930348e8..d8d64392c 100644 --- a/pkg/gui/context/local_commits_context.go +++ b/pkg/gui/context/local_commits_context.go @@ -3,7 +3,6 @@ package context import ( "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) @@ -60,8 +59,7 @@ func (self *LocalCommitsContext) GetSelectedItemId() string { } type LocalCommitsViewModel struct { - *traits.ListCursor - getModel func() []*models.Commit + *BasicViewModel[*models.Commit] // If this is true we limit the amount of commits we load, for the sake of keeping things fast. // If the user attempts to scroll past the end of the list, we will load more commits. @@ -73,12 +71,10 @@ type LocalCommitsViewModel struct { func NewLocalCommitsViewModel(getModel func() []*models.Commit) *LocalCommitsViewModel { self := &LocalCommitsViewModel{ - getModel: getModel, - limitCommits: true, + BasicViewModel: NewBasicViewModel(getModel), + limitCommits: true, } - self.ListCursor = traits.NewListCursor(self) - return self } @@ -96,18 +92,6 @@ func (self *LocalCommitsContext) GetSelectedRefName() string { return item.RefName() } -func (self *LocalCommitsViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *LocalCommitsViewModel) GetSelected() *models.Commit { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} - func (self *LocalCommitsViewModel) SetLimitCommits(value bool) { self.limitCommits = value } diff --git a/pkg/gui/context/menu_context.go b/pkg/gui/context/menu_context.go index 2e75ba25a..67d6b126a 100644 --- a/pkg/gui/context/menu_context.go +++ b/pkg/gui/context/menu_context.go @@ -2,7 +2,6 @@ package context import ( "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/presentation" "github.com/jesseduffield/lazygit/pkg/gui/types" ) @@ -59,8 +58,8 @@ func (self *MenuContext) GetSelectedItemId() string { } type MenuViewModel struct { - *traits.ListCursor menuItems []*types.MenuItem + *BasicViewModel[*types.MenuItem] } func NewMenuViewModel() *MenuViewModel { @@ -68,23 +67,11 @@ func NewMenuViewModel() *MenuViewModel { menuItems: nil, } - self.ListCursor = traits.NewListCursor(self) + self.BasicViewModel = NewBasicViewModel(func() []*types.MenuItem { return self.menuItems }) return self } -func (self *MenuViewModel) GetItemsLength() int { - return len(self.menuItems) -} - -func (self *MenuViewModel) GetSelected() *types.MenuItem { - if self.GetItemsLength() == 0 { - return nil - } - - return self.menuItems[self.GetSelectedLineIdx()] -} - func (self *MenuViewModel) SetMenuItems(items []*types.MenuItem) { self.menuItems = items } diff --git a/pkg/gui/context/reflog_commits_context.go b/pkg/gui/context/reflog_commits_context.go index fa136a7d4..815805515 100644 --- a/pkg/gui/context/reflog_commits_context.go +++ b/pkg/gui/context/reflog_commits_context.go @@ -3,12 +3,11 @@ package context import ( "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) type ReflogCommitsContext struct { - *ReflogCommitsViewModel + *BasicViewModel[*models.Commit] *ListContextTrait } @@ -25,10 +24,10 @@ func NewReflogCommitsContext( c *types.HelperCommon, ) *ReflogCommitsContext { - viewModel := NewReflogCommitsViewModel(getModel) + viewModel := NewBasicViewModel(getModel) return &ReflogCommitsContext{ - ReflogCommitsViewModel: viewModel, + BasicViewModel: viewModel, ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ ViewName: "commits", @@ -71,30 +70,3 @@ func (self *ReflogCommitsContext) GetSelectedRefName() string { return item.RefName() } - -type ReflogCommitsViewModel struct { - *traits.ListCursor - getModel func() []*models.Commit -} - -func NewReflogCommitsViewModel(getModel func() []*models.Commit) *ReflogCommitsViewModel { - self := &ReflogCommitsViewModel{ - getModel: getModel, - } - - self.ListCursor = traits.NewListCursor(self) - - return self -} - -func (self *ReflogCommitsViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *ReflogCommitsViewModel) GetSelected() *models.Commit { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} diff --git a/pkg/gui/context/remote_branches_context.go b/pkg/gui/context/remote_branches_context.go index c851c96ac..3cdd43a69 100644 --- a/pkg/gui/context/remote_branches_context.go +++ b/pkg/gui/context/remote_branches_context.go @@ -3,12 +3,11 @@ package context import ( "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) type RemoteBranchesContext struct { - *RemoteBranchesViewModel + *BasicViewModel[*models.RemoteBranch] *ListContextTrait } @@ -25,10 +24,10 @@ func NewRemoteBranchesContext( c *types.HelperCommon, ) *RemoteBranchesContext { - viewModel := NewRemoteBranchesViewModel(getModel) + viewModel := NewBasicViewModel(getModel) return &RemoteBranchesContext{ - RemoteBranchesViewModel: viewModel, + BasicViewModel: viewModel, ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ ViewName: "branches", @@ -58,34 +57,7 @@ func (self *RemoteBranchesContext) GetSelectedItemId() string { return item.ID() } -type RemoteBranchesViewModel struct { - *traits.ListCursor - getModel func() []*models.RemoteBranch -} - -func NewRemoteBranchesViewModel(getModel func() []*models.RemoteBranch) *RemoteBranchesViewModel { - self := &RemoteBranchesViewModel{ - getModel: getModel, - } - - self.ListCursor = traits.NewListCursor(self) - - return self -} - -func (self *RemoteBranchesViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *RemoteBranchesViewModel) GetSelected() *models.RemoteBranch { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} - -func (self *RemoteBranchesViewModel) GetSelectedRefName() string { +func (self *RemoteBranchesContext) GetSelectedRefName() string { item := self.GetSelected() if item == nil { return "" diff --git a/pkg/gui/context/remotes_context.go b/pkg/gui/context/remotes_context.go index 2b6afdeb5..9cb0b6054 100644 --- a/pkg/gui/context/remotes_context.go +++ b/pkg/gui/context/remotes_context.go @@ -3,12 +3,11 @@ package context import ( "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) type RemotesContext struct { - *RemotesViewModel + *BasicViewModel[*models.Remote] *ListContextTrait } @@ -25,10 +24,10 @@ func NewRemotesContext( c *types.HelperCommon, ) *RemotesContext { - viewModel := NewRemotesViewModel(getModel) + viewModel := NewBasicViewModel(getModel) return &RemotesContext{ - RemotesViewModel: viewModel, + BasicViewModel: viewModel, ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ ViewName: "branches", @@ -57,30 +56,3 @@ func (self *RemotesContext) GetSelectedItemId() string { return item.ID() } - -type RemotesViewModel struct { - *traits.ListCursor - getModel func() []*models.Remote -} - -func NewRemotesViewModel(getModel func() []*models.Remote) *RemotesViewModel { - self := &RemotesViewModel{ - getModel: getModel, - } - - self.ListCursor = traits.NewListCursor(self) - - return self -} - -func (self *RemotesViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *RemotesViewModel) GetSelected() *models.Remote { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} diff --git a/pkg/gui/context/stash_context.go b/pkg/gui/context/stash_context.go index d538fadf1..e2af64d10 100644 --- a/pkg/gui/context/stash_context.go +++ b/pkg/gui/context/stash_context.go @@ -3,12 +3,11 @@ package context import ( "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) type StashContext struct { - *StashViewModel + *BasicViewModel[*models.StashEntry] *ListContextTrait } @@ -25,10 +24,10 @@ func NewStashContext( c *types.HelperCommon, ) *StashContext { - viewModel := NewStashViewModel(getModel) + viewModel := NewBasicViewModel(getModel) return &StashContext{ - StashViewModel: viewModel, + BasicViewModel: viewModel, ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ ViewName: "stash", @@ -71,30 +70,3 @@ func (self *StashContext) GetSelectedRefName() string { return item.RefName() } - -type StashViewModel struct { - *traits.ListCursor - getModel func() []*models.StashEntry -} - -func NewStashViewModel(getModel func() []*models.StashEntry) *StashViewModel { - self := &StashViewModel{ - getModel: getModel, - } - - self.ListCursor = traits.NewListCursor(self) - - return self -} - -func (self *StashViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *StashViewModel) GetSelected() *models.StashEntry { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} diff --git a/pkg/gui/context/sub_commits_context.go b/pkg/gui/context/sub_commits_context.go index 83e76e1e0..0f16f1688 100644 --- a/pkg/gui/context/sub_commits_context.go +++ b/pkg/gui/context/sub_commits_context.go @@ -3,12 +3,11 @@ package context import ( "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) type SubCommitsContext struct { - *SubCommitsViewModel + *BasicViewModel[*models.Commit] *ViewportListContextTrait } @@ -25,10 +24,10 @@ func NewSubCommitsContext( c *types.HelperCommon, ) *SubCommitsContext { - viewModel := NewSubCommitsViewModel(getModel) + viewModel := NewBasicViewModel(getModel) return &SubCommitsContext{ - SubCommitsViewModel: viewModel, + BasicViewModel: viewModel, ViewportListContextTrait: &ViewportListContextTrait{ ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ @@ -72,30 +71,3 @@ func (self *SubCommitsContext) GetSelectedRefName() string { return item.RefName() } - -type SubCommitsViewModel struct { - *traits.ListCursor - getModel func() []*models.Commit -} - -func NewSubCommitsViewModel(getModel func() []*models.Commit) *SubCommitsViewModel { - self := &SubCommitsViewModel{ - getModel: getModel, - } - - self.ListCursor = traits.NewListCursor(self) - - return self -} - -func (self *SubCommitsViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *SubCommitsViewModel) GetSelected() *models.Commit { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} diff --git a/pkg/gui/context/submodules_context.go b/pkg/gui/context/submodules_context.go index 2bf5fe274..a88ae0dfc 100644 --- a/pkg/gui/context/submodules_context.go +++ b/pkg/gui/context/submodules_context.go @@ -3,12 +3,11 @@ package context import ( "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) type SubmodulesContext struct { - *SubmodulesViewModel + *BasicViewModel[*models.SubmoduleConfig] *ListContextTrait } @@ -25,10 +24,10 @@ func NewSubmodulesContext( c *types.HelperCommon, ) *SubmodulesContext { - viewModel := NewSubmodulesViewModel(getModel) + viewModel := NewBasicViewModel(getModel) return &SubmodulesContext{ - SubmodulesViewModel: viewModel, + BasicViewModel: viewModel, ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ ViewName: "files", @@ -57,30 +56,3 @@ func (self *SubmodulesContext) GetSelectedItemId() string { return item.ID() } - -type SubmodulesViewModel struct { - *traits.ListCursor - getModel func() []*models.SubmoduleConfig -} - -func NewSubmodulesViewModel(getModel func() []*models.SubmoduleConfig) *SubmodulesViewModel { - self := &SubmodulesViewModel{ - getModel: getModel, - } - - self.ListCursor = traits.NewListCursor(self) - - return self -} - -func (self *SubmodulesViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *SubmodulesViewModel) GetSelected() *models.SubmoduleConfig { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} diff --git a/pkg/gui/context/suggestions_context.go b/pkg/gui/context/suggestions_context.go index 6c565eedf..1291b37c8 100644 --- a/pkg/gui/context/suggestions_context.go +++ b/pkg/gui/context/suggestions_context.go @@ -2,12 +2,11 @@ package context import ( "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) type SuggestionsContext struct { - *SuggestionsViewModel + *BasicViewModel[*types.Suggestion] *ListContextTrait } @@ -24,10 +23,10 @@ func NewSuggestionsContext( c *types.HelperCommon, ) *SuggestionsContext { - viewModel := NewSuggestionsViewModel(getModel) + viewModel := NewBasicViewModel(getModel) return &SuggestionsContext{ - SuggestionsViewModel: viewModel, + BasicViewModel: viewModel, ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ ViewName: "suggestions", @@ -56,30 +55,3 @@ func (self *SuggestionsContext) GetSelectedItemId() string { return item.Value } - -type SuggestionsViewModel struct { - *traits.ListCursor - getModel func() []*types.Suggestion -} - -func NewSuggestionsViewModel(getModel func() []*types.Suggestion) *SuggestionsViewModel { - self := &SuggestionsViewModel{ - getModel: getModel, - } - - self.ListCursor = traits.NewListCursor(self) - - return self -} - -func (self *SuggestionsViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *SuggestionsViewModel) GetSelected() *types.Suggestion { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} diff --git a/pkg/gui/context/tags_context.go b/pkg/gui/context/tags_context.go index aa6211f40..fd411ec9a 100644 --- a/pkg/gui/context/tags_context.go +++ b/pkg/gui/context/tags_context.go @@ -3,12 +3,11 @@ package context import ( "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) type TagsContext struct { - *TagsViewModel + *BasicViewModel[*models.Tag] *ListContextTrait } @@ -25,10 +24,10 @@ func NewTagsContext( c *types.HelperCommon, ) *TagsContext { - viewModel := NewTagsViewModel(getModel) + viewModel := NewBasicViewModel(getModel) return &TagsContext{ - TagsViewModel: viewModel, + BasicViewModel: viewModel, ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ ViewName: "branches", @@ -58,34 +57,7 @@ func (self *TagsContext) GetSelectedItemId() string { return item.ID() } -type TagsViewModel struct { - *traits.ListCursor - getModel func() []*models.Tag -} - -func NewTagsViewModel(getModel func() []*models.Tag) *TagsViewModel { - self := &TagsViewModel{ - getModel: getModel, - } - - self.ListCursor = traits.NewListCursor(self) - - return self -} - -func (self *TagsViewModel) GetItemsLength() int { - return len(self.getModel()) -} - -func (self *TagsViewModel) GetSelected() *models.Tag { - if self.GetItemsLength() == 0 { - return nil - } - - return self.getModel()[self.GetSelectedLineIdx()] -} - -func (self *TagsViewModel) GetSelectedRefName() string { +func (self *TagsContext) GetSelectedRefName() string { item := self.GetSelected() if item == nil { return "" diff --git a/pkg/gui/context/traits/list_cursor.go b/pkg/gui/context/traits/list_cursor.go index 9423ad89c..6e80643d6 100644 --- a/pkg/gui/context/traits/list_cursor.go +++ b/pkg/gui/context/traits/list_cursor.go @@ -6,7 +6,7 @@ import ( ) type HasLength interface { - GetItemsLength() int + Len() int } type ListCursor struct { @@ -25,7 +25,7 @@ func (self *ListCursor) GetSelectedLineIdx() int { } func (self *ListCursor) SetSelectedLineIdx(value int) { - self.selectedIdx = utils.Clamp(value, 0, self.list.GetItemsLength()-1) + self.selectedIdx = utils.Clamp(value, 0, self.list.Len()-1) } // moves the cursor up or down by the given amount @@ -38,6 +38,6 @@ func (self *ListCursor) RefreshSelectedIdx() { self.SetSelectedLineIdx(self.selectedIdx) } -func (self *ListCursor) GetItemsLength() int { - return self.list.GetItemsLength() +func (self *ListCursor) Len() int { + return self.list.Len() } diff --git a/pkg/gui/context/working_tree_context.go b/pkg/gui/context/working_tree_context.go index ae647afb3..5223f2982 100644 --- a/pkg/gui/context/working_tree_context.go +++ b/pkg/gui/context/working_tree_context.go @@ -50,7 +50,7 @@ func NewWorkingTreeContext( } func (self *WorkingTreeContext) GetSelectedItemId() string { - item := self.GetSelectedFileNode() + item := self.GetSelected() if item == nil { return "" } diff --git a/pkg/gui/controllers/commits_files_controller.go b/pkg/gui/controllers/commits_files_controller.go index d0015faff..933d17321 100644 --- a/pkg/gui/controllers/commits_files_controller.go +++ b/pkg/gui/controllers/commits_files_controller.go @@ -80,7 +80,7 @@ func (self *CommitFilesController) GetMouseKeybindings(opts types.KeybindingsOpt func (self *CommitFilesController) checkSelected(callback func(*filetree.CommitFileNode) error) func() error { return func() error { - selected := self.context().GetSelectedFileNode() + selected := self.context().GetSelected() if selected == nil { return nil } @@ -98,7 +98,7 @@ func (self *CommitFilesController) context() *context.CommitFilesContext { } func (self *CommitFilesController) onClickMain(opts gocui.ViewMouseBindingOpts) error { - node := self.context().GetSelectedFileNode() + node := self.context().GetSelected() if node == nil { return nil } diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go index 5fcde5202..db3eca7b1 100644 --- a/pkg/gui/controllers/files_controller.go +++ b/pkg/gui/controllers/files_controller.go @@ -216,7 +216,7 @@ func (self *FilesController) press(node *filetree.FileNode) error { func (self *FilesController) checkSelectedFileNode(callback func(*filetree.FileNode) error) func() error { return func() error { - node := self.context().GetSelectedFileNode() + node := self.context().GetSelected() if node == nil { return nil } @@ -234,7 +234,7 @@ func (self *FilesController) context() *context.WorkingTreeContext { } func (self *FilesController) getSelectedFile() *models.File { - node := self.context().GetSelectedFileNode() + node := self.context().GetSelected() if node == nil { return nil } @@ -246,7 +246,7 @@ func (self *FilesController) enter() error { } func (self *FilesController) EnterFile(opts types.OnFocusOpts) error { - node := self.context().GetSelectedFileNode() + node := self.context().GetSelected() if node == nil { return nil } @@ -535,7 +535,7 @@ func (self *FilesController) edit(node *filetree.FileNode) error { } func (self *FilesController) Open() error { - node := self.context().GetSelectedFileNode() + node := self.context().GetSelected() if node == nil { return nil } @@ -583,7 +583,7 @@ func (self *FilesController) createResetToUpstreamMenu() error { } func (self *FilesController) handleToggleDirCollapsed() error { - node := self.context().GetSelectedFileNode() + node := self.context().GetSelected() if node == nil { return nil } diff --git a/pkg/gui/controllers/files_remove_controller.go b/pkg/gui/controllers/files_remove_controller.go index 521167c33..c2416bfaf 100644 --- a/pkg/gui/controllers/files_remove_controller.go +++ b/pkg/gui/controllers/files_remove_controller.go @@ -139,7 +139,7 @@ func (self *FilesRemoveController) ResetSubmodule(submodule *models.SubmoduleCon func (self *FilesRemoveController) checkSelectedFileNode(callback func(*filetree.FileNode) error) func() error { return func() error { - node := self.context().GetSelectedFileNode() + node := self.context().GetSelected() if node == nil { return nil } diff --git a/pkg/gui/controllers/list_controller.go b/pkg/gui/controllers/list_controller.go index c9898f908..0f64228bb 100644 --- a/pkg/gui/controllers/list_controller.go +++ b/pkg/gui/controllers/list_controller.go @@ -83,11 +83,11 @@ func (self *ListController) HandleNextPage() error { } func (self *ListController) HandleGotoTop() error { - return self.handleLineChange(-self.context.GetList().GetItemsLength()) + return self.handleLineChange(-self.context.GetList().Len()) } func (self *ListController) HandleGotoBottom() error { - return self.handleLineChange(self.context.GetList().GetItemsLength()) + return self.handleLineChange(self.context.GetList().Len()) } func (self *ListController) HandleClick(opts gocui.ViewMouseBindingOpts) error { @@ -99,7 +99,7 @@ func (self *ListController) HandleClick(opts gocui.ViewMouseBindingOpts) error { return err } - if newSelectedLineIdx > self.context.GetList().GetItemsLength()-1 { + if newSelectedLineIdx > self.context.GetList().Len()-1 { return nil } diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go index b54cfa3c0..d45e3ed56 100644 --- a/pkg/gui/controllers/local_commits_controller.go +++ b/pkg/gui/controllers/local_commits_controller.go @@ -588,7 +588,7 @@ func (self *LocalCommitsController) gotoBottom() error { } } - self.context().SetSelectedLineIdx(self.context().GetItemsLength() - 1) + self.context().SetSelectedLineIdx(self.context().Len() - 1) return nil } diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index 5d5d65c8f..765e33e4c 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -9,7 +9,7 @@ import ( // list panel functions func (gui *Gui) getSelectedFileNode() *filetree.FileNode { - return gui.State.Contexts.Files.GetSelectedFileNode() + return gui.State.Contexts.Files.GetSelected() } func (gui *Gui) getSelectedFile() *models.File { diff --git a/pkg/gui/filetree/commit_file_tree.go b/pkg/gui/filetree/commit_file_tree.go index d020aee21..055e273f3 100644 --- a/pkg/gui/filetree/commit_file_tree.go +++ b/pkg/gui/filetree/commit_file_tree.go @@ -8,7 +8,7 @@ import ( type ICommitFileTree interface { ITree - GetItemAtIndex(index int) *CommitFileNode + Get(index int) *CommitFileNode GetFile(path string) *models.CommitFile GetAllItems() []*CommitFileNode GetAllFiles() []*models.CommitFile @@ -42,7 +42,7 @@ func (self *CommitFileTree) ToggleShowTree() { self.SetTree() } -func (self *CommitFileTree) GetItemAtIndex(index int) *CommitFileNode { +func (self *CommitFileTree) Get(index int) *CommitFileNode { // need to traverse the three depth first until we get to the index. return self.tree.GetNodeAtIndex(index+1, self.collapsedPaths) // ignoring root } @@ -60,7 +60,7 @@ func (self *CommitFileTree) GetAllItems() []*CommitFileNode { return self.tree.Flatten(self.collapsedPaths)[1:] // ignoring root } -func (self *CommitFileTree) GetItemsLength() int { +func (self *CommitFileTree) Len() int { return self.tree.Size(self.collapsedPaths) - 1 // ignoring root } diff --git a/pkg/gui/filetree/commit_file_tree_view_model.go b/pkg/gui/filetree/commit_file_tree_view_model.go index e80003d28..72960c702 100644 --- a/pkg/gui/filetree/commit_file_tree_view_model.go +++ b/pkg/gui/filetree/commit_file_tree_view_model.go @@ -61,16 +61,16 @@ func (self *CommitFileTreeViewModel) SetCanRebase(canRebase bool) { self.canRebase = canRebase } -func (self *CommitFileTreeViewModel) GetSelectedFileNode() *CommitFileNode { - if self.GetItemsLength() == 0 { +func (self *CommitFileTreeViewModel) GetSelected() *CommitFileNode { + if self.Len() == 0 { return nil } - return self.GetItemAtIndex(self.GetSelectedLineIdx()) + return self.Get(self.GetSelectedLineIdx()) } func (self *CommitFileTreeViewModel) GetSelectedFile() *models.CommitFile { - node := self.GetSelectedFileNode() + node := self.GetSelected() if node == nil { return nil } @@ -79,7 +79,7 @@ func (self *CommitFileTreeViewModel) GetSelectedFile() *models.CommitFile { } func (self *CommitFileTreeViewModel) GetSelectedPath() string { - node := self.GetSelectedFileNode() + node := self.GetSelected() if node == nil { return "" } @@ -89,7 +89,7 @@ func (self *CommitFileTreeViewModel) GetSelectedPath() string { // duplicated from file_tree_view_model.go. Generics will help here func (self *CommitFileTreeViewModel) ToggleShowTree() { - selectedNode := self.GetSelectedFileNode() + selectedNode := self.GetSelected() self.ICommitFileTree.ToggleShowTree() diff --git a/pkg/gui/filetree/file_tree.go b/pkg/gui/filetree/file_tree.go index 113027e59..0d0524470 100644 --- a/pkg/gui/filetree/file_tree.go +++ b/pkg/gui/filetree/file_tree.go @@ -22,7 +22,7 @@ type ITree interface { ExpandToPath(path string) ToggleShowTree() GetIndexForPath(path string) (int, bool) - GetItemsLength() int + Len() int SetTree() IsCollapsed(path string) bool ToggleCollapsed(path string) @@ -35,7 +35,7 @@ type IFileTree interface { FilterFiles(test func(*models.File) bool) []*models.File SetFilter(filter FileTreeDisplayFilter) - GetItemAtIndex(index int) *FileNode + Get(index int) *FileNode GetFile(path string) *models.File GetAllItems() []*FileNode GetAllFiles() []*models.File @@ -104,7 +104,7 @@ func (self *FileTree) ToggleShowTree() { self.SetTree() } -func (self *FileTree) GetItemAtIndex(index int) *FileNode { +func (self *FileTree) Get(index int) *FileNode { // need to traverse the three depth first until we get to the index. return self.tree.GetNodeAtIndex(index+1, self.collapsedPaths) // ignoring root } @@ -135,7 +135,7 @@ func (self *FileTree) GetAllItems() []*FileNode { return self.tree.Flatten(self.collapsedPaths)[1:] // ignoring root } -func (self *FileTree) GetItemsLength() int { +func (self *FileTree) Len() int { return self.tree.Size(self.collapsedPaths) - 1 // ignoring root } diff --git a/pkg/gui/filetree/file_tree_view_model.go b/pkg/gui/filetree/file_tree_view_model.go index 9adb04cf1..333be8da2 100644 --- a/pkg/gui/filetree/file_tree_view_model.go +++ b/pkg/gui/filetree/file_tree_view_model.go @@ -35,16 +35,16 @@ func NewFileTreeViewModel(getFiles func() []*models.File, log *logrus.Entry, sho } } -func (self *FileTreeViewModel) GetSelectedFileNode() *FileNode { - if self.GetItemsLength() == 0 { +func (self *FileTreeViewModel) GetSelected() *FileNode { + if self.Len() == 0 { return nil } - return self.GetItemAtIndex(self.GetSelectedLineIdx()) + return self.Get(self.GetSelectedLineIdx()) } func (self *FileTreeViewModel) GetSelectedFile() *models.File { - node := self.GetSelectedFileNode() + node := self.GetSelected() if node == nil { return nil } @@ -53,7 +53,7 @@ func (self *FileTreeViewModel) GetSelectedFile() *models.File { } func (self *FileTreeViewModel) GetSelectedPath() string { - node := self.GetSelectedFileNode() + node := self.GetSelected() if node == nil { return "" } @@ -63,7 +63,7 @@ func (self *FileTreeViewModel) GetSelectedPath() string { func (self *FileTreeViewModel) SetTree() { newFiles := self.GetAllFiles() - selectedNode := self.GetSelectedFileNode() + selectedNode := self.GetSelected() // for when you stage the old file of a rename and the new file is in a collapsed dir for _, file := range newFiles { @@ -135,7 +135,7 @@ func (self *FileTreeViewModel) SetFilter(filter FileTreeDisplayFilter) { // If we're going from tree to flat and we have a file selected we want to select that. // If instead we've selected a directory we need to select the first file in that directory. func (self *FileTreeViewModel) ToggleShowTree() { - selectedNode := self.GetSelectedFileNode() + selectedNode := self.GetSelected() self.IFileTree.ToggleShowTree() diff --git a/pkg/gui/filtering_menu_panel.go b/pkg/gui/filtering_menu_panel.go index fefe6a892..7bcc26363 100644 --- a/pkg/gui/filtering_menu_panel.go +++ b/pkg/gui/filtering_menu_panel.go @@ -16,7 +16,7 @@ func (gui *Gui) handleCreateFilteringMenuPanel() error { fileName = node.GetPath() } case gui.State.Contexts.CommitFiles: - node := gui.State.Contexts.CommitFiles.GetSelectedFileNode() + node := gui.State.Contexts.CommitFiles.GetSelected() if node != nil { fileName = node.GetPath() } diff --git a/pkg/gui/list_context_config.go b/pkg/gui/list_context_config.go index 397e38bd9..89e1461b8 100644 --- a/pkg/gui/list_context_config.go +++ b/pkg/gui/list_context_config.go @@ -230,7 +230,7 @@ func (gui *Gui) commitFilesListContext() *context.CommitFilesContext { func() []*models.CommitFile { return gui.State.Model.CommitFiles }, gui.Views.CommitFiles, func(startIdx int, length int) [][]string { - if gui.State.Contexts.CommitFiles.CommitFileTreeViewModel.GetItemsLength() == 0 { + if gui.State.Contexts.CommitFiles.CommitFileTreeViewModel.Len() == 0 { return [][]string{{style.FgRed.Sprint("(none)")}} } diff --git a/pkg/gui/patch_building_panel.go b/pkg/gui/patch_building_panel.go index d71b43e76..dd82f998a 100644 --- a/pkg/gui/patch_building_panel.go +++ b/pkg/gui/patch_building_panel.go @@ -13,7 +13,7 @@ func (gui *Gui) refreshPatchBuildingPanel(selectedLineIdx int) error { gui.Views.Secondary.Title = "Custom Patch" // get diff from commit file that's currently selected - node := gui.State.Contexts.CommitFiles.GetSelectedFileNode() + node := gui.State.Contexts.CommitFiles.GetSelected() if node == nil { return nil } @@ -74,7 +74,7 @@ func (gui *Gui) handleToggleSelectionForPatch() error { } // add range of lines to those set for the file - node := gui.State.Contexts.CommitFiles.GetSelectedFileNode() + node := gui.State.Contexts.CommitFiles.GetSelected() if node == nil { return nil } diff --git a/pkg/gui/types/context.go b/pkg/gui/types/context.go index 5e588da0d..bf56cf5db 100644 --- a/pkg/gui/types/context.go +++ b/pkg/gui/types/context.go @@ -109,7 +109,7 @@ type IController interface { type IList interface { IListCursor - GetItemsLength() int + Len() int } type IListCursor interface {