Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 40 additions & 15 deletions gui.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,21 +139,23 @@ type Gui struct {
ReplayedEvents replayedEvents
playRecording bool

tabClickBindings []*tabClickBinding
viewMouseBindings []*ViewMouseBinding
lastClick *clickInfo
gEvents chan GocuiEvent
userEvents chan userEvent
views []*View
currentView *View
managers []Manager
keybindings []*keybinding
focusHandler func(bool) error
openHyperlink func(string, string) error
maxX, maxY int
outputMode OutputMode
stop chan struct{}
blacklist []Key
tabClickBindings []*tabClickBinding
viewMouseBindings []*ViewMouseBinding
lastClick *clickInfo
gEvents chan GocuiEvent
userEvents chan userEvent
views []*View
currentView *View
managers []Manager
keybindings []*keybinding
focusHandler func(bool) error
openHyperlink func(string, string) error
onSelectSearchResultFunc func(*View, int)
renderSearchStatusFunc func(*View, int, int)
maxX, maxY int
outputMode OutputMode
stop chan struct{}
blacklist []Key

// BgColor and FgColor allow to configure the background and foreground
// colors of the GUI.
Expand Down Expand Up @@ -355,11 +357,26 @@ func (g *Gui) SetView(name string, x0, y0, x1, y1 int, overlaps byte) (*View, er
v.Overlaps = overlaps
g.views = append(g.views, v)

v.setOnSelectResult(g.onSelectSearchItem)
v.setRenderSearchStatus(g.renderSearchStatus)

g.Mutexes.ViewsMutex.Unlock()

return v, errors.Wrap(ErrUnknownView, 0)
}

func (g *Gui) onSelectSearchItem(v *View, selectedLineIdx int) {
if g.onSelectSearchResultFunc != nil {
g.onSelectSearchResultFunc(v, selectedLineIdx)
}
}

func (g *Gui) renderSearchStatus(v *View, selected int, total int) {
if g.renderSearchStatusFunc != nil {
g.renderSearchStatusFunc(v, selected, total)
}
}

// SetViewBeneath sets a view stacked beneath another view
func (g *Gui) SetViewBeneath(name string, aboveViewName string, height int) (*View, error) {
aboveView, err := g.View(aboveViewName)
Expand Down Expand Up @@ -643,6 +660,14 @@ func (g *Gui) SetOpenHyperlinkFunc(openHyperlinkFunc func(string, string) error)
g.openHyperlink = openHyperlinkFunc
}

func (g *Gui) SetOnSelectSearchResultFunc(onSelectSearchResultFunc func(*View, int)) {
g.onSelectSearchResultFunc = onSelectSearchResultFunc
}

func (g *Gui) SetRenderSearchStatusFunc(renderSearchStatusFunc func(*View, int, int)) {
g.renderSearchStatusFunc = renderSearchStatusFunc
}

// getKey takes an empty interface with a key and returns the corresponding
// typed Key or rune.
func getKey(key any) (Key, rune, error) {
Expand Down
12 changes: 6 additions & 6 deletions view.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,21 +214,21 @@ type searcher struct {
searchPositions []SearchPosition
modelSearchResults []SearchPosition
currentSearchIndex int
onSelectItem func(int)
renderSearchStatus func(int, int)
onSelectItem func(*View, int)
renderSearchStatus func(*View, int, int)
}

func (v *View) SetRenderSearchStatus(renderSearchStatus func(int, int)) {
func (v *View) setRenderSearchStatus(renderSearchStatus func(*View, int, int)) {
v.searcher.renderSearchStatus = renderSearchStatus
}

func (v *View) SetOnSelectItem(onSelectItem func(int)) {
func (v *View) setOnSelectResult(onSelectItem func(*View, int)) {
v.searcher.onSelectItem = onSelectItem
}

func (v *View) renderSearchStatus(index int, itemCount int) {
if v.searcher.renderSearchStatus != nil {
v.searcher.renderSearchStatus(index, itemCount)
v.searcher.renderSearchStatus(v, index, itemCount)
}
}

Expand Down Expand Up @@ -286,7 +286,7 @@ func (v *View) SelectSearchResult(index int) {
v.FocusPoint(v.ox, y, true)
v.renderSearchStatus(index, itemCount)
if v.searcher.onSelectItem != nil {
v.searcher.onSelectItem(y)
v.searcher.onSelectItem(v, y)
}
}

Expand Down
Loading