mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 20:56:43 +01:00
remove single-use horizontal arranger widgets
This commit is contained in:
parent
4be2df1347
commit
6f91eb085d
2 changed files with 226 additions and 276 deletions
|
|
@ -346,27 +346,6 @@ pub struct VerticalArrangerCursor<'a>(
|
||||||
pub struct HorizontalArranger<'a, E: Engine>(
|
pub struct HorizontalArranger<'a, E: Engine>(
|
||||||
pub &'a Arranger<E>
|
pub &'a Arranger<E>
|
||||||
);
|
);
|
||||||
pub struct TrackNameColumn<'a, E: Engine>(
|
|
||||||
pub &'a [Sequencer<E>], pub ArrangerFocus
|
|
||||||
);
|
|
||||||
pub struct TrackMonitorColumn<'a, E: Engine>(
|
|
||||||
pub &'a [Sequencer<E>]
|
|
||||||
);
|
|
||||||
pub struct TrackRecordColumn<'a, E: Engine>(
|
|
||||||
pub &'a [Sequencer<E>]
|
|
||||||
);
|
|
||||||
pub struct TrackOverdubColumn<'a, E: Engine>(
|
|
||||||
pub &'a [Sequencer<E>]
|
|
||||||
);
|
|
||||||
pub struct TrackEraseColumn<'a, E: Engine>(
|
|
||||||
pub &'a [Sequencer<E>]
|
|
||||||
);
|
|
||||||
pub struct TrackGainColumn<'a, E: Engine>(
|
|
||||||
pub &'a [Sequencer<E>]
|
|
||||||
);
|
|
||||||
pub struct TrackScenesColumn<'a, E: Engine>(
|
|
||||||
pub &'a [Sequencer<E>], pub &'a [Scene], pub ArrangerFocus
|
|
||||||
);
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -354,30 +354,15 @@ impl<'a> Content for HorizontalArranger<'a, Tui> {
|
||||||
type Engine = Tui;
|
type Engine = Tui;
|
||||||
fn content (&self) -> impl Widget<Engine = Tui> {
|
fn content (&self) -> impl Widget<Engine = Tui> {
|
||||||
let Arranger { tracks, focused, selected, scenes, .. } = self.0;
|
let Arranger { tracks, focused, selected, scenes, .. } = self.0;
|
||||||
let tracks = tracks.as_slice();
|
let _tracks = tracks.as_slice();
|
||||||
Layers::new(|add|{
|
lay!(
|
||||||
add(&focused.then_some(Background(Color::Rgb(40, 50, 30))))?;
|
focused.then_some(Background(Color::Rgb(40, 50, 30))),
|
||||||
add(&Stack::right(|add|{
|
row!(
|
||||||
add(&TrackNameColumn(tracks, *selected))?;
|
// name
|
||||||
add(&TrackMonitorColumn(tracks))?;
|
CustomWidget::new(|_|{
|
||||||
add(&TrackRecordColumn(tracks))?;
|
todo!()
|
||||||
add(&TrackOverdubColumn(tracks))?;
|
}, |_: &mut TuiOutput|{
|
||||||
add(&TrackEraseColumn(tracks))?;
|
|
||||||
add(&TrackGainColumn(tracks))?;
|
|
||||||
add(&TrackScenesColumn(tracks, scenes.as_slice(), *selected))?;
|
|
||||||
Ok(())
|
|
||||||
}))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> Widget for TrackNameColumn<'a, Tui> {
|
|
||||||
type Engine = Tui;
|
|
||||||
fn layout (&self, _to: [u16;2]) -> Perhaps<[u16;2]> {
|
|
||||||
todo!()
|
todo!()
|
||||||
}
|
|
||||||
fn render (&self, _to: &mut TuiOutput) -> Usually<()> {
|
|
||||||
todo!();
|
|
||||||
//let Self(tracks, selected) = self;
|
//let Self(tracks, selected) = self;
|
||||||
//let yellow = Some(Style::default().yellow().bold().not_dim());
|
//let yellow = Some(Style::default().yellow().bold().not_dim());
|
||||||
//let white = Some(Style::default().white().bold().not_dim());
|
//let white = Some(Style::default().white().bold().not_dim());
|
||||||
|
|
@ -398,22 +383,12 @@ impl<'a> Widget for TrackNameColumn<'a, Tui> {
|
||||||
//}
|
//}
|
||||||
//}
|
//}
|
||||||
//Ok(Some(area))
|
//Ok(Some(area))
|
||||||
}
|
}),
|
||||||
}
|
// monitor
|
||||||
|
CustomWidget::new(|_|{
|
||||||
pub fn track_name_max_len <E: Engine> (tracks: &[Sequencer<E>]) -> usize {
|
todo!()
|
||||||
tracks.iter()
|
}, |_: &mut TuiOutput|{
|
||||||
.map(|s|s.name.read().unwrap().len())
|
|
||||||
.fold(0, usize::max)
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> Widget for TrackMonitorColumn<'a, Tui> {
|
|
||||||
type Engine = Tui;
|
|
||||||
fn layout (&self, _to: [u16;2]) -> Perhaps<[u16;2]> {
|
|
||||||
todo!()
|
todo!()
|
||||||
}
|
|
||||||
fn render (&self, _to: &mut TuiOutput) -> Usually<()> {
|
|
||||||
todo!();
|
|
||||||
//let Self(tracks) = self;
|
//let Self(tracks) = self;
|
||||||
//let mut area = to.area();
|
//let mut area = to.area();
|
||||||
//let on = Some(Style::default().not_dim().green().bold());
|
//let on = Some(Style::default().not_dim().green().bold());
|
||||||
|
|
@ -435,16 +410,12 @@ impl<'a> Widget for TrackMonitorColumn<'a, Tui> {
|
||||||
//}
|
//}
|
||||||
//area.width = 4;
|
//area.width = 4;
|
||||||
//Ok(Some(area))
|
//Ok(Some(area))
|
||||||
}
|
}),
|
||||||
}
|
// record
|
||||||
|
CustomWidget::new(|_|{
|
||||||
impl<'a> Widget for TrackRecordColumn<'a, Tui> {
|
todo!()
|
||||||
type Engine = Tui;
|
}, |_: &mut TuiOutput|{
|
||||||
fn layout (&self, _to: [u16;2]) -> Perhaps<[u16;2]> {
|
|
||||||
todo!()
|
todo!()
|
||||||
}
|
|
||||||
fn render (&self, _to: &mut TuiOutput) -> Usually<()> {
|
|
||||||
todo!();
|
|
||||||
//let Self(tracks) = self;
|
//let Self(tracks) = self;
|
||||||
//let mut area = to.area();
|
//let mut area = to.area();
|
||||||
//let on = Some(Style::default().not_dim().red().bold());
|
//let on = Some(Style::default().not_dim().red().bold());
|
||||||
|
|
@ -466,16 +437,12 @@ impl<'a> Widget for TrackRecordColumn<'a, Tui> {
|
||||||
//}
|
//}
|
||||||
//area.width = 4;
|
//area.width = 4;
|
||||||
//Ok(Some(area))
|
//Ok(Some(area))
|
||||||
}
|
}),
|
||||||
}
|
// overdub
|
||||||
|
CustomWidget::new(|_|{
|
||||||
impl<'a> Widget for TrackOverdubColumn<'a, Tui> {
|
todo!()
|
||||||
type Engine = Tui;
|
}, |_: &mut TuiOutput|{
|
||||||
fn layout (&self, _to: [u16;2]) -> Perhaps<[u16;2]> {
|
|
||||||
todo!()
|
todo!()
|
||||||
}
|
|
||||||
fn render (&self, _to: &mut TuiOutput) -> Usually<()> {
|
|
||||||
todo!();
|
|
||||||
//let Self(tracks) = self;
|
//let Self(tracks) = self;
|
||||||
//let mut area = to.area();
|
//let mut area = to.area();
|
||||||
//let on = Some(Style::default().not_dim().yellow().bold());
|
//let on = Some(Style::default().not_dim().yellow().bold());
|
||||||
|
|
@ -500,16 +467,16 @@ impl<'a> Widget for TrackOverdubColumn<'a, Tui> {
|
||||||
//}
|
//}
|
||||||
//area.width = 4;
|
//area.width = 4;
|
||||||
//Ok(Some(area))
|
//Ok(Some(area))
|
||||||
}
|
}),
|
||||||
}
|
// erase
|
||||||
|
CustomWidget::new(|_|{
|
||||||
impl<'a> Widget for TrackEraseColumn<'a, Tui> {
|
todo!()
|
||||||
type Engine = Tui;
|
}, |_: &mut TuiOutput|{
|
||||||
fn layout (&self, _to: [u16;2]) -> Perhaps<[u16;2]> {
|
todo!()
|
||||||
|
}),
|
||||||
|
// gain
|
||||||
|
CustomWidget::new(|_|{
|
||||||
todo!()
|
todo!()
|
||||||
}
|
|
||||||
fn render (&self, _to: &mut TuiOutput) -> Usually<()> {
|
|
||||||
todo!();
|
|
||||||
//let Self(tracks) = self;
|
//let Self(tracks) = self;
|
||||||
//let mut area = to.area();
|
//let mut area = to.area();
|
||||||
//let off = Some(Style::default().dim());
|
//let off = Some(Style::default().dim());
|
||||||
|
|
@ -529,16 +496,8 @@ impl<'a> Widget for TrackEraseColumn<'a, Tui> {
|
||||||
//}
|
//}
|
||||||
//area.width = 4;
|
//area.width = 4;
|
||||||
//Ok(Some(area))
|
//Ok(Some(area))
|
||||||
}
|
}, |_: &mut TuiOutput|{
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> Widget for TrackGainColumn<'a, Tui> {
|
|
||||||
type Engine = Tui;
|
|
||||||
fn layout (&self, _to: [u16;2]) -> Perhaps<[u16;2]> {
|
|
||||||
todo!()
|
todo!()
|
||||||
}
|
|
||||||
fn render (&self, _to: &mut TuiOutput) -> Usually<()> {
|
|
||||||
todo!();
|
|
||||||
//let Self(tracks) = self;
|
//let Self(tracks) = self;
|
||||||
//let mut area = to.area();
|
//let mut area = to.area();
|
||||||
//let off = Some(Style::default().dim());
|
//let off = Some(Style::default().dim());
|
||||||
|
|
@ -558,16 +517,12 @@ impl<'a> Widget for TrackGainColumn<'a, Tui> {
|
||||||
//}
|
//}
|
||||||
//area.width = 7;
|
//area.width = 7;
|
||||||
//Ok(Some(area))
|
//Ok(Some(area))
|
||||||
}
|
}),
|
||||||
}
|
// scenes
|
||||||
|
CustomWidget::new(|_|{
|
||||||
impl<'a> Widget for TrackScenesColumn<'a, Tui> {
|
|
||||||
type Engine = Tui;
|
|
||||||
fn layout (&self, _to: [u16;2]) -> Perhaps<[u16;2]> {
|
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}, |to: &mut TuiOutput|{
|
||||||
fn render (&self, to: &mut TuiOutput) -> Usually<()> {
|
let Arranger { tracks, scenes, selected, .. } = self.0;
|
||||||
let Self(tracks, scenes, selected) = self;
|
|
||||||
let area = to.area();
|
let area = to.area();
|
||||||
let mut x2 = 0;
|
let mut x2 = 0;
|
||||||
let [x, y, _, height] = area;
|
let [x, y, _, height] = area;
|
||||||
|
|
@ -604,9 +559,18 @@ impl<'a> Widget for TrackScenesColumn<'a, Tui> {
|
||||||
}
|
}
|
||||||
//Ok(Some([x, y, x2, height]))
|
//Ok(Some([x, y, x2, height]))
|
||||||
Ok(())
|
Ok(())
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn track_name_max_len <E: Engine> (tracks: &[Sequencer<E>]) -> usize {
|
||||||
|
tracks.iter()
|
||||||
|
.map(|s|s.name.read().unwrap().len())
|
||||||
|
.fold(0, usize::max)
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
impl Content for ArrangerRenameModal<Tui> {
|
impl Content for ArrangerRenameModal<Tui> {
|
||||||
|
|
@ -800,16 +764,23 @@ impl Sequencer<Tui> {
|
||||||
impl Content for Sequencer<Tui> {
|
impl Content for Sequencer<Tui> {
|
||||||
type Engine = Tui;
|
type Engine = Tui;
|
||||||
fn content (&self) -> impl Widget<Engine = Tui> {
|
fn content (&self) -> impl Widget<Engine = Tui> {
|
||||||
let toolbar = col!(
|
let toolbar = Stack::down(move|add|{
|
||||||
col! { "Name", self.name.read().unwrap().as_str(), },
|
add(&col! {"Name", self.name.read().unwrap().as_str(),})?;
|
||||||
"",
|
if let Some(phrase) = self.phrase.as_ref() {
|
||||||
col! { "Start: ", " 1.1.1", "End: ", " 2.1.1", },
|
panic!();
|
||||||
"",
|
let phrase = phrase.read().unwrap();
|
||||||
col! { "Loop [ ]", "From: ", " 1.1.1", "Length: ", " 1.0.0", },
|
let length = phrase.length;
|
||||||
"",
|
let looped = phrase.looped;
|
||||||
col! { "Notes: ", "C#0-C#9 ", "[ /2 ]", "[ x2 ]"
|
add(&"")?;
|
||||||
, "[ Rev ]", "[ Inv ]", "[ Dup ]" },
|
add(&col! {"Length: ", format!("{length}").as_str(),})?;
|
||||||
).min_x(10);
|
add(&"")?;
|
||||||
|
add(&col! { "Loop [ ]", "From: ", " 1.1.1", "Length: ", " 1.0.0", })?;
|
||||||
|
add(&"")?;
|
||||||
|
add(&col! { "Notes: ", "C#0-C#9 ", "[ /2 ]", "[ x2 ]"
|
||||||
|
, "[ Rev ]", "[ Inv ]", "[ Dup ]" })?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}).min_x(10);
|
||||||
let content = lay!(
|
let content = lay!(
|
||||||
// keys
|
// keys
|
||||||
CustomWidget::new(|_|Ok(Some([32,4])), |to: &mut TuiOutput|{
|
CustomWidget::new(|_|Ok(Some([32,4])), |to: &mut TuiOutput|{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue