diff options
Diffstat (limited to 'src/state/mod.rs')
| -rw-r--r-- | src/state/mod.rs | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/src/state/mod.rs b/src/state/mod.rs index 5efd770..5200da9 100644 --- a/src/state/mod.rs +++ b/src/state/mod.rs @@ -2,12 +2,19 @@ use std::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard}; use mlua::{UserData, UserDataFields}; +use self::log::LogState; -pub mod sheetview; +pub mod editor; +pub mod log; +pub mod view; +pub mod window; #[derive(Debug, Default)] pub struct GlobalState { - pub sheetview: sheetview::SheetViewState, + pub sheetview: view::SheetViewState, + pub editor: editor::EditorState, + pub active_window: window::Window, + pub log: log::LogState, } static GLOBAL_STATE: RwLock<GlobalState> = RwLock::new(GlobalState::new()); @@ -16,7 +23,10 @@ const DUMMY_STATE: GlobalState = GlobalState::new(); impl GlobalState { const fn new() -> Self { Self { - sheetview: sheetview::SheetViewState::new() + sheetview: view::SheetViewState::new(), + editor: editor::EditorState::new(), + log: LogState::new(), + active_window: window::Window::View, } } @@ -27,10 +37,28 @@ impl GlobalState { pub fn instance_mut() -> RwLockWriteGuard<'static, Self> { GLOBAL_STATE.write().unwrap() } + + pub fn set_focus(&mut self, win: window::Window) { + self.active_window = win; + + match win { + window::Window::Editor => self.editor.visible = true, + window::Window::Log => self.log.visible = true, + _ => {} + } + } } impl UserData for GlobalState { fn add_fields<'lua, F: UserDataFields<'lua, Self>>(fields: &mut F) { - fields.add_field_function_get("sheetview", |_, _| Ok(DUMMY_STATE.sheetview)) + fields.add_field_function_get("view", |_, _| Ok(DUMMY_STATE.sheetview)); + fields.add_field_function_get("editor", |_, _| Ok(DUMMY_STATE.editor)); + fields.add_field_function_get("active_window", |_, _| { + Ok(GlobalState::instance().active_window) + }); + fields.add_field_function_set("active_window", |_, _, win: window::Window| { + GlobalState::instance_mut().set_focus(win); + Ok(()) + }); } } |