rss-tool/src/ui.rs

98 lines
1.8 KiB
Rust
Raw Normal View History

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()
}