aboutsummaryrefslogtreecommitdiff
path: root/ui/message-view.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2020-02-21 00:29:29 +0200
committerTulir Asokan <tulir@maunium.net>2020-02-21 00:29:29 +0200
commit032a83d70bec5b87605e04c755c678ec01a0de11 (patch)
treeedd0fbb85ca7eaa7fffbe91a1a3b1c6c94585bee /ui/message-view.go
parent98dd1bcdc9f55e94e81064ac435369f4396038f3 (diff)
Add initial message selecting stuff
Diffstat (limited to 'ui/message-view.go')
-rw-r--r--ui/message-view.go29
1 files changed, 20 insertions, 9 deletions
diff --git a/ui/message-view.go b/ui/message-view.go
index 20ee149..e079407 100644
--- a/ui/message-view.go
+++ b/ui/message-view.go
@@ -64,6 +64,7 @@ type MessageView struct {
messages []*messages.UIMessage
msgBufferLock sync.RWMutex
msgBuffer []*messages.UIMessage
+ selected *messages.UIMessage
initialHistoryLoaded bool
}
@@ -286,12 +287,12 @@ func (view *MessageView) replaceBuffer(original *messages.UIMessage, new *messag
if new.Height() != end-start {
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++ {
newBuffer[i] = new
}
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...)
} else {
@@ -333,14 +334,24 @@ func (view *MessageView) recalculateBuffers() {
view.prevPrefs = prefs
}
-func (view *MessageView) handleMessageClick(message *messages.UIMessage) bool {
- switch msg := message.Renderer.(type) {
- case *messages.ImageMessage:
+func (view *MessageView) SetSelected(message *messages.UIMessage) {
+ if view.selected != nil {
+ view.selected.IsSelected = false
+ }
+ 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())
- default:
- debug.Print("Message clicked:", message)
+ // 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 {
@@ -410,7 +421,7 @@ func (view *MessageView) OnMouseEvent(event mauview.MouseEvent) bool {
messageX := usernameX + view.widestSender() + SenderMessageGap
if x >= messageX {
- return view.handleMessageClick(message)
+ return view.handleMessageClick(message, event.Modifiers())
} else if x >= usernameX {
return view.handleUsernameClick(message, prevMessage)
}