mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +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
|
|
@ -50,7 +50,8 @@ where
|
|||
fn layout (&self) -> &[&[Self::Item]] {
|
||||
&[
|
||||
&[AppContainerFocus::Menu],
|
||||
&[AppContainerFocus::Content(())],
|
||||
FocusGrid::layout(&self.ui)
|
||||
//&[AppContainerFocus::Content(())],
|
||||
]
|
||||
}
|
||||
fn update_focus (&mut self) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,27 +16,29 @@ pub enum ArrangerViewFocus {
|
|||
/// Focus layout of arranger app
|
||||
impl<E: Engine> FocusGrid for ArrangerView<E> {
|
||||
type Item = ArrangerViewFocus;
|
||||
fn cursor (&self) -> (usize, usize) { self.focus_cursor }
|
||||
fn cursor_mut (&mut self) -> &mut (usize, usize) { &mut self.focus_cursor }
|
||||
fn cursor (&self) -> (usize, usize) {
|
||||
self.focus_cursor
|
||||
}
|
||||
fn cursor_mut (&mut self) -> &mut (usize, usize) {
|
||||
&mut self.focus_cursor
|
||||
}
|
||||
fn focus_enter (&mut self) {
|
||||
let focused = self.focused();
|
||||
if !self.entered {
|
||||
self.entered = true;
|
||||
use ArrangerViewFocus::*;
|
||||
if let Some(transport) = self.transport.as_ref() {
|
||||
//transport.write().unwrap().entered = focused == Transport
|
||||
}
|
||||
self.arrangement.entered = focused == Arrangement;
|
||||
self.phrases.write().unwrap().entered = focused == PhrasePool;
|
||||
self.editor.entered = focused == PhraseEditor;
|
||||
//self.sequencer.transport.entered = focused == Transport;
|
||||
self.sequencer.editor.entered = focused == PhraseEditor;
|
||||
self.sequencer.phrases.entered = focused == PhrasePool;
|
||||
}
|
||||
}
|
||||
fn focus_exit (&mut self) {
|
||||
if self.entered {
|
||||
self.entered = false;
|
||||
self.arrangement.entered = false;
|
||||
self.editor.entered = false;
|
||||
self.phrases.write().unwrap().entered = false;
|
||||
self.sequencer.editor.entered = false;
|
||||
self.sequencer.phrases.entered = false;
|
||||
}
|
||||
}
|
||||
fn entered (&self) -> Option<ArrangerViewFocus> {
|
||||
|
|
|
|||
|
|
@ -54,13 +54,13 @@ impl<E: Engine> Command<PhrasePoolView<E>> for PhrasePoolViewCommand {
|
|||
view.phrase = phrase
|
||||
},
|
||||
Self::Edit(command) => {
|
||||
return Ok(command.execute(&mut view.state)?.map(Self::Edit))
|
||||
return Ok(command.execute(&mut view.model)?.map(Self::Edit))
|
||||
}
|
||||
Self::Rename(command) => match command {
|
||||
Rename::Begin => {
|
||||
view.mode = Some(PhrasePoolMode::Rename(
|
||||
view.phrase,
|
||||
view.state.phrases[view.phrase].read().unwrap().name.clone()
|
||||
view.model.phrases[view.phrase].read().unwrap().name.clone()
|
||||
))
|
||||
},
|
||||
_ => {
|
||||
|
|
@ -71,7 +71,7 @@ impl<E: Engine> Command<PhrasePoolView<E>> for PhrasePoolViewCommand {
|
|||
Length::Begin => {
|
||||
view.mode = Some(PhrasePoolMode::Length(
|
||||
view.phrase,
|
||||
view.state.phrases[view.phrase].read().unwrap().length,
|
||||
view.model.phrases[view.phrase].read().unwrap().length,
|
||||
PhraseLengthFocus::Bar
|
||||
))
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue