Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

能不能给窗口新增两个属性move_focus_parent_key和move_focus_child_key? #885

Open
Tracker647 opened this issue Jul 26, 2024 · 6 comments

Comments

@Tracker647
Copy link

Tracker647 commented Jul 26, 2024

需求是像这样的菜单页面,它分多个栏,一个栏里面可能有很多控件,对于纯按键控制的设备,一般交互方式就是上下左右切换焦点,然后enter键选中/聚焦子页面内部的焦点,esc键回到父级页面焦点。
GIF 2024-7-26 10-57-17

目前看awtk是只有平级控件,基于坐标的焦点切换的,对于基于控件树的父级-子级的焦点切换目前还没有,只能自己实现。
我想原理应该好实现,比如做一个栈,每次按enter键时候把原先窗口控件树所有的focus控件放到数组中并压栈,然后使用下一层focus控件的数组用于切换,按esc就出栈之前的focus数组覆盖当前focus数组。
设想按enter的话目前就聚焦第一个子控件(如果能做到enter的话回到之前聚焦的子控件那更好,不过我暂时没想到实现方法,还有就是,如果这个子控件enter有冲突的话,比如按钮,如何处理?)。
不知这部分后继可有计划?

@xianjimli
Copy link
Member

暂时没空弄,有空我先想想。

@Tracker647
Copy link
Author

Tracker647 commented Jul 28, 2024

我今天弄了一版方案,改了awtk,目前测了下没问题,你有空看看,我直接把整个awtk库压缩发过去还是能push?

@xianjimli
Copy link
Member

你放个 patch 到这里吧,有需要的自己先打上。

@Tracker647
Copy link
Author

测试程序:
release.zip

@Tracker647
Copy link
Author

BTW:如果我修改了一个历史评论,邮箱上会重新推送这个评论吗?edit一次就推送一次?

@Tracker647
Copy link
Author

更新了一下patch, 现在可以给没父级焦点和子级焦点的情况设置回调,更新这个的原因是业务需要在没有父级焦点可退的时候需要navigate_back。
发现只要在git bash去执行diff指令生成的补丁就能打了,估计是终端编码问题。
git diff cf5e93980e0d86ef456725f820540114ecc87876..3489cfc1781fda44b6ba32ee278f68bf408c7d45 > treefocus.patch
treefocus.patch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants