mirror of
https://codeberg.org/unspeaker/tek.git
synced 2026-08-28 12:56:57 +02:00
87 lines
2.9 KiB
Rust
87 lines
2.9 KiB
Rust
use crate::*;
|
|
def_sizes_iter!(PortsSizes => Arc<str>, [Connect]);
|
|
impl_has!(Vec<MidiInput>: |self: Arrangement| self.midi_ins);
|
|
impl_has!(Vec<MidiOutput>: |self: Arrangement| self.midi_outs);
|
|
impl_has!(Vec<MidiInput>: |self: App|self.project.midi_ins);
|
|
impl_has!(Vec<MidiOutput>: |self: App|self.project.midi_outs);
|
|
|
|
pub fn view_midi_ins_status (theme: ItemTheme, track: Option<&Track>) -> impl Draw<Tui> {
|
|
track.map(move|track|view_ports_status(theme, "MIDI ins: ", &track.sequencer.midi_ins))
|
|
}
|
|
|
|
pub fn view_midi_outs_status (theme: ItemTheme, track: Option<&Track>) -> impl Draw<Tui> {
|
|
track.map(move|track|view_ports_status(theme, "MIDI outs: ", &track.sequencer.midi_outs))
|
|
}
|
|
|
|
pub fn view_audio_ins_status (theme: ItemTheme, track: Option<&Track>) -> impl Draw<Tui> {
|
|
track.map(move|track|view_ports_status(theme, "Audio ins: ", &track.audio_ins()))
|
|
}
|
|
|
|
pub fn view_audio_outs_status (theme: ItemTheme, track: Option<&Track>) -> impl Draw<Tui> {
|
|
track.map(move|track|view_ports_status(theme, "Audio outs:", &track.audio_outs()))
|
|
}
|
|
|
|
pub fn view_ports_status <'a, T: JackPort> (theme: ItemTheme, title: &'a str, ports: &'a [T])
|
|
-> impl Draw<Tui> + use<'a, T>
|
|
{
|
|
let ins = ports.len() as u16;
|
|
let frame = Outer(true, Style::default().fg(g(96)));
|
|
let names = iter_south(move||ports.iter().enumerate().map(|(index, port)|format!(
|
|
" {index} {}", port.port_name()
|
|
).align_w().full_h()));
|
|
let field = field_v(theme, title, names);
|
|
border(true, frame, field.exact_wh(20, 1 + ins)).exact_wh(20, 1 + ins)
|
|
}
|
|
|
|
pub fn view_io_ports <'a, T: PortsSizes<'a>> (
|
|
fg: Color, bg: Color, items: impl Fn()->T + Send + Sync + 'a
|
|
) -> impl Draw<Tui> + 'a {
|
|
type Item<'a> = (usize, &'a Arc<str>, &'a [Connect], usize, usize);
|
|
iter(items,
|
|
move|(_index, name, connections, y, y2): Item<'a>, _| south(
|
|
bold(true, fg_bg(fg, bg, east(" ", name).align_w())).full_h(),
|
|
iter(||connections.iter(), move|connect: &'a Connect, index|{
|
|
bold(false, fg_bg(fg, bg, &connect.info)).exact_h(1).align_w().push_y(index as u16)
|
|
})
|
|
).exact_h((y2 - y) as u16).push_y(y as u16))
|
|
}
|
|
|
|
pub struct Junction<T: JackPort>(T);
|
|
|
|
impl<T: JackPort> View<Tui> for Junction<T> {
|
|
fn view (&self) -> impl Draw<Tui> {
|
|
T::KIND
|
|
}
|
|
}
|
|
|
|
#[tek_proc::command(AudioInput)]
|
|
#[tek_proc::keyword(AudioInput)]
|
|
#[derive(Debug)]
|
|
pub enum AudioInputCommand {
|
|
Close,
|
|
Connect(Arc<str>),
|
|
}
|
|
|
|
#[tek_proc::command(AudioOutput)]
|
|
#[tek_proc::keyword(AudioOutput)]
|
|
#[derive(Debug)]
|
|
pub enum AudioOutputCommand {
|
|
Close,
|
|
Connect(Arc<str>),
|
|
}
|
|
|
|
#[tek_proc::command(MidiInput)]
|
|
#[tek_proc::keyword(MidiInput)]
|
|
#[derive(Debug)]
|
|
pub enum MidiInputCommand {
|
|
Close,
|
|
Connect(Arc<str>),
|
|
}
|
|
|
|
#[tek_proc::command(MidiOutput)]
|
|
#[tek_proc::keyword(MidiOutput)]
|
|
#[derive(Debug)]
|
|
pub enum MidiOutputCommand {
|
|
Close,
|
|
Connect(Arc<str>),
|
|
}
|