diff options
author | Jeff Zhao <jeff.no.zhao@gmail.com> | 2021-09-04 21:55:48 -0400 |
---|---|---|
committer | Jeff Zhao <jeff.no.zhao@gmail.com> | 2021-09-04 21:56:00 -0400 |
commit | 85742f39a7407e3cbeb5977aa78589ddc4ec10cc (patch) | |
tree | bb45ed0b191316527481b69b8337cac017bf68d4 /src/context | |
parent | f0ba5842d26275ee2b7c15240495de9561382582 (diff) |
messages now have color support
Diffstat (limited to 'src/context')
-rw-r--r-- | src/context/app_context.rs | 16 | ||||
-rw-r--r-- | src/context/message_queue.rs | 59 | ||||
-rw-r--r-- | src/context/mod.rs | 12 |
3 files changed, 72 insertions, 15 deletions
diff --git a/src/context/app_context.rs b/src/context/app_context.rs index 112b63b..df6035e 100644 --- a/src/context/app_context.rs +++ b/src/context/app_context.rs @@ -1,8 +1,7 @@ -use std::collections::VecDeque; use std::sync::mpsc; use crate::config; -use crate::context::{LocalStateContext, PreviewContext, TabContext, WorkerContext}; +use crate::context::{LocalStateContext, MessageQueue, PreviewContext, TabContext, WorkerContext}; use crate::event::{AppEvent, Events}; use crate::util::search::SearchPattern; @@ -27,7 +26,7 @@ pub struct AppContext { // context related to searching search_context: Option<SearchPattern>, // message queue for displaying messages - message_queue: VecDeque<String>, + message_queue: MessageQueue, // context related to io workers worker_context: WorkerContext, // context related to previews @@ -44,7 +43,7 @@ impl AppContext { tab_context: TabContext::new(), local_state: None, search_context: None, - message_queue: VecDeque::with_capacity(4), + message_queue: MessageQueue::new(), worker_context: WorkerContext::new(event_tx), preview_context: PreviewContext::new(), config, @@ -76,14 +75,11 @@ impl AppContext { &mut self.tab_context } - pub fn message_queue_ref(&self) -> &VecDeque<String> { + pub fn message_queue_ref(&self) -> &MessageQueue { &self.message_queue } - pub fn push_msg(&mut self, msg: String) { - self.message_queue.push_back(msg); - } - pub fn pop_msg(&mut self) -> Option<String> { - self.message_queue.pop_front() + pub fn message_queue_mut(&mut self) -> &mut MessageQueue { + &mut self.message_queue } // local state related diff --git a/src/context/message_queue.rs b/src/context/message_queue.rs new file mode 100644 index 0000000..f2995c0 --- /dev/null +++ b/src/context/message_queue.rs @@ -0,0 +1,59 @@ +use std::collections::VecDeque; + +use tui::style::{Color, Style}; + +pub struct Message { + pub content: String, + pub style: Style, +} + +impl Message { + pub fn new(content: String, style: Style) -> Self { + Self { content, style } + } +} + +pub struct MessageQueue { + contents: VecDeque<Message>, +} + +impl MessageQueue { + pub fn new() -> Self { + Self::default() + } + + pub fn push_success(&mut self, msg: String) { + let message = Message::new(msg, Style::default().fg(Color::Green)); + self.push_msg(message); + } + + pub fn push_info(&mut self, msg: String) { + let message = Message::new(msg, Style::default().fg(Color::Yellow)); + self.push_msg(message); + } + + pub fn push_error(&mut self, msg: String) { + let message = Message::new(msg, Style::default().fg(Color::Red)); + self.push_msg(message); + } + + fn push_msg(&mut self, msg: Message) { + self.contents.push_back(msg); + } + + pub fn pop_front(&mut self) -> Option<Message> { + self.contents.pop_front() + } + + pub fn current_message(&self) -> Option<&Message> { + self.contents.front() + } +} + +impl std::default::Default for MessageQueue { + fn default() -> Self { + Self { + contents: VecDeque::new(), + } + } +} diff --git a/src/context/mod.rs b/src/context/mod.rs index 3ba9a56..d5ba100 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -1,11 +1,13 @@ mod app_context; mod local_state; +mod message_queue; mod preview_context; mod tab_context; mod worker_context; -pub use self::app_context::{AppContext, QuitType}; -pub use self::local_state::LocalStateContext; -pub use self::preview_context::PreviewContext; -pub use self::tab_context::TabContext; -pub use self::worker_context::WorkerContext; +pub use self::app_context::*; +pub use self::local_state::*; +pub use self::message_queue::*; +pub use self::preview_context::*; +pub use self::tab_context::*; +pub use self::worker_context::*; |