summaryrefslogtreecommitdiffstats
path: root/src/context
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2021-09-04 21:55:48 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2021-09-04 21:56:00 -0400
commit85742f39a7407e3cbeb5977aa78589ddc4ec10cc (patch)
treebb45ed0b191316527481b69b8337cac017bf68d4 /src/context
parentf0ba5842d26275ee2b7c15240495de9561382582 (diff)
messages now have color support
Diffstat (limited to 'src/context')
-rw-r--r--src/context/app_context.rs16
-rw-r--r--src/context/message_queue.rs59
-rw-r--r--src/context/mod.rs12
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::*;