prehnite/app/window/editor_window/
mod.rs

1use 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// TODO: 実装
9#[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}