Feat: cleanup

This commit is contained in:
2026-02-22 13:28:03 +01:00
parent 3093b40dbc
commit 3d552ec072
26 changed files with 213 additions and 181 deletions

View File

@@ -15,14 +15,16 @@ impl App {
}
pub fn paste_pattern(&mut self, bank: usize, pattern: usize) {
if let Some(src) = self.copied_patterns.as_ref().and_then(|v| v.first()) {
let src = src.clone();
clipboard::paste_pattern(&mut self.project_state.project, bank, pattern, &src);
self.project_state.mark_dirty(bank, pattern);
if self.editor_ctx.bank == bank && self.editor_ctx.pattern == pattern {
self.load_step_to_editor();
if let Some(patterns) = self.copied_patterns.take() {
if let Some(src) = patterns.first() {
clipboard::paste_pattern(&mut self.project_state.project, bank, pattern, src);
self.project_state.mark_dirty(bank, pattern);
if self.editor_ctx.bank == bank && self.editor_ctx.pattern == pattern {
self.load_step_to_editor();
}
self.ui.flash("Pattern pasted", 150, FlashKind::Success);
}
self.ui.flash("Pattern pasted", 150, FlashKind::Success);
self.copied_patterns = Some(patterns);
}
}
@@ -41,13 +43,14 @@ impl App {
}
pub fn paste_patterns(&mut self, bank: usize, start: usize) {
if let Some(sources) = self.copied_patterns.clone() {
if let Some(sources) = self.copied_patterns.take() {
let count = clipboard::paste_patterns(
&mut self.project_state.project,
bank,
start,
&sources,
);
self.copied_patterns = Some(sources);
for i in 0..count {
self.project_state.mark_dirty(bank, start + i);
}
@@ -111,17 +114,19 @@ impl App {
}
pub fn paste_bank(&mut self, bank: usize) {
if let Some(src) = self.copied_banks.as_ref().and_then(|v| v.first()) {
let src = src.clone();
let pat_count =
clipboard::paste_bank(&mut self.project_state.project, bank, &src);
for pattern in 0..pat_count {
self.project_state.mark_dirty(bank, pattern);
if let Some(banks) = self.copied_banks.take() {
if let Some(src) = banks.first() {
let pat_count =
clipboard::paste_bank(&mut self.project_state.project, bank, src);
for pattern in 0..pat_count {
self.project_state.mark_dirty(bank, pattern);
}
if self.editor_ctx.bank == bank {
self.load_step_to_editor();
}
self.ui.flash("Bank pasted", 150, FlashKind::Success);
}
if self.editor_ctx.bank == bank {
self.load_step_to_editor();
}
self.ui.flash("Bank pasted", 150, FlashKind::Success);
self.copied_banks = Some(banks);
}
}
@@ -139,12 +144,13 @@ impl App {
}
pub fn paste_banks(&mut self, start: usize) {
if let Some(sources) = self.copied_banks.clone() {
if let Some(sources) = self.copied_banks.take() {
let count = clipboard::paste_banks(
&mut self.project_state.project,
start,
&sources,
);
self.copied_banks = Some(sources);
for i in 0..count {
let bank = start + i;
for pattern in 0..model::MAX_PATTERNS {
@@ -184,23 +190,24 @@ impl App {
pub fn copy_steps(&mut self) {
let (bank, pattern) = self.current_bank_pattern();
let indices = self.selected_steps();
let (copied, scripts) = clipboard::copy_steps(
let copied = clipboard::copy_steps(
&self.project_state.project,
bank,
pattern,
&indices,
);
let count = copied.steps.len();
self.editor_ctx.copied_steps = Some(copied);
if let Some(clip) = &mut self.clipboard {
let _ = clip.set_text(scripts.join("\n"));
let text: String = copied.steps.iter().map(|s| s.script.as_str()).collect::<Vec<_>>().join("\n");
let _ = clip.set_text(text);
}
self.editor_ctx.copied_steps = Some(copied);
self.ui
.flash(&format!("Copied {count} steps"), 150, FlashKind::Info);
}
pub fn paste_steps(&mut self, link: &crate::engine::LinkState) {
let Some(copied) = self.editor_ctx.copied_steps.clone() else {
let Some(copied) = self.editor_ctx.copied_steps.take() else {
self.ui.set_status("Nothing copied".to_string());
return;
};
@@ -213,6 +220,7 @@ impl App {
cursor,
&copied,
);
self.editor_ctx.copied_steps = Some(copied);
self.project_state.mark_dirty(bank, pattern);
self.load_step_to_editor();
for &target in &result.compile_targets {
@@ -230,19 +238,21 @@ impl App {
}
pub fn link_paste_steps(&mut self) {
let Some(copied) = self.editor_ctx.copied_steps.clone() else {
let Some(copied) = self.editor_ctx.copied_steps.take() else {
self.ui.set_status("Nothing copied".to_string());
return;
};
let (bank, pattern) = self.current_bank_pattern();
let cursor = self.editor_ctx.step;
match clipboard::link_paste_steps(
let result = clipboard::link_paste_steps(
&mut self.project_state.project,
bank,
pattern,
cursor,
&copied,
) {
);
self.editor_ctx.copied_steps = Some(copied);
match result {
None => {
self.ui
.set_status("Can only link within same pattern".to_string());