mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
wip(p65,e2)
This commit is contained in:
parent
fffd830e15
commit
e768790658
9 changed files with 226 additions and 299 deletions
|
|
@ -22,10 +22,30 @@ pub trait TransportViewState: ClockApi + Send + Sync {
|
|||
self.current().usec.format_msu()
|
||||
}
|
||||
}
|
||||
macro_rules! impl_transport_view_state {
|
||||
($Struct:ident :: $field:ident) => {
|
||||
impl TransportViewState for $Struct {
|
||||
fn transport_selected (&self) -> TransportFocus {
|
||||
self.$field.focus.inner()
|
||||
}
|
||||
fn transport_focused (&self) -> bool {
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
impl_transport_view_state!(TransportTui::state);
|
||||
impl_transport_view_state!(SequencerTui::transport);
|
||||
impl_transport_view_state!(ArrangerTui::transport);
|
||||
|
||||
pub trait ArrangerViewState {
|
||||
fn arranger_focused (&self) -> bool;
|
||||
}
|
||||
impl ArrangerViewState for ArrangerTui {
|
||||
fn arranger_focused (&self) -> bool {
|
||||
self.focused() == ArrangerFocus::Arranger
|
||||
}
|
||||
}
|
||||
|
||||
pub trait PhrasesViewState: Send + Sync {
|
||||
fn phrases_focused (&self) -> bool;
|
||||
|
|
@ -34,10 +54,34 @@ pub trait PhrasesViewState: Send + Sync {
|
|||
fn phrase_index (&self) -> usize;
|
||||
fn phrase_mode (&self) -> &Option<PhrasesMode>;
|
||||
}
|
||||
macro_rules! impl_phrases_view_state {
|
||||
($Struct:ident $(:: $field:ident)*) => {
|
||||
impl PhrasesViewState for $Struct {
|
||||
fn phrases_focused (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrases_entered (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_index (&self) -> usize {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_mode (&self) -> &Option<PhrasesMode> {
|
||||
&self$(.$field)*.mode
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
impl_phrases_view_state!(PhrasesModel);
|
||||
impl_phrases_view_state!(SequencerTui::phrases);
|
||||
impl_phrases_view_state!(ArrangerTui::phrases);
|
||||
|
||||
pub trait PhraseViewState: Send + Sync {
|
||||
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>>;
|
||||
fn phrase_focused (&self) -> bool;
|
||||
fn phrase_editing (&self) -> &Option<Arc<RwLock<Phrase>>>;
|
||||
fn phrase_editor_focused (&self) -> bool;
|
||||
fn phrase_editor_size (&self) -> &Measure<Tui>;
|
||||
fn phrase_editor_entered (&self) -> bool;
|
||||
fn keys (&self) -> &Buffer;
|
||||
|
|
@ -48,201 +92,48 @@ pub trait PhraseViewState: Send + Sync {
|
|||
fn now (&self) -> &Arc<Pulse>;
|
||||
fn size (&self) -> &Measure<Tui>;
|
||||
}
|
||||
|
||||
impl TransportViewState for TransportTui {
|
||||
fn transport_selected (&self) -> TransportFocus {
|
||||
self.state.focus
|
||||
}
|
||||
fn transport_focused (&self) -> bool {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
impl TransportViewState for SequencerTui {
|
||||
fn transport_selected (&self) -> TransportFocus {
|
||||
self.transport.focus
|
||||
}
|
||||
fn transport_focused (&self) -> bool {
|
||||
self.focused() == SequencerFocus::Transport
|
||||
}
|
||||
}
|
||||
|
||||
impl TransportViewState for ArrangerTui {
|
||||
fn transport_selected (&self) -> TransportFocus {
|
||||
self.transport.focus
|
||||
}
|
||||
fn transport_focused (&self) -> bool {
|
||||
self.focused() == ArrangerFocus::Transport
|
||||
}
|
||||
}
|
||||
|
||||
impl ArrangerViewState for ArrangerTui {
|
||||
fn arranger_focused (&self) -> bool {
|
||||
self.focused() == ArrangerFocus::Arranger
|
||||
}
|
||||
}
|
||||
|
||||
impl PhrasesViewState for PhrasesModel {
|
||||
fn phrases_focused (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrases_entered (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_index (&self) -> usize {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_mode (&self) -> &Option<PhrasesMode> {
|
||||
&self.mode
|
||||
}
|
||||
}
|
||||
|
||||
impl PhrasesViewState for SequencerTui {
|
||||
fn phrases_focused (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrases_entered (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_index (&self) -> usize {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_mode (&self) -> &Option<PhrasesMode> {
|
||||
&self.phrases.mode
|
||||
}
|
||||
}
|
||||
|
||||
impl PhrasesViewState for ArrangerTui {
|
||||
fn phrases_focused (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrases_entered (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_index (&self) -> usize {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_mode (&self) -> &Option<PhrasesMode> {
|
||||
&self.phrases.mode
|
||||
}
|
||||
}
|
||||
|
||||
impl PhraseViewState for PhraseEditorModel {
|
||||
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>> {
|
||||
&self.phrase
|
||||
}
|
||||
fn phrase_focused (&self) -> bool {
|
||||
self.focused
|
||||
}
|
||||
fn phrase_editor_size (&self) -> &Measure<Tui> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_editor_entered (&self) -> bool {
|
||||
self.entered
|
||||
}
|
||||
fn keys (&self) -> &Buffer {
|
||||
&self.keys
|
||||
}
|
||||
fn buffer (&self) -> &BigBuffer {
|
||||
&self.buffer
|
||||
}
|
||||
fn note_len (&self) -> usize {
|
||||
self.note_len
|
||||
}
|
||||
fn note_axis (&self) -> &RwLock<FixedAxis<usize>> {
|
||||
&self.note_axis
|
||||
}
|
||||
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
|
||||
&self.time_axis
|
||||
}
|
||||
fn now (&self) -> &Arc<Pulse> {
|
||||
&self.now
|
||||
}
|
||||
fn size (&self) -> &Measure<Tui> {
|
||||
&self.size
|
||||
}
|
||||
}
|
||||
|
||||
impl PhraseViewState for SequencerTui {
|
||||
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_focused (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_editor_size (&self) -> &Measure<Tui> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_editor_entered (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn keys (&self) -> &Buffer {
|
||||
todo!()
|
||||
}
|
||||
fn buffer (&self) -> &BigBuffer {
|
||||
todo!()
|
||||
}
|
||||
fn note_len (&self) -> usize {
|
||||
todo!()
|
||||
}
|
||||
fn note_axis (&self) -> &RwLock<FixedAxis<usize>> {
|
||||
todo!()
|
||||
}
|
||||
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
|
||||
todo!()
|
||||
}
|
||||
fn now (&self) -> &Arc<Pulse> {
|
||||
todo!()
|
||||
}
|
||||
fn size (&self) -> &Measure<Tui> {
|
||||
&self.size
|
||||
}
|
||||
}
|
||||
|
||||
impl PhraseViewState for ArrangerTui {
|
||||
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_focused (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_editor_size (&self) -> &Measure<Tui> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_editor_entered (&self) -> bool {
|
||||
todo!()
|
||||
}
|
||||
fn keys (&self) -> &Buffer {
|
||||
todo!()
|
||||
}
|
||||
fn buffer (&self) -> &BigBuffer {
|
||||
todo!()
|
||||
}
|
||||
fn note_len (&self) -> usize {
|
||||
todo!()
|
||||
}
|
||||
fn note_axis (&self) -> &RwLock<FixedAxis<usize>> {
|
||||
todo!()
|
||||
}
|
||||
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
|
||||
todo!()
|
||||
}
|
||||
fn now (&self) -> &Arc<Pulse> {
|
||||
todo!()
|
||||
}
|
||||
fn size (&self) -> &Measure<Tui> {
|
||||
&self.size
|
||||
macro_rules! impl_phrase_view_state {
|
||||
($Struct:ident $(:: $field:ident)*) => {
|
||||
impl PhraseViewState for $Struct {
|
||||
fn phrase_editing (&self) -> &Option<Arc<RwLock<Phrase>>> {
|
||||
&self$(.$field)*.phrase
|
||||
}
|
||||
fn phrase_editor_focused (&self) -> bool {
|
||||
self$(.$field)*.focus.is_focused()
|
||||
}
|
||||
fn phrase_editor_size (&self) -> &Measure<Tui> {
|
||||
todo!()
|
||||
}
|
||||
fn phrase_editor_entered (&self) -> bool {
|
||||
self$(.$field)*.focus.is_entered()
|
||||
}
|
||||
fn keys (&self) -> &Buffer {
|
||||
&self$(.$field)*.keys
|
||||
}
|
||||
fn buffer (&self) -> &BigBuffer {
|
||||
&self$(.$field)*.buffer
|
||||
}
|
||||
fn note_len (&self) -> usize {
|
||||
self$(.$field)*.note_len
|
||||
}
|
||||
fn note_axis (&self) -> &RwLock<FixedAxis<usize>> {
|
||||
&self$(.$field)*.note_axis
|
||||
}
|
||||
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
|
||||
&self$(.$field)*.time_axis
|
||||
}
|
||||
fn now (&self) -> &Arc<Pulse> {
|
||||
&self$(.$field)*.now
|
||||
}
|
||||
fn size (&self) -> &Measure<Tui> {
|
||||
&self$(.$field)*.size
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
impl_phrase_view_state!(PhraseEditorModel);
|
||||
impl_phrase_view_state!(SequencerTui::editor);
|
||||
impl_phrase_view_state!(ArrangerTui::editor);
|
||||
|
||||
fn track_widths (tracks: &[ArrangerTrack]) -> Vec<(usize, usize)> {
|
||||
let mut widths = vec![];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue