mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-09 05:06:43 +01:00
FocusCommand, Command::translate, ret old from TimeUnit::set
This commit is contained in:
parent
2b78339e61
commit
fe25da4f53
9 changed files with 249 additions and 261 deletions
|
|
@ -1,5 +1,5 @@
|
|||
use crate::*;
|
||||
#[derive(Clone, PartialEq)]
|
||||
#[derive(Copy, Clone, PartialEq)]
|
||||
pub enum TransportCommand {
|
||||
FocusNext,
|
||||
FocusPrev,
|
||||
|
|
@ -19,130 +19,84 @@ pub enum TransportCommand {
|
|||
SetSync(f64),
|
||||
}
|
||||
impl<E: Engine> Command<TransportToolbar<E>> for TransportCommand {
|
||||
fn run (&self, state: &mut TransportToolbar<E>) -> Perhaps<Self> {
|
||||
fn translate (self, state: &TransportToolbar<E>) -> Self {
|
||||
use TransportCommand::*;
|
||||
use TransportToolbarFocus::*;
|
||||
match self {
|
||||
Self::FocusNext => {
|
||||
state.focus.next();
|
||||
Increment => match state.focus {
|
||||
Bpm =>
|
||||
{return SetBpm(state.clock.timebase().bpm.get() + 1.0) },
|
||||
Quant =>
|
||||
{return SetQuant(next_note_length(state.clock.quant.get()as usize)as f64)},
|
||||
Sync =>
|
||||
{return SetSync(next_note_length(state.clock.sync.get()as usize)as f64+1.)},
|
||||
PlayPause =>
|
||||
{/*todo seek*/},
|
||||
Clock =>
|
||||
{/*todo seek*/},
|
||||
},
|
||||
Self::FocusPrev => {
|
||||
state.focus.prev();
|
||||
FineIncrement => match state.focus {
|
||||
Bpm =>
|
||||
{return SetBpm(state.clock.timebase().bpm.get() + 0.001)},
|
||||
Quant =>
|
||||
{return Increment},
|
||||
Sync =>
|
||||
{return Increment},
|
||||
PlayPause =>
|
||||
{/*todo seek*/},
|
||||
Clock =>
|
||||
{/*todo seek*/},
|
||||
},
|
||||
Self::PlayToggle => {
|
||||
state.toggle_play()?;
|
||||
Decrement => match state.focus {
|
||||
Bpm =>
|
||||
{return SetBpm(state.clock.timebase().bpm.get() - 1.0)},
|
||||
Quant =>
|
||||
{return SetQuant(prev_note_length(state.clock.quant.get()as usize)as f64)},
|
||||
Sync =>
|
||||
{return SetSync(prev_note_length(state.clock.sync.get()as usize)as f64)},
|
||||
PlayPause =>
|
||||
{/*todo seek*/},
|
||||
Clock =>
|
||||
{/*todo seek*/},
|
||||
},
|
||||
Self::Increment => {
|
||||
match state.focus {
|
||||
TransportToolbarFocus::Bpm => {
|
||||
let bpm = state.clock.timebase().bpm.get();
|
||||
return Self::SetBpm(bpm + 1.0).run(state)
|
||||
},
|
||||
TransportToolbarFocus::Quant => {
|
||||
let quant = state.clock.quant.get() as usize;
|
||||
let quant = next_note_length(quant) as f64;
|
||||
return Self::SetQuant(quant).run(state)
|
||||
},
|
||||
TransportToolbarFocus::Sync => {
|
||||
let sync = state.clock.sync.get() as usize;
|
||||
let sync = next_note_length(sync) as f64;
|
||||
return Self::SetSync(sync + 1.0).run(state)
|
||||
},
|
||||
TransportToolbarFocus::PlayPause => {
|
||||
/*todo seek*/
|
||||
},
|
||||
TransportToolbarFocus::Clock => {
|
||||
/*todo seek*/
|
||||
},
|
||||
}
|
||||
FineDecrement => match state.focus {
|
||||
Bpm =>
|
||||
{return SetBpm(state.clock.timebase().bpm.get() - 0.001)},
|
||||
Quant =>
|
||||
{return Decrement},
|
||||
Sync =>
|
||||
{return Decrement},
|
||||
PlayPause =>
|
||||
{/*todo seek*/},
|
||||
Clock =>
|
||||
{/*todo seek*/},
|
||||
},
|
||||
Self::FineIncrement => {
|
||||
match state.focus {
|
||||
TransportToolbarFocus::Bpm => {
|
||||
let bpm = state.clock.timebase().bpm.get();
|
||||
return Self::SetBpm(bpm + 0.001).run(state)
|
||||
},
|
||||
TransportToolbarFocus::Quant => {
|
||||
return Self::Increment.run(state)
|
||||
},
|
||||
TransportToolbarFocus::Sync => {
|
||||
return Self::Increment.run(state)
|
||||
},
|
||||
TransportToolbarFocus::PlayPause => {
|
||||
/*todo seek*/
|
||||
},
|
||||
TransportToolbarFocus::Clock => {
|
||||
/*todo seek*/
|
||||
},
|
||||
}
|
||||
},
|
||||
Self::Decrement => {
|
||||
match state.focus {
|
||||
TransportToolbarFocus::Bpm => {
|
||||
let bpm = state.clock.timebase().bpm.get();
|
||||
return Self::SetBpm(bpm - 1.0).run(state)
|
||||
},
|
||||
TransportToolbarFocus::Quant => {
|
||||
let quant = state.clock.quant.get() as usize;
|
||||
let quant = prev_note_length(quant) as f64;
|
||||
return Self::SetQuant(quant).run(state)
|
||||
},
|
||||
TransportToolbarFocus::Sync => {
|
||||
let sync = state.clock.sync.get() as usize;
|
||||
let sync = prev_note_length(sync) as f64;
|
||||
return Self::SetSync(sync).run(state)
|
||||
},
|
||||
TransportToolbarFocus::PlayPause => {
|
||||
/*todo seek*/
|
||||
},
|
||||
TransportToolbarFocus::Clock => {
|
||||
/*todo seek*/
|
||||
},
|
||||
}
|
||||
},
|
||||
Self::FineDecrement => {
|
||||
match state.focus {
|
||||
TransportToolbarFocus::Bpm => {
|
||||
let bpm = state.clock.timebase().bpm.get();
|
||||
return Self::SetBpm(bpm - 0.001).run(state)
|
||||
},
|
||||
TransportToolbarFocus::Quant => {
|
||||
return Self::Decrement.run(state)
|
||||
},
|
||||
TransportToolbarFocus::Sync => {
|
||||
return Self::Decrement.run(state)
|
||||
},
|
||||
TransportToolbarFocus::PlayPause => {
|
||||
/*todo seek*/
|
||||
},
|
||||
TransportToolbarFocus::Clock => {
|
||||
/*todo seek*/
|
||||
},
|
||||
}
|
||||
},
|
||||
Self::SeekUsec(usec) => {
|
||||
state.clock.current.update_from_usec(*usec);
|
||||
},
|
||||
Self::SeekSample(sample) => {
|
||||
state.clock.current.update_from_sample(*sample);
|
||||
},
|
||||
Self::SeekPulse(pulse) => {
|
||||
state.clock.current.update_from_pulse(*pulse);
|
||||
},
|
||||
Self::SetBpm(bpm) => {
|
||||
let old_bpm = state.clock.timebase().bpm.get();
|
||||
state.clock.timebase().bpm.set(*bpm);
|
||||
return Ok(Some(Self::SetBpm(old_bpm)))
|
||||
},
|
||||
Self::SetQuant(quant) => {
|
||||
let old_quant = state.clock.quant.get();
|
||||
state.clock.quant.set(*quant);
|
||||
return Ok(Some(Self::SetQuant(old_quant)))
|
||||
},
|
||||
Self::SetSync(sync) => {
|
||||
let old_sync = state.clock.sync.get();
|
||||
state.clock.sync.set(*sync);
|
||||
return Ok(Some(Self::SetSync(old_sync)))
|
||||
},
|
||||
_ => { unimplemented!() }
|
||||
_ => {}
|
||||
};
|
||||
return self
|
||||
}
|
||||
fn execute (self, state: &mut TransportToolbar<E>) -> Perhaps<Self> {
|
||||
use TransportCommand::*;
|
||||
match self.translate(&state) {
|
||||
FocusNext =>
|
||||
{ state.focus.next(); },
|
||||
FocusPrev =>
|
||||
{ state.focus.prev(); },
|
||||
PlayToggle =>
|
||||
{ state.toggle_play()?; },
|
||||
SeekUsec(usec) =>
|
||||
{ state.clock.current.update_from_usec(usec); },
|
||||
SeekSample(sample) =>
|
||||
{ state.clock.current.update_from_sample(sample); },
|
||||
SeekPulse(pulse) =>
|
||||
{ state.clock.current.update_from_pulse(pulse); },
|
||||
SetBpm(bpm) =>
|
||||
{ return Ok(Some(Self::SetBpm(state.clock.timebase().bpm.set(bpm)))) },
|
||||
SetQuant(quant) =>
|
||||
{ return Ok(Some(Self::SetQuant(state.clock.quant.set(quant)))) },
|
||||
SetSync(sync) =>
|
||||
{ return Ok(Some(Self::SetSync(state.clock.sync.set(sync)))) },
|
||||
_ => { unreachable!() }
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue