prehnite/app/window/
mod.rs

1pub mod editor_window;
2pub mod license_info_window;
3pub mod main_window;
4pub mod setting_window;
5pub mod version_info_window;
6
7use crate::app::resources::APP_ICON_PNG;
8use crate::app::window::editor_window::EditorWindowMessage;
9use crate::app::window::license_info_window::LicenseInfoWindowMessage;
10use crate::app::window::main_window::MainWindowMessage;
11use crate::app::window::setting_window::SettingWindowMessage;
12use crate::app::window::version_info_window::VersionInfoWindowMessage;
13use iced::window::icon::from_file_data;
14use iced::{window, Element, Task};
15use std::fmt::Debug;
16use tracing::error;
17
18pub fn app_default_window_settings() -> window::Settings {
19    window::Settings {
20        icon: from_file_data(APP_ICON_PNG, Some(image::ImageFormat::Png))
21            .or_else(|e| {
22                error!("Failed to setup app icon. Error: {e:#?}");
23                Err(e)
24            })
25            .ok(),
26        ..Default::default()
27    }
28}
29
30#[derive(Clone, Debug)]
31pub enum WindowMessage {
32    MainWindowMessage(MainWindowMessage),
33    VersionInfoWindowMessage(VersionInfoWindowMessage),
34    SettingWindowMessage(SettingWindowMessage),
35    LicenseInfoWindowMessage(LicenseInfoWindowMessage),
36    EditorWindowMessage(EditorWindowMessage),
37    ReloadFont,
38    ReloadLanguage,
39}
40
41pub trait Window: Debug {
42    fn new() -> Self
43    where
44        Self: Sized;
45
46    fn init_task() -> Task<WindowMessage>
47    where
48        Self: Sized,
49    {
50        Task::none()
51    }
52
53    fn update(&mut self, message: WindowMessage) -> Task<WindowMessage>;
54
55    fn view(&'_ self) -> Element<'_, WindowMessage>;
56
57    fn title(&'_ self) -> String;
58
59    fn set_window_id(&mut self, window_id: window::Id);
60
61    fn window_settings() -> window::Settings
62    where
63        Self: Sized,
64    {
65        app_default_window_settings()
66    }
67}