prehnite/app/window/
mod.rs1pub 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}