Added help that's always visible for modals with new shortcuts for accepting all modals, or closing all modals without the need of seeing the UI
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
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::layout::{Constraint, Flex, Layout, Rect};
|
||||
use ratatui::prelude::{Style, Text, Widget};
|
||||
use ratatui::style::Styled;
|
||||
use ratatui::widgets::Paragraph;
|
||||
@@ -58,11 +58,11 @@ impl<'a> Button<'a> {
|
||||
if let Some(icon) = self.icon {
|
||||
layout_block().style(style).render(area, buf);
|
||||
Paragraph::new(Text::from(self.title))
|
||||
.alignment(Alignment::Left)
|
||||
.left_aligned()
|
||||
.style(style)
|
||||
.render(title_area, buf);
|
||||
Paragraph::new(Text::from(format!("{icon} ")))
|
||||
.alignment(Alignment::Right)
|
||||
.right_aligned()
|
||||
.style(style)
|
||||
.render(icon_area, buf);
|
||||
}
|
||||
@@ -72,7 +72,7 @@ impl<'a> Button<'a> {
|
||||
let [label_area, button_area] =
|
||||
Layout::horizontal([Constraint::Percentage(48), Constraint::Percentage(48)]).areas(area);
|
||||
let label_paragraph = Paragraph::new(Text::from(format!("\n{}: ", self.label.unwrap())))
|
||||
.alignment(Alignment::Right)
|
||||
.right_aligned()
|
||||
.primary();
|
||||
|
||||
if self.icon.is_some() {
|
||||
@@ -87,7 +87,7 @@ impl<'a> Button<'a> {
|
||||
fn render_button(self, area: Rect, buf: &mut Buffer) {
|
||||
Paragraph::new(Text::from(self.title))
|
||||
.block(layout_block())
|
||||
.alignment(Alignment::Center)
|
||||
.centered()
|
||||
.style(style_block_highlight(self.is_selected))
|
||||
.render(area, buf);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{borderless_block, layout_block, style_block_highlight};
|
||||
use ratatui::buffer::Buffer;
|
||||
use ratatui::layout::{Alignment, Constraint, Layout, Rect};
|
||||
use ratatui::layout::{Constraint, Layout, Rect};
|
||||
use ratatui::prelude::Text;
|
||||
use ratatui::style::Stylize;
|
||||
use ratatui::widgets::{Paragraph, Widget};
|
||||
@@ -47,13 +47,13 @@ impl<'a> Checkbox<'a> {
|
||||
|
||||
Paragraph::new(Text::from(format!("\n{}: ", self.label)))
|
||||
.block(borderless_block())
|
||||
.alignment(Alignment::Right)
|
||||
.right_aligned()
|
||||
.primary()
|
||||
.render(label_area, buf);
|
||||
|
||||
Paragraph::new(Text::from(check))
|
||||
.block(layout_block())
|
||||
.alignment(Alignment::Center)
|
||||
.centered()
|
||||
.style(style_block_highlight(self.is_highlighted).bold())
|
||||
.render(checkbox_box_area, buf);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
use crate::app::context_clues::build_context_clue_string;
|
||||
use crate::app::radarr::radarr_context_clues::CONFIRMATION_PROMPT_CONTEXT_CLUES;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{layout_paragraph_borderless, title_block_centered};
|
||||
use crate::ui::widgets::button::Button;
|
||||
use crate::ui::widgets::checkbox::Checkbox;
|
||||
use ratatui::buffer::Buffer;
|
||||
use ratatui::layout::{Constraint, Flex, Layout, Rect};
|
||||
use ratatui::text::Text;
|
||||
use ratatui::widgets::{Paragraph, Widget};
|
||||
use std::iter;
|
||||
|
||||
@@ -64,12 +67,16 @@ impl<'a> ConfirmationPrompt<'a> {
|
||||
|
||||
fn render_confirmation_prompt_with_checkboxes(self, area: Rect, buf: &mut Buffer) {
|
||||
title_block_centered(self.title).render(area, buf);
|
||||
let help_text =
|
||||
Text::from(build_context_clue_string(&CONFIRMATION_PROMPT_CONTEXT_CLUES).help());
|
||||
let help_paragraph = Paragraph::new(help_text).centered();
|
||||
|
||||
if let Some(checkboxes) = self.checkboxes {
|
||||
let mut constraints = vec![
|
||||
Constraint::Length(4),
|
||||
Constraint::Fill(0),
|
||||
Constraint::Fill(1),
|
||||
Constraint::Length(3),
|
||||
Constraint::Length(1),
|
||||
];
|
||||
constraints.splice(
|
||||
1..1,
|
||||
@@ -81,6 +88,7 @@ impl<'a> ConfirmationPrompt<'a> {
|
||||
.areas(chunks[checkboxes.len() + 2]);
|
||||
|
||||
layout_paragraph_borderless(self.prompt).render(chunks[0], buf);
|
||||
help_paragraph.render(chunks[checkboxes.len() + 3], buf);
|
||||
|
||||
checkboxes
|
||||
.into_iter()
|
||||
@@ -102,26 +110,37 @@ impl<'a> ConfirmationPrompt<'a> {
|
||||
|
||||
fn render_confirmation_prompt(self, area: Rect, buf: &mut Buffer) {
|
||||
title_block_centered(self.title).render(area, buf);
|
||||
let help_text =
|
||||
Text::from(build_context_clue_string(&CONFIRMATION_PROMPT_CONTEXT_CLUES).help());
|
||||
let help_paragraph = Paragraph::new(help_text).centered();
|
||||
|
||||
let [prompt_area, buttons_area] = if let Some(content_paragraph) = self.content {
|
||||
let [prompt_area, content_area, _, buttons_area] = Layout::vertical([
|
||||
let [prompt_area, content_area, _, buttons_area, help_area] = Layout::vertical([
|
||||
Constraint::Length(4),
|
||||
Constraint::Length(7),
|
||||
Constraint::Fill(0),
|
||||
Constraint::Fill(1),
|
||||
Constraint::Length(3),
|
||||
Constraint::Length(1),
|
||||
])
|
||||
.margin(1)
|
||||
.areas(area);
|
||||
|
||||
content_paragraph.render(content_area, buf);
|
||||
help_paragraph.render(help_area, buf);
|
||||
|
||||
[prompt_area, buttons_area]
|
||||
} else {
|
||||
let [prompt_area, buttons_area] =
|
||||
Layout::vertical([Constraint::Percentage(72), Constraint::Length(3)])
|
||||
.margin(1)
|
||||
.flex(Flex::SpaceBetween)
|
||||
.areas(area);
|
||||
let [prompt_area, buttons_area, _, help_area] = Layout::vertical([
|
||||
Constraint::Percentage(72),
|
||||
Constraint::Length(3),
|
||||
Constraint::Fill(0),
|
||||
Constraint::Min(1),
|
||||
])
|
||||
.margin(1)
|
||||
.flex(Flex::SpaceBetween)
|
||||
.areas(area);
|
||||
|
||||
help_paragraph.render(help_area, buf);
|
||||
|
||||
[prompt_area, buttons_area]
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use ratatui::buffer::Buffer;
|
||||
use ratatui::layout::{Alignment, Constraint, Layout, Position, Rect};
|
||||
use ratatui::layout::{Constraint, Layout, Position, Rect};
|
||||
use ratatui::prelude::Text;
|
||||
use ratatui::style::{Style, Styled, Stylize};
|
||||
use ratatui::widgets::{Block, Paragraph, Widget};
|
||||
@@ -114,7 +114,7 @@ impl<'a> InputBox<'a> {
|
||||
|
||||
Paragraph::new(Text::from(format!("\n{label}: ")))
|
||||
.block(borderless_block())
|
||||
.alignment(Alignment::Right)
|
||||
.right_aligned()
|
||||
.primary()
|
||||
.render(label_area, buf);
|
||||
input_box_paragraph.render(text_box_area, buf);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{background_block, centered_rect, layout_block_top_border};
|
||||
use ratatui::buffer::Buffer;
|
||||
use ratatui::layout::{Alignment, Constraint, Layout, Rect};
|
||||
use ratatui::layout::{Constraint, Layout, Rect};
|
||||
use ratatui::prelude::Text;
|
||||
use ratatui::widgets::{Block, Clear, Paragraph, Widget};
|
||||
|
||||
@@ -27,7 +27,7 @@ impl Size {
|
||||
pub fn to_percent(&self) -> (u16, u16) {
|
||||
match self {
|
||||
Size::SmallPrompt => (20, 20),
|
||||
Size::Prompt => (35, 35),
|
||||
Size::Prompt => (37, 37),
|
||||
Size::LargePrompt => (70, 45),
|
||||
Size::Message => (25, 8),
|
||||
Size::NarrowMessage => (50, 20),
|
||||
@@ -100,7 +100,7 @@ impl<'a, T: Widget> Popup<'a, T> {
|
||||
|
||||
Paragraph::new(Text::from(format!(" {footer}").help()))
|
||||
.block(layout_block_top_border())
|
||||
.alignment(Alignment::Left)
|
||||
.left_aligned()
|
||||
.render(help_footer_area, buf);
|
||||
|
||||
content_area
|
||||
|
||||
@@ -7,7 +7,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_dimensions_to_percent() {
|
||||
assert_eq!(Size::SmallPrompt.to_percent(), (20, 20));
|
||||
assert_eq!(Size::Prompt.to_percent(), (35, 35));
|
||||
assert_eq!(Size::Prompt.to_percent(), (37, 37));
|
||||
assert_eq!(Size::LargePrompt.to_percent(), (70, 45));
|
||||
assert_eq!(Size::Message.to_percent(), (25, 8));
|
||||
assert_eq!(Size::NarrowMessage.to_percent(), (50, 20));
|
||||
|
||||
Reference in New Issue
Block a user