Skip to content

Commit

Permalink
directvt#86 WIP: Switch to scripting model
Browse files Browse the repository at this point in the history
  • Loading branch information
o-sdn-o committed Dec 23, 2024
1 parent c1882e6 commit 7364cc8
Show file tree
Hide file tree
Showing 11 changed files with 191 additions and 217 deletions.
27 changes: 14 additions & 13 deletions src/netxs/apps.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -737,21 +737,22 @@ namespace netxs::app::shared
});
window->invoke([&](auto& boss)
{
auto& items_inst = *items;
auto& state_inst = *state_state;
//todo scripting
//auto& items_inst = *items;
//auto& state_inst = *state_state;
auto& keybd = boss.template plugins<pro::keybd>();
app::shared::base_kb_navigation(keybd, scroll, boss);
keybd.proc("UpdateChordPreview", [&, update_ptr](hids& gear)
{
if (gear.keystat != input::key::repeated) (*update_ptr)(items_inst, gear, true);
if (rawkbd) gear.set_handled();
});
keybd.proc("ExclusiveKeyboardMode", [&, update_ptr](hids& gear)
{
state_inst.bell::signal(tier::release, ui::term::events::rawkbd);
if (gear.keystat != input::key::repeated) (*update_ptr)(items_inst, gear, true);
gear.set_handled();
});
//keybd.proc("UpdateChordPreview", [&, update_ptr](hids& gear)
//{
// if (gear.keystat != input::key::repeated) (*update_ptr)(items_inst, gear, true);
// if (rawkbd) gear.set_handled();
//});
//keybd.proc("ExclusiveKeyboardMode", [&, update_ptr](hids& gear)
//{
// state_inst.bell::signal(tier::release, ui::term::events::rawkbd);
// if (gear.keystat != input::key::repeated) (*update_ptr)(items_inst, gear, true);
// gear.set_handled();
//});
keybd.bind("Any", "UpdateChordPreview");
keybd.bind(
#if defined(WIN32)
Expand Down
40 changes: 21 additions & 19 deletions src/netxs/apps/tile.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -352,10 +352,11 @@ namespace netxs::app::tile
gear.dismiss();
};
auto& keybd = boss.template plugins<pro::keybd>();
keybd.proc(action::TileMoveGrip , [&](hids& gear){ gear.set_handled(); boss.base::riseup(tier::preview, app::tile::events::ui::grips::move, gear.get_args_or(twod{})); });
keybd.proc(action::TileResizeGrip , [&](hids& gear){ gear.set_handled(); boss.base::riseup(tier::preview, app::tile::events::ui::grips::resize, gear.get_args_or(si32{})); });
keybd.proc(action::TileFocusPrevGrip, [&](hids& gear){ boss.base::riseup(tier::preview, app::tile::events::ui::focus::prevgrip, gear); });
keybd.proc(action::TileFocusNextGrip, [&](hids& gear){ boss.base::riseup(tier::preview, app::tile::events::ui::focus::nextgrip, gear); });
//todo scripting
//keybd.proc(action::TileMoveGrip , [&](hids& gear){ gear.set_handled(); boss.base::riseup(tier::preview, app::tile::events::ui::grips::move, gear.get_args_or(twod{})); });
//keybd.proc(action::TileResizeGrip , [&](hids& gear){ gear.set_handled(); boss.base::riseup(tier::preview, app::tile::events::ui::grips::resize, gear.get_args_or(si32{})); });
//keybd.proc(action::TileFocusPrevGrip, [&](hids& gear){ boss.base::riseup(tier::preview, app::tile::events::ui::focus::prevgrip, gear); });
//keybd.proc(action::TileFocusNextGrip, [&](hids& gear){ boss.base::riseup(tier::preview, app::tile::events::ui::focus::nextgrip, gear); });
keybd.bind(*grip_bindings_ptr);
});
return node;
Expand Down Expand Up @@ -902,21 +903,22 @@ namespace netxs::app::tile
boss.base::riseup(tier::release, e2::form::proceed::quit::one, true);
};
auto& keybd = boss.template plugins<pro::keybd>();
keybd.proc(action::TileFocusPrev , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::prev, gear); });
keybd.proc(action::TileFocusNext , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::next, gear); });
keybd.proc(action::TileFocusPrevPane , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::prevpane, gear); });
keybd.proc(action::TileFocusNextPane , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::nextpane, gear); });
keybd.proc(action::TileFocusPrevGrip , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::prevgrip, gear); });
keybd.proc(action::TileFocusNextGrip , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::nextgrip, gear); });
keybd.proc(action::TileRunApplication , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::create, gear); });
keybd.proc(action::TileSelectAllPanes , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::select, gear); });
keybd.proc(action::TileSplitHorizontally , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::split::hz, gear); });
keybd.proc(action::TileSplitVertically , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::split::vt, gear); });
keybd.proc(action::TileSplitOrientation , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::rotate, gear); });
keybd.proc(action::TileSwapPanes , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::swap, gear); });
keybd.proc(action::TileEqualizeSplitRatio, [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::equalize, gear); });
keybd.proc(action::TileSetManagerTitle , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::title , gear); });
keybd.proc(action::TileClosePane , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::close, gear); });
//todo scripting
//keybd.proc(action::TileFocusPrev , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::prev, gear); });
//keybd.proc(action::TileFocusNext , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::next, gear); });
//keybd.proc(action::TileFocusPrevPane , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::prevpane, gear); });
//keybd.proc(action::TileFocusNextPane , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::nextpane, gear); });
//keybd.proc(action::TileFocusPrevGrip , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::prevgrip, gear); });
//keybd.proc(action::TileFocusNextGrip , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::focus::nextgrip, gear); });
//keybd.proc(action::TileRunApplication , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::create, gear); });
//keybd.proc(action::TileSelectAllPanes , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::select, gear); });
//keybd.proc(action::TileSplitHorizontally , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::split::hz, gear); });
//keybd.proc(action::TileSplitVertically , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::split::vt, gear); });
//keybd.proc(action::TileSplitOrientation , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::rotate, gear); });
//keybd.proc(action::TileSwapPanes , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::swap, gear); });
//keybd.proc(action::TileEqualizeSplitRatio, [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::equalize, gear); });
//keybd.proc(action::TileSetManagerTitle , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::title , gear); });
//keybd.proc(action::TileClosePane , [&](hids& gear){ boss.bell::signal(tier::preview, app::tile::events::ui::close, gear); });
auto bindings = pro::keybd::load(config, "tile");
keybd.bind(bindings);

