Add initial message selecting stuff
This commit is contained in:
parent
98dd1bcdc9
commit
032a83d70b
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user