Began the Great Widget Refactor of 2024 and introduced custom widgets for buttons, checkboxes, and input boxes. Up next: loading and table widgets
This commit is contained in:
@@ -9,14 +9,18 @@ use crate::models::servarr_data::radarr::radarr_data::{
|
||||
ActiveRadarrBlock, EDIT_MOVIE_BLOCKS, MOVIE_DETAILS_BLOCKS,
|
||||
};
|
||||
use crate::models::Route;
|
||||
use crate::render_selectable_input_box;
|
||||
use crate::ui::radarr_ui::library::draw_library;
|
||||
use crate::ui::radarr_ui::library::movie_details_ui::MovieDetailsUi;
|
||||
|
||||
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 crate::ui::widgets::input_box::InputBox;
|
||||
use crate::ui::{
|
||||
draw_button, draw_checkbox_with_label, draw_drop_down_menu_button, draw_drop_down_popup,
|
||||
draw_large_popup_over_background_fn_with_ui, draw_medium_popup_over, draw_popup,
|
||||
draw_selectable_list, draw_text_box_with_label, DrawUi, LabeledTextBoxProps,
|
||||
draw_drop_down_popup, draw_large_popup_over_background_fn_with_ui,
|
||||
draw_medium_popup_over, draw_popup, draw_selectable_list, DrawUi,
|
||||
};
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -123,12 +127,9 @@ fn draw_edit_movie_confirmation_prompt(f: &mut Frame<'_>, app: &mut App<'_>, are
|
||||
path,
|
||||
tags,
|
||||
} = app.data.radarr_data.edit_movie_modal.as_ref().unwrap();
|
||||
|
||||
let selected_minimum_availability = minimum_availability_list.current_selection();
|
||||
let selected_quality_profile = quality_profile_list.current_selection();
|
||||
|
||||
f.render_widget(title_block_centered(&title), area);
|
||||
|
||||
let [paragraph_area, monitored_area, min_availability_area, quality_profile_area, path_area, tags_area, _, buttons_area] =
|
||||
Layout::vertical([
|
||||
Constraint::Length(6),
|
||||
@@ -142,66 +143,61 @@ fn draw_edit_movie_confirmation_prompt(f: &mut Frame<'_>, app: &mut App<'_>, are
|
||||
])
|
||||
.margin(1)
|
||||
.areas(area);
|
||||
|
||||
let prompt_paragraph = layout_paragraph_borderless(&movie_overview);
|
||||
f.render_widget(prompt_paragraph, paragraph_area);
|
||||
|
||||
let [save_area, cancel_area] =
|
||||
Layout::horizontal([Constraint::Percentage(50), Constraint::Percentage(50)])
|
||||
.areas(buttons_area);
|
||||
|
||||
draw_checkbox_with_label(
|
||||
f,
|
||||
monitored_area,
|
||||
"Monitored",
|
||||
monitored.unwrap_or_default(),
|
||||
selected_block == &ActiveRadarrBlock::EditMovieToggleMonitored,
|
||||
);
|
||||
|
||||
draw_drop_down_menu_button(
|
||||
f,
|
||||
min_availability_area,
|
||||
"Minimum Availability",
|
||||
selected_minimum_availability.to_display_str(),
|
||||
selected_block == &ActiveRadarrBlock::EditMovieSelectMinimumAvailability,
|
||||
);
|
||||
draw_drop_down_menu_button(
|
||||
f,
|
||||
quality_profile_area,
|
||||
"Quality Profile",
|
||||
selected_quality_profile,
|
||||
selected_block == &ActiveRadarrBlock::EditMovieSelectQualityProfile,
|
||||
);
|
||||
let prompt_paragraph = layout_paragraph_borderless(&movie_overview);
|
||||
let monitored_checkbox = Checkbox::new("Monitored")
|
||||
.checked(monitored.unwrap_or_default())
|
||||
.highlighted(selected_block == &ActiveRadarrBlock::EditMovieToggleMonitored);
|
||||
let min_availability_drop_down_button = Button::new()
|
||||
.title(selected_minimum_availability.to_display_str())
|
||||
.label("Minimum Availability")
|
||||
.icon("▼")
|
||||
.selected(selected_block == &ActiveRadarrBlock::EditMovieSelectMinimumAvailability);
|
||||
let quality_profile_drop_down_button = Button::new()
|
||||
.title(selected_quality_profile)
|
||||
.label("Quality Profile")
|
||||
.icon("▼")
|
||||
.selected(selected_block == &ActiveRadarrBlock::EditMovieSelectQualityProfile);
|
||||
|
||||
if let Route::Radarr(active_radarr_block, _) = *app.get_current_route() {
|
||||
draw_text_box_with_label(
|
||||
f,
|
||||
LabeledTextBoxProps {
|
||||
area: path_area,
|
||||
label: "Path",
|
||||
text: &path.text,
|
||||
offset: *path.offset.borrow(),
|
||||
is_selected: selected_block == &ActiveRadarrBlock::EditMoviePathInput,
|
||||
should_show_cursor: active_radarr_block == ActiveRadarrBlock::EditMoviePathInput,
|
||||
cursor_after_string: true,
|
||||
},
|
||||
);
|
||||
draw_text_box_with_label(
|
||||
f,
|
||||
LabeledTextBoxProps {
|
||||
area: tags_area,
|
||||
label: "Tags",
|
||||
text: &tags.text,
|
||||
offset: *tags.offset.borrow(),
|
||||
is_selected: selected_block == &ActiveRadarrBlock::EditMovieTagsInput,
|
||||
should_show_cursor: active_radarr_block == ActiveRadarrBlock::EditMovieTagsInput,
|
||||
cursor_after_string: true,
|
||||
},
|
||||
);
|
||||
let path_input_box = InputBox::new(&path.text)
|
||||
.offset(*path.offset.borrow())
|
||||
.label("Path")
|
||||
.highlighted(selected_block == &ActiveRadarrBlock::EditMoviePathInput)
|
||||
.selected(active_radarr_block == ActiveRadarrBlock::EditMoviePathInput);
|
||||
let tags_input_box = InputBox::new(&tags.text)
|
||||
.offset(*tags.offset.borrow())
|
||||
.label("Tags")
|
||||
.highlighted(selected_block == &ActiveRadarrBlock::EditMovieTagsInput)
|
||||
.selected(active_radarr_block == ActiveRadarrBlock::EditMovieTagsInput);
|
||||
|
||||
match active_radarr_block {
|
||||
ActiveRadarrBlock::EditMoviePathInput => path_input_box.show_cursor(f, path_area),
|
||||
ActiveRadarrBlock::EditMovieTagsInput => tags_input_box.show_cursor(f, tags_area),
|
||||
_ => (),
|
||||
}
|
||||
|
||||
render_selectable_input_box!(path_input_box, f, path_area);
|
||||
render_selectable_input_box!(tags_input_box, f, tags_area);
|
||||
}
|
||||
|
||||
draw_button(f, save_area, "Save", yes_no_value && highlight_yes_no);
|
||||
draw_button(f, cancel_area, "Cancel", !yes_no_value && highlight_yes_no);
|
||||
let save_button = Button::new()
|
||||
.title("Save")
|
||||
.selected(yes_no_value && highlight_yes_no);
|
||||
let cancel_button = Button::new()
|
||||
.title("Cancel")
|
||||
.selected(!yes_no_value && highlight_yes_no);
|
||||
|
||||
f.render_widget(title_block_centered(&title), area);
|
||||
f.render_widget(prompt_paragraph, paragraph_area);
|
||||
f.render_widget(monitored_checkbox, monitored_area);
|
||||
f.render_widget(min_availability_drop_down_button, min_availability_area);
|
||||
f.render_widget(quality_profile_drop_down_button, quality_profile_area);
|
||||
f.render_widget(save_button, save_area);
|
||||
f.render_widget(cancel_button, cancel_area);
|
||||
}
|
||||
|
||||
fn draw_edit_movie_select_minimum_availability_popup(
|
||||
|
||||
Reference in New Issue
Block a user