summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authordelthas <delthas@dille.cc>2022-02-13 14:22:44 +0100
committerdelthas <delthas@dille.cc>2022-02-13 14:22:44 +0100
commitf6a5181eff5a827a907a13a609f7c38de4874579 (patch)
treea1f55607078d5db3c378dd22e88ff341d968f96c /ui
parentMake CTRL+C alternatively clear the input and set '/quit' in it (diff)
Enable clicking on channel members to open a query with them
Diffstat (limited to 'ui')
-rw-r--r--ui/ui.go29
1 files changed, 23 insertions, 6 deletions
diff --git a/ui/ui.go b/ui/ui.go
index fc1a2da..077f599 100644
--- a/ui/ui.go
+++ b/ui/ui.go
@@ -31,6 +31,7 @@ type UI struct {
status string
channelOffset int
+ memberClicked int
memberOffset int
}
@@ -125,6 +126,14 @@ func (ui *UI) ShowBufferNumbers(enable bool) {
ui.bs.ShowBufferNumbers(enable)
}
+func (ui *UI) ClickedMember() int {
+ return ui.memberClicked
+}
+
+func (ui *UI) ClickMember(i int) {
+ ui.memberClicked = i
+}
+
func (ui *UI) ScrollUp() {
ui.bs.ScrollUp(ui.bs.tlHeight / 2)
}
@@ -164,6 +173,10 @@ func (ui *UI) ChannelOffset() int {
return ui.channelOffset
}
+func (ui *UI) MemberOffset() int {
+ return ui.memberOffset
+}
+
func (ui *UI) ScrollMemberUpBy(n int) {
ui.memberOffset -= n
if ui.memberOffset < 0 {
@@ -358,7 +371,7 @@ func (ui *UI) Draw(members []irc.Member) {
ui.bs.DrawVerticalBufferList(ui.screen, 0, 0, ui.config.ChanColWidth, h, &ui.channelOffset)
}
if ui.config.MemberColWidth != 0 {
- drawVerticalMemberList(ui.screen, w-ui.config.MemberColWidth, 0, ui.config.MemberColWidth, h, members, &ui.memberOffset)
+ ui.drawVerticalMemberList(ui.screen, w-ui.config.MemberColWidth, 0, ui.config.MemberColWidth, h, members, &ui.memberOffset)
}
if ui.config.ChanColWidth == 0 {
ui.drawStatusBar(ui.config.ChanColWidth, h-3, w-ui.config.MemberColWidth)
@@ -403,13 +416,16 @@ func (ui *UI) drawStatusBar(x0, y, width int) {
printString(ui.screen, &x, y, s.StyledString())
}
-func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, members []irc.Member, offset *int) {
+func (ui *UI) drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, members []irc.Member, offset *int) {
if y0+len(members)-*offset < height {
*offset = y0 + len(members) - height
if *offset < 0 {
*offset = 0
}
}
+ if ui.memberClicked >= len(members) {
+ ui.memberClicked = len(members) - 1
+ }
drawVerticalLine(screen, x0, y0, height)
x0++
@@ -425,15 +441,16 @@ func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, memb
}
for i, m := range members[*offset:] {
+ reverse := i+*offset == ui.memberClicked
x := x0
y := y0 + i
if m.Disconnected {
- disconnectedSt := tcell.StyleDefault.Foreground(tcell.ColorRed)
+ disconnectedSt := tcell.StyleDefault.Foreground(tcell.ColorRed).Reverse(reverse)
printString(screen, &x, y, Styled("\u274C", disconnectedSt))
} else if m.PowerLevel != "" {
x += padding - 1
powerLevelText := m.PowerLevel[:1]
- powerLevelSt := tcell.StyleDefault.Foreground(tcell.ColorGreen)
+ powerLevelSt := tcell.StyleDefault.Foreground(tcell.ColorGreen).Reverse(reverse)
printString(screen, &x, y, Styled(powerLevelText, powerLevelSt))
} else {
x += padding
@@ -442,9 +459,9 @@ func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, memb
var name StyledString
nameText := truncate(m.Name.Name, width-1, "\u2026")
if m.Away {
- name = Styled(nameText, tcell.StyleDefault.Foreground(tcell.ColorGray))
+ name = Styled(nameText, tcell.StyleDefault.Foreground(tcell.ColorGray).Reverse(reverse))
} else {
- name = PlainString(nameText)
+ name = Styled(nameText, tcell.StyleDefault.Reverse(reverse))
}
printString(screen, &x, y, name)