wip: p.53, e=118, fixed focus trait loop

This commit is contained in:
🪞👃🪞 2024-11-17 19:19:46 +01:00
parent 9b996878c2
commit 76af9d9bac
15 changed files with 737 additions and 727 deletions

View file

@ -12,58 +12,49 @@ pub(crate) use std::fs::read_dir;
use std::fmt::Debug;
submod! {
tui_apis
tui_cmd
tui_command
tui_control
tui_focus
tui_handle
tui_init
tui_input
tui_jack
tui_menu
tui_model
tui_select
tui_status
tui_theme
tui_select
tui_phrase
tui_sequencer
//tui_mixer // TODO
//tui_plugin // TODO
//tui_plugin_lv2
//tui_plugin_lv2_gui
//tui_plugin_vst2
//tui_plugin_vst3
//tui_sampler // TODO
//tui_sampler_cmd
tui_view
}
// TODO
impl<A, C, S> Content for AppView<Tui, A, C, S>
where
A: Widget<Engine = Tui> + Audio,
C: Command<Self>,
S: StatusBar,
{
type Engine = Tui;
fn content (&self) -> impl Widget<Engine = Tui> {
let menus = self.menu_bar.as_ref().map_or_else(
||&[] as &[Menu<_, _, _>],
|m|m.menus.as_slice()
);
fn content_with_menu_and_status <'a, S: Send + Sync + 'a, C: Command<S>> (
content: &'a impl Widget<Engine = Tui>,
menu_bar: Option<&'a MenuBar<Tui, S, C>>,
status_bar: Option<impl Widget<Engine = Tui>>
) -> impl Widget<Engine = Tui> + 'a {
let menus = menu_bar.as_ref().map_or_else(
||&[] as &[Menu<_, _, _>],
|m|m.menus.as_slice()
);
let content = Either(
status_bar.is_none(),
widget(&content),
Split::up(
1,
widget(status_bar.as_ref().unwrap()),
widget(&content)
),
);
Either(
menu_bar.is_none(),
widget(&content),
Split::down(
if self.menu_bar.is_some() { 1 } else { 0 },
1,
row!(menu in menus.iter() => {
row!(" ", menu.title.as_str(), " ")
}),
Either(
self.status_bar.is_some(),
Split::up(
1,
widget(self.status_bar.as_ref().unwrap()),
widget(&self.app)
),
widget(&self.app)
)
widget(&content)
)
}
)
}