mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
This commit is contained in:
parent
573534a9a6
commit
447638ee71
30 changed files with 824 additions and 548 deletions
|
|
@ -112,10 +112,3 @@ impl AppCommand {
|
|||
//Ok(None)
|
||||
//}
|
||||
}
|
||||
|
||||
dsl!(ClockCommand: |self: App, iter|self.clock().take(iter));
|
||||
dsl!(MidiEditCommand: |self: App, iter|Ok(self.editor().map(|x|x.take(iter)).transpose()?.flatten()));
|
||||
dsl!(PoolCommand: |self: App, iter|self.pool.take(iter));
|
||||
dsl!(SamplerCommand: |self: App, iter|Ok(self.project.sampler().map(|x|x.take(iter)).transpose()?.flatten()));
|
||||
dsl!(ArrangementCommand: |self: App, iter|self.project.take(iter));
|
||||
dsl!(DialogCommand: |self: App, iter|Dsl::take(&self.dialog, iter));
|
||||
|
|
|
|||
|
|
@ -33,8 +33,8 @@ has!(Option<Dialog>: |self: App|self.dialog);
|
|||
has!(Clock: |self: App|self.project.clock);
|
||||
has!(Option<MidiEditor>: |self: App|self.project.editor);
|
||||
has!(Selection: |self: App|self.project.selection);
|
||||
has!(Vec<JackMidiIn>: |self: App|self.project.midi_ins);
|
||||
has!(Vec<JackMidiOut>: |self: App|self.project.midi_outs);
|
||||
has!(Vec<MidiInput>: |self: App|self.project.midi_ins);
|
||||
has!(Vec<MidiOutput>: |self: App|self.project.midi_outs);
|
||||
has!(Vec<Scene>: |self: App|self.project.scenes);
|
||||
has!(Vec<Track>: |self: App|self.project.tracks);
|
||||
has!(Measure<TuiOut>: |self: App|self.size);
|
||||
|
|
@ -54,6 +54,18 @@ has_clips!(|self: App|self.pool.clips);
|
|||
impl HasClipsSize for App {
|
||||
fn clips_size (&self) -> &Measure<TuiOut> { &self.project.inner_size }
|
||||
}
|
||||
from_dsl!(ClockCommand:
|
||||
|state: App, iter|FromDsl::take_from(state.clock(), iter));
|
||||
from_dsl!(MidiEditCommand:
|
||||
|state: App, iter|Ok(state.editor().map(|x|FromDsl::take_from(x, iter)).transpose()?.flatten()));
|
||||
from_dsl!(PoolCommand:
|
||||
|state: App, iter|FromDsl::take_from(&state.pool, iter));
|
||||
from_dsl!(SamplerCommand:
|
||||
|state: App, iter|Ok(state.project.sampler().map(|x|FromDsl::take_from(x, iter)).transpose()?.flatten()));
|
||||
from_dsl!(ArrangementCommand:
|
||||
|state: App, iter|FromDsl::take_from(&state.project, iter));
|
||||
from_dsl!(DialogCommand:
|
||||
|state: App, iter|FromDsl::take_from(&state.dialog, iter));
|
||||
//has_editor!(|self: App|{
|
||||
//editor = self.editor;
|
||||
//editor_w = {
|
||||
|
|
@ -332,7 +344,7 @@ pub struct Configuration {
|
|||
/// View definition
|
||||
pub view: TokenIter<'static>,
|
||||
// Input keymap
|
||||
pub keys: InputMap<App, AppCommand, TuiIn, TokenIter<'static>>,
|
||||
pub keys: InputMap<'static, App, AppCommand, TuiIn, TokenIter<'static>>,
|
||||
}
|
||||
|
||||
impl Configuration {
|
||||
|
|
@ -406,7 +418,7 @@ impl Configuration {
|
|||
}
|
||||
|
||||
fn parse_keys (base: &impl AsRef<Path>, iter: Option<TokenIter<'static>>)
|
||||
-> Usually<InputMap<App, AppCommand, TuiIn, TokenIter<'static>>>
|
||||
-> Usually<InputMap<'static, App, AppCommand, TuiIn, TokenIter<'static>>>
|
||||
{
|
||||
if iter.is_none() {
|
||||
return Err(format!("missing keys definition").into())
|
||||
|
|
@ -452,7 +464,7 @@ impl Configuration {
|
|||
let cond = cond.unwrap();
|
||||
println!("ok");
|
||||
map.add_layer_if(
|
||||
Box::new(move |state: &App|Dsl::take_or_fail(
|
||||
Box::new(move |state: &App|FromDsl::take_from_or_fail(
|
||||
state, &mut exp.clone(),
|
||||
format!("missing input layer conditional")
|
||||
)), keys
|
||||
|
|
|
|||
|
|
@ -4,22 +4,30 @@ pub(crate) use ::tengri::tui::ratatui::prelude::Position;
|
|||
|
||||
impl App {
|
||||
pub fn view (&self) -> impl Content<TuiOut> + '_ {
|
||||
let view: Perhaps<RenderBox<TuiOut>> =
|
||||
let view: Perhaps<Box<dyn Render<TuiOut>>> =
|
||||
FromDsl::take_from(self, &mut self.config.view.clone());
|
||||
self.size.of(lay! {
|
||||
When(matches!(&view, Ok(None)), Fill::y(Bsp::s(
|
||||
Fixed::y(1, "no view"),
|
||||
Fill::y(format!("{:?}", &self.config.view)),
|
||||
))),
|
||||
When(matches!(&view, Err(_)), Fill::y(Bsp::s(
|
||||
Fixed::y(1, "view error"),
|
||||
Fill::y(Bsp::s(
|
||||
view.as_ref().err().map(|e|format!("{e}")),
|
||||
format!("{:?}", &self.config.view),
|
||||
))
|
||||
))),
|
||||
When(matches!(&view, Ok(Some(_))), Fill::y(view)),
|
||||
})
|
||||
Either(view.is_ok(),
|
||||
ThunkRender::new(move|to|if let Some(view) = view.as_ref().unwrap().as_ref() {
|
||||
Content::render(view, to)
|
||||
}),
|
||||
"error?!")
|
||||
//Fill::xy(self.size.of(col! {
|
||||
//Tui::bg(Rgb(72,72,0), When(matches!(&view, Err(_)), Bsp::s(
|
||||
//Fixed::y(1, "view error"),
|
||||
//Bsp::s(
|
||||
//view.as_ref().err().map(|e|format!("{e}")),
|
||||
//format!("{}", &self.config.view.0.0))))),
|
||||
//When(matches!(&view, Ok(None)), Bsp::s(
|
||||
//Tui::bg(Rgb(96,48,0),
|
||||
//Fixed::y(1, Fill::x(Align::w("no view returned, as defined by:")))),
|
||||
//Tui::bg(Rgb(72,32,0),
|
||||
//Fill::x(Stack::south(|add: &mut dyn FnMut(&dyn Render<TuiOut>)|{
|
||||
//for line in self.config.view.0.0.split('\n') {
|
||||
//add(&Fill::x(Align::w(line)));
|
||||
//}
|
||||
//}))))),
|
||||
//When(matches!(&view, Ok(Some(_))), &view.unwrap().unwrap()),
|
||||
//}))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue