use super::db; use db::Feed; use iced::{ widget::{button, column, container, text}, Element, Length::Fill, }; pub fn user_interface() -> iced::Result { iced::run(update, view) } #[derive(Clone, Debug)] enum Page { home, feed_view, item_view, testing, } struct State { page: Page, } impl Default for State { fn default() -> Self { State { page: Page::home } } } #[derive(Debug, Clone)] enum Message { changePage(Page), } fn update(state: &mut State, mes: Message) { match mes { Message::changePage(p) => state.page=p } } fn view(state: &State) -> Element<'_, Message> { match state.page { Page::home => home(&state), Page::feed_view => feeds(&state), Page::item_view => item(&state), Page::testing => testing(&state), } } fn home(state: &State) -> Element<'_, Message> { container(column!( list_feeds(), button("Go to test!").on_press(Message::changePage(Page::testing)) )) .padding(15) .height(Fill) .width(Fill) .into() } fn list_feeds() -> iced::widget::Column<'static, Message> { let feeds = db::get_feeds(); column( feeds .iter() .map(|f| { let title = f.title.clone(); let index = f.feedID; text(title) }) .map(Element::from), ) .align_x(iced::Alignment::Start) .spacing(5) } fn feeds(state: &State) -> Element<'_, Message> { container(list_feeds().padding(15)) .height(Fill) .width(Fill) .into() } fn item(state: &State) -> Element<'_, Message> { todo!() } fn testing(state: &State) -> Element<'_, Message> { column!( iced::widget::text("Ayy lmao"), button("go back!").on_press(Message::changePage(Page::home)) ) .spacing(5) .into() }