mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 20:26:42 +01:00
wip: refactor pt.24: 45 errors
This commit is contained in:
parent
ff4698d046
commit
da074eb5fa
5 changed files with 120 additions and 199 deletions
|
|
@ -1,30 +1,16 @@
|
|||
use crate::*;
|
||||
|
||||
pub type TransportApp = AppContainer<
|
||||
Tui,
|
||||
Transport,
|
||||
TransportView<Tui>,
|
||||
TransportViewCommand,
|
||||
TransportAudio,
|
||||
TransportStatusBar
|
||||
>;
|
||||
pub type TransportApp<E: Engine> = AppView<E, TransportView<E>, TransportViewCommand>;
|
||||
|
||||
impl TryFrom<&Arc<RwLock<JackClient>>> for TransportApp {
|
||||
impl TryFrom<&Arc<RwLock<JackClient>>> for TransportApp<Tui> {
|
||||
type Error = Box<dyn std::error::Error>;
|
||||
fn try_from (jack: &Arc<RwLock<JackClient>>) -> Usually<Self> {
|
||||
let model = Arc::new(RwLock::new(TransportModel {
|
||||
metronome: false,
|
||||
transport: jack.read().unwrap().transport(),
|
||||
jack: jack.clone(),
|
||||
clock: Arc::new(Clock::from(Instant::default()))
|
||||
}));
|
||||
Ok(Self::new(
|
||||
&model,
|
||||
TransportView::from(&model),
|
||||
TransportAudio(model.clone()),
|
||||
None,
|
||||
None,
|
||||
))
|
||||
Ok(Self::new(TransportModel {
|
||||
metronome: false,
|
||||
transport: jack.read().unwrap().transport(),
|
||||
jack: jack.clone(),
|
||||
clock: Arc::new(Clock::from(Instant::default()))
|
||||
}.into(), None, None))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -38,42 +24,14 @@ pub struct TransportView<E: Engine> {
|
|||
pub size: Measure<E>,
|
||||
}
|
||||
|
||||
impl<E: Engine> From<&Arc<RwLock<Transport>>> for TransportView<E> {
|
||||
fn from (model: &Arc<RwLock<Transport>>) -> Self {
|
||||
impl<E: Engine> From<TransportModel> for TransportView<E> {
|
||||
fn from (model: TransportModel) -> Self {
|
||||
Self {
|
||||
_engine: Default::default(),
|
||||
focused: false,
|
||||
focus: TransportViewFocus::PlayPause,
|
||||
size: Measure::new(),
|
||||
model: model.clone()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<E: Engine> TransportView<E> {
|
||||
pub fn new (jack: &Arc<RwLock<JackClient>>, clock: Option<&Arc<Clock>>) -> Self {
|
||||
Self {
|
||||
_engine: Default::default(),
|
||||
focused: false,
|
||||
focus: TransportViewFocus::PlayPause,
|
||||
size: Measure::new(),
|
||||
model: Transport {
|
||||
metronome: false,
|
||||
transport: jack.read().unwrap().transport(),
|
||||
jack: jack.clone(),
|
||||
clock: if let Some(clock) = clock {
|
||||
clock.clone()
|
||||
} else {
|
||||
let current = Instant::default();
|
||||
Arc::new(Clock {
|
||||
playing: Some(TransportState::Stopped).into(),
|
||||
started: None.into(),
|
||||
quant: 24.into(),
|
||||
sync: (current.timebase.ppq.get() * 4.).into(),
|
||||
current,
|
||||
})
|
||||
}
|
||||
}
|
||||
model
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -84,7 +42,7 @@ impl Content for TransportView<Tui> {
|
|||
lay!(
|
||||
self.focus.wrap(self.focused, TransportViewFocus::PlayPause, &Styled(
|
||||
None,
|
||||
match *self.model.clock.playing.read().unwrap() {
|
||||
match *self.model.clock().playing.read().unwrap() {
|
||||
Some(TransportState::Rolling) => "▶ PLAYING",
|
||||
Some(TransportState::Starting) => "READY ...",
|
||||
Some(TransportState::Stopped) => "⏹ STOPPED",
|
||||
|
|
@ -94,23 +52,29 @@ impl Content for TransportView<Tui> {
|
|||
|
||||
row!(
|
||||
self.focus.wrap(self.focused, TransportViewFocus::Bpm, &Outset::X(1u16, {
|
||||
let bpm = self.model.clock.timebase().bpm.get();
|
||||
let bpm = self.model.clock().timebase().bpm.get();
|
||||
row! { "BPM ", format!("{}.{:03}", bpm as usize, (bpm * 1000.0) % 1000.0) }
|
||||
})),
|
||||
//let quant = self.focus.wrap(self.focused, TransportViewFocus::Quant, &Outset::X(1u16, row! {
|
||||
//"QUANT ", ppq_to_name(self.quant as usize)
|
||||
//})),
|
||||
self.focus.wrap(self.focused, TransportViewFocus::Sync, &Outset::X(1u16, row! {
|
||||
"SYNC ", pulses_to_name(self.model.clock.sync.get() as usize)
|
||||
"SYNC ", pulses_to_name(self.model.clock().sync.get() as usize)
|
||||
}))
|
||||
).align_w().fill_x(),
|
||||
|
||||
self.focus.wrap(self.focused, TransportViewFocus::Clock, &{
|
||||
let time1 = self.model.clock.current.format_beat();
|
||||
let time2 = self.model.clock.current.usec.format_msu();
|
||||
let time1 = self.model.clock().current.format_beat();
|
||||
let time2 = self.model.clock().current.usec.format_msu();
|
||||
row!("B" ,time1.as_str(), " T", time2.as_str()).outset_x(1)
|
||||
}).align_e().fill_x(),
|
||||
|
||||
).fill_x().bg(Color::Rgb(40, 50, 30))
|
||||
}
|
||||
}
|
||||
|
||||
impl Audio for TransportView<Tui> {
|
||||
fn process (&mut self, client: &Client, scope: &ProcessScope) -> Control {
|
||||
self.model.process(client, scope)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue