commit f6a5181

delthas  ·  2022-02-13 13:22:44 +0000 UTC
parent 31f9033
Enable clicking on channel members to open a query with them
2 files changed,  +48, -8
M app.go
M app.go
+25, -2
 1@@ -430,16 +430,39 @@ func (app *App) handleMouseEvent(ev *tcell.EventMouse) {
 2 			app.win.ScrollDownBy(4)
 3 		}
 4 	}
 5-	if ev.Buttons()&tcell.ButtonPrimary != 0 && x < app.cfg.ChanColWidth {
 6-		app.win.ClickBuffer(y + app.win.ChannelOffset())
 7+	if ev.Buttons()&tcell.ButtonPrimary != 0 {
 8+		if x < app.cfg.ChanColWidth {
 9+			app.win.ClickBuffer(y + app.win.ChannelOffset())
10+		} else if x > w-app.cfg.MemberColWidth {
11+			app.win.ClickMember(y + app.win.MemberOffset())
12+		}
13 	}
14 	if ev.Buttons() == 0 {
15 		if x < app.cfg.ChanColWidth {
16 			if i := y + app.win.ChannelOffset(); i == app.win.ClickedBuffer() {
17 				app.win.GoToBufferNo(i)
18 			}
19+		} else if x > w-app.cfg.MemberColWidth {
20+			if i := y + app.win.MemberOffset(); i == app.win.ClickedMember() {
21+				netID, target := app.win.CurrentBuffer()
22+				s := app.sessions[netID]
23+				if s != nil && target != "" {
24+					members := s.Names(target)
25+					if i < len(members) {
26+						buffer := members[i].Name.Name
27+						i, added := app.win.AddBuffer(netID, "", buffer)
28+						app.win.JumpBufferIndex(i)
29+						if added {
30+							s.MonitorAdd(buffer)
31+							s.ReadGet(buffer)
32+							s.NewHistoryRequest(buffer).WithLimit(500).Before(time.Now())
33+						}
34+					}
35+				}
36+			}
37 		}
38 		app.win.ClickBuffer(-1)
39+		app.win.ClickMember(-1)
40 	}
41 }
42 
+23, -6
 1@@ -31,6 +31,7 @@ type UI struct {
 2 	status string
 3 
 4 	channelOffset int
 5+	memberClicked int
 6 	memberOffset  int
 7 }
 8 
 9@@ -125,6 +126,14 @@ func (ui *UI) ShowBufferNumbers(enable bool) {
10 	ui.bs.ShowBufferNumbers(enable)
11 }
12 
13+func (ui *UI) ClickedMember() int {
14+	return ui.memberClicked
15+}
16+
17+func (ui *UI) ClickMember(i int) {
18+	ui.memberClicked = i
19+}
20+
21 func (ui *UI) ScrollUp() {
22 	ui.bs.ScrollUp(ui.bs.tlHeight / 2)
23 }
24@@ -164,6 +173,10 @@ func (ui *UI) ChannelOffset() int {
25 	return ui.channelOffset
26 }
27 
28+func (ui *UI) MemberOffset() int {
29+	return ui.memberOffset
30+}
31+
32 func (ui *UI) ScrollMemberUpBy(n int) {
33 	ui.memberOffset -= n
34 	if ui.memberOffset < 0 {
35@@ -358,7 +371,7 @@ func (ui *UI) Draw(members []irc.Member) {
36 		ui.bs.DrawVerticalBufferList(ui.screen, 0, 0, ui.config.ChanColWidth, h, &ui.channelOffset)
37 	}
38 	if ui.config.MemberColWidth != 0 {
39-		drawVerticalMemberList(ui.screen, w-ui.config.MemberColWidth, 0, ui.config.MemberColWidth, h, members, &ui.memberOffset)
40+		ui.drawVerticalMemberList(ui.screen, w-ui.config.MemberColWidth, 0, ui.config.MemberColWidth, h, members, &ui.memberOffset)
41 	}
42 	if ui.config.ChanColWidth == 0 {
43 		ui.drawStatusBar(ui.config.ChanColWidth, h-3, w-ui.config.MemberColWidth)
44@@ -403,13 +416,16 @@ func (ui *UI) drawStatusBar(x0, y, width int) {
45 	printString(ui.screen, &x, y, s.StyledString())
46 }
47 
48-func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, members []irc.Member, offset *int) {
49+func (ui *UI) drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, members []irc.Member, offset *int) {
50 	if y0+len(members)-*offset < height {
51 		*offset = y0 + len(members) - height
52 		if *offset < 0 {
53 			*offset = 0
54 		}
55 	}
56+	if ui.memberClicked >= len(members) {
57+		ui.memberClicked = len(members) - 1
58+	}
59 
60 	drawVerticalLine(screen, x0, y0, height)
61 	x0++
62@@ -425,15 +441,16 @@ func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, memb
63 	}
64 
65 	for i, m := range members[*offset:] {
66+		reverse := i+*offset == ui.memberClicked
67 		x := x0
68 		y := y0 + i
69 		if m.Disconnected {
70-			disconnectedSt := tcell.StyleDefault.Foreground(tcell.ColorRed)
71+			disconnectedSt := tcell.StyleDefault.Foreground(tcell.ColorRed).Reverse(reverse)
72 			printString(screen, &x, y, Styled("\u274C", disconnectedSt))
73 		} else if m.PowerLevel != "" {
74 			x += padding - 1
75 			powerLevelText := m.PowerLevel[:1]
76-			powerLevelSt := tcell.StyleDefault.Foreground(tcell.ColorGreen)
77+			powerLevelSt := tcell.StyleDefault.Foreground(tcell.ColorGreen).Reverse(reverse)
78 			printString(screen, &x, y, Styled(powerLevelText, powerLevelSt))
79 		} else {
80 			x += padding
81@@ -442,9 +459,9 @@ func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, memb
82 		var name StyledString
83 		nameText := truncate(m.Name.Name, width-1, "\u2026")
84 		if m.Away {
85-			name = Styled(nameText, tcell.StyleDefault.Foreground(tcell.ColorGray))
86+			name = Styled(nameText, tcell.StyleDefault.Foreground(tcell.ColorGray).Reverse(reverse))
87 		} else {
88-			name = PlainString(nameText)
89+			name = Styled(nameText, tcell.StyleDefault.Reverse(reverse))
90 		}
91 
92 		printString(screen, &x, y, name)