1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-03-19 21:28:28 +02:00
lazygit/pkg/gui/filetree/commit_file_tree_view_model.go

94 lines
2.2 KiB
Go
Raw Normal View History

2022-01-22 00:13:51 +11:00
package filetree
import (
"sync"
2022-01-22 00:13:51 +11:00
"github.com/jesseduffield/lazygit/pkg/commands/models"
"github.com/jesseduffield/lazygit/pkg/gui/context/traits"
"github.com/jesseduffield/lazygit/pkg/gui/types"
2022-01-22 00:13:51 +11:00
"github.com/sirupsen/logrus"
)
type ICommitFileTreeViewModel interface {
ICommitFileTree
types.IListCursor
2022-01-22 00:13:51 +11:00
GetRefName() string
SetRefName(string)
GetCanRebase() bool
SetCanRebase(bool)
2022-01-22 00:13:51 +11:00
}
type CommitFileTreeViewModel struct {
sync.RWMutex
ICommitFileTree
types.IListCursor
2022-01-22 00:13:51 +11:00
// this is e.g. the commit SHA of the commit for which we're viewing the files
refName string
2022-01-22 00:13:51 +11:00
// we set this to true when you're viewing the files within the checked-out branch's commits.
// If you're viewing the files of some random other branch we can't do any rebase stuff.
canRebase bool
}
var _ ICommitFileTreeViewModel = &CommitFileTreeViewModel{}
2022-01-22 00:13:51 +11:00
func NewCommitFileTreeViewModel(getFiles func() []*models.CommitFile, log *logrus.Entry, showTree bool) *CommitFileTreeViewModel {
fileTree := NewCommitFileTree(getFiles, log, showTree)
listCursor := traits.NewListCursor(fileTree)
return &CommitFileTreeViewModel{
ICommitFileTree: fileTree,
IListCursor: listCursor,
refName: "",
canRebase: false,
}
2022-01-22 00:13:51 +11:00
}
func (self *CommitFileTreeViewModel) GetRefName() string {
return self.refName
2022-01-22 00:13:51 +11:00
}
func (self *CommitFileTreeViewModel) SetRefName(refName string) {
self.refName = refName
2022-01-22 00:13:51 +11:00
}
func (self *CommitFileTreeViewModel) GetCanRebase() bool {
return self.canRebase
2022-01-22 00:13:51 +11:00
}
func (self *CommitFileTreeViewModel) SetCanRebase(canRebase bool) {
self.canRebase = canRebase
2022-01-22 00:13:51 +11:00
}
func (self *CommitFileTreeViewModel) GetSelectedFileNode() *CommitFileNode {
if self.GetItemsLength() == 0 {
2022-01-22 00:13:51 +11:00
return nil
}
return self.GetItemAtIndex(self.GetSelectedLineIdx())
2022-01-22 00:13:51 +11:00
}
// duplicated from file_tree_view_model.go. Generics will help here
func (self *CommitFileTreeViewModel) ToggleShowTree() {
selectedNode := self.GetSelectedFileNode()
2022-01-22 00:13:51 +11:00
self.ICommitFileTree.ToggleShowTree()
2022-01-22 00:13:51 +11:00
if selectedNode == nil {
return
2022-01-22 00:13:51 +11:00
}
path := selectedNode.Path
2022-01-22 00:13:51 +11:00
if self.InTreeMode() {
self.ExpandToPath(path)
} else if len(selectedNode.Children) > 0 {
path = selectedNode.GetLeaves()[0].Path
}
2022-01-22 00:13:51 +11:00
index, found := self.GetIndexForPath(path)
if found {
self.SetSelectedLineIdx(index)
}
2022-01-22 00:13:51 +11:00
}