mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +01:00
edit toggle; reallow add/duplicate phrase
This commit is contained in:
parent
14fac03f5d
commit
d0d187b5b6
2 changed files with 19 additions and 6 deletions
|
|
@ -280,7 +280,17 @@ pub fn to_sequencer_command (state: &SequencerTui, input: &TuiInput) -> Option<S
|
||||||
})),
|
})),
|
||||||
|
|
||||||
// E: Toggle between editing currently playing or other phrase
|
// E: Toggle between editing currently playing or other phrase
|
||||||
//key!(Char('e')) => {}
|
key!(Char('e')) => if let Some((_, Some(playing_phrase))) = state.player.play_phrase() {
|
||||||
|
let editing_phrase = state.editor.phrase.as_ref().map(|p|p.read().unwrap().clone());
|
||||||
|
let selected_phrase = state.phrases.phrase().clone();
|
||||||
|
if Some(selected_phrase.read().unwrap().clone()) != editing_phrase {
|
||||||
|
Editor(Show(Some(selected_phrase)))
|
||||||
|
} else {
|
||||||
|
Editor(Show(Some(playing_phrase.clone())))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return None
|
||||||
|
},
|
||||||
|
|
||||||
// Transport: Play/pause
|
// Transport: Play/pause
|
||||||
key!(Char(' ')) =>
|
key!(Char(' ')) =>
|
||||||
|
|
@ -295,7 +305,7 @@ pub fn to_sequencer_command (state: &SequencerTui, input: &TuiInput) -> Option<S
|
||||||
Editor(PhraseCommand::input_to_command(&state.editor, input)?),
|
Editor(PhraseCommand::input_to_command(&state.editor, input)?),
|
||||||
|
|
||||||
// List: select phrase to edit, change color
|
// List: select phrase to edit, change color
|
||||||
key!(Char('[')) | key!(Char(']')) | key!(Char('c')) =>
|
key!(Char('[')) | key!(Char(']')) | key!(Char('c')) | key!(Shift-Char('A')) | key!(Shift-Char('D')) =>
|
||||||
Phrases(PhrasesCommand::input_to_command(&state.phrases, input)?),
|
Phrases(PhrasesCommand::input_to_command(&state.phrases, input)?),
|
||||||
|
|
||||||
// Enqueue currently edited phrase
|
// Enqueue currently edited phrase
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,9 @@ impl Default for PhraseListModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PhraseListModel {
|
impl PhraseListModel {
|
||||||
|
pub(crate) fn phrase (&self) -> &Arc<RwLock<Phrase>> {
|
||||||
|
&self.phrases[self.phrase_index()]
|
||||||
|
}
|
||||||
pub(crate) fn phrase_index (&self) -> usize {
|
pub(crate) fn phrase_index (&self) -> usize {
|
||||||
self.phrase.load(Ordering::Relaxed)
|
self.phrase.load(Ordering::Relaxed)
|
||||||
}
|
}
|
||||||
|
|
@ -250,10 +253,10 @@ fn to_phrases_command (state: &PhraseListModel, input: &TuiInput) -> Option<Phra
|
||||||
key!(Char('m')) => Cmd::Import(Browse::Begin),
|
key!(Char('m')) => Cmd::Import(Browse::Begin),
|
||||||
key!(Char('x')) => Cmd::Export(Browse::Begin),
|
key!(Char('x')) => Cmd::Export(Browse::Begin),
|
||||||
key!(Char('c')) => Cmd::Phrase(Pool::SetColor(index, ItemColor::random())),
|
key!(Char('c')) => Cmd::Phrase(Pool::SetColor(index, ItemColor::random())),
|
||||||
key!(Up) => Cmd::Select(
|
key!(Up) | key!(Char('[')) => Cmd::Select(
|
||||||
index.overflowing_sub(1).0.min(state.phrases().len() - 1)
|
index.overflowing_sub(1).0.min(state.phrases().len() - 1)
|
||||||
),
|
),
|
||||||
key!(Down) => Cmd::Select(
|
key!(Down) | key!(Char(']')) => Cmd::Select(
|
||||||
index.saturating_add(1) % state.phrases().len()
|
index.saturating_add(1) % state.phrases().len()
|
||||||
),
|
),
|
||||||
key!(Char('<')) => if index > 1 {
|
key!(Char('<')) => if index > 1 {
|
||||||
|
|
@ -274,13 +277,13 @@ fn to_phrases_command (state: &PhraseListModel, input: &TuiInput) -> Option<Phra
|
||||||
} else {
|
} else {
|
||||||
return None
|
return None
|
||||||
},
|
},
|
||||||
key!(Char('a')) => Cmd::Phrase(Pool::Add(count, Phrase::new(
|
key!(Char('a')) | key!(Shift-Char('A')) => Cmd::Phrase(Pool::Add(count, Phrase::new(
|
||||||
String::from("(new)"), true, 4 * PPQ, None, Some(ItemPalette::random())
|
String::from("(new)"), true, 4 * PPQ, None, Some(ItemPalette::random())
|
||||||
))),
|
))),
|
||||||
key!(Char('i')) => Cmd::Phrase(Pool::Add(index + 1, Phrase::new(
|
key!(Char('i')) => Cmd::Phrase(Pool::Add(index + 1, Phrase::new(
|
||||||
String::from("(new)"), true, 4 * PPQ, None, Some(ItemPalette::random())
|
String::from("(new)"), true, 4 * PPQ, None, Some(ItemPalette::random())
|
||||||
))),
|
))),
|
||||||
key!(Char('d')) => {
|
key!(Char('d')) | key!(Shift-Char('D')) => {
|
||||||
let mut phrase = state.phrases()[index].read().unwrap().duplicate();
|
let mut phrase = state.phrases()[index].read().unwrap().duplicate();
|
||||||
phrase.color = ItemPalette::random_near(phrase.color, 0.25);
|
phrase.color = ItemPalette::random_near(phrase.color, 0.25);
|
||||||
Cmd::Phrase(Pool::Add(index + 1, phrase))
|
Cmd::Phrase(Pool::Add(index + 1, phrase))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue