diff options
author | delthas <delthas@dille.cc> | 2021-11-24 16:01:59 +0100 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2021-11-24 16:08:07 +0100 |
commit | d41d7c5d975a4b9d80779065c4a4d9e09b35ae91 (patch) | |
tree | ef0a7ba5ca1ba5270d8a28c002c2fe1d13cf920a /ui | |
parent | Only use first line of `password-cmd` output (diff) |
Show the current channel topic at the top of the timeline
Diffstat (limited to 'ui')
-rw-r--r-- | ui/buffers.go | 50 | ||||
-rw-r--r-- | ui/ui.go | 4 |
2 files changed, 41 insertions, 13 deletions
diff --git a/ui/buffers.go b/ui/buffers.go index 9dc26c2..9a20abe 100644 --- a/ui/buffers.go +++ b/ui/buffers.go @@ -179,6 +179,7 @@ type buffer struct { unread bool lines []Line + topic string scrollAmt int isAtTop bool @@ -206,7 +207,7 @@ func NewBufferList() BufferList { func (bs *BufferList) ResizeTimeline(tlInnerWidth, tlHeight int) { bs.tlInnerWidth = tlInnerWidth - bs.tlHeight = tlHeight + bs.tlHeight = tlHeight - 2 } func (bs *BufferList) To(i int) bool { @@ -356,6 +357,15 @@ func (bs *BufferList) AddLines(netID, title string, before, after []Line) { } } +func (bs *BufferList) SetTopic(netID, title string, topic string) { + idx := bs.idx(netID, title) + if idx < 0 { + return + } + b := &bs.list[idx] + b.topic = topic +} + func (bs *BufferList) Current() (netID, title string) { b := &bs.list[bs.current] return b.netID, b.title @@ -532,12 +542,22 @@ func (bs *BufferList) DrawHorizontalBufferList(screen tcell.Screen, x0, y0, widt } func (bs *BufferList) DrawTimeline(screen tcell.Screen, x0, y0, nickColWidth int) { - clearArea(screen, x0, y0, bs.tlInnerWidth+nickColWidth+9, bs.tlHeight) + clearArea(screen, x0, y0, bs.tlInnerWidth+nickColWidth+9, bs.tlHeight+2) b := &bs.list[bs.current] + + xTopic := x0 + printString(screen, &xTopic, y0, Styled(b.topic, tcell.StyleDefault)) + y0++ + for x := x0; x < x0+bs.tlInnerWidth+nickColWidth+9; x++ { + st := tcell.StyleDefault.Foreground(tcell.ColorGray) + screen.SetContent(x, y0, 0x2500, nil, st) + } + y0++ + yi := b.scrollAmt + y0 + bs.tlHeight for i := len(b.lines) - 1; 0 <= i; i-- { - if yi < 0 { + if yi < y0 { break } @@ -550,15 +570,17 @@ func (bs *BufferList) DrawTimeline(screen tcell.Screen, x0, y0, nickColWidth int continue } - if i == 0 || b.lines[i-1].At.Truncate(time.Minute) != line.At.Truncate(time.Minute) { - st := tcell.StyleDefault.Bold(true) - printTime(screen, x0, yi, st, line.At.Local()) - } + if yi >= y0 { + if i == 0 || b.lines[i-1].At.Truncate(time.Minute) != line.At.Truncate(time.Minute) { + st := tcell.StyleDefault.Bold(true) + printTime(screen, x0, yi, st, line.At.Local()) + } - identSt := tcell.StyleDefault. - Foreground(line.HeadColor). - Reverse(line.Highlight) - printIdent(screen, x0+7, yi, nickColWidth, Styled(line.Head, identSt)) + identSt := tcell.StyleDefault. + Foreground(line.HeadColor). + Reverse(line.Highlight) + printIdent(screen, x0+7, yi, nickColWidth, Styled(line.Head, identSt)) + } x := x1 y := yi @@ -574,7 +596,7 @@ func (bs *BufferList) DrawTimeline(screen tcell.Screen, x0, y0, nickColWidth int x = x1 y++ nls = nls[1:] - if bs.tlHeight <= y { + if y0+bs.tlHeight <= y { break } } @@ -583,7 +605,9 @@ func (bs *BufferList) DrawTimeline(screen tcell.Screen, x0, y0, nickColWidth int continue } - screen.SetContent(x, y, r, nil, style) + if y >= y0 { + screen.SetContent(x, y, r, nil, style) + } x += runeWidth(r) } } @@ -231,6 +231,10 @@ func (ui *UI) JumpBufferNetwork(netID, sub string) bool { return false } +func (ui *UI) SetTopic(netID, buffer string, topic string) { + ui.bs.SetTopic(netID, buffer, topic) +} + func (ui *UI) SetStatus(status string) { ui.status = status } |