mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
add from! macro
This commit is contained in:
parent
d806014df2
commit
77ea2a9b02
2 changed files with 26 additions and 12 deletions
|
|
@ -10,3 +10,13 @@ pub use self::{
|
||||||
input::Handle,
|
input::Handle,
|
||||||
output::Render
|
output::Render
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Prototypal case of implementor macro.
|
||||||
|
/// Saves 4loc per data pats.
|
||||||
|
#[macro_export] macro_rules! from {
|
||||||
|
(|$self:ident: $Source:ty| $Target:ty = $cb:expr) => {
|
||||||
|
impl From<$Source> for $Target {
|
||||||
|
fn from (state: $Source) -> Self { $cb }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,17 +5,11 @@ pub struct ArrangerVColSep {
|
||||||
scenes_w: u16,
|
scenes_w: u16,
|
||||||
sep_fg: Color,
|
sep_fg: Color,
|
||||||
}
|
}
|
||||||
|
from!(|source:&ArrangerTui|ArrangerVColSep = Self {
|
||||||
impl From<&ArrangerTui> for ArrangerVColSep {
|
cols: track_widths(state.tracks()),
|
||||||
fn from (state: &ArrangerTui) -> Self {
|
scenes_w: 3 + ArrangerScene::longest_name(state.scenes()) as u16,
|
||||||
Self {
|
sep_fg: TuiTheme::separator_fg(false),
|
||||||
cols: track_widths(state.tracks()),
|
});
|
||||||
scenes_w: 3 + ArrangerScene::longest_name(state.scenes()) as u16,
|
|
||||||
sep_fg: TuiTheme::separator_fg(false),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
render!(<Tui>|self: ArrangerVColSep|render(move|to: &mut TuiOutput|{
|
render!(<Tui>|self: ArrangerVColSep|render(move|to: &mut TuiOutput|{
|
||||||
let style = Some(Style::default().fg(self.sep_fg));
|
let style = Some(Style::default().fg(self.sep_fg));
|
||||||
Ok(for x in self.cols.iter().map(|col|col.1) {
|
Ok(for x in self.cols.iter().map(|col|col.1) {
|
||||||
|
|
@ -145,8 +139,18 @@ pub struct ArrangerVHead<'a> {
|
||||||
timebase: &'a Arc<Timebase>,
|
timebase: &'a Arc<Timebase>,
|
||||||
current: &'a Arc<Moment>,
|
current: &'a Arc<Moment>,
|
||||||
}
|
}
|
||||||
|
from!(<'a>|state: &'a ArrangerTui|ArrangerVHead<'a>, { // A
|
||||||
|
tracks: &state.tracks,
|
||||||
|
cols: track_widths(state.tracks()),
|
||||||
|
focused: true,
|
||||||
|
selected: state.selected,
|
||||||
|
scenes_w: 3 + ArrangerScene::longest_name(state.scenes()) as u16,
|
||||||
|
header_h: 3,
|
||||||
|
timebase: state.clock().timebase(),
|
||||||
|
current: &state.clock().playhead,
|
||||||
|
});
|
||||||
|
|
||||||
impl<'a> From<&'a ArrangerTui> for ArrangerVHead<'a> {
|
impl<'a> From<&'a ArrangerTui> for ArrangerVHead<'a> { // B
|
||||||
fn from (state: &'a ArrangerTui) -> Self {
|
fn from (state: &'a ArrangerTui) -> Self {
|
||||||
Self {
|
Self {
|
||||||
tracks: &state.tracks,
|
tracks: &state.tracks,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue