summaryrefslogtreecommitdiffstats
path: root/src/components/msg.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/msg.rs')
-rw-r--r--src/components/msg.rs220
1 files changed, 110 insertions, 110 deletions
diff --git a/src/components/msg.rs b/src/components/msg.rs
index 606949a4..33242fbd 100644
--- a/src/components/msg.rs
+++ b/src/components/msg.rs
@@ -1,142 +1,142 @@
use super::{
- visibility_blocking, CommandBlocking, CommandInfo, Component,
- DrawableComponent, EventState,
+ visibility_blocking, CommandBlocking, CommandInfo, Component,
+ DrawableComponent, EventState,
};
use crate::{keys::SharedKeyConfig, strings, ui};
use crossterm::event::Event;
use std::convert::TryFrom;
use tui::{
- backend::Backend,
- layout::{Alignment, Rect},
- text::Span,
- widgets::{Block, BorderType, Borders, Clear, Paragraph, Wrap},
- Frame,
+ backend::Backend,
+ layout::{Alignment, Rect},
+ text::Span,
+ widgets::{Block, BorderType, Borders, Clear, Paragraph, Wrap},
+ Frame,
};
use ui::style::SharedTheme;
pub struct MsgComponent {
- title: String,
- msg: String,
- visible: bool,
- theme: SharedTheme,
- key_config: SharedKeyConfig,
+ title: String,
+ msg: String,
+ visible: bool,
+ theme: SharedTheme,
+ key_config: SharedKeyConfig,
}
use anyhow::Result;
impl DrawableComponent for MsgComponent {
- fn draw<B: Backend>(
- &self,
- f: &mut Frame<B>,
- _rect: Rect,
- ) -> Result<()> {
- if !self.visible {
- return Ok(());
- }
+ fn draw<B: Backend>(
+ &self,
+ f: &mut Frame<B>,
+ _rect: Rect,
+ ) -> Result<()> {
+ if !self.visible {
+ return Ok(());
+ }
- // determine the maximum width of text block
- let lens = self
- .msg
- .split('\n')
- .map(str::len)
- .collect::<Vec<usize>>();
- let mut max = lens.iter().max().expect("max") + 2;
- if max > std::u16::MAX as usize {
- max = std::u16::MAX as usize;
- }
- let mut width =
- u16::try_from(max).expect("cant fail due to check above");
- // dont overflow screen, and dont get too narrow
- if width > f.size().width {
- width = f.size().width;
- } else if width < 60 {
- width = 60;
- }
+ // determine the maximum width of text block
+ let lens = self
+ .msg
+ .split('\n')
+ .map(str::len)
+ .collect::<Vec<usize>>();
+ let mut max = lens.iter().max().expect("max") + 2;
+ if max > std::u16::MAX as usize {
+ max = std::u16::MAX as usize;
+ }
+ let mut width =
+ u16::try_from(max).expect("cant fail due to check above");
+ // dont overflow screen, and dont get too narrow
+ if width > f.size().width {
+ width = f.size().width;
+ } else if width < 60 {
+ width = 60;
+ }
- let area = ui::centered_rect_absolute(width, 25, f.size());
- f.render_widget(Clear, area);
- f.render_widget(
- Paragraph::new(self.msg.clone())
- .block(
- Block::default()
- .title(Span::styled(
- self.title.as_str(),
- self.theme.text_danger(),
- ))
- .borders(Borders::ALL)
- .border_type(BorderType::Thick),
- )
- .alignment(Alignment::Left)
- .wrap(Wrap { trim: true }),
- area,
- );
+ let area = ui::centered_rect_absolute(width, 25, f.size());
+ f.render_widget(Clear, area);
+ f.render_widget(
+ Paragraph::new(self.msg.clone())
+ .block(
+ Block::default()
+ .title(Span::styled(
+ self.title.as_str(),
+ self.theme.text_danger(),
+ ))
+ .borders(Borders::ALL)
+ .border_type(BorderType::Thick),
+ )
+ .alignment(Alignment::Left)
+ .wrap(Wrap { trim: true }),
+ area,
+ );
- Ok(())
- }
+ Ok(())
+ }
}
impl Component for MsgComponent {
- fn commands(
- &self,
- out: &mut Vec<CommandInfo>,
- _force_all: bool,
- ) -> CommandBlocking {
- out.push(CommandInfo::new(
- strings::commands::close_msg(&self.key_config),
- true,
- self.visible,
- ));
+ fn commands(
+ &self,
+ out: &mut Vec<CommandInfo>,
+ _force_all: bool,
+ ) -> CommandBlocking {
+ out.push(CommandInfo::new(
+ strings::commands::close_msg(&self.key_config),
+ true,
+ self.visible,
+ ));
- visibility_blocking(self)
- }
+ visibility_blocking(self)
+ }
- fn event(&mut self, ev: Event) -> Result<EventState> {
- if self.visible {
- if let Event::Key(e) = ev {
- if e == self.key_config.enter {
- self.hide();
- }
- }
- Ok(EventState::Consumed)
- } else {
- Ok(EventState::NotConsumed)
- }
- }
+ fn event(&mut self, ev: Event) -> Result<EventState> {
+ if self.visible {
+ if let Event::Key(e) = ev {
+ if e == self.key_config.enter {
+ self.hide();
+ }
+ }
+ Ok(EventState::Consumed)
+ } else {
+ Ok(EventState::NotConsumed)
+ }
+ }
- fn is_visible(&self) -> bool {
- self.visible
- }
+ fn is_visible(&self) -> bool {
+ self.visible
+ }
- fn hide(&mut self) {
- self.visible = false;
- }
+ fn hide(&mut self) {
+ self.visible = false;
+ }
- fn show(&mut self) -> Result<()> {
- self.visible = true;
+ fn show(&mut self) -> Result<()> {
+ self.visible = true;
- Ok(())
- }
+ Ok(())
+ }
}
impl MsgComponent {
- pub const fn new(
- theme: SharedTheme,
- key_config: SharedKeyConfig,
- ) -> Self {
- Self {
- title: String::new(),
- msg: String::new(),
- visible: false,
- theme,
- key_config,
- }
- }
+ pub const fn new(
+ theme: SharedTheme,
+ key_config: SharedKeyConfig,
+ ) -> Self {
+ Self {
+ title: String::new(),
+ msg: String::new(),
+ visible: false,
+ theme,
+ key_config,
+ }
+ }
- ///
- pub fn show_error(&mut self, msg: &str) -> Result<()> {
- self.title = strings::msg_title_error(&self.key_config);
- self.msg = msg.to_string();
- self.show()?;
+ ///
+ pub fn show_error(&mut self, msg: &str) -> Result<()> {
+ self.title = strings::msg_title_error(&self.key_config);
+ self.msg = msg.to_string();
+ self.show()?;
- Ok(())
- }
+ Ok(())
+ }
}