remove single-use horizontal arranger widgets

This commit is contained in:
🪞👃🪞 2024-10-03 20:23:35 +03:00
parent 4be2df1347
commit 6f91eb085d
2 changed files with 226 additions and 276 deletions

View file

@ -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
);
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////

View file

@ -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|{