summaryrefslogtreecommitdiffstats
path: root/pkg/gui/types/context.go
blob: fcbadfd2279ad5c5f35dae1f9b2aebebb64bf7c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package types

import "github.com/jesseduffield/lazygit/pkg/config"

type ContextKind int

const (
	SIDE_CONTEXT ContextKind = iota
	MAIN_CONTEXT
	TEMPORARY_POPUP
	PERSISTENT_POPUP
	EXTRAS_CONTEXT
)

type ParentContexter interface {
	SetParentContext(Context)
	// we return a bool here to tell us whether or not the returned value just wraps a nil
	GetParentContext() (Context, bool)
}

type IBaseContext interface {
	ParentContexter

	GetKind() ContextKind
	GetViewName() string
	GetWindowName() string
	SetWindowName(string)
	GetKey() ContextKey

	GetOptionsMap() map[string]string
}

type Context interface {
	IBaseContext

	HandleFocus(opts ...OnFocusOpts) error
	HandleFocusLost() error
	HandleRender() error
	HandleRenderToMain() error
}

type OnFocusOpts struct {
	ClickedViewName    string
	ClickedViewLineIdx int
}

type ContextKey string

type HasKeybindings interface {
	Keybindings(
		getKey func(key string) interface{},
		config config.KeybindingConfig,
		guards KeybindingGuards,
	) []*Binding
}

type IController interface {
	HasKeybindings
	Context() Context
}

type IListContext interface {
	HasKeybindings

	GetSelectedItemId() string
	HandlePrevLine() error
	HandleNextLine() error
	HandleScrollLeft() error
	HandleScrollRight() error
	HandlePrevPage() error
	HandleNextPage() error
	HandleGotoTop() error
	HandleGotoBottom() error
	HandleClick(onClick func() error) error

	OnSearchSelect(selectedLineIdx int) error
	FocusLine()

	GetPanelState() IListPanelState

	Context
}

type IList interface {
	IListCursor
	GetItemsLength() int
}

type IListCursor interface {
	GetSelectedLineIdx() int
	SetSelectedLineIdx(value int)
	MoveSelectedLine(delta int)
	RefreshSelectedIdx()
}

type IListPanelState interface {
	SetSelectedLineIdx(int)
	GetSelectedLineIdx() int
}

type ListItem interface {
	// ID is a SHA when the item is a commit, a filename when the item is a file, 'stash@{4}' when it's a stash entry, 'my_branch' when it's a branch
	ID() string

	// Description is something we would show in a message e.g. '123as14: push blah' for a commit
	Description() string
}