diff --git a/Cargo.toml b/Cargo.toml index b65a4f5..9750d1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,6 @@ tracing = ["dep:lttng-ust"] #iced = "0.4.2" #iced_native = "0.5.1" iced = { path = "../iced", features = ["advanced"] } -iced_aw = { path = "../iced_aw", default-features = false, features = ["segmented_button", "tab_bar", "icons"] } chrono = { version = "0.4", features = ["unstable-locales"] } lttng-ust = { version = "0.1.0", optional = true } icalendar = "0.15.4" diff --git a/src/ui/controls.rs b/src/ui/controls.rs index d8b92c1..d7630d3 100644 --- a/src/ui/controls.rs +++ b/src/ui/controls.rs @@ -6,20 +6,7 @@ use chrono::{ NaiveDate, Locale, }; -use iced::{ - alignment, - Alignment, - Element, - Length, - widget::{ - button, - row, - Row, - Button, - Text, text, - }, -}; -use iced_aw::widgets::segmented_button::SegmentedButton; +use iced::{Alignment, Background, Border, Element, Length, Theme, alignment, theme::palette, widget::{Button, Row, Text, button::{Status, Style, secondary}, row, text}}; //#[derive(Default)] pub struct Controls { @@ -48,13 +35,13 @@ impl Controls { .padding(5) .spacing(10) .push(row![ - SegmentedButton::new(text("Week"), ViewMode::Week, self.mode, Message::ViewModeSelected), - SegmentedButton::new(text("Month"), ViewMode::Month, self.mode, Message::ViewModeSelected), - SegmentedButton::new(text("Year"), ViewMode::Year, self.mode, Message::ViewModeSelected), + Button::new(text("Week")).on_press(Message::ViewModeSelected(ViewMode::Week)).style(self.get_mode_style(ViewMode::Week)), + Button::new(text("Month")).on_press(Message::ViewModeSelected(ViewMode::Month)).style(self.get_mode_style(ViewMode::Month)), + Button::new(text("Year")).on_press(Message::ViewModeSelected(ViewMode::Year)).style(self.get_mode_style(ViewMode::Year)), ]) .push(row![ - Button::new(Text::new("<")).on_press(self.get_msg_prev()).style(button::secondary), - Button::new(Text::new(">")).on_press(self.get_msg_next()).style(button::secondary), + Button::new(Text::new("<")).on_press(self.get_msg_prev()).style(secondary), + Button::new(Text::new(">")).on_press(self.get_msg_next()).style(secondary), ].spacing(0).padding(0) ) .push( @@ -89,4 +76,67 @@ impl Controls { None => todo!(), } } + + fn get_mode_style(&self, view_mode: ViewMode) -> impl Fn(&Theme, Status) -> Style { + if let Some(current_view_mode) = self.mode { + if current_view_mode == view_mode { + mode_selected + } else { + mode_not_selected + } + } else { + todo!() + } + } } + +// TODO: copied from iced button +fn styled(pair: palette::Pair) -> Style { + Style { + background: Some(Background::Color(pair.color)), + text_color: pair.text, + border: Border::rounded(2), + ..Style::default() + } +} +fn disabled(style: Style) -> Style { + Style { + background: style + .background + .map(|background| background.scale_alpha(0.5)), + text_color: style.text_color.scale_alpha(0.5), + ..style + } +} + +fn mode_not_selected(theme: &Theme, status: Status) -> Style { + let palette = theme.extended_palette(); + let base = styled(palette.secondary.base); + + match status { + Status::Active | Status::Pressed => base, + Status::Hovered => Style { + background: Some(Background::Color(palette.secondary.strong.color)), + ..base + }, + Status::Disabled => disabled(base), + } +} + +fn mode_selected(theme: &Theme, status: Status) -> Style { + let palette = theme.extended_palette(); + let base = styled(palette.secondary.base); + + match status { + Status::Active | Status::Pressed => Style { + background: Some(Background::Color(palette.secondary.strong.color)), + ..base + }, + Status::Hovered => Style { + background: Some(Background::Color(palette.secondary.strong.color)), + ..base + }, + Status::Disabled => disabled(base), + } +} +