Wip
This commit is contained in:
@@ -109,24 +109,101 @@ impl App {
|
||||
self.load_step_to_editor();
|
||||
}
|
||||
|
||||
/// Evaluate the project prelude to seed variables and definitions.
|
||||
pub fn evaluate_prelude(&mut self, link: &LinkState) {
|
||||
let prelude = &self.project_state.project.prelude;
|
||||
/// Switch the editor to the current bank's prelude script.
|
||||
pub fn open_bank_prelude_editor(&mut self) {
|
||||
let bank = self.editor_ctx.bank;
|
||||
let prelude = &self.project_state.project.banks[bank].prelude;
|
||||
let lines: Vec<String> = if prelude.is_empty() {
|
||||
vec![String::new()]
|
||||
} else {
|
||||
prelude.lines().map(String::from).collect()
|
||||
};
|
||||
self.editor_ctx.editor.set_content(lines);
|
||||
self.editor_ctx.editor.set_candidates(Arc::clone(&COMPLETION_CANDIDATES));
|
||||
self.editor_ctx
|
||||
.editor
|
||||
.set_completion_enabled(self.ui.show_completion);
|
||||
let tree = SampleTree::from_paths(&self.audio.config.sample_paths);
|
||||
self.editor_ctx.editor.set_sample_folders(tree.all_folder_names());
|
||||
self.editor_ctx.target = EditorTarget::BankPrelude;
|
||||
self.ui.modal = Modal::Editor;
|
||||
}
|
||||
|
||||
pub fn save_bank_prelude(&mut self) {
|
||||
let bank = self.editor_ctx.bank;
|
||||
let text = self.editor_ctx.editor.content();
|
||||
self.project_state.project.banks[bank].prelude = text;
|
||||
}
|
||||
|
||||
pub fn close_bank_prelude_editor(&mut self) {
|
||||
self.editor_ctx.target = EditorTarget::Step;
|
||||
self.load_step_to_editor();
|
||||
}
|
||||
|
||||
/// Evaluate a single bank's prelude.
|
||||
pub fn evaluate_bank_prelude(&mut self, bank: usize, link: &LinkState) {
|
||||
let prelude = &self.project_state.project.banks[bank].prelude;
|
||||
if prelude.trim().is_empty() {
|
||||
return;
|
||||
}
|
||||
let ctx = self.create_step_context(0, link);
|
||||
match self.script_engine.evaluate(prelude, &ctx) {
|
||||
Ok(_) => {
|
||||
self.ui.flash("Prelude evaluated", 150, FlashKind::Info);
|
||||
}
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
self.ui
|
||||
.flash(&format!("Prelude error: {e}"), 300, FlashKind::Error);
|
||||
let fallback = format!("Bank {}", bank + 1);
|
||||
let bank_name = self.project_state.project.banks[bank]
|
||||
.name
|
||||
.as_deref()
|
||||
.unwrap_or(&fallback);
|
||||
self.ui.flash(
|
||||
&format!("{bank_name} prelude error: {e}"),
|
||||
300,
|
||||
FlashKind::Error,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Evaluate the project prelude and all bank preludes.
|
||||
pub fn evaluate_prelude(&mut self, link: &LinkState) {
|
||||
let project_prelude = &self.project_state.project.prelude;
|
||||
if !project_prelude.trim().is_empty() {
|
||||
let ctx = self.create_step_context(0, link);
|
||||
match self.script_engine.evaluate(project_prelude, &ctx) {
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
self.ui
|
||||
.flash(&format!("Project prelude error: {e}"), 300, FlashKind::Error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
for bank_idx in 0..self.project_state.project.banks.len() {
|
||||
let prelude = &self.project_state.project.banks[bank_idx].prelude;
|
||||
if prelude.trim().is_empty() {
|
||||
continue;
|
||||
}
|
||||
let ctx = self.create_step_context(0, link);
|
||||
match self.script_engine.evaluate(prelude, &ctx) {
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
let bank_name = self.project_state.project.banks[bank_idx]
|
||||
.name
|
||||
.as_deref()
|
||||
.map(String::from)
|
||||
.unwrap_or_else(|| format!("Bank {}", bank_idx + 1));
|
||||
self.ui.flash(
|
||||
&format!("{bank_name} prelude error: {e}"),
|
||||
300,
|
||||
FlashKind::Error,
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
self.ui.flash("Preludes evaluated", 150, FlashKind::Info);
|
||||
}
|
||||
|
||||
/// Evaluate a script and immediately send its audio commands.
|
||||
/// Returns collected `print` output, if any.
|
||||
pub fn execute_script_oneshot(
|
||||
|
||||
Reference in New Issue
Block a user