summaryrefslogtreecommitdiff
path: root/src/state/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/mod.rs')
-rw-r--r--src/state/mod.rs36
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(())
+ });
}
}