From 03d1dc56cb064568fdab78ba0ebc1076564c475a Mon Sep 17 00:00:00 2001 From: Wojciech Kozlowski Date: Thu, 29 Aug 2024 17:18:06 +0200 Subject: [PATCH] Final improvements --- src/tui/ui/error.rs | 14 ++++++++++++ src/tui/ui/minibuffer.rs | 17 +++++++++++++-- src/tui/ui/mod.rs | 47 +++++++++++++++------------------------- src/tui/ui/reload.rs | 7 +++--- 4 files changed, 51 insertions(+), 34 deletions(-) create mode 100644 src/tui/ui/error.rs diff --git a/src/tui/ui/error.rs b/src/tui/ui/error.rs new file mode 100644 index 0000000..a556fb0 --- /dev/null +++ b/src/tui/ui/error.rs @@ -0,0 +1,14 @@ +use ratatui::{ + layout::Alignment, + widgets::{Paragraph, Wrap}, +}; + +pub struct ErrorOverlay; + +impl ErrorOverlay { + pub fn paragraph(msg: &str) -> Paragraph { + Paragraph::new(msg) + .alignment(Alignment::Center) + .wrap(Wrap { trim: true }) + } +} diff --git a/src/tui/ui/minibuffer.rs b/src/tui/ui/minibuffer.rs index cd93e8f..114d34a 100644 --- a/src/tui/ui/minibuffer.rs +++ b/src/tui/ui/minibuffer.rs @@ -1,4 +1,7 @@ -use ratatui::{layout::Alignment, widgets::Paragraph}; +use ratatui::{ + layout::{Alignment, Rect}, + widgets::Paragraph, +}; use crate::tui::{ app::{AppPublicState, AppState}, @@ -11,7 +14,17 @@ pub struct Minibuffer<'a> { } impl Minibuffer<'_> { - pub fn paragraphs(state: &AppPublicState) -> Self { + pub fn area(ar: Rect) -> Rect { + let space = 3; + Rect { + x: ar.x + 1 + space, + y: ar.y + 1, + width: ar.width.saturating_sub(2 + 2 * space), + height: 1, + } + } + + pub fn new(state: &AppPublicState) -> Self { let columns = 3; let mut mb = match state { AppState::Browse(_) => Minibuffer { diff --git a/src/tui/ui/mod.rs b/src/tui/ui/mod.rs index 6d0555d..cf8ab4d 100644 --- a/src/tui/ui/mod.rs +++ b/src/tui/ui/mod.rs @@ -1,5 +1,6 @@ mod browse; mod display; +mod error; mod info; mod matches; mod minibuffer; @@ -8,11 +9,7 @@ mod reload; mod style; mod widgets; -use ratatui::{ - layout::{Alignment, Rect}, - widgets::{Paragraph, Wrap}, - Frame, -}; +use ratatui::{layout::Rect, widgets::Paragraph, Frame}; use musichoard::collection::{album::Album, Collection}; @@ -24,11 +21,12 @@ use crate::tui::{ AlbumArea, AlbumState, ArtistArea, ArtistState, FrameArea, TrackArea, TrackState, }, display::UiDisplay, + error::ErrorOverlay, info::{AlbumOverlay, ArtistOverlay}, matches::AlbumMatchesState, minibuffer::Minibuffer, overlay::{OverlayBuilder, OverlaySize}, - reload::ReloadMenu, + reload::ReloadOverlay, widgets::UiWidget, }, }; @@ -55,15 +53,8 @@ impl Ui { } fn render_minibuffer(state: &AppPublicState, ar: Rect, fr: &mut Frame) { - let mb = Minibuffer::paragraphs(state); - - let space = 3; - let area = Rect { - x: ar.x + 1 + space, - y: ar.y + 1, - width: ar.width.saturating_sub(2 + 2 * space), - height: 1, - }; + let mb = Minibuffer::new(state); + let area = Minibuffer::area(ar); UiWidget::render_info_widget("Minibuffer", Paragraph::new(""), false, ar, fr); UiWidget::render_columns(mb.paragraphs, mb.columns, false, area, fr); @@ -130,6 +121,17 @@ impl Ui { } } + fn render_reload_overlay(frame: &mut Frame) { + let area = OverlayBuilder::default() + .with_width(OverlaySize::Value(39)) + .with_height(OverlaySize::Value(4)) + .build(frame.size()); + + let reload_text = ReloadOverlay::paragraph(); + + UiWidget::render_overlay_widget("Reload", reload_text, area, false, frame); + } + fn render_matches_overlay( matching: Option<&Album>, matches: Option<&[Match]>, @@ -142,25 +144,12 @@ impl Ui { UiWidget::render_overlay_list_widget(&matching_string, st.list, st.state, true, area, frame) } - fn render_reload_overlay(frame: &mut Frame) { - let area = OverlayBuilder::default() - .with_width(OverlaySize::Value(39)) - .with_height(OverlaySize::Value(4)) - .build(frame.size()); - - let reload_text = ReloadMenu::paragraph().alignment(Alignment::Center); - - UiWidget::render_overlay_widget("Reload", reload_text, area, false, frame); - } - fn render_error_overlay>(title: S, msg: S, frame: &mut Frame) { let area = OverlayBuilder::default() .with_height(OverlaySize::Value(4)) .build(frame.size()); - let error_text = Paragraph::new(msg.as_ref()) - .alignment(Alignment::Center) - .wrap(Wrap { trim: true }); + let error_text = ErrorOverlay::paragraph(msg.as_ref()); UiWidget::render_overlay_widget(title.as_ref(), error_text, area, true, frame); } diff --git a/src/tui/ui/reload.rs b/src/tui/ui/reload.rs index 6e95271..670a00d 100644 --- a/src/tui/ui/reload.rs +++ b/src/tui/ui/reload.rs @@ -1,12 +1,13 @@ -use ratatui::widgets::Paragraph; +use ratatui::{layout::Alignment, widgets::Paragraph}; -pub struct ReloadMenu; +pub struct ReloadOverlay; -impl ReloadMenu { +impl ReloadOverlay { pub fn paragraph<'a>() -> Paragraph<'a> { Paragraph::new( "d: database\n\ l: library", ) + .alignment(Alignment::Center) } }