From 53f786543d98b6115fba994eb969a3aaad8a43b2 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 21 Dec 2024 00:00:33 +0100 Subject: [PATCH] add Gettable, Mutable, InteriorMutable --- crates/tek/src/core.rs | 25 ++++++++++++ crates/tek/src/lib.rs | 26 +----------- crates/tek/src/tui/arranger_track.rs | 61 ++++++++++++++-------------- 3 files changed, 58 insertions(+), 54 deletions(-) diff --git a/crates/tek/src/core.rs b/crates/tek/src/core.rs index f8906185..0a469b98 100644 --- a/crates/tek/src/core.rs +++ b/crates/tek/src/core.rs @@ -1,3 +1,5 @@ +pub(crate) use std::error::Error; + pub(crate) mod color; pub(crate) use color::*; pub(crate) mod command; pub(crate) use command::*; pub(crate) mod engine; pub(crate) use engine::*; @@ -20,3 +22,26 @@ pub use self::{ } }; } + +pub trait Gettable { + fn get (&self) -> T; +} + +pub trait Mutable: Gettable { + fn set (&mut self, value: T); +} + +pub trait InteriorMutable: Gettable { + fn set (&self, value: T); +} + +/// Standard result type. +pub type Usually = Result>; + +/// Standard optional result type. +pub type Perhaps = Result, Box>; + +/// Define test modules. +#[macro_export] macro_rules! testmod { + ($($name:ident)*) => { $(#[cfg(test)] mod $name;)* }; +} diff --git a/crates/tek/src/lib.rs b/crates/tek/src/lib.rs index 4cf3080e..ff4ffc18 100644 --- a/crates/tek/src/lib.rs +++ b/crates/tek/src/lib.rs @@ -8,29 +8,6 @@ pub mod midi; pub(crate) use self::midi::*; pub mod audio; pub(crate) use self::audio::*; //pub mod plugin; pub(crate) use self::plugin::*; -/// Standard result type. -pub type Usually = Result>; - -/// Standard optional result type. -pub type Perhaps = Result, Box>; - -/// Define and reexport submodules. -#[macro_export] macro_rules! submod { - ($($name:ident)*) => { $(mod $name; pub use self::$name::*;)* }; -} - -/// Define public modules. -#[macro_export] macro_rules! pubmod { - ($($name:ident)*) => { $(pub mod $name;)* }; -} - -/// Define test modules. -#[macro_export] macro_rules! testmod { - ($($name:ident)*) => { $(#[cfg(test)] mod $name;)* }; -} - -testmod! { test } - pub(crate) use clap::{self, Parser}; pub use ::better_panic; @@ -48,7 +25,6 @@ pub(crate) use std::path::PathBuf; pub(crate) use std::ffi::OsString; pub(crate) use std::time::Duration; pub(crate) use std::io::{Stdout, stdout}; -pub(crate) use std::error::Error; pub(crate) use std::ops::{Add, Sub, Mul, Div, Rem}; pub(crate) use std::cmp::{Ord, Eq, PartialEq}; pub(crate) use std::fmt::{Debug, Display}; @@ -80,3 +56,5 @@ pub(crate) use ::palette::{ convert::*, okhsl::* }; + +testmod! { test } diff --git a/crates/tek/src/tui/arranger_track.rs b/crates/tek/src/tui/arranger_track.rs index 6d49f9e7..45e93081 100644 --- a/crates/tek/src/tui/arranger_track.rs +++ b/crates/tek/src/tui/arranger_track.rs @@ -1,6 +1,37 @@ use crate::*; use KeyCode::{Char, Delete}; +#[derive(Debug)] pub struct ArrangerTrack { + /// Name of track + pub(crate) name: Arc>, + /// Preferred width of track column + pub(crate) width: usize, + /// Identifying color of track + pub(crate) color: ItemPalette, + /// MIDI player state + pub(crate) player: PhrasePlayerModel, +} +has_clock!(|self:ArrangerTrack|self.player.clock()); +has_player!(|self:ArrangerTrack|self.player); +impl ArrangerTrackApi for ArrangerTrack { + /// Name of track + fn name (&self) -> &Arc> { + &self.name + } + /// Preferred width of track column + fn width (&self) -> usize { + self.width + } + /// Preferred width of track column + fn width_mut (&mut self) -> &mut usize { + &mut self.width + } + /// Identifying color of track + fn color (&self) -> ItemPalette { + self.color + } +} + pub trait HasTracks: Send + Sync { fn tracks (&self) -> &Vec; fn tracks_mut (&mut self) -> &mut Vec; @@ -134,33 +165,3 @@ impl ArrangerTracksApi for ArrangerTui { } } -#[derive(Debug)] pub struct ArrangerTrack { - /// Name of track - pub(crate) name: Arc>, - /// Preferred width of track column - pub(crate) width: usize, - /// Identifying color of track - pub(crate) color: ItemPalette, - /// MIDI player state - pub(crate) player: PhrasePlayerModel, -} -has_clock!(|self:ArrangerTrack|self.player.clock()); -has_player!(|self:ArrangerTrack|self.player); -impl ArrangerTrackApi for ArrangerTrack { - /// Name of track - fn name (&self) -> &Arc> { - &self.name - } - /// Preferred width of track column - fn width (&self) -> usize { - self.width - } - /// Preferred width of track column - fn width_mut (&mut self) -> &mut usize { - &mut self.width - } - /// Identifying color of track - fn color (&self) -> ItemPalette { - self.color - } -}