From 849d9b4c8a6e489cc454f3c2ac136fdf4ee44e27 Mon Sep 17 00:00:00 2001 From: Condorra Date: Fri, 11 Oct 2024 12:20:06 +1100 Subject: [PATCH] Add #command command + enable use from editor --- src/editor_view.rs | 16 +++++++++++++--- src/editor_view/editor_area.rs | 8 +++++++- src/editor_view/editor_nav.rs | 3 ++- src/lua_engine.rs | 35 ++++++++++++++++++++++++++++++---- 4 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/editor_view.rs b/src/editor_view.rs index c7bb396..4aae3dc 100644 --- a/src/editor_view.rs +++ b/src/editor_view.rs @@ -1,6 +1,9 @@ use std::{ops::Deref, rc::Rc}; -use crate::{FrameId, GlobalLayoutState, GlobalMemoCell, PanelDirection, SplitPanel}; +use crate::{ + command_handler::execute_queue, FrameId, GlobalLayoutState, GlobalMemoCell, PanelDirection, + SplitPanel, +}; use anyhow::Error; use create_script_dialog::CreateScriptDialog; use editor_area::EditorArea; @@ -59,10 +62,11 @@ pub fn try_run_script(script: &str, global_memo: &GlobalMemoCell) -> anyhow::Res Ok(()) } -fn run_script(script: &str, global_memo: &GlobalMemoCell, set_err: Rc) +fn run_script(script: &str, global_memo: &GlobalMemoCell, set_err: Rc, frame: &FrameId) where F: Fn(Option<&str>), { + global_memo.lua_engine.borrow_mut().set_current_frame(frame); match try_run_script(script, global_memo) { Ok(()) => { set_err(None); @@ -71,6 +75,7 @@ where set_err(Some(&format!("Script error: {}", e))); } } + execute_queue(global_memo); } fn select_file(script: &AttrValue, state: &UseStateHandle>) { @@ -115,7 +120,12 @@ where { move |ev: KeyboardEvent| { if ev.code() == "Enter" && ev.get_modifier_state("Control") { - run_script(&editor_state.open_file, &global_memo, set_err.clone()); + run_script( + &editor_state.open_file, + &global_memo, + set_err.clone(), + &frame, + ); ev.prevent_default(); } else if ev.code() == "Escape" || (ev.code() == "KeyX" && ev.get_modifier_state("Control")) { diff --git a/src/editor_view/editor_area.rs b/src/editor_view/editor_area.rs index a84e4e2..778dad9 100644 --- a/src/editor_view/editor_area.rs +++ b/src/editor_view/editor_area.rs @@ -238,9 +238,15 @@ pub(super) fn editor_area(props: &EditorViewDetailProps) -> Html { }); let global_memo_runkey = props.global_memo.clone(); + let frame_id = props.frame.clone(); let runkey_closure = use_memo((), |()| { Closure:: bool>::new(move |_ed_state| { - run_script(¤t_script, &global_memo_runkey, set_err.clone()); + run_script( + ¤t_script, + &global_memo_runkey, + set_err.clone(), + &frame_id, + ); true }) }); diff --git a/src/editor_view/editor_nav.rs b/src/editor_view/editor_nav.rs index 2aa9f5d..df14cb8 100644 --- a/src/editor_view/editor_nav.rs +++ b/src/editor_view/editor_nav.rs @@ -63,11 +63,12 @@ pub(super) fn editor_nav(props: &EditorViewDetailProps) -> Html { set_err_state.set(new_state.into()); }); let editor_state = props.editor_state.clone(); + let frame_for_runclick = frame.clone(); html! {