Add initial message selecting stuff

This commit is contained in:
Tulir Asokan 2020-02-21 00:29:29 +02:00
parent 98dd1bcdc9
commit 032a83d70b
2 changed files with 34 additions and 10 deletions

View File

@ -64,6 +64,7 @@ type MessageView struct {
messages []*messages.UIMessage messages []*messages.UIMessage
msgBufferLock sync.RWMutex msgBufferLock sync.RWMutex
msgBuffer []*messages.UIMessage msgBuffer []*messages.UIMessage
selected *messages.UIMessage
initialHistoryLoaded bool initialHistoryLoaded bool
} }
@ -286,12 +287,12 @@ func (view *MessageView) replaceBuffer(original *messages.UIMessage, new *messag
if new.Height() != end-start { if new.Height() != end-start {
height := new.Height() height := new.Height()
newBuffer := make([]*messages.UIMessage, height + len(view.msgBuffer) - end) newBuffer := make([]*messages.UIMessage, height+len(view.msgBuffer)-end)
for i := 0; i < height; i++ { for i := 0; i < height; i++ {
newBuffer[i] = new newBuffer[i] = new
} }
for i := height; i < len(newBuffer); i++ { for i := height; i < len(newBuffer); i++ {
newBuffer[i] = view.msgBuffer[end + (i - height)] newBuffer[i] = view.msgBuffer[end+(i-height)]
} }
view.msgBuffer = append(view.msgBuffer[0:start], newBuffer...) view.msgBuffer = append(view.msgBuffer[0:start], newBuffer...)
} else { } else {
@ -333,14 +334,24 @@ func (view *MessageView) recalculateBuffers() {
view.prevPrefs = prefs view.prevPrefs = prefs
} }
func (view *MessageView) handleMessageClick(message *messages.UIMessage) bool { func (view *MessageView) SetSelected(message *messages.UIMessage) {
switch msg := message.Renderer.(type) { if view.selected != nil {
case *messages.ImageMessage: view.selected.IsSelected = false
open.Open(msg.Path())
default:
debug.Print("Message clicked:", message)
} }
view.selected = message
if view.selected != nil {
view.selected.IsSelected = true
}
}
func (view *MessageView) handleMessageClick(message *messages.UIMessage, mod tcell.ModMask) bool {
if msg, ok := message.Renderer.(*messages.ImageMessage); ok && mod > 0 {
open.Open(msg.Path())
// No need to re-render
return false return false
}
view.SetSelected(message)
return true
} }
func (view *MessageView) handleUsernameClick(message *messages.UIMessage, prevMessage *messages.UIMessage) bool { func (view *MessageView) handleUsernameClick(message *messages.UIMessage, prevMessage *messages.UIMessage) bool {
@ -410,7 +421,7 @@ func (view *MessageView) OnMouseEvent(event mauview.MouseEvent) bool {
messageX := usernameX + view.widestSender() + SenderMessageGap messageX := usernameX + view.widestSender() + SenderMessageGap
if x >= messageX { if x >= messageX {
return view.handleMessageClick(message) return view.handleMessageClick(message, event.Modifiers())
} else if x >= usernameX { } else if x >= usernameX {
return view.handleUsernameClick(message, prevMessage) return view.handleUsernameClick(message, prevMessage)
} }

View File

@ -77,6 +77,7 @@ type UIMessage struct {
State event.OutgoingState State event.OutgoingState
IsHighlight bool IsHighlight bool
IsService bool IsService bool
IsSelected bool
Edited bool Edited bool
Event *event.Event Event *event.Event
ReplyTo *UIMessage ReplyTo *UIMessage
@ -316,6 +317,18 @@ func (msg *UIMessage) Draw(screen mauview.Screen) {
screen = msg.DrawReply(screen) screen = msg.DrawReply(screen)
msg.Renderer.Draw(screen) msg.Renderer.Draw(screen)
msg.DrawReactions(screen) msg.DrawReactions(screen)
if msg.IsSelected {
w, h := screen.Size()
for x := 0; x < w; x++ {
for y := 0; y < h; y++ {
mainc, combc, style, _ := screen.GetContent(x, y)
_, bg, _ := style.Decompose()
if bg == tcell.ColorDefault {
screen.SetContent(x, y, mainc, combc, style.Background(tcell.ColorLightSkyBlue))
}
}
}
}
} }
func (msg *UIMessage) Clone() *UIMessage { func (msg *UIMessage) Clone() *UIMessage {