mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 04:06:45 +01:00
wip: refactor pt.18: 25 errors
This commit is contained in:
parent
c2b290b3c5
commit
2be2c8aca2
4 changed files with 38 additions and 42 deletions
|
|
@ -98,6 +98,7 @@ impl Content for ArrangerView<Tui> {
|
|||
|
||||
/// General methods for arranger
|
||||
impl<E: Engine> ArrangerView<E> {
|
||||
|
||||
pub fn new (
|
||||
sequencer: SequencerView<E>,
|
||||
arrangement: ArrangementEditor<E>,
|
||||
|
|
@ -111,6 +112,7 @@ impl<E: Engine> ArrangerView<E> {
|
|||
pub fn toggle_play (&mut self) -> Usually<()> {
|
||||
self.sequencer.transport.model.toggle_play()
|
||||
}
|
||||
|
||||
pub fn next_color (&self) -> ItemColor {
|
||||
if let ArrangementEditorFocus::Clip(track, scene) = self.arrangement.selected {
|
||||
let track_color = self.arrangement.model.tracks[track].color;
|
||||
|
|
@ -120,10 +122,12 @@ impl<E: Engine> ArrangerView<E> {
|
|||
panic!("could not compute next color")
|
||||
}
|
||||
}
|
||||
|
||||
/// Focus the editor with the current phrase
|
||||
pub fn show_phrase (&mut self) {
|
||||
self.sequencer.editor.show(self.arrangement.phrase().as_ref());
|
||||
}
|
||||
|
||||
/// Focus the editor with the current phrase
|
||||
pub fn edit_phrase (&mut self) {
|
||||
if self.arrangement.selected.is_clip() && self.arrangement.phrase().is_none() {
|
||||
|
|
@ -134,24 +138,7 @@ impl<E: Engine> ArrangerView<E> {
|
|||
self.focus(ArrangerViewFocus::PhraseEditor);
|
||||
self.sequencer.editor.entered = true;
|
||||
}
|
||||
/// Rename the selected track, scene, or clip
|
||||
pub fn rename_selected (&mut self) {
|
||||
match self.arrangement.selected {
|
||||
ArrangementEditorFocus::Mix => {},
|
||||
ArrangementEditorFocus::Track(_) => { todo!("rename track"); },
|
||||
ArrangementEditorFocus::Scene(_) => { todo!("rename scene"); },
|
||||
ArrangementEditorFocus::Clip(t, s) => {
|
||||
if let Some(ref phrase) = self.arrangement.model.scenes[s].clips[t] {
|
||||
let index = self.sequencer.phrases.index_of(&*phrase.read().unwrap());
|
||||
if let Some(index) = index {
|
||||
self.focus(ArrangerViewFocus::PhrasePool);
|
||||
self.sequencer.phrases.phrase = index;
|
||||
self.sequencer.phrases.begin_rename();
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
pub fn activate (&mut self) {
|
||||
match self.arrangement.selected {
|
||||
ArrangementEditorFocus::Scene(s) => {
|
||||
|
|
@ -175,31 +162,36 @@ impl<E: Engine> ArrangerView<E> {
|
|||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn delete (&mut self) {
|
||||
match self.arrangement.selected {
|
||||
ArrangementEditorFocus::Track(_) => self.track_del(),
|
||||
ArrangementEditorFocus::Scene(_) => self.scene_del(),
|
||||
ArrangementEditorFocus::Clip(_, _) => self.phrase_del(),
|
||||
ArrangementEditorFocus::Track(_) => self.arrangement.track_del(),
|
||||
ArrangementEditorFocus::Scene(_) => self.arrangement.scene_del(),
|
||||
ArrangementEditorFocus::Clip(_, _) => self.arrangement.phrase_del(),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_first_row (&self) -> bool {
|
||||
let selected = self.selected;
|
||||
let selected = self.arrangement.selected;
|
||||
selected.is_mix() || selected.is_track()
|
||||
}
|
||||
|
||||
pub fn is_last_row (&self) -> bool {
|
||||
let selected = self.selected;
|
||||
(self.scenes.len() == 0 && (selected.is_mix() || selected.is_track())) || match selected {
|
||||
let selected = self.arrangement.selected;
|
||||
(self.arrangement.model.scenes.len() == 0 && (selected.is_mix() || selected.is_track())) || match selected {
|
||||
ArrangementEditorFocus::Scene(s) => s == self.arrangement.model.scenes.len() - 1,
|
||||
ArrangementEditorFocus::Clip(_, s) => s == self.arrangement.model.scenes.len() - 1,
|
||||
_ => false
|
||||
}
|
||||
}
|
||||
|
||||
pub fn toggle_loop (&mut self) {
|
||||
if let Some(phrase) = self.phrase() {
|
||||
if let Some(phrase) = self.arrangement.phrase() {
|
||||
phrase.write().unwrap().toggle_loop()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn randomize_color (&mut self) {
|
||||
match self.arrangement.selected {
|
||||
ArrangementEditorFocus::Mix => {
|
||||
|
|
@ -218,6 +210,7 @@ impl<E: Engine> ArrangerView<E> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// Arranger display mode can be cycled
|
||||
|
|
@ -308,7 +301,7 @@ impl<E: Engine> ArrangementEditor<E> {
|
|||
pub fn phrase_put (&mut self) {
|
||||
if let ArrangementEditorFocus::Clip(track, scene) = self.selected {
|
||||
self.model.scenes[scene].clips[track] = Some(
|
||||
self.model.phrases.phrase().clone()
|
||||
self.model.phrase().clone()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -328,8 +321,8 @@ impl<E: Engine> ArrangementEditor<E> {
|
|||
let phrases = self.model.phrases.read().unwrap();
|
||||
let index = phrases.index_of(&*phrase.read().unwrap());
|
||||
if let Some(index) = index {
|
||||
if index < phrases.phrases.len().saturating_sub(1) {
|
||||
*phrase = phrases.phrases[index + 1].clone();
|
||||
if index < phrases.len().saturating_sub(1) {
|
||||
*phrase = phrases[index + 1].clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -342,7 +335,7 @@ impl<E: Engine> ArrangementEditor<E> {
|
|||
let index = phrases.index_of(&*phrase.read().unwrap());
|
||||
if let Some(index) = index {
|
||||
if index > 0 {
|
||||
*phrase = phrases.phrases[index - 1].clone();
|
||||
*phrase = phrases[index - 1].clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue