mirror of
https://github.com/Xithrius/twitch-tui.git
synced 2024-10-04 09:07:33 +03:00
Ratatui 0.23.0 -> 0.23.1-alpha.6
This commit is contained in:
parent
3d8310b18a
commit
80175c44c8
41
Cargo.lock
generated
41
Cargo.lock
generated
@ -17,6 +17,17 @@ version = "1.0.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ahash"
|
||||||
|
version = "0.8.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"once_cell",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aho-corasick"
|
name = "aho-corasick"
|
||||||
version = "1.0.4"
|
version = "1.0.4"
|
||||||
@ -26,6 +37,12 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "allocator-api2"
|
||||||
|
version = "0.2.16"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "android-tzdata"
|
name = "android-tzdata"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
@ -899,6 +916,10 @@ name = "hashbrown"
|
|||||||
version = "0.14.0"
|
version = "0.14.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
|
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
|
||||||
|
dependencies = [
|
||||||
|
"ahash",
|
||||||
|
"allocator-api2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "heck"
|
||||||
@ -1237,6 +1258,15 @@ version = "0.4.20"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lru"
|
||||||
|
version = "0.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21"
|
||||||
|
dependencies = [
|
||||||
|
"hashbrown 0.14.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "malloc_buf"
|
name = "malloc_buf"
|
||||||
version = "0.0.6"
|
version = "0.0.6"
|
||||||
@ -1607,15 +1637,16 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ratatui"
|
name = "ratatui"
|
||||||
version = "0.23.0"
|
version = "0.23.1-alpha.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2e2e4cd95294a85c3b4446e63ef054eea43e0205b1fd60120c16b74ff7ff96ad"
|
checksum = "a16e8ea6cc383d0a413353336a40794844f0d63fad911004adfe2b64ab993952"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.4.0",
|
"bitflags 2.4.0",
|
||||||
"cassowary",
|
"cassowary",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
"indoc",
|
"indoc",
|
||||||
"itertools",
|
"itertools",
|
||||||
|
"lru",
|
||||||
"paste",
|
"paste",
|
||||||
"serde",
|
"serde",
|
||||||
"strum",
|
"strum",
|
||||||
@ -2468,6 +2499,12 @@ version = "0.2.15"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "version_check"
|
||||||
|
version = "0.9.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "walkdir"
|
name = "walkdir"
|
||||||
version = "2.3.3"
|
version = "2.3.3"
|
||||||
|
@ -14,7 +14,7 @@ categories = ["command-line-utilities"]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
crossterm = "0.27.0"
|
crossterm = "0.27.0"
|
||||||
tui = { package = "ratatui", version = "0.23.0", default-features = false, features = [ "crossterm", "serde" ] }
|
tui = { package = "ratatui", version = "0.23.1-alpha.6", default-features = false, features = [ "crossterm", "serde" ] }
|
||||||
tokio = { version = "1.32.0", features = [ "rt", "macros", "rt-multi-thread", "fs" ] }
|
tokio = { version = "1.32.0", features = [ "rt", "macros", "rt-multi-thread", "fs" ] }
|
||||||
clap = { version = "4.4.6", features = [ "derive", "cargo" ] }
|
clap = { version = "4.4.6", features = [ "derive", "cargo" ] }
|
||||||
serde = { version = "1.0.188", features = [ "derive" ] }
|
serde = { version = "1.0.188", features = [ "derive" ] }
|
||||||
|
@ -3,7 +3,6 @@ use std::{cell::RefCell, collections::VecDeque, rc::Rc};
|
|||||||
use chrono::{DateTime, Local};
|
use chrono::{DateTime, Local};
|
||||||
use rustyline::line_buffer::LineBuffer;
|
use rustyline::line_buffer::LineBuffer;
|
||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::{Constraint, Direction, Layout, Rect},
|
layout::{Constraint, Direction, Layout, Rect},
|
||||||
Frame,
|
Frame,
|
||||||
};
|
};
|
||||||
@ -102,7 +101,7 @@ impl App {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw<B: Backend>(&mut self, f: &mut Frame<B>) {
|
pub fn draw(&mut self, f: &mut Frame) {
|
||||||
let mut size = f.size();
|
let mut size = f.size();
|
||||||
|
|
||||||
if self.config.borrow().frontend.state_tabs {
|
if self.config.borrow().frontend.state_tabs {
|
||||||
|
@ -2,7 +2,6 @@ use fuzzy_matcher::{skim::SkimMatcherV2, FuzzyMatcher};
|
|||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::Rect,
|
layout::Rect,
|
||||||
prelude::{Alignment, Margin},
|
prelude::{Alignment, Margin},
|
||||||
style::{Color, Modifier, Style},
|
style::{Color, Modifier, Style},
|
||||||
@ -107,9 +106,7 @@ impl ChannelSwitcherWidget {
|
|||||||
self.list_state.select(Some(i));
|
self.list_state.select(Some(i));
|
||||||
|
|
||||||
self.vertical_scroll = self.vertical_scroll.saturating_add(1);
|
self.vertical_scroll = self.vertical_scroll.saturating_add(1);
|
||||||
self.vertical_scroll_state = self
|
self.vertical_scroll_state = self.vertical_scroll_state.position(self.vertical_scroll);
|
||||||
.vertical_scroll_state
|
|
||||||
.position(self.vertical_scroll as u16);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn previous(&mut self) {
|
fn previous(&mut self) {
|
||||||
@ -121,9 +118,7 @@ impl ChannelSwitcherWidget {
|
|||||||
self.list_state.select(Some(i));
|
self.list_state.select(Some(i));
|
||||||
|
|
||||||
self.vertical_scroll = self.vertical_scroll.saturating_sub(1);
|
self.vertical_scroll = self.vertical_scroll.saturating_sub(1);
|
||||||
self.vertical_scroll_state = self
|
self.vertical_scroll_state = self.vertical_scroll_state.position(self.vertical_scroll);
|
||||||
.vertical_scroll_state
|
|
||||||
.position(self.vertical_scroll as u16);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unselect(&mut self) {
|
fn unselect(&mut self) {
|
||||||
@ -146,12 +141,7 @@ impl ToString for ChannelSwitcherWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for ChannelSwitcherWidget {
|
impl Component for ChannelSwitcherWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
let r = area.map_or_else(|| centered_rect(60, 60, 20, f.size()), |a| a);
|
let r = area.map_or_else(|| centered_rect(60, 60, 20, f.size()), |a| a);
|
||||||
|
|
||||||
let channels = self.storage.borrow().get("channels");
|
let channels = self.storage.borrow().get("channels");
|
||||||
@ -224,9 +214,7 @@ impl Component for ChannelSwitcherWidget {
|
|||||||
f.render_widget(Clear, r);
|
f.render_widget(Clear, r);
|
||||||
f.render_stateful_widget(list, r, &mut self.list_state);
|
f.render_stateful_widget(list, r, &mut self.list_state);
|
||||||
|
|
||||||
self.vertical_scroll_state = self
|
self.vertical_scroll_state = self.vertical_scroll_state.content_length(items.len());
|
||||||
.vertical_scroll_state
|
|
||||||
.content_length(items.len() as u16);
|
|
||||||
|
|
||||||
f.render_stateful_widget(
|
f.render_stateful_widget(
|
||||||
Scrollbar::default()
|
Scrollbar::default()
|
||||||
|
@ -3,7 +3,6 @@ use std::{collections::VecDeque, slice::Iter};
|
|||||||
use chrono::Local;
|
use chrono::Local;
|
||||||
use log::warn;
|
use log::warn;
|
||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::{Alignment, Constraint, Direction, Layout, Rect},
|
layout::{Alignment, Constraint, Direction, Layout, Rect},
|
||||||
style::{Color, Modifier, Style},
|
style::{Color, Modifier, Style},
|
||||||
text::{Line, Span, Text},
|
text::{Line, Span, Text},
|
||||||
@ -78,9 +77,9 @@ impl ChatWidget {
|
|||||||
self.config.borrow().twitch.channel).as_str()).unwrap();
|
self.config.borrow().twitch.channel).as_str()).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_messages<'a, B: Backend>(
|
pub fn get_messages<'a>(
|
||||||
&self,
|
&self,
|
||||||
frame: &Frame<B>,
|
frame: &Frame,
|
||||||
area: Rect,
|
area: Rect,
|
||||||
messages_data: &'a VecDeque<MessageData>,
|
messages_data: &'a VecDeque<MessageData>,
|
||||||
emotes: &mut Emotes,
|
emotes: &mut Emotes,
|
||||||
@ -211,12 +210,7 @@ impl ChatWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for ChatWidget {
|
impl Component for ChatWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
let mut default_emotes = Emotes::default();
|
let mut default_emotes = Emotes::default();
|
||||||
let emotes = emotes.map_or(&mut default_emotes, |e| e);
|
let emotes = emotes.map_or(&mut default_emotes, |e| e);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use tui::{backend::Backend, layout::Rect, Frame};
|
use tui::{layout::Rect, Frame};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
emotes::Emotes,
|
emotes::Emotes,
|
||||||
@ -95,12 +95,7 @@ impl ToString for ChatInputWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for ChatInputWidget {
|
impl Component for ChatInputWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
self.input.draw(f, area, emotes);
|
self.input.draw(f, area, emotes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
use std::slice::Iter;
|
use std::slice::Iter;
|
||||||
|
|
||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::{Constraint, Direction, Layout, Rect},
|
layout::{Constraint, Direction, Layout, Rect},
|
||||||
style::{Color, Modifier, Style},
|
style::{Color, Modifier, Style},
|
||||||
terminal::Frame,
|
terminal::Frame,
|
||||||
@ -79,11 +78,7 @@ impl DashboardWidget {
|
|||||||
.highlight_style(Style::default().add_modifier(Modifier::ITALIC))
|
.highlight_style(Style::default().add_modifier(Modifier::ITALIC))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_dashboard_title_widget<B: Backend>(
|
fn render_dashboard_title_widget(&self, frame: &mut Frame, v_chunks: &mut Iter<Rect>) {
|
||||||
&self,
|
|
||||||
frame: &mut Frame<B>,
|
|
||||||
v_chunks: &mut Iter<Rect>,
|
|
||||||
) {
|
|
||||||
let w = Paragraph::new(
|
let w = Paragraph::new(
|
||||||
DASHBOARD_TITLE
|
DASHBOARD_TITLE
|
||||||
.iter()
|
.iter()
|
||||||
@ -95,9 +90,9 @@ impl DashboardWidget {
|
|||||||
frame.render_widget(w, *v_chunks.next().unwrap());
|
frame.render_widget(w, *v_chunks.next().unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_channel_selection_widget<B: Backend>(
|
fn render_channel_selection_widget(
|
||||||
&self,
|
&self,
|
||||||
frame: &mut Frame<B>,
|
frame: &mut Frame,
|
||||||
v_chunks: &mut Iter<Rect>,
|
v_chunks: &mut Iter<Rect>,
|
||||||
current_channel: String,
|
current_channel: String,
|
||||||
default_channels: &[String],
|
default_channels: &[String],
|
||||||
@ -150,11 +145,7 @@ impl DashboardWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_quit_selection_widget<B: Backend>(
|
fn render_quit_selection_widget(&self, frame: &mut Frame, v_chunks: &mut Iter<Rect>) {
|
||||||
&self,
|
|
||||||
frame: &mut Frame<B>,
|
|
||||||
v_chunks: &mut Iter<Rect>,
|
|
||||||
) {
|
|
||||||
let quit_option = Paragraph::new(Line::from(vec![
|
let quit_option = Paragraph::new(Line::from(vec![
|
||||||
Span::raw("["),
|
Span::raw("["),
|
||||||
Span::styled("q", Style::default().fg(Color::LightMagenta)),
|
Span::styled("q", Style::default().fg(Color::LightMagenta)),
|
||||||
@ -167,12 +158,7 @@ impl DashboardWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for DashboardWidget {
|
impl Component for DashboardWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
let r = area.map_or_else(|| f.size(), |a| a);
|
let r = area.map_or_else(|| f.size(), |a| a);
|
||||||
|
|
||||||
let favorite_channels_len = {
|
let favorite_channels_len = {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use chrono::{DateTime, Local};
|
use chrono::{DateTime, Local};
|
||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::{Constraint, Rect},
|
layout::{Constraint, Rect},
|
||||||
prelude::Alignment,
|
prelude::Alignment,
|
||||||
style::{Color, Modifier, Style},
|
style::{Color, Modifier, Style},
|
||||||
@ -57,12 +56,7 @@ impl DebugWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for DebugWidget {
|
impl Component for DebugWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, _emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
_emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
let r = area.map_or_else(|| f.size(), |a| a);
|
let r = area.map_or_else(|| f.size(), |a| a);
|
||||||
|
|
||||||
let configs = self.get_config_values();
|
let configs = self.get_config_values();
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::{Alignment, Rect},
|
layout::{Alignment, Rect},
|
||||||
style::{Color, Style},
|
style::{Color, Style},
|
||||||
terminal::Frame,
|
terminal::Frame,
|
||||||
@ -33,12 +32,7 @@ impl ErrorWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for ErrorWidget {
|
impl Component for ErrorWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, _emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
_emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
let r = area.map_or_else(|| f.size(), |a| a);
|
let r = area.map_or_else(|| f.size(), |a| a);
|
||||||
|
|
||||||
let paragraph = Paragraph::new(
|
let paragraph = Paragraph::new(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
|
|
||||||
use tui::{backend::Backend, layout::Rect, Frame};
|
use tui::{layout::Rect, Frame};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
emotes::Emotes,
|
emotes::Emotes,
|
||||||
@ -55,12 +55,7 @@ impl FollowingWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for FollowingWidget {
|
impl Component for FollowingWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
self.search_widget.draw(f, area, emotes);
|
self.search_widget.draw(f, area, emotes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::{Constraint, Rect},
|
layout::{Constraint, Rect},
|
||||||
style::{Modifier, Style},
|
style::{Modifier, Style},
|
||||||
widgets::{Block, Borders, Cell, Row, Table},
|
widgets::{Block, Borders, Cell, Row, Table},
|
||||||
@ -32,12 +31,7 @@ impl HelpWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for HelpWidget {
|
impl Component for HelpWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, _emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
_emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
let r = area.map_or_else(|| f.size(), |a| a);
|
let r = area.map_or_else(|| f.size(), |a| a);
|
||||||
|
|
||||||
let mut rows = vec![];
|
let mut rows = vec![];
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use tui::{backend::Backend, layout::Rect, Frame};
|
use tui::{layout::Rect, Frame};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
emotes::Emotes,
|
emotes::Emotes,
|
||||||
@ -58,12 +58,7 @@ impl ToString for MessageSearchWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for MessageSearchWidget {
|
impl Component for MessageSearchWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
self.input.draw(f, area, emotes);
|
self.input.draw(f, area, emotes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ use once_cell::sync::Lazy;
|
|||||||
pub use state_tabs::StateTabsWidget;
|
pub use state_tabs::StateTabsWidget;
|
||||||
|
|
||||||
use chrono::{DateTime, Local};
|
use chrono::{DateTime, Local};
|
||||||
use tui::{backend::Backend, layout::Rect, Frame};
|
use tui::{layout::Rect, Frame};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
emotes::Emotes,
|
emotes::Emotes,
|
||||||
@ -47,12 +47,7 @@ static WINDOW_SIZE_TOO_SMALL_ERROR: Lazy<Vec<&'static str>> = Lazy::new(|| {
|
|||||||
|
|
||||||
pub trait Component {
|
pub trait Component {
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::Rect,
|
layout::Rect,
|
||||||
style::{Color, Modifier, Style},
|
style::{Color, Modifier, Style},
|
||||||
symbols::DOT,
|
symbols::DOT,
|
||||||
@ -25,7 +24,7 @@ impl StateTabsWidget {
|
|||||||
Self { _config: config }
|
Self { _config: config }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw<B: Backend>(&self, f: &mut Frame<B>, area: Option<Rect>, state: &State) {
|
pub fn draw(&self, f: &mut Frame, area: Option<Rect>, state: &State) {
|
||||||
let tab_titles = TABS_TO_RENDER
|
let tab_titles = TABS_TO_RENDER
|
||||||
.iter()
|
.iter()
|
||||||
.map(|t| Line::from(capitalize_first_char(&t.to_string())))
|
.map(|t| Line::from(capitalize_first_char(&t.to_string())))
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use rustyline::{line_buffer::LineBuffer, At, Word};
|
use rustyline::{line_buffer::LineBuffer, At, Word};
|
||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::Rect,
|
layout::Rect,
|
||||||
style::{Color, Modifier, Style},
|
style::{Color, Modifier, Style},
|
||||||
text::{Line, Span},
|
text::{Line, Span},
|
||||||
@ -88,12 +87,7 @@ impl ToString for InputWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Component for InputWidget {
|
impl Component for InputWidget {
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, _emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
_emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
let r = area.map_or_else(|| centered_rect(60, 60, 20, f.size()), |a| a);
|
let r = area.map_or_else(|| centered_rect(60, 60, 20, f.size()), |a| a);
|
||||||
|
|
||||||
let cursor_pos = get_cursor_position(&self.input);
|
let cursor_pos = get_cursor_position(&self.input);
|
||||||
|
@ -4,7 +4,6 @@ use color_eyre::Result;
|
|||||||
use fuzzy_matcher::{skim::SkimMatcherV2, FuzzyMatcher};
|
use fuzzy_matcher::{skim::SkimMatcherV2, FuzzyMatcher};
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use tui::{
|
use tui::{
|
||||||
backend::Backend,
|
|
||||||
layout::Rect,
|
layout::Rect,
|
||||||
prelude::{Alignment, Margin},
|
prelude::{Alignment, Margin},
|
||||||
style::{Color, Modifier, Style},
|
style::{Color, Modifier, Style},
|
||||||
@ -108,9 +107,7 @@ where
|
|||||||
self.list_state.select(Some(i));
|
self.list_state.select(Some(i));
|
||||||
|
|
||||||
self.vertical_scroll = self.vertical_scroll.saturating_add(1);
|
self.vertical_scroll = self.vertical_scroll.saturating_add(1);
|
||||||
self.vertical_scroll_state = self
|
self.vertical_scroll_state = self.vertical_scroll_state.position(self.vertical_scroll);
|
||||||
.vertical_scroll_state
|
|
||||||
.position(self.vertical_scroll as u16);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn previous(&mut self) {
|
fn previous(&mut self) {
|
||||||
@ -121,9 +118,7 @@ where
|
|||||||
self.list_state.select(Some(i));
|
self.list_state.select(Some(i));
|
||||||
|
|
||||||
self.vertical_scroll = self.vertical_scroll.saturating_sub(1);
|
self.vertical_scroll = self.vertical_scroll.saturating_sub(1);
|
||||||
self.vertical_scroll_state = self
|
self.vertical_scroll_state = self.vertical_scroll_state.position(self.vertical_scroll);
|
||||||
.vertical_scroll_state
|
|
||||||
.position(self.vertical_scroll as u16);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unselect(&mut self) {
|
fn unselect(&mut self) {
|
||||||
@ -152,12 +147,7 @@ where
|
|||||||
T: ToString + Clone,
|
T: ToString + Clone,
|
||||||
U: SearchItemGetter<T>,
|
U: SearchItemGetter<T>,
|
||||||
{
|
{
|
||||||
fn draw<B: Backend>(
|
fn draw(&mut self, f: &mut Frame, area: Option<Rect>, emotes: Option<&mut Emotes>) {
|
||||||
&mut self,
|
|
||||||
f: &mut Frame<B>,
|
|
||||||
area: Option<Rect>,
|
|
||||||
emotes: Option<&mut Emotes>,
|
|
||||||
) {
|
|
||||||
let r = area.map_or_else(|| centered_rect(60, 60, 20, f.size()), |a| a);
|
let r = area.map_or_else(|| centered_rect(60, 60, 20, f.size()), |a| a);
|
||||||
|
|
||||||
if self.error_widget.is_focused() {
|
if self.error_widget.is_focused() {
|
||||||
@ -236,9 +226,7 @@ where
|
|||||||
f.render_widget(Clear, r);
|
f.render_widget(Clear, r);
|
||||||
f.render_stateful_widget(list, r, &mut self.list_state);
|
f.render_stateful_widget(list, r, &mut self.list_state);
|
||||||
|
|
||||||
self.vertical_scroll_state = self
|
self.vertical_scroll_state = self.vertical_scroll_state.content_length(items.len());
|
||||||
.vertical_scroll_state
|
|
||||||
.content_length(items.len() as u16);
|
|
||||||
|
|
||||||
f.render_stateful_widget(
|
f.render_stateful_widget(
|
||||||
Scrollbar::default()
|
Scrollbar::default()
|
||||||
|
Loading…
Reference in New Issue
Block a user