diff options
author | 2025-04-11 20:08:05 +0100 | |
---|---|---|
committer | 2025-04-11 20:08:05 +0100 | |
commit | 14f6aaf18a3311fee63b11d0ec9c12ba76b70fa1 (patch) | |
tree | e81fd9cbc19ac637332d9472a83190a1ea9c85b4 /src/message_view.rs | |
parent | 70532f715f93164fef4313a1bb5064a467811408 (diff) | |
download | macaw-main.tar.gz macaw-main.tar.bz2 macaw-main.zip |
Diffstat (limited to 'src/message_view.rs')
-rw-r--r-- | src/message_view.rs | 69 |
1 files changed, 59 insertions, 10 deletions
diff --git a/src/message_view.rs b/src/message_view.rs index 8378164..f5319bd 100644 --- a/src/message_view.rs +++ b/src/message_view.rs @@ -1,12 +1,13 @@ use std::{path::PathBuf, time::Duration}; use chrono::{NaiveDate, NaiveDateTime, TimeDelta}; +use iced::color; +use iced::widget::text_editor; use iced::{ border::Radius, - widget::{ - button, column, container, image, row, scrollable, text, text_editor, text_editor::Content, - }, - Border, Color, Element, + font::{Style, Weight}, + widget::{button, column, container, image, row, scrollable, text, text_editor::Content}, + Border, Color, Element, Font, Length::{Fill, Shrink}, Theme, }; @@ -164,13 +165,26 @@ impl MessageView { let text_editor = text_editor(&self.new_message) .placeholder("new message") .on_action(Message::MessageCompose) - .wrapping(text::Wrapping::WordOrGlyph); + .wrapping(text::Wrapping::WordOrGlyph) + .style(|theme, status| text_editor::Style { + background: color!(0xdcdcdc).into(), + border: Border { + color: Color::BLACK, + width: 0.0, + radius: 0.into(), + }, + icon: color!(0x00000000), + placeholder: color!(0xacacac), + value: color!(0x000000), + selection: color!(0xffce07), + }); let message_send_input = row![ text_editor, - button(Icon::NewBubble24).on_press(Message::SendMessage(self.new_message.text())) + // button(Icon::NewBubble24).on_press(Message::SendMessage(self.new_message.text())) ] .padding(8); column![ + self.header(), scrollable(messages_view) .height(Fill) .width(Fill) @@ -181,6 +195,38 @@ impl MessageView { .into() } + pub fn header(&self) -> Element<'_, Message> { + // TODO: contact stored here for name + let mut bold = Font::with_name("K2D"); + bold.weight = Weight::Bold; + let mut sweet = Font::with_name("Diolce"); + sweet.style = Style::Italic; + let mut name_and_jid = column![]; + if let Some(nick) = &self.chat.user.nick { + name_and_jid = name_and_jid.push(text(nick).font(bold).size(20)); + } + let jid = self.chat.user.jid.as_bare().to_string(); + name_and_jid = name_and_jid.push(text(jid).font(sweet)); + let mut header = row![]; + if let Some(avatar) = &self.chat.user.avatar { + let mut path = self.file_root.join(avatar); + path.set_extension("jpg"); + header = header.push(container(image(path).width(48).height(48))); + } + header = header.push(name_and_jid); + container( + container(header.spacing(8).padding(8)) + .style(|theme: &Theme| { + container::Style::default() + .background(theme.extended_palette().background.strong.color) + }) + .width(Fill), + ) + .padding(8) + .width(Fill) + .into() + } + pub fn message<'a>(&'a self, message: &'a MacawMessage, major: bool) -> Element<'a, Message> { let timestamp = message.timestamp.naive_local(); let timestamp = timestamp.time().format("%H:%M").to_string(); @@ -191,7 +237,9 @@ impl MessageView { } else { message.from.jid.as_bare().to_string() }; - let mut header = row![text(nick), text(timestamp)]; + let mut bold = Font::with_name("K2D"); + bold.weight = Weight::Bold; + let mut header = row![text(nick).font(bold), text(timestamp)].spacing(8); if let Some(delivery) = message.delivery { let icon = match delivery { filamento::chat::Delivery::Sending => Some(Icon::Sending16), @@ -206,21 +254,22 @@ impl MessageView { header = header.push(icon); } } - let message_right = column![header, text(&message.body.body)]; + let message_right = column![header, text(&message.body.body)].spacing(8); let mut major_message = row([]); if let Some(avatar) = &message.from.avatar { let mut path = self.file_root.join(avatar); path.set_extension("jpg"); // info!("got avatar: {:?}", path); - major_message = major_message.push(image(path).width(48).height(48)); + major_message = major_message.push(container(image(path).width(48).height(48))); } major_message = major_message.push(message_right); - major_message.into() + major_message.spacing(8).into() } else { row![ container(text(timestamp)).width(48), text(&message.body.body) ] + .spacing(8) .into() } } |