diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/fuzzy-search-modal.go | 55 | ||||
-rw-r--r-- | ui/message-view.go | 1 | ||||
-rw-r--r-- | ui/view-main.go | 5 |
3 files changed, 40 insertions, 21 deletions
diff --git a/ui/fuzzy-search-modal.go b/ui/fuzzy-search-modal.go index 774a804..97a029a 100644 --- a/ui/fuzzy-search-modal.go +++ b/ui/fuzzy-search-modal.go @@ -33,7 +33,9 @@ import ( type FuzzySearchModal struct { mauview.Component - search *mauview.InputField + container *mauview.Box + + search *mauview.InputArea results *mauview.TextView matches fuzzy.Ranks @@ -52,21 +54,19 @@ func NewFuzzySearchModal(mainView *MainView, width int, height int) *FuzzySearch fs.InitList(mainView.rooms) - fs.search = mauview.NewInputField().SetChangedFunc(fs.changeHandler) - wrappedSearch := mauview.NewBox(fs.search).SetKeyCaptureFunc(fs.keyHandler) - searchLabel := mauview.NewTextField().SetText("Room") - combinedSearch := mauview.NewFlex(). - SetDirection(mauview.FlexColumn). - AddFixedComponent(searchLabel, 5). - AddProportionalComponent(wrappedSearch, 1) - fs.results = mauview.NewTextView().SetRegions(true) + fs.search = mauview.NewInputArea(). + SetChangedFunc(fs.changeHandler). + SetTextColor(tcell.ColorWhite). + SetBackgroundColor(tcell.ColorDarkCyan) + fs.search.Focus() - // Flex widget containing input box and results - container := mauview.NewBox(mauview.NewFlex(). + flex := mauview.NewFlex(). SetDirection(mauview.FlexRow). - AddFixedComponent(combinedSearch, 1). - AddProportionalComponent(fs.results, 1)). + AddFixedComponent(fs.search, 1). + AddProportionalComponent(fs.results, 1) + + fs.container = mauview.NewBox(flex). SetBorder(true). SetTitle("Quick Room Switcher"). SetBlurCaptureFunc(func() bool { @@ -74,11 +74,19 @@ func NewFuzzySearchModal(mainView *MainView, width int, height int) *FuzzySearch return true }) - fs.Component = mauview.Center(container, width, height) + fs.Component = mauview.Center(fs.container, width, height).SetAlwaysFocusChild(true) return fs } +func (fs *FuzzySearchModal) Focus() { + fs.container.Focus() +} + +func (fs *FuzzySearchModal) Blur() { + fs.container.Blur() +} + func (fs *FuzzySearchModal) InitList(rooms map[string]*RoomView) { for _, room := range rooms { fs.roomList = append(fs.roomList, room.Room) @@ -95,7 +103,7 @@ func (fs *FuzzySearchModal) changeHandler(str string) { for _, match := range fs.matches { fmt.Fprintf(fs.results, `["%d"]%s[""]%s`, match.OriginalIndex, match.Target, "\n") } - fs.parent.parent.Render() + //fs.parent.parent.Render() fs.results.Highlight(strconv.Itoa(fs.matches[0].OriginalIndex)) fs.results.ScrollToBeginning() } else { @@ -104,13 +112,14 @@ func (fs *FuzzySearchModal) changeHandler(str string) { } } -func (fs *FuzzySearchModal) keyHandler(event mauview.KeyEvent) mauview.KeyEvent { +func (fs *FuzzySearchModal) OnKeyEvent(event mauview.KeyEvent) bool { highlights := fs.results.GetHighlights() + debug.Print("Search key event:", event) switch event.Key() { case tcell.KeyEsc: // Close room finder fs.parent.HideModal() - return nil + return true case tcell.KeyTab: // Cycle highlighted area to next match if len(highlights) > 0 { @@ -118,7 +127,13 @@ func (fs *FuzzySearchModal) keyHandler(event mauview.KeyEvent) mauview.KeyEvent fs.results.Highlight(strconv.Itoa(fs.matches[fs.selected].OriginalIndex)) fs.results.ScrollToHighlight() } - return nil + return true + case tcell.KeyBacktab: + if len(highlights) > 0 { + fs.selected = (fs.selected - 1) % len(fs.matches) + fs.results.Highlight(strconv.Itoa(fs.matches[fs.selected].OriginalIndex)) + fs.results.ScrollToHighlight() + } case tcell.KeyEnter: // Switch room to currently selected room if len(highlights) > 0 { @@ -128,7 +143,7 @@ func (fs *FuzzySearchModal) keyHandler(event mauview.KeyEvent) mauview.KeyEvent fs.parent.HideModal() fs.results.Clear() fs.search.SetText("") - return nil + return true } - return event + return fs.search.OnKeyEvent(event) } diff --git a/ui/message-view.go b/ui/message-view.go index c8a7bfd..d90a3a7 100644 --- a/ui/message-view.go +++ b/ui/message-view.go @@ -559,5 +559,4 @@ func (view *MessageView) Draw(screen mauview.Screen) { text.Draw(screen, messageX, line) } - debug.Print(screen) } diff --git a/ui/view-main.go b/ui/view-main.go index d081d13..d36a510 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -90,6 +90,8 @@ func (view *MainView) ShowModal(modal mauview.Component) { view.focused, ok = modal.(mauview.Focusable) if !ok { view.focused = nil + } else { + view.focused.Focus() } } @@ -281,6 +283,9 @@ defaultHandler: const WheelScrollOffsetDiff = 3 func (view *MainView) OnMouseEvent(event mauview.MouseEvent) bool { + if view.modal != nil { + return view.modal.OnMouseEvent(event) + } if view.config.Preferences.HideRoomList { return view.roomView.OnMouseEvent(event) } |