Skip to main content

danceinterpreter_rs/ui/config_window/
item_row.rs

1use crate::Message;
2use iced::widget::{Container, Row, Space, button, container, row};
3use iced::{Alignment, Color, Length, Theme};
4
5pub fn build_item_row_container_styled(
6    song_row: Row<Message>,
7    highlight: bool,
8    idx: usize,
9    accent_color: Option<Color>,
10) -> Container<Message> {
11    let accent = accent_color;
12    container(
13        row![
14            container(Space::new().width(4).height(40.0))
15                .height(Length::Fixed(40.0))
16                .style(move |_t: &Theme| {
17                    container::Style::default().background(accent.unwrap_or(Color::TRANSPARENT))
18                }),
19            song_row,
20        ]
21        .align_y(Alignment::Center)
22        .spacing(6),
23    )
24    .style(move |t| {
25        let palette = t.extended_palette();
26        let color = if idx.is_multiple_of(2) {
27            palette.background.weakest.color
28        } else {
29            palette.background.weaker.color
30        };
31
32        let mut style = container::Style::default().background(color);
33
34        if highlight {
35            let accent = palette.primary.base.color;
36            style = style
37                .background(palette.primary.weak.color)
38                .border(iced::Border {
39                    color: accent,
40                    width: 2.0,
41                    radius: 4.0.into(),
42                });
43        }
44
45        style
46    })
47    .padding([4, 6])
48    .width(Length::Fill)
49}
50
51pub fn empty_folder_button_style(theme: &Theme, status: button::Status) -> button::Style {
52    let palette = theme.extended_palette();
53    let mut style = button::text(theme, status);
54    style.text_color = palette.secondary.strong.color;
55    style.background = Some(palette.background.weakest.color.into());
56    style.border.radius = 12.0.into();
57    style
58}