summaryrefslogtreecommitdiffstats
path: root/pkg/gui/types/context.go
blob: eadcf41adf0dc8222cb26b816c2b49f02b3e0a8d (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
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
	GetSelectedItem() (ListItem, bool)
	GetSelectedItemId() string

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

	OnSearchSelect(selectedLineIdx int) error
	FocusLine()
	HandleRenderToMain() error

	GetPanelState() IListPanelState

	Context
}

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
}