Add initial message selecting stuff
This commit is contained in:
		@@ -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:
 | 
			
		||||
		open.Open(msg.Path())
 | 
			
		||||
	default:
 | 
			
		||||
		debug.Print("Message clicked:", message)
 | 
			
		||||
func (view *MessageView) SetSelected(message *messages.UIMessage) {
 | 
			
		||||
	if view.selected != nil {
 | 
			
		||||
		view.selected.IsSelected = false
 | 
			
		||||
	}
 | 
			
		||||
	return 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())
 | 
			
		||||
		// No need to re-render
 | 
			
		||||
		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)
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -77,6 +77,7 @@ type UIMessage struct {
 | 
			
		||||
	State              event.OutgoingState
 | 
			
		||||
	IsHighlight        bool
 | 
			
		||||
	IsService          bool
 | 
			
		||||
	IsSelected         bool
 | 
			
		||||
	Edited             bool
 | 
			
		||||
	Event              *event.Event
 | 
			
		||||
	ReplyTo            *UIMessage
 | 
			
		||||
@@ -316,6 +317,18 @@ func (msg *UIMessage) Draw(screen mauview.Screen) {
 | 
			
		||||
	screen = msg.DrawReply(screen)
 | 
			
		||||
	msg.Renderer.Draw(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 {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user