Expand Down
69 changes: 35 additions & 34 deletions src/netxs/desktopio/application.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,42 +110,43 @@ namespace netxs::app::shared
}
}
};
const auto base_kb_navigation = [](ui::pro::keybd& keybd, netxs::sptr<base> scroll, base& boss)
const auto base_kb_navigation = [](ui::pro::keybd& keybd, netxs::sptr<base> scroll, base& /*boss*/)
{
auto& scroll_inst = *scroll;
//todo scripting
//auto& scroll_inst = *scroll;
auto esc_pressed = ptr::shared(faux);
keybd.proc("WindowClose", [&, esc_pressed](hids& gear)
{
if (*esc_pressed)
{
boss.bell::signal(tier::anycast, e2::form::proceed::quit::one, true);
gear.set_handled();
}
});
keybd.proc("WindowClosePreview", [&, esc_pressed](hids& /*gear*/)
{
if (std::exchange(*esc_pressed, true) != *esc_pressed)
{
boss.bell::signal(tier::anycast, e2::form::state::keybd::command::close, *esc_pressed);
}
});
keybd.proc("CancelWindowClose", [&, esc_pressed](hids& /*gear*/)
{
if (std::exchange(*esc_pressed, faux) != *esc_pressed)
{
boss.bell::signal(tier::anycast, e2::form::state::keybd::command::close, *esc_pressed);
}
});
keybd.proc("ScrollPageUp" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bypage::y, { .vector = { 0, 1 }}); });
keybd.proc("ScrollPageDown" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bypage::y, { .vector = { 0,-1 }}); });
keybd.proc("ScrollLineUp" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bystep::y, { .vector = { 0, 3 }}); });
keybd.proc("ScrollLineDown" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bystep::y, { .vector = { 0,-3 }}); });
keybd.proc("ScrollCharLeft" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bystep::x, { .vector = { 3, 0 }}); });
keybd.proc("ScrollCharRight" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bystep::x, { .vector = {-3, 0 }}); });
keybd.proc("ScrollTop" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::to_top::y); });
keybd.proc("ScrollEnd" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::to_end::y); });
keybd.proc("ToggleMaximize" , [&](hids& gear){ gear.set_handled(); scroll_inst.bell::enqueue(boss.This(), [&, gear_id = gear.id](auto& /*boss*/){ if (auto gear_ptr = boss.bell::getref<hids>(gear_id)) scroll_inst.base::riseup(tier::preview, e2::form::size::enlarge::maximize, *gear_ptr); }); }); // Refocus-related operations require execution outside of keyboard eves.
keybd.proc("ToggleFullscreen", [&](hids& gear){ gear.set_handled(); scroll_inst.bell::enqueue(boss.This(), [&, gear_id = gear.id](auto& /*boss*/){ if (auto gear_ptr = boss.bell::getref<hids>(gear_id)) scroll_inst.base::riseup(tier::preview, e2::form::size::enlarge::fullscreen, *gear_ptr); }); });
//keybd.proc("WindowClose", [&, esc_pressed](hids& gear)
//{
// if (*esc_pressed)
// {
// boss.bell::signal(tier::anycast, e2::form::proceed::quit::one, true);
// gear.set_handled();
// }
//});
//keybd.proc("WindowClosePreview", [&, esc_pressed](hids& /*gear*/)
//{
// if (std::exchange(*esc_pressed, true) != *esc_pressed)
// {
// boss.bell::signal(tier::anycast, e2::form::state::keybd::command::close, *esc_pressed);
// }
//});
//keybd.proc("CancelWindowClose", [&, esc_pressed](hids& /*gear*/)
//{
// if (std::exchange(*esc_pressed, faux) != *esc_pressed)
// {
// boss.bell::signal(tier::anycast, e2::form::state::keybd::command::close, *esc_pressed);
// }
//});
//keybd.proc("ScrollPageUp" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bypage::y, { .vector = { 0, 1 }}); });
//keybd.proc("ScrollPageDown" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bypage::y, { .vector = { 0,-1 }}); });
//keybd.proc("ScrollLineUp" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bystep::y, { .vector = { 0, 3 }}); });
//keybd.proc("ScrollLineDown" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bystep::y, { .vector = { 0,-3 }}); });
//keybd.proc("ScrollCharLeft" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bystep::x, { .vector = { 3, 0 }}); });
//keybd.proc("ScrollCharRight" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::bystep::x, { .vector = {-3, 0 }}); });
//keybd.proc("ScrollTop" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::to_top::y); });
//keybd.proc("ScrollEnd" , [&](hids& gear){ gear.set_handled(); scroll_inst.base::riseup(tier::preview, e2::form::upon::scroll::to_end::y); });
//keybd.proc("ToggleMaximize" , [&](hids& gear){ gear.set_handled(); scroll_inst.bell::enqueue(boss.This(), [&, gear_id = gear.id](auto& /*boss*/){ if (auto gear_ptr = boss.bell::getref<hids>(gear_id)) scroll_inst.base::riseup(tier::preview, e2::form::size::enlarge::maximize, *gear_ptr); }); }); // Refocus-related operations require execution outside of keyboard eves.
//keybd.proc("ToggleFullscreen", [&](hids& gear){ gear.set_handled(); scroll_inst.bell::enqueue(boss.This(), [&, gear_id = gear.id](auto& /*boss*/){ if (auto gear_ptr = boss.bell::getref<hids>(gear_id)) scroll_inst.base::riseup(tier::preview, e2::form::size::enlarge::fullscreen, *gear_ptr); }); });

keybd.bind( "Esc", "DropAutoRepeat" , true);
keybd.bind( "Esc", "WindowClosePreview", true);
Expand Down
1 change: 1 addition & 0 deletions src/netxs/desktopio/baseui.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ namespace netxs::events::userland
EVENT_XS( nextframe , bool ), // general: Signal for rendering the world, the parameter indicates whether the world has been modified since the last rendering.
EVENT_XS( shutdown , const text ), // general: Server shutdown.
EVENT_XS( area , rect ), // release: Object rectangle.
EVENT_XS( runscript , input::hids ), // release: Run script activated by gear.
GROUP_XS( extra , si32 ), // Event extension slot.
GROUP_XS( timer , time ), // Timer tick, arg: current moment (now).
GROUP_XS( render , ui::face ), // release: UI-tree rendering.
Expand Down
3 changes: 2 additions & 1 deletion src/netxs/desktopio/console.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1125,7 +1125,8 @@ namespace netxs::ui
yield{ faux },
fullscreen{ faux }
{
keybd.proc("ToggleDebugOverlay", [&](hids& gear){ gear.set_handled(); debug ? debug.stop() : debug.start(); });
//todo scripting
//keybd.proc("ToggleDebugOverlay", [&](hids& gear){ gear.set_handled(); debug ? debug.stop() : debug.start(); });
auto bindings = pro::keybd::load(config, "tui");
keybd.bind(bindings);

Expand Down
Loading

0 comments on commit 7364cc8

Please sign in to comment.