Upgraded ratatui to 0.28.0

This commit is contained in:
2024-09-09 17:12:43 -06:00
parent 64d6beda80
commit 217d3242a8
21 changed files with 129 additions and 128 deletions
+9 -13
View File
@@ -18,18 +18,16 @@ impl<T> Scrollable for StatefulList<T> {
return;
}
let selected_row = match self.state.selected() {
match self.state.selected() {
Some(i) => {
if i >= self.items.len() - 1 {
0
self.state.select_first();
} else {
i + 1
self.state.select_next();
}
}
None => 0,
None => self.state.select_first(),
};
self.state.select(Some(selected_row));
}
fn scroll_up(&mut self) {
@@ -37,18 +35,16 @@ impl<T> Scrollable for StatefulList<T> {
return;
}
let selected_row = match self.state.selected() {
match self.state.selected() {
Some(i) => {
if i == 0 {
self.items.len() - 1
self.state.select(Some(self.items.len() - 1));
} else {
i - 1
self.state.select_previous();
}
}
None => 0,
None => self.state.select_first(),
};
self.state.select(Some(selected_row));
}
fn scroll_to_top(&mut self) {
@@ -56,7 +52,7 @@ impl<T> Scrollable for StatefulList<T> {
return;
}
self.state.select(Some(0));
self.state.select_first();
}
fn scroll_to_bottom(&mut self) {
+22 -32
View File
@@ -42,22 +42,17 @@ where
return;
}
let selected_row = match self.filtered_state.as_ref().unwrap().selected() {
match self.filtered_state.as_ref().unwrap().selected() {
Some(i) => {
if i >= filtered_items.len() - 1 {
0
self.filtered_state.as_mut().unwrap().select_first();
} else {
i + 1
self.filtered_state.as_mut().unwrap().select_next();
}
}
None => 0,
None => self.filtered_state.as_mut().unwrap().select_first(),
};
self
.filtered_state
.as_mut()
.unwrap()
.select(Some(selected_row));
return;
}
@@ -65,18 +60,16 @@ where
return;
}
let selected_row = match self.state.selected() {
match self.state.selected() {
Some(i) => {
if i >= self.items.len() - 1 {
0
self.state.select_first();
} else {
i + 1
self.state.select_next();
}
}
None => 0,
None => self.state.select_first(),
};
self.state.select(Some(selected_row));
}
fn scroll_up(&mut self) {
@@ -85,22 +78,21 @@ where
return;
}
let selected_row = match self.filtered_state.as_ref().unwrap().selected() {
match self.filtered_state.as_ref().unwrap().selected() {
Some(i) => {
if i == 0 {
filtered_items.len() - 1
self
.filtered_state
.as_mut()
.unwrap()
.select(Some(filtered_items.len() - 1));
} else {
i - 1
self.filtered_state.as_mut().unwrap().select_previous();
}
}
None => 0,
None => self.filtered_state.as_mut().unwrap().select_first(),
};
self
.filtered_state
.as_mut()
.unwrap()
.select(Some(selected_row));
return;
}
@@ -108,18 +100,16 @@ where
return;
}
let selected_row = match self.state.selected() {
match self.state.selected() {
Some(i) => {
if i == 0 {
self.items.len() - 1
self.state.select(Some(self.items.len() - 1));
} else {
i - 1
self.state.select_previous();
}
}
None => 0,
None => self.state.select_first(),
};
self.state.select(Some(selected_row));
}
fn scroll_to_top(&mut self) {
@@ -128,7 +118,7 @@ where
return;
}
self.filtered_state.as_mut().unwrap().select(Some(0));
self.filtered_state.as_mut().unwrap().select_first();
return;
}
@@ -136,7 +126,7 @@ where
return;
}
self.state.select(Some(0));
self.state.select_first();
}
fn scroll_to_bottom(&mut self) {
+5 -5
View File
@@ -31,7 +31,7 @@ pub trait DrawUi {
}
pub fn ui(f: &mut Frame<'_>, app: &mut App<'_>) {
f.render_widget(background_block(), f.size());
f.render_widget(background_block(), f.area());
let [header_area, context_area, table_area] = if !app.error.text.is_empty() {
let [header_area, error_area, context_area, table_area] = Layout::vertical([
Constraint::Length(3),
@@ -39,7 +39,7 @@ pub fn ui(f: &mut Frame<'_>, app: &mut App<'_>) {
Constraint::Length(10),
Constraint::Fill(0),
])
.areas(f.size());
.areas(f.area());
draw_error(f, app, error_area);
@@ -50,7 +50,7 @@ pub fn ui(f: &mut Frame<'_>, app: &mut App<'_>) {
Constraint::Length(10),
Constraint::Fill(0),
])
.areas(f.size())
.areas(f.area())
};
draw_header_row(f, app, header_area);
@@ -110,7 +110,7 @@ pub fn draw_popup(
size: Size,
) {
let (percent_x, percent_y) = size.to_percent();
let popup_area = centered_rect(percent_x, percent_y, f.size());
let popup_area = centered_rect(percent_x, percent_y, f.area());
f.render_widget(Clear, popup_area);
f.render_widget(background_block(), popup_area);
popup_fn(f, app, popup_area);
@@ -118,7 +118,7 @@ pub fn draw_popup(
fn draw_popup_ui<T: DrawUi>(f: &mut Frame<'_>, app: &mut App<'_>, size: Size) {
let (percent_x, percent_y) = size.to_percent();
let popup_area = centered_rect(percent_x, percent_y, f.size());
let popup_area = centered_rect(percent_x, percent_y, f.area());
f.render_widget(Clear, popup_area);
f.render_widget(background_block(), popup_area);
T::draw(f, app, popup_area);
+3 -3
View File
@@ -56,7 +56,7 @@ impl DrawUi for BlocklistUi {
.yes_no_value(app.data.radarr_data.prompt_confirm);
draw_blocklist_table(f, app, area);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
ActiveRadarrBlock::BlocklistClearAllItemsPrompt => {
let confirmation_prompt = ConfirmationPrompt::new()
@@ -67,7 +67,7 @@ impl DrawUi for BlocklistUi {
draw_blocklist_table(f, app, area);
f.render_widget(
Popup::new(confirmation_prompt).size(Size::SmallPrompt),
f.size(),
f.area(),
);
}
_ => (),
@@ -197,5 +197,5 @@ fn draw_blocklist_item_details_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
.style(Style::new().secondary())
.alignment(Alignment::Left);
f.render_widget(Popup::new(message).size(Size::NarrowMessage), f.size());
f.render_widget(Popup::new(message).size(Size::NarrowMessage), f.area());
}
@@ -182,7 +182,7 @@ fn draw_edit_collection_select_minimum_availability_popup(f: &mut Frame<'_>, app
);
let popup = Popup::new(min_availability_list).size(Size::Dropdown);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
fn draw_edit_collection_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
@@ -198,5 +198,5 @@ fn draw_edit_collection_select_quality_profile_popup(f: &mut Frame<'_>, app: &mu
);
let popup = Popup::new(quality_profile_list).size(Size::Dropdown);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
+3 -3
View File
@@ -55,7 +55,7 @@ impl DrawUi for CollectionsUi {
let popup = Popup::new(Message::new("Collection not found!")).size(Size::Message);
draw_collections(f, app, area);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
ActiveRadarrBlock::FilterCollections => draw_popup_over(
f,
@@ -72,7 +72,7 @@ impl DrawUi for CollectionsUi {
.size(Size::Message);
draw_collections(f, app, area);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
ActiveRadarrBlock::UpdateAllCollectionsPrompt => {
let confirmation_prompt = ConfirmationPrompt::new()
@@ -81,7 +81,7 @@ impl DrawUi for CollectionsUi {
.yes_no_value(app.data.radarr_data.prompt_confirm);
draw_collections(f, app, area);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
_ => (),
};
+2 -2
View File
@@ -44,7 +44,7 @@ impl DrawUi for DownloadsUi {
.yes_no_value(app.data.radarr_data.prompt_confirm);
draw_downloads(f, app, area);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
ActiveRadarrBlock::UpdateDownloadsPrompt => {
let confirmation_prompt = ConfirmationPrompt::new()
@@ -53,7 +53,7 @@ impl DrawUi for DownloadsUi {
.yes_no_value(app.data.radarr_data.prompt_confirm);
draw_downloads(f, app, area);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
_ => (),
}
+3 -3
View File
@@ -54,7 +54,7 @@ impl DrawUi for IndexersUi {
title_block("Testing Indexer"),
))
.size(Size::LargeMessage);
f.render_widget(loading_popup, f.size());
f.render_widget(loading_popup, f.area());
} else {
let popup = if let Some(result) = app.data.radarr_data.indexer_test_error.as_ref() {
Popup::new(Message::new(result.clone())).size(Size::LargeMessage)
@@ -65,7 +65,7 @@ impl DrawUi for IndexersUi {
Popup::new(message).size(Size::Message)
};
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
}
ActiveRadarrBlock::DeleteIndexerPrompt => {
@@ -86,7 +86,7 @@ impl DrawUi for IndexersUi {
.yes_no_value(app.data.radarr_data.prompt_confirm);
draw_indexers(f, app, area);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
_ => (),
};
+6 -6
View File
@@ -80,7 +80,7 @@ impl DrawUi for AddMovieUi {
draw_add_movie_search(f, app, area);
f.render_widget(
Popup::new(Message::new("This film is already in your library")).size(Size::Message),
f.size(),
f.area(),
);
}
_ => (),
@@ -223,7 +223,7 @@ fn draw_add_movie_search(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
let error_message_popup = Popup::new(error_message).size(Size::Message);
f.render_widget(layout_block(), results_area);
f.render_widget(error_message_popup, f.size());
f.render_widget(error_message_popup, f.area());
f.render_widget(help_paragraph, help_area);
}
ActiveRadarrBlock::AddMovieSearchResults
@@ -447,7 +447,7 @@ fn draw_add_movie_select_monitor_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
);
let popup = Popup::new(monitor_list).size(Size::Dropdown);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
fn draw_add_movie_select_minimum_availability_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
@@ -463,7 +463,7 @@ fn draw_add_movie_select_minimum_availability_popup(f: &mut Frame<'_>, app: &mut
);
let popup = Popup::new(minimum_availability_list).size(Size::Dropdown);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
fn draw_add_movie_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
@@ -479,7 +479,7 @@ fn draw_add_movie_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App<
);
let popup = Popup::new(quality_profile_list).size(Size::Dropdown);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
fn draw_add_movie_select_root_folder_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
@@ -495,5 +495,5 @@ fn draw_add_movie_select_root_folder_popup(f: &mut Frame<'_>, app: &mut App<'_>)
);
let popup = Popup::new(root_folder_list).size(Size::Dropdown);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
+1 -1
View File
@@ -51,7 +51,7 @@ impl DrawUi for DeleteMovieUi {
.yes_no_value(app.data.radarr_data.prompt_confirm);
draw_library(f, app, area);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
}
}
+2 -2
View File
@@ -194,7 +194,7 @@ fn draw_edit_movie_select_minimum_availability_popup(f: &mut Frame<'_>, app: &mu
);
let popup = Popup::new(minimum_availability_list).size(Size::Dropdown);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
fn draw_edit_movie_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
@@ -210,5 +210,5 @@ fn draw_edit_movie_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App
);
let popup = Popup::new(quality_profile_list).size(Size::Dropdown);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
+3 -3
View File
@@ -60,7 +60,7 @@ impl DrawUi for LibraryUi {
let popup = Popup::new(Message::new("Movie not found!")).size(Size::Message);
draw_library(f, app, area);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
ActiveRadarrBlock::FilterMovies => draw_popup_over(
f,
@@ -75,7 +75,7 @@ impl DrawUi for LibraryUi {
.size(Size::Message);
draw_library(f, app, area);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
ActiveRadarrBlock::UpdateAllMoviesPrompt => {
let confirmation_prompt = ConfirmationPrompt::new()
@@ -84,7 +84,7 @@ impl DrawUi for LibraryUi {
.yes_no_value(app.data.radarr_data.prompt_confirm);
draw_library(f, app, area);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
_ => (),
};
+4 -4
View File
@@ -61,7 +61,7 @@ impl DrawUi for MovieDetailsUi {
.yes_no_value(app.data.radarr_data.prompt_confirm);
draw_movie_info(f, app, content_area);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
ActiveRadarrBlock::UpdateAndScanPrompt => {
let prompt = format!(
@@ -73,7 +73,7 @@ impl DrawUi for MovieDetailsUi {
.prompt(&prompt)
.yes_no_value(app.data.radarr_data.prompt_confirm);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
ActiveRadarrBlock::ManualSearchConfirmPrompt => {
draw_manual_search_confirm_prompt(f, app);
@@ -517,14 +517,14 @@ fn draw_manual_search_confirm_prompt(f: &mut Frame<'_>, app: &mut App<'_>) {
.content(content_paragraph)
.yes_no_value(app.data.radarr_data.prompt_confirm);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Small), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Small), f.area());
} else {
let confirmation_prompt = ConfirmationPrompt::new()
.title(title)
.prompt(&prompt)
.yes_no_value(app.data.radarr_data.prompt_confirm);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
}
+1 -1
View File
@@ -52,7 +52,7 @@ impl DrawUi for RootFoldersUi {
.yes_no_value(app.data.radarr_data.prompt_confirm);
draw_root_folders(f, app, area);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
_ => (),
}
+5 -5
View File
@@ -87,7 +87,7 @@ fn draw_logs_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
.block(block)
.footer(&help_footer);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
return;
}
@@ -103,7 +103,7 @@ fn draw_logs_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
.block(block)
.footer(&help_footer);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
fn draw_tasks_popup(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
@@ -145,7 +145,7 @@ fn draw_tasks_popup(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
.prompt(&prompt)
.yes_no_value(app.data.radarr_data.prompt_confirm);
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size());
f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area());
}
}
@@ -166,7 +166,7 @@ fn draw_updates_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
.block(block)
.footer(&help_footer);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
} else {
let loading = LoadingBlock::new(app.is_loading, borderless_block());
let popup = Popup::new(loading)
@@ -174,6 +174,6 @@ fn draw_updates_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
.block(block)
.footer(&help_footer);
f.render_widget(popup, f.size());
f.render_widget(popup, f.area());
}
}
+3 -3
View File
@@ -1,5 +1,5 @@
use ratatui::prelude::{Color, Styled};
use ratatui::style::Stylize;
use ratatui::prelude::Color;
use ratatui::style::{Styled, Stylize};
pub const COLOR_ORANGE: Color = Color::Rgb(255, 170, 66);
@@ -99,7 +99,7 @@ where
fn unreleased(self) -> T {
self.light_cyan()
}
fn warning(self) -> T {
self.magenta()
}
+2 -2
View File
@@ -98,7 +98,7 @@ pub fn centered_rect(percent_x: u16, percent_y: u16, area: Rect) -> Rect {
pub fn line_gauge_with_title(title: &str, ratio: f64) -> LineGauge<'_> {
LineGauge::new()
.block(Block::new().title(title))
.gauge_style(Style::new().cyan())
.filled_style(Style::new().cyan())
.line_set(symbols::line::THICK)
.ratio(ratio)
.label(Line::from(format!("{:.0}%", ratio * 100.0)))
@@ -107,7 +107,7 @@ pub fn line_gauge_with_title(title: &str, ratio: f64) -> LineGauge<'_> {
pub fn line_gauge_with_label(title: &str, ratio: f64) -> LineGauge<'_> {
LineGauge::new()
.block(Block::new())
.gauge_style(Style::new().cyan())
.filled_style(Style::new().cyan())
.line_set(symbols::line::THICK)
.ratio(ratio)
.label(Line::from(format!("{title}: {:.0}%", ratio * 100.0)))
+2 -1
View File
@@ -2,7 +2,8 @@ use crate::ui::styles::ManagarrStyle;
use crate::ui::utils::{layout_block, style_block_highlight};
use ratatui::buffer::Buffer;
use ratatui::layout::{Alignment, Constraint, Flex, Layout, Rect};
use ratatui::prelude::{Style, Styled, Text, Widget};
use ratatui::prelude::{Style, Text, Widget};
use ratatui::style::Styled;
use ratatui::widgets::Paragraph;
#[cfg(test)]
+9 -6
View File
@@ -1,5 +1,5 @@
use ratatui::buffer::Buffer;
use ratatui::layout::{Alignment, Constraint, Layout, Rect};
use ratatui::layout::{Alignment, Constraint, Layout, Position, Rect};
use ratatui::prelude::Text;
use ratatui::style::{Style, Styled, Stylize};
use ratatui::widgets::{Block, Paragraph, Widget};
@@ -84,12 +84,15 @@ impl<'a> InputBox<'a> {
};
if self.cursor_after_string {
f.set_cursor(
area.x + (self.content.len() - self.offset) as u16 + 1,
area.y + 1,
);
f.set_cursor_position(Position {
x: area.x + (self.content.len() - self.offset) as u16 + 1,
y: area.y + 1,
});
} else {
f.set_cursor(area.x + 1u16, area.y + 1);
f.set_cursor_position(Position {
x: area.x + 1u16,
y: area.y + 1,
});
}
}