Render editor and pseudo message

This commit is contained in:
Joscha 2022-08-01 23:37:41 +02:00
parent 4ead592e59
commit 415da3afd8
6 changed files with 132 additions and 42 deletions

View file

@ -4,9 +4,11 @@ mod indent;
mod time;
use crossterm::style::{ContentStyle, Stylize};
use toss::frame::Frame;
use super::super::ChatMsg;
use crate::store::Msg;
use crate::ui::widgets::editor::EditorState;
use crate::ui::widgets::join::{HJoin, Segment};
use crate::ui::widgets::layer::Layer;
use crate::ui::widgets::padding::Padding;
@ -53,3 +55,50 @@ pub fn msg_placeholder(highlighted: bool, indent: usize) -> BoxedWidget {
])
.into()
}
pub fn editor<M: ChatMsg>(
frame: &mut Frame,
indent: usize,
nick: &str,
editor: &EditorState,
) -> (BoxedWidget, usize) {
let (nick, content) = M::edit(nick, &editor.text());
let editor = editor.widget().highlight(|_| content);
let cursor_row = editor.cursor_row(frame);
let widget = HJoin::new(vec![
Segment::new(
Padding::new(time::widget(None, true))
.stretch(true)
.right(1),
),
Segment::new(Indent::new(indent, true)),
Segment::new(Layer::new(vec![
Indent::new(1, false).into(),
Padding::new(Text::new(nick)).right(1).into(),
])),
Segment::new(editor).priority(1),
])
.into();
(widget, cursor_row)
}
pub fn pseudo<M: ChatMsg>(indent: usize, nick: &str, editor: &EditorState) -> BoxedWidget {
let (nick, content) = M::edit(nick, &editor.text());
HJoin::new(vec![
Segment::new(
Padding::new(time::widget(None, true))
.stretch(true)
.right(1),
),
Segment::new(Indent::new(indent, true)),
Segment::new(Layer::new(vec![
Indent::new(1, false).into(),
Padding::new(Text::new(nick)).right(1).into(),
])),
Segment::new(Text::new(content).wrap(true)).priority(1),
])
.into()
}