ludusavi 0.18.0

Game save backup tool
use iced::{alignment::Horizontal as HorizontalAlignment, Font};

use crate::gui::widget::Text;

pub const ICONS: Font = Font::External {
    name: "Material Icons",
    bytes: include_bytes!("../../assets/MaterialIcons-Regular.ttf"),
};

pub enum Icon {
    Add,
    AddCircle,
    Edit,
    FolderOpen,
    FileOpen,
    KeyboardArrowRight,
    KeyboardArrowDown,
    Language,
    OpenInNew,
    Remove,
    RemoveCircle,
    SubdirectoryArrowRight,
    Delete,
    PlayCircleOutline,
    Settings,
    MoreVert,
    Refresh,
    FastForward,
    ArrowUpward,
    ArrowDownward,
    ArrowForward,
    ArrowBack,
    Comment,
    Close,
    Filter,
    Error,
    Upload,
    Download,
    Lock,
    LockOpen,
}

impl Icon {
    pub fn as_char(&self) -> char {
        match self {
            Self::Add => '\u{E145}',
            Self::AddCircle => '\u{E147}',
            Self::Edit => '\u{E150}',
            Self::FolderOpen => '\u{E2C8}',
            Self::FileOpen => '\u{eaf3}',
            Self::KeyboardArrowRight => '\u{E315}',
            Self::KeyboardArrowDown => '\u{E313}',
            Self::Language => '\u{E894}',
            Self::OpenInNew => '\u{E89E}',
            Self::Remove => '\u{E15B}',
            Self::RemoveCircle => '\u{E15C}',
            Self::SubdirectoryArrowRight => '\u{E5DA}',
            Self::Delete => '\u{E872}',
            Self::PlayCircleOutline => '\u{E039}',
            Self::Settings => '\u{E8B8}',
            Self::MoreVert => '\u{E5D4}',
            Self::Refresh => '\u{E5D5}',
            Self::FastForward => '\u{E01F}',
            Self::ArrowUpward => '\u{E5D8}',
            Self::ArrowDownward => '\u{E5DB}',
            Self::ArrowForward => '\u{e5c8}',
            Self::ArrowBack => '\u{e5c4}',
            Self::Comment => '\u{E0B9}',
            Self::Close => '\u{E5CD}',
            Self::Filter => '\u{ef4f}',
            Self::Error => '\u{e000}',
            Self::Upload => '\u{f09b}',
            Self::Download => '\u{f090}',
            Self::Lock => '\u{e897}',
            Self::LockOpen => '\u{e898}',
        }
    }

    pub fn as_text(&self) -> Text {
        Text::new(self.as_char().to_string())
            .font(ICONS)
            .width(60)
            .horizontal_alignment(HorizontalAlignment::Center)
    }

    pub fn into_text(self) -> Text<'static> {
        Text::new(self.as_char().to_string())
            .font(ICONS)
            .width(60)
            .horizontal_alignment(HorizontalAlignment::Center)
    }
}