Forward mouse events to the roster view

This commit is contained in:
FIGBERT 2023-03-18 18:38:20 -07:00
parent 9cecf0bd02
commit 99bd36f216
No known key found for this signature in database
GPG key ID: 67F1598D607A844B
2 changed files with 44 additions and 10 deletions

View file

@ -217,6 +217,9 @@ func (view *MainView) OnMouseEvent(event mauview.MouseEvent) bool {
if view.modal != nil {
return view.modal.OnMouseEvent(event)
}
if view.config.Preferences.DisplayMode == config.DisplayModeModern {
return view.rosterView.OnMouseEvent(event)
}
if view.config.Preferences.HideRoomList {
return view.roomView.OnMouseEvent(event)
}

View file

@ -116,6 +116,22 @@ func (rstr *RosterView) Last() *rooms.Room {
return rstr.rooms[len(rstr.rooms)-1]
}
func (rstr *RosterView) ScrollNext() {
if index := rstr.index(rstr.selected); index == -1 || index == len(rstr.rooms)-1 {
rstr.selected = rstr.First()
} else {
rstr.selected = rstr.rooms[index+1]
}
}
func (rstr *RosterView) ScrollPrev() {
if index := rstr.index(rstr.selected); index < 1 {
rstr.selected = rstr.Last()
} else {
rstr.selected = rstr.rooms[index-1]
}
}
func (rstr *RosterView) Draw(screen mauview.Screen) {
if rstr.focused {
if roomView, ok := rstr.parent.getRoomView(rstr.selected.ID, true); ok {
@ -214,17 +230,9 @@ func (rstr *RosterView) OnKeyEvent(event mauview.KeyEvent) bool {
switch rstr.parent.config.Keybindings.Roster[kb] {
case "next_room":
if index := rstr.index(rstr.selected); index == -1 || index == len(rstr.rooms)-1 {
rstr.selected = rstr.First()
} else {
rstr.selected = rstr.rooms[index+1]
}
rstr.ScrollNext()
case "prev_room":
if index := rstr.index(rstr.selected); index < 1 {
rstr.selected = rstr.Last()
} else {
rstr.selected = rstr.rooms[index-1]
}
rstr.ScrollPrev()
case "clear":
rstr.selected = nil
case "quit":
@ -236,3 +244,26 @@ func (rstr *RosterView) OnKeyEvent(event mauview.KeyEvent) bool {
}
return true
}
func (rstr *RosterView) OnMouseEvent(event mauview.MouseEvent) bool {
if rstr.focused {
if roomView, ok := rstr.parent.getRoomView(rstr.selected.ID, true); ok {
return roomView.OnMouseEvent(event)
}
}
if event.HasMotion() {
return false
}
switch event.Buttons() {
case tcell.WheelUp:
rstr.ScrollPrev()
return true
case tcell.WheelDown:
rstr.ScrollNext()
return true
}
return false
}