mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 12:46:42 +01:00
implement phrase rename
This commit is contained in:
parent
0c5967a915
commit
1bed8aa72f
2 changed files with 66 additions and 52 deletions
|
|
@ -34,7 +34,7 @@ pub struct PhrasePool<E: Engine> {
|
||||||
pub mode: Option<PhrasePoolMode>,
|
pub mode: Option<PhrasePoolMode>,
|
||||||
}
|
}
|
||||||
/// Modes for phrase pool
|
/// Modes for phrase pool
|
||||||
pub enum PhrasePoolMode { Rename(usize) }
|
pub enum PhrasePoolMode { Rename(usize, String) }
|
||||||
/// A MIDI sequence.
|
/// A MIDI sequence.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Phrase {
|
pub struct Phrase {
|
||||||
|
|
|
||||||
|
|
@ -47,26 +47,22 @@ impl Content for PhrasePool<Tui> {
|
||||||
let content = col!(
|
let content = col!(
|
||||||
(i, phrase) in self.phrases.iter().enumerate() => Layers::new(|add|{
|
(i, phrase) in self.phrases.iter().enumerate() => Layers::new(|add|{
|
||||||
let Phrase { ref name, color, .. } = *phrase.read().unwrap();
|
let Phrase { ref name, color, .. } = *phrase.read().unwrap();
|
||||||
add(&col!(
|
let row1 = format!(" {i}");
|
||||||
format!(" {i}"),
|
let row2 = if let Some(PhrasePoolMode::Rename(phrase, ref new_name)) = self.mode {
|
||||||
format!(" {}", name.read().unwrap()),
|
if self.focused && i == phrase {
|
||||||
).fill_x().bg(if i == self.phrase {
|
format!(" {new_name}▄")
|
||||||
|
} else {
|
||||||
|
format!(" {}", name.read().unwrap())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
format!(" {}", name.read().unwrap())
|
||||||
|
};
|
||||||
|
add(&col!(row1, row2).fill_x().bg(if i == self.phrase {
|
||||||
color //Color::Rgb(40, 50, 30)
|
color //Color::Rgb(40, 50, 30)
|
||||||
} else {
|
} else {
|
||||||
color //Color::Rgb(28, 35, 25)
|
color //Color::Rgb(28, 35, 25)
|
||||||
}))?;
|
}))?;
|
||||||
match self.mode {
|
if self.focused && i == self.phrase { add(&CORNERS)?; }
|
||||||
None => {
|
|
||||||
if self.focused && i == self.phrase { add(&CORNERS)?; }
|
|
||||||
},
|
|
||||||
Some(PhrasePoolMode::Rename(phrase)) => {
|
|
||||||
if self.focused && i == phrase {
|
|
||||||
add(&CORNERS)?;
|
|
||||||
add(&"Rename")?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
@ -88,43 +84,61 @@ impl Content for PhrasePool<Tui> {
|
||||||
}
|
}
|
||||||
impl Handle<Tui> for PhrasePool<Tui> {
|
impl Handle<Tui> for PhrasePool<Tui> {
|
||||||
fn handle (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
fn handle (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||||
match from.event() {
|
match self.mode {
|
||||||
key!(KeyCode::Up) => self.phrase = if self.phrase > 0 {
|
Some(PhrasePoolMode::Rename(phrase, ref mut new_name)) => match from.event() {
|
||||||
self.phrase - 1
|
key!(KeyCode::Backspace) => { new_name.pop(); },
|
||||||
} else {
|
key!(KeyCode::Char(c)) => { new_name.push(*c); },
|
||||||
self.phrases.len() - 1
|
key!(Shift-KeyCode::Char(c)) => { new_name.push(*c); },
|
||||||
|
key!(KeyCode::Esc) => { self.mode = None; },
|
||||||
|
key!(KeyCode::Enter) => {
|
||||||
|
*self.phrases[phrase].read().unwrap().name.write().unwrap() = new_name.clone();
|
||||||
|
self.mode = None;
|
||||||
|
},
|
||||||
|
_ => return Ok(None)
|
||||||
},
|
},
|
||||||
key!(KeyCode::Down) => {
|
None => match from.event() {
|
||||||
self.phrase = (self.phrase + 1) % self.phrases.len()
|
key!(KeyCode::Up) => self.phrase = if self.phrase > 0 {
|
||||||
},
|
self.phrase - 1
|
||||||
key!(KeyCode::Char('a')) => { // append new
|
} else {
|
||||||
let mut phrase = Phrase::default();
|
self.phrases.len() - 1
|
||||||
phrase.name = Arc::new(RwLock::new("(no name)".to_string()));
|
},
|
||||||
phrase.color = random_color();
|
key!(KeyCode::Down) => {
|
||||||
self.phrases.push(Arc::new(RwLock::new(phrase)));
|
self.phrase = (self.phrase + 1) % self.phrases.len()
|
||||||
self.phrase = self.phrases.len() - 1;
|
},
|
||||||
},
|
key!(KeyCode::Char('a')) => { // append new
|
||||||
key!(KeyCode::Char('i')) => { // insert new
|
let mut phrase = Phrase::default();
|
||||||
let mut phrase = Phrase::default();
|
phrase.name = Arc::new(RwLock::new("(no name)".to_string()));
|
||||||
phrase.name = Arc::new(RwLock::new("(no name)".to_string()));
|
phrase.color = random_color();
|
||||||
phrase.color = random_color();
|
self.phrases.push(Arc::new(RwLock::new(phrase)));
|
||||||
self.phrases.insert(self.phrase, Arc::new(RwLock::new(phrase)));
|
self.phrase = self.phrases.len() - 1;
|
||||||
self.phrase += 1;
|
},
|
||||||
},
|
key!(KeyCode::Char('i')) => { // insert new
|
||||||
key!(KeyCode::Char('d')) => { // insert duplicate
|
let mut phrase = Phrase::default();
|
||||||
let phrase = (*self.phrases[self.phrase].read().unwrap()).clone();
|
phrase.name = Arc::new(RwLock::new("(no name)".to_string()));
|
||||||
self.phrases.insert(self.phrase, Arc::new(RwLock::new(phrase)));
|
phrase.color = random_color();
|
||||||
self.phrase += 1;
|
self.phrases.insert(self.phrase, Arc::new(RwLock::new(phrase)));
|
||||||
},
|
self.phrase += 1;
|
||||||
key!(KeyCode::Char('c')) => { // change color
|
},
|
||||||
let mut phrase = self.phrases[self.phrase].write().unwrap();
|
key!(KeyCode::Char('d')) => { // insert duplicate
|
||||||
phrase.color = random_color();
|
let phrase = (*self.phrases[self.phrase].read().unwrap()).clone();
|
||||||
},
|
self.phrases.insert(self.phrase, Arc::new(RwLock::new(phrase)));
|
||||||
key!(KeyCode::Char('n')) => { // change name
|
self.phrase += 1;
|
||||||
self.mode = Some(PhrasePoolMode::Rename(self.phrase));
|
},
|
||||||
},
|
key!(KeyCode::Char('c')) => { // change color
|
||||||
_ => return Ok(None),
|
let mut phrase = self.phrases[self.phrase].write().unwrap();
|
||||||
|
phrase.color = random_color();
|
||||||
|
},
|
||||||
|
key!(KeyCode::Char('n')) => { // change name
|
||||||
|
let phrase = self.phrases[self.phrase].read().unwrap();
|
||||||
|
self.mode = Some(PhrasePoolMode::Rename(
|
||||||
|
self.phrase,
|
||||||
|
phrase.name.read().unwrap().clone()
|
||||||
|
));
|
||||||
|
},
|
||||||
|
_ => return Ok(None),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(Some(true))
|
return Ok(Some(true))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue