mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
pass size
This commit is contained in:
parent
0bd8df1e57
commit
5828214c6f
4 changed files with 58 additions and 57 deletions
|
|
@ -99,34 +99,33 @@ impl Audio for SequencerTui {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render!(|self: SequencerTui|{
|
render!(|self: SequencerTui|lay!([
|
||||||
//col_up!([
|
self.size,
|
||||||
//Tui::max_y(2, SequencerStatusBar::from(self)),
|
col!([
|
||||||
col!([
|
TransportView::from((self, if let SequencerFocus::Transport(_) = self.focus.inner() {
|
||||||
TransportView::from((self, if let SequencerFocus::Transport(_) = self.focus.inner() {
|
true
|
||||||
true
|
} else {
|
||||||
} else {
|
false
|
||||||
false
|
})),
|
||||||
})),
|
row!([
|
||||||
row!([
|
Tui::fixed_x(20, col!([
|
||||||
Tui::fixed_x(20, col!([
|
PhraseSelector::play_phrase(
|
||||||
PhraseSelector::play_phrase(
|
&self.player,
|
||||||
&self.player,
|
self.focused() == SequencerFocus::PhrasePlay,
|
||||||
self.focused() == SequencerFocus::PhrasePlay,
|
self.entered()
|
||||||
self.entered()
|
),
|
||||||
),
|
PhraseSelector::next_phrase(
|
||||||
PhraseSelector::next_phrase(
|
&self.player,
|
||||||
&self.player,
|
self.focused() == SequencerFocus::PhraseNext,
|
||||||
self.focused() == SequencerFocus::PhraseNext,
|
self.entered()
|
||||||
self.entered()
|
),
|
||||||
),
|
PhraseListView::from(self)
|
||||||
PhraseListView::from(self)
|
])),
|
||||||
])),
|
PhraseView::from(self)
|
||||||
PhraseView::from(self)
|
|
||||||
])
|
|
||||||
])
|
])
|
||||||
//])
|
]),
|
||||||
});
|
Tui::fill_xy(Tui::at_s(SequencerStatusBar::from(self))),
|
||||||
|
]));
|
||||||
|
|
||||||
impl HasClock for SequencerTui {
|
impl HasClock for SequencerTui {
|
||||||
fn clock (&self) -> &ClockModel {
|
fn clock (&self) -> &ClockModel {
|
||||||
|
|
@ -308,21 +307,17 @@ impl From<&SequencerTui> for SequencerStatusBar {
|
||||||
}
|
}
|
||||||
|
|
||||||
render!(|self: SequencerStatusBar|{
|
render!(|self: SequencerStatusBar|{
|
||||||
|
|
||||||
lay!(|add|if self.width > 60 {
|
lay!(|add|if self.width > 60 {
|
||||||
add(&row!(![
|
add(&row!(![
|
||||||
SequencerMode::from(self),
|
SequencerMode::from(self),
|
||||||
SequencerStats::from(self),
|
SequencerStats::from(self),
|
||||||
]))
|
]))
|
||||||
} else if self.width > 0 {
|
} else {
|
||||||
add(&col!(![
|
add(&col!(![
|
||||||
SequencerMode::from(self),
|
SequencerMode::from(self),
|
||||||
SequencerStats::from(self),
|
SequencerStats::from(self),
|
||||||
]))
|
]))
|
||||||
} else {
|
|
||||||
Ok(())
|
|
||||||
})
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
struct SequencerMode {
|
struct SequencerMode {
|
||||||
|
|
@ -339,14 +334,15 @@ impl From<&SequencerStatusBar> for SequencerMode {
|
||||||
}
|
}
|
||||||
render!(|self:SequencerMode|{
|
render!(|self:SequencerMode|{
|
||||||
let orange = Color::Rgb(255,128,0);
|
let orange = Color::Rgb(255,128,0);
|
||||||
let light = Color::Rgb(100,100,100);
|
let light = Color::Rgb(50,50,50);
|
||||||
|
let white = Color::Rgb(255,255,255);
|
||||||
let yellow = Color::Rgb(255,255,0);
|
let yellow = Color::Rgb(255,255,0);
|
||||||
let black = Color::Rgb(0,0,0);
|
let black = Color::Rgb(0,0,0);
|
||||||
row!([
|
row!([
|
||||||
Tui::bg(orange, Tui::fg(black, Tui::bold(true, self.mode))),
|
Tui::bg(orange, Tui::fg(black, Tui::bold(true, self.mode))),
|
||||||
Tui::bg(light, row!((prefix, hotkey, suffix) in self.help.iter() => {
|
Tui::bg(light, Tui::fg(white, row!((prefix, hotkey, suffix) in self.help.iter() => {
|
||||||
row!([" ", prefix, Tui::fg(yellow, *hotkey), suffix])
|
row!([" ", prefix, Tui::fg(yellow, *hotkey), suffix])
|
||||||
}))
|
})))
|
||||||
])
|
])
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -366,7 +362,7 @@ impl<'a> From<&'a SequencerStatusBar> for SequencerStats<'a> {
|
||||||
}
|
}
|
||||||
render!(|self:SequencerStats<'a>|{
|
render!(|self:SequencerStats<'a>|{
|
||||||
let orange = Color::Rgb(255,128,0);
|
let orange = Color::Rgb(255,128,0);
|
||||||
let dark = Color::Rgb(100,100,100);
|
let dark = Color::Rgb(25,25,25);
|
||||||
let cpu = &self.cpu;
|
let cpu = &self.cpu;
|
||||||
let res = &self.res;
|
let res = &self.res;
|
||||||
let size = &self.size;
|
let size = &self.size;
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,11 @@ render!(|self: TransportView|{
|
||||||
if self.focused {
|
if self.focused {
|
||||||
add(&Tui::fill_x(Lozenge(border_style)))?;
|
add(&Tui::fill_x(Lozenge(border_style)))?;
|
||||||
}
|
}
|
||||||
add(&Tui::outset_x(2, row!([
|
add(&Tui::outset_x(1, row!([
|
||||||
|
TransportField("Beat", "00X+0/0B+00/00P"),
|
||||||
|
" ",
|
||||||
|
TransportField("BPM ", self.bpm.as_str()),
|
||||||
|
" ",
|
||||||
col!(|add|{
|
col!(|add|{
|
||||||
if self.started {
|
if self.started {
|
||||||
add(&col!([Tui::fg(Color::Rgb(0, 255, 0), "▶ PLAYING "), ""]))
|
add(&col!([Tui::fg(Color::Rgb(0, 255, 0), "▶ PLAYING "), ""]))
|
||||||
|
|
@ -132,17 +136,11 @@ render!(|self: TransportView|{
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
" ",
|
" ",
|
||||||
row!([
|
TransportField("Second", self.current_second.as_str()),
|
||||||
TransportField("Beat", "00X+0/0B+00/00P"),
|
" ",
|
||||||
" ",
|
TransportField("SR ", self.sr.as_str()),
|
||||||
TransportField("BPM ", self.bpm.as_str()),
|
" ",
|
||||||
" ",
|
TransportField("Sample", self.current_sample.as_str()),
|
||||||
TransportField("Second", self.current_second.as_str()),
|
|
||||||
" ",
|
|
||||||
TransportField("SR ", self.sr.as_str()),
|
|
||||||
" ",
|
|
||||||
TransportField("Sample", self.current_sample.as_str()),
|
|
||||||
]),
|
|
||||||
])))
|
])))
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -206,18 +206,20 @@ render!(|self: PhraseView<'a>|{
|
||||||
phrase, view_mode, buffer,
|
phrase, view_mode, buffer,
|
||||||
note_point, note_len,
|
note_point, note_len,
|
||||||
note_range: (note_lo, note_hi),
|
note_range: (note_lo, note_hi),
|
||||||
note_names: (note_lo_name, note_hi_name),
|
|
||||||
time_start, time_point,
|
time_start, time_point,
|
||||||
//now: _,
|
//now: _,
|
||||||
..
|
..
|
||||||
} = self;
|
} = self;
|
||||||
lay!([
|
lay!([
|
||||||
lay!(move|add|{
|
lay!(move|add|{
|
||||||
|
if *focused {
|
||||||
|
add(&Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(TuiTheme::border_fg(true))))?;
|
||||||
|
}
|
||||||
let title_color = if *focused{Color::Rgb(150, 160, 90)}else{Color::Rgb(120, 130, 100)};
|
let title_color = if *focused{Color::Rgb(150, 160, 90)}else{Color::Rgb(120, 130, 100)};
|
||||||
let upper_left = format!("╭{note_hi} {note_hi_name} {}",
|
let upper_left = format!("{}",
|
||||||
phrase.as_ref().map(|p|p.read().unwrap().name.clone()).unwrap_or(String::new())
|
phrase.as_ref().map(|p|p.read().unwrap().name.clone()).unwrap_or(String::new())
|
||||||
);
|
);
|
||||||
let lower_left = format!("╰{note_lo} {note_lo_name}");
|
let lower_left = format!("");
|
||||||
let mut lower_right = format!(" {} ", size.format());
|
let mut lower_right = format!(" {} ", size.format());
|
||||||
if *focused && *entered {
|
if *focused && *entered {
|
||||||
lower_right = format!("Note: {} ({}) {} {lower_right}",
|
lower_right = format!("Note: {} ({}) {} {lower_right}",
|
||||||
|
|
@ -236,7 +238,11 @@ render!(|self: PhraseView<'a>|{
|
||||||
add(&Tui::fill_xy(Tui::at_se(Tui::pull_x(1, Tui::fg(title_color, lower_right)))))?;
|
add(&Tui::fill_xy(Tui::at_se(Tui::pull_x(1, Tui::fg(title_color, lower_right)))))?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}),
|
}),
|
||||||
Tui::bg(Color::Rgb(40, 50, 30), Tui::fill_x(row!([
|
Tui::bg(if self.focused {
|
||||||
|
TuiTheme::bg()
|
||||||
|
} else {
|
||||||
|
Color::Reset
|
||||||
|
}, Tui::fill_x(row!([
|
||||||
Tui::push_y(1, Tui::fill_y(Widget::new(|to:[u16;2]|Ok(Some(to.clip_w(5))), move|to: &mut TuiOutput|{
|
Tui::push_y(1, Tui::fill_y(Widget::new(|to:[u16;2]|Ok(Some(to.clip_w(5))), move|to: &mut TuiOutput|{
|
||||||
Ok(if to.area().h() >= 2 { view_mode.render_keys(to, *note_hi, *note_lo) })
|
Ok(if to.area().h() >= 2 { view_mode.render_keys(to, *note_hi, *note_lo) })
|
||||||
}))),
|
}))),
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ pub struct PhraseListView<'a> {
|
||||||
impl<'a, T: HasPhraseList> From<&'a T> for PhraseListView<'a> {
|
impl<'a, T: HasPhraseList> From<&'a T> for PhraseListView<'a> {
|
||||||
fn from (state: &'a T) -> Self {
|
fn from (state: &'a T) -> Self {
|
||||||
Self {
|
Self {
|
||||||
title: "Phrases",
|
title: "Pool:",
|
||||||
focused: state.phrases_focused(),
|
focused: state.phrases_focused(),
|
||||||
entered: state.phrases_entered(),
|
entered: state.phrases_entered(),
|
||||||
phrases: state.phrases(),
|
phrases: state.phrases(),
|
||||||
|
|
@ -122,15 +122,16 @@ impl<'a, T: HasPhraseList> From<&'a T> for PhraseListView<'a> {
|
||||||
// TODO: Display phrases always in order of appearance
|
// TODO: Display phrases always in order of appearance
|
||||||
render!(|self: PhraseListView<'a>|{
|
render!(|self: PhraseListView<'a>|{
|
||||||
let Self { title, focused, entered, phrases, index, mode } = self;
|
let Self { title, focused, entered, phrases, index, mode } = self;
|
||||||
let border_color = if *focused {Color::Rgb(100, 110, 40)} else {Color::Rgb(70, 80, 50)};
|
let border_bg = if *entered {Color::Rgb(40, 50, 30)} else {TuiTheme::bg()};
|
||||||
|
let border_color = if *entered {Color::Rgb(100, 110, 40)} else {Color::Rgb(70, 80, 50)};
|
||||||
let title_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)};
|
let title_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)};
|
||||||
let upper_left = format!("[{}] {title}", if *entered {"■"} else {" "});
|
let upper_left = format!("{title}");
|
||||||
let upper_right = format!("({})", phrases.len());
|
let upper_right = format!("({})", phrases.len());
|
||||||
lay!(move|add|{
|
lay!(move|add|{
|
||||||
if *focused {
|
if *focused {
|
||||||
add(&Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(border_color)))?;
|
add(&Lozenge(Style::default().bg(border_bg).fg(border_color)))?;
|
||||||
}
|
}
|
||||||
add(&Tui::inset_xy(1, 1, Tui::fill_xy(col!(move|add|match mode {
|
add(&Tui::inset_xy(0, 1, Tui::fill_xy(col!(move|add|match mode {
|
||||||
Some(PhrasesMode::Import(_, ref browser)) => {
|
Some(PhrasesMode::Import(_, ref browser)) => {
|
||||||
add(browser)
|
add(browser)
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue