summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authordelthas <delthas@dille.cc>2021-11-24 16:01:59 +0100
committerHubert Hirtz <hubert@hirtz.pm>2021-11-24 16:08:07 +0100
commitd41d7c5d975a4b9d80779065c4a4d9e09b35ae91 (patch)
treeef0a7ba5ca1ba5270d8a28c002c2fe1d13cf920a /ui
parentOnly 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.go50
-rw-r--r--ui/ui.go4
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)
}
}
diff --git a/ui/ui.go b/ui/ui.go
index 97f7148..fe5ceef 100644
--- a/ui/ui.go
+++ b/ui/ui.go
@@ -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
}