From 57b2c71804bf627f3c54b14e80611c9d71272645 Mon Sep 17 00:00:00 2001 From: PixelDots Date: Sun, 22 Oct 2023 15:23:07 -0500 Subject: [PATCH] Time Applet Window design implementation --- cosmic-applet-time/Cargo.toml | 5 + cosmic-applet-time/i18n.toml | 4 + .../i18n/en/cosmic_applet_time.ftl | 1 + cosmic-applet-time/src/localize.rs | 47 +++ cosmic-applet-time/src/main.rs | 240 +---------- cosmic-applet-time/src/window.rs | 382 ++++++++++++++++++ 6 files changed, 446 insertions(+), 233 deletions(-) create mode 100644 cosmic-applet-time/i18n.toml create mode 100644 cosmic-applet-time/i18n/en/cosmic_applet_time.ftl create mode 100644 cosmic-applet-time/src/localize.rs create mode 100644 cosmic-applet-time/src/window.rs diff --git a/cosmic-applet-time/Cargo.toml b/cosmic-applet-time/Cargo.toml index 344be421..f20e3339 100644 --- a/cosmic-applet-time/Cargo.toml +++ b/cosmic-applet-time/Cargo.toml @@ -9,3 +9,8 @@ icon-loader = { version = "0.3.6", features = ["gtk"] } libcosmic.workspace = true nix = "0.26.2" chrono = { version = "0.4.23", features = ["clock"] } +once_cell = "1" +# Application i18n +i18n-embed = { version = "0.13.4", features = ["fluent-system", "desktop-requester"] } +i18n-embed-fl = "0.6.4" +rust-embed = "6.3.0" \ No newline at end of file diff --git a/cosmic-applet-time/i18n.toml b/cosmic-applet-time/i18n.toml new file mode 100644 index 00000000..05c50ba2 --- /dev/null +++ b/cosmic-applet-time/i18n.toml @@ -0,0 +1,4 @@ +fallback_language = "en" + +[fluent] +assets_dir = "i18n" \ No newline at end of file diff --git a/cosmic-applet-time/i18n/en/cosmic_applet_time.ftl b/cosmic-applet-time/i18n/en/cosmic_applet_time.ftl new file mode 100644 index 00000000..12d559d9 --- /dev/null +++ b/cosmic-applet-time/i18n/en/cosmic_applet_time.ftl @@ -0,0 +1 @@ +datetime-settings = Date, Time and Calendar Settings... \ No newline at end of file diff --git a/cosmic-applet-time/src/localize.rs b/cosmic-applet-time/src/localize.rs new file mode 100644 index 00000000..baa05d0d --- /dev/null +++ b/cosmic-applet-time/src/localize.rs @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MPL-2.0-only + +use i18n_embed::{ + fluent::{fluent_language_loader, FluentLanguageLoader}, + DefaultLocalizer, LanguageLoader, Localizer, +}; +use once_cell::sync::Lazy; +use rust_embed::RustEmbed; + +#[derive(RustEmbed)] +#[folder = "i18n/"] +struct Localizations; + +pub static LANGUAGE_LOADER: Lazy = Lazy::new(|| { + let loader: FluentLanguageLoader = fluent_language_loader!(); + + loader + .load_fallback_language(&Localizations) + .expect("Error while loading fallback language"); + + loader +}); + +#[macro_export] +macro_rules! fl { + ($message_id:literal) => {{ + i18n_embed_fl::fl!($crate::localize::LANGUAGE_LOADER, $message_id) + }}; + + ($message_id:literal, $($args:expr),*) => {{ + i18n_embed_fl::fl!($crate::localize::LANGUAGE_LOADER, $message_id, $($args), *) + }}; +} + +// Get the `Localizer` to be used for localizing this library. +pub fn localizer() -> Box { + Box::from(DefaultLocalizer::new(&*LANGUAGE_LOADER, &Localizations)) +} + +pub fn localize() { + let localizer = localizer(); + let requested_languages = i18n_embed::DesktopLanguageRequester::requested_languages(); + + if let Err(error) = localizer.select(&requested_languages) { + eprintln!("Error while loading language for App List {}", error); + } +} diff --git a/cosmic-applet-time/src/main.rs b/cosmic-applet-time/src/main.rs index 3657f186..64dc55af 100644 --- a/cosmic-applet-time/src/main.rs +++ b/cosmic-applet-time/src/main.rs @@ -1,236 +1,10 @@ -use cosmic::iced::wayland::popup::{destroy_popup, get_popup}; -use cosmic::iced::{ - time, - widget::{column, text, vertical_space}, - window, Alignment, Length, Rectangle, Subscription, -}; -use cosmic::iced_style::application; -use cosmic::{app, applet::cosmic_panel_config::PanelAnchor, Command}; -use cosmic::{ - widget::{icon, rectangle_tracker::*}, - Element, Theme, -}; +mod localize; +mod window; -use chrono::{DateTime, Local, Timelike}; -use std::time::Duration; +use window::Window; -pub fn main() -> cosmic::iced::Result { - cosmic::applet::run::