use iced::{
widget::{button, Column, Row, Text},
Length,
};
use crate::{config::Config as GuiConfig, gui::Message, style};
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum Tab {
Messages,
Send,
Identities,
Contacts,
Subscriptions,
Settings,
Status,
Log,
}
impl Default for Tab {
fn default() -> Self {
Self::Messages
}
}
#[derive(Clone, Debug, Default)]
pub(crate) struct Tabs {}
impl Tabs {
pub(crate) fn view(&self, config: &GuiConfig, current_tab: Tab) -> Column<Message> {
let text_size = config.text_size();
let tab_button = |label, tab| {
button(Text::new(label).size(text_size))
.style(iced::theme::Button::Custom(Box::new(
style::TabButton::new(tab == current_tab),
)))
.on_press(Message::TabSelected(tab))
.padding(text_size / 6)
};
let row1 = Row::new().spacing(text_size / 4).push(
Row::new()
.width(Length::Shrink)
.spacing(text_size / 4)
.push(tab_button("Messages", Tab::Messages))
.push(tab_button("Send", Tab::Send))
.push(tab_button("Identities", Tab::Identities))
.push(tab_button("Contacts", Tab::Contacts))
.push(tab_button("Subscriptions", Tab::Subscriptions)),
);
let row2 = Row::new().spacing(text_size / 4).push(
Row::new()
.width(Length::Shrink)
.spacing(text_size / 4)
.push(tab_button("Settings", Tab::Settings))
.push(tab_button("Status", Tab::Status))
.push(tab_button("Log", Tab::Log)),
);
Column::new().push(row1).push(row2)
}
}