koibumi 0.0.10

An experimental Bitmessage client
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)
    }
}