feat: display errors

This commit is contained in:
electria 2026-08-04 16:49:09 -07:00
commit 29a9ce5d75
Signed by: electria
SSH key fingerprint: SHA256:8LlB3ucPbBHqozqkhsNbaV5oG3SlzzqUj8FZDL6IPQs

View file

@ -1,6 +1,6 @@
use std::{borrow::Cow, collections::HashMap, env, path::PathBuf, process}; use std::{borrow::Cow, collections::HashMap, env, path::PathBuf, process};
use iced::{Color, Element, Renderer, Task, Theme, application, theme, widget}; use iced::{Color, Element, Length, Renderer, Task, Theme, application, theme, widget};
use ignore::{WalkBuilder, types::TypesBuilder}; use ignore::{WalkBuilder, types::TypesBuilder};
use rayon::iter::{ParallelBridge, ParallelIterator}; use rayon::iter::{ParallelBridge, ParallelIterator};
@ -76,9 +76,11 @@ impl State {
Task::none() Task::none()
} }
fn view(&self) -> Element<'_, Message, Theme, Renderer> { fn view(&self) -> Element<'_, Message, Theme, Renderer> {
widget::scrollable( widget::column([
widget::grid(self.images.iter().map(|(path, opt_handle)| { widget::scrollable(widget::grid(self.images.iter().map(
widget::mouse_area( |(path, opt_handle)| {
widget::button(
widget::container(
widget::sensor(opt_handle.as_ref().map_or_else( widget::sensor(opt_handle.as_ref().map_or_else(
|| Element::from(widget::space()), || Element::from(widget::space()),
|handle| widget::image(handle).into(), |handle| widget::image(handle).into(),
@ -86,12 +88,23 @@ impl State {
.on_show(|_size| Message::LoadImage(path.clone())) .on_show(|_size| Message::LoadImage(path.clone()))
.on_hide(Message::UnloadImage(path.clone())), .on_hide(Message::UnloadImage(path.clone())),
) )
.center(Length::Fill),
)
.style(widget::button::subtle)
.on_press(Message::OpenImage(path.clone())) .on_press(Message::OpenImage(path.clone()))
.into() .into()
})) },
.fluid(500) )))
.spacing(0), .height(Length::Fill)
.into(),
self.error
.as_ref()
.map_or_else(
|| Element::from(widget::space()),
|error| widget::text(error).style(widget::text::danger).into(),
) )
.into(),
])
.into() .into()
} }
} }