mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-11-27 22:38:09 +02:00
Situations where a view's width changes: - changing screen modes - enter staging or patch building - resizing the terminal window For the first of these we currently have special code to force a rerender, since some views render different content depending on whether they are in full-screen mode. We'll be able to remove that code now, since this new generic mechanism takes care of that too. But we will need this more general mechanism for cases where views truncate their content to the view width; we'll add one example for that later in this branch.
94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package context
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/presentation"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
)
|
|
|
|
type BranchesContext struct {
|
|
*FilteredListViewModel[*models.Branch]
|
|
*ListContextTrait
|
|
}
|
|
|
|
var (
|
|
_ types.IListContext = (*BranchesContext)(nil)
|
|
_ types.DiffableContext = (*BranchesContext)(nil)
|
|
)
|
|
|
|
func NewBranchesContext(c *ContextCommon) *BranchesContext {
|
|
viewModel := NewFilteredListViewModel(
|
|
func() []*models.Branch { return c.Model().Branches },
|
|
func(branch *models.Branch) []string {
|
|
return []string{branch.Name}
|
|
},
|
|
)
|
|
|
|
getDisplayStrings := func(_ int, _ int) [][]string {
|
|
return presentation.GetBranchListDisplayStrings(
|
|
viewModel.GetItems(),
|
|
c.State().GetItemOperation,
|
|
c.State().GetRepoState().GetScreenMode() != types.SCREEN_NORMAL,
|
|
c.Modes().Diffing.Ref,
|
|
c.Tr,
|
|
c.UserConfig,
|
|
c.Model().Worktrees,
|
|
)
|
|
}
|
|
|
|
self := &BranchesContext{
|
|
FilteredListViewModel: viewModel,
|
|
ListContextTrait: &ListContextTrait{
|
|
Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{
|
|
View: c.Views().Branches,
|
|
WindowName: "branches",
|
|
Key: LOCAL_BRANCHES_CONTEXT_KEY,
|
|
Kind: types.SIDE_CONTEXT,
|
|
Focusable: true,
|
|
NeedsRerenderOnWidthChange: true,
|
|
})),
|
|
ListRenderer: ListRenderer{
|
|
list: viewModel,
|
|
getDisplayStrings: getDisplayStrings,
|
|
},
|
|
c: c,
|
|
},
|
|
}
|
|
|
|
return self
|
|
}
|
|
|
|
func (self *BranchesContext) GetSelectedItemId() string {
|
|
item := self.GetSelected()
|
|
if item == nil {
|
|
return ""
|
|
}
|
|
|
|
return item.ID()
|
|
}
|
|
|
|
func (self *BranchesContext) GetSelectedRef() types.Ref {
|
|
branch := self.GetSelected()
|
|
if branch == nil {
|
|
return nil
|
|
}
|
|
return branch
|
|
}
|
|
|
|
func (self *BranchesContext) GetDiffTerminals() []string {
|
|
// for our local branches we want to include both the branch and its upstream
|
|
branch := self.GetSelected()
|
|
if branch != nil {
|
|
names := []string{branch.ID()}
|
|
if branch.IsTrackingRemote() {
|
|
names = append(names, branch.ID()+"@{u}")
|
|
}
|
|
return names
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (self *BranchesContext) ShowBranchHeadsInSubCommits() bool {
|
|
return true
|
|
}
|