prehnite/app/window/editor_window/
mod.rs1use crate::app::window::{app_default_window_settings, Window, WindowMessage};
2use prehnite_core::db::acquire_book_or_alert;
3use iced::window::Settings;
4use iced::{window, Element, Size, Task};
5use prehnite_core::db::schema::Item;
6use prehnite_core::i18n::{i18n, i18n_w};
7
8#[derive(Clone, Debug)]
10pub enum EditorWindowMessage {
11 Close,
12 ChangeItem(Option<Item>),
13 ChangeItemFromId(i64),
14}
15
16#[derive(Debug)]
17pub struct EditorWindow {
18 window_id: Option<window::Id>,
19 current_item: Option<Item>,
20}
21
22impl EditorWindow {
23 fn update_impl(&mut self, message: EditorWindowMessage) -> Task<EditorWindowMessage> {
24 match message {
25 EditorWindowMessage::Close => window::close(self.window_id.unwrap()),
26 EditorWindowMessage::ChangeItem(v) => {
27 if v != None {
28 self.current_item = v;
29 Task::none()
30 } else {
31 Task::done(EditorWindowMessage::Close)
32 }
33 }
34 EditorWindowMessage::ChangeItemFromId(id) => Task::future(async move {
35 let mut conn = acquire_book_or_alert().await;
36 EditorWindowMessage::ChangeItem(
37 Item::from_id(&mut *conn, id).await.unwrap_or_default(),
38 )
39 }),
40 }
41 }
42
43 fn view_impl(&'_ self) -> Element<'_, EditorWindowMessage> {
44 i18n_w("wip").into()
45 }
46}
47
48impl Window for EditorWindow {
49 fn new() -> Self
50 where
51 Self: Sized,
52 {
53 EditorWindow {
54 window_id: None,
55 current_item: None,
56 }
57 }
58
59 fn update(&mut self, message: WindowMessage) -> Task<WindowMessage> {
60 if let WindowMessage::EditorWindowMessage(msg) = message {
61 self.update_impl(msg)
62 .map(WindowMessage::EditorWindowMessage)
63 } else {
64 Task::none()
65 }
66 }
67
68 fn view(&'_ self) -> Element<'_, WindowMessage> {
69 self.view_impl().map(WindowMessage::EditorWindowMessage)
70 }
71
72 fn title(&'_ self) -> String {
73 i18n("wip")
74 }
75
76 fn set_window_id(&mut self, window_id: window::Id) {
77 self.window_id = Some(window_id)
78 }
79
80 fn window_settings() -> Settings
81 where
82 Self: Sized,
83 {
84 Settings {
85 size: Size::new(400.0f32, 400.0f32),
86 resizable: true,
87 minimizable: false,
88 ..app_default_window_settings()
89 }
90 }
91}