forked from 1b-agent/opencadstudio-upstream
Add persistent live OpenCADStudio control
This commit is contained in:
1 parent
9d991d7feb
commit
28cc473062
22 files changed
+1764
-95
No files matched your search
@@ -537,13 +537,14 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
|
||||
if toks.len() > 1 && !wants_spaces {
|
||||
self.command_line.input.clear();
|
||||
if self.tabs[i].active_cmd.is_some() {
|
||||
let mut tasks = Vec::new();
|
||||
for tok in &toks {
|
||||
if self.tabs[i].active_cmd.is_none() {
|
||||
break;
|
||||
}
|
||||
self.feed_active_cmd(tok);
|
||||
tasks.push(self.feed_active_cmd(tok));
|
||||
}
|
||||
return Task::none();
|
||||
return Task::batch(tasks);
|
||||
}
|
||||
return self.run_command_line(&raw);
|
||||
}
|
||||
|
||||
+16
-2
@@ -261,6 +261,7 @@ impl OpenCADStudio {
|
||||
}
|
||||
|
||||
pub fn update(&mut self, msg: Message) -> Task<Message> {
|
||||
self.control_observe_user_message(&msg);
|
||||
let perf_started = crate::perf::enabled().then(Instant::now);
|
||||
let perf_label = perf_message_label(&msg);
|
||||
// A modal dialog must capture the keyboard the same way it already
|
||||
@@ -335,6 +336,7 @@ impl OpenCADStudio {
|
||||
if self.tabs[i].active_cmd.is_none() {
|
||||
self.block_palette.placing = None;
|
||||
}
|
||||
self.control_settle();
|
||||
task
|
||||
}
|
||||
|
||||
@@ -350,6 +352,19 @@ impl OpenCADStudio {
|
||||
|
||||
fn update_inner(&mut self, msg: Message) -> Task<Message> {
|
||||
match msg {
|
||||
Message::ControlRequest(envelope) => {
|
||||
let (response, task) = self.control_request(envelope.request);
|
||||
envelope.reply.send(response);
|
||||
task
|
||||
}
|
||||
#[cfg(target_arch="wasm32")]
|
||||
Message::PollWebControl => if let Some(request)=super::control::web_request(){self.update(Message::ControlRequest(request))}else{Task::none()},
|
||||
#[cfg(not(target_arch="wasm32"))]
|
||||
Message::PollWebControl => Task::none(),
|
||||
Message::ControlStep(id, message) => self.control_step(id, *message),
|
||||
Message::ControlTaskDone(id) => { self.control_task_done(&id); Task::none() }
|
||||
Message::ControlScreenshot(path, screenshot) => { self.control_screenshot(path, screenshot); Task::none() }
|
||||
Message::ControlToggle => { self.control.enabled = !self.control.enabled; Task::none() }
|
||||
// Drain plugin-to-host requests that arrived outside of a host call.
|
||||
// This runs on a periodic timer so long-lived plugin sessions such
|
||||
// as the Python REPL can mutate the document without requiring a
|
||||
@@ -1816,8 +1831,7 @@ impl OpenCADStudio {
|
||||
if kw.is_empty() {
|
||||
return self.feed_command(crate::command::StepInput::Enter);
|
||||
}
|
||||
self.feed_active_cmd(&kw);
|
||||
Task::none()
|
||||
self.feed_active_cmd(&kw)
|
||||
}
|
||||
|
||||
Message::CommandSubmit => self.on_command_submit(),
|
||||
|
||||
Reference in new issue
Block a user