Allow clicking on room list entries to switch room. Fixes #30

This commit is contained in:
Tulir Asokan 2018-04-21 21:53:52 +03:00
parent 7da1555c84
commit 7abfd97cda
2 changed files with 21 additions and 3 deletions

View File

@ -83,6 +83,13 @@ func (list *RoomList) SetSelected(room *rooms.Room) {
list.selected = room list.selected = room
} }
func (list *RoomList) Get(n int) *rooms.Room {
if n < 0 || n >= len(list.items) {
return nil
}
return list.items[n]
}
// Draw draws this primitive onto the screen. // Draw draws this primitive onto the screen.
func (list *RoomList) Draw(screen tcell.Screen) { func (list *RoomList) Draw(screen tcell.Screen) {
list.Box.Draw(screen) list.Box.Draw(screen)

View File

@ -201,6 +201,11 @@ func (view *MainView) KeyEventHandler(roomView *RoomView, key *tcell.EventKey) *
const WheelScrollOffsetDiff = 3 const WheelScrollOffsetDiff = 3
func isInArea(x, y int, p tview.Primitive) bool {
rx, ry, rw, rh := p.GetRect()
return x >= rx && y >= ry && x < rx+rw && y < ry+rh
}
func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMouse) *tcell.EventMouse { func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMouse) *tcell.EventMouse {
if event.Buttons() == tcell.ButtonNone || event.HasMotion() { if event.Buttons() == tcell.ButtonNone || event.HasMotion() {
return event return event
@ -228,13 +233,19 @@ func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMo
roomView.Room.MarkRead() roomView.Room.MarkRead()
} }
default: default:
mx, my, mw, mh := msgView.GetRect() if isInArea(x, y, msgView) {
if x >= mx && y >= my && x < mx+mw && y < my+mh { mx, my, _, _ := msgView.GetRect()
if msgView.HandleClick(x-mx, y-my, event.Buttons()) { if msgView.HandleClick(x-mx, y-my, event.Buttons()) {
view.parent.Render() view.parent.Render()
} }
} else if isInArea(x, y, view.roomList) && event.Buttons() == tcell.Button1 {
_, rly, _, _ := msgView.GetRect()
n := y-rly+1
if n >= 0 && n < len(view.roomIDs) {
view.SwitchRoom(n)
}
} else { } else {
debug.Print("Mouse event received:", event.Buttons(), event.Modifiers(), x, y) debug.Print("Unhandled mouse event:", event.Buttons(), event.Modifiers(), x, y)
} }
return event return event
} }