rt-thread/components/rtgui/doc/road_map.txt

71 lines
4.4 KiB
Plaintext
Raw Normal View History

RTGUI for 1.1 路线图(排名不分先后)
1, 把 rtgui_thread 给去掉,变成 rtgui_application ,消除原来的 rtgui_thread +
mq 的模式。rtgui_application 记录当前依附的 panel和 panel 的 extent。(Done)
1.1, rtgui_application_run 运行主事件循环(Done)
1.2, rtgui_application 作为事件的接收者_和_事件派发者。(Done)
2, workbenchwindow并成一个其事件主循环并合并到rtgui_application中。
2.1, window 作为有标题栏的 workbench(Done)
2.2, 将其事件主循环移至 application 中。(Done)
2.3, 将 window 的父类 toplevel 合并进 window 中。所有直接与服务器打交道的从
window 继承。(或者将 toplevel 合并进 application 中,因为只有 application 才
会和服务器打交道。)
2.4 在创建 window 的时候需要指定 parent如果为 RT_NULL则此 window 为 root
窗口parent 为当前 rtgui_application。每一个 application 必须有且只有一个根
窗口。(Done)
2.5 添加一个 FULL_PANEL 的 STYLE。指定此 STYLE 之后会自动填满整个 panel。其
与 NO_TITLE 之类的合用可以达到之前 workbench 的效果。(Deprecated)
2.6 event_loop 可以设定顶层控件,只会把事件传递给顶层控件。这样可以方便的实
现模态窗口。event_loop 靠 object 的一个标志位来判断是否要退出当前循环。(Done)
3, 将 view 合并进 container所有容器类继承 container。[note1](Done)
4, 事件循环完成后不主动销毁控件,销毁任务交由用户完成。但是有些自动销毁是必要的
,比如 container 自动销毁其包含的控件(Done)
4.1 对于 window 的 onclose事件保证在其回调函数中可以(但不是必须)安全销毁窗
口。这个功能不保证能够实现。(onclose 是在将要关闭窗口的时候触发的,调用它之
后 RTGUI 还要进行其他的设置和清理工作,所以不能在 onclose 里销毁窗口)(Cannot
Implement)
4.2 对 window 添加 RTGUI_WIN_STYLE_DESTROY_ON_CLOSE 。使得其在被关闭时自动销
毁。注意:对同一 window 销毁两次会引起 segfault。同时如果在创建时设置了
RTGUI_WIN_STYLE_DESTROY_ON_CLOSEclose 窗口之后不要再去销毁窗口。
5, API 清理。更详细的文档。
6, 使 panel 退化为无窗口标题的 window这样 server 就只记录 window 一种东西的位
置。(Done, 删除了 panel使得整体以 window 为主)
7, 指定名称的时候不再自己拷贝一份。(我觉得 90% 的情况下名称都是静态的字符串,这
时用 strdup其实并没有必要。)(Deprecated)
8, 添加一些工业控制当中用到的波形、仪表之类的控件。
9, 在 window 中记录焦点控件,键盘事件由 window 直接投送。各个控件不记录焦点控件
。(Done)
10, 在 widget 中添加 on_show 和 on_hide 事件回调函数。(Done)
11, 添加 EVENT_WIN_MODAL_ENTER 和 EVENT_WIN_MODAL_EXIT 事件,用来通知窗口管理器
(topwin)一个窗口进入模态。窗口管理器根据这个进行相应的设置。
12, rtgui_filelist_view 不必继承自 container。
13, 添加 desktop window 支持。(Done)
概念与名词:
13.1 desktop window最底层的桌面窗口。它会在所有窗口下面显示并且不会被它
上面的窗口模态掉。它的子窗口是 root window。(继承关系由 RTGUI 管理,不
用用户管理)它只有在启用 RTGUI_USING_DESKTOP_WINDOW 时才有此特性。
13.2 root window创建时父窗口为 RT_NULL 的窗口。是用户空间窗口继承树的根。
13.3 normal window创建时父窗口不为 RT_NULL 的窗口。它始终会在父窗口之上显
示(它会 clip 父窗口)。normal windows 和 root window 组成一个窗口树。
13.4 模态:当一个 normal window 模态显示时会会模态自己所在树的同级窗口
和所有父级窗口,但不会影响别的窗口树。被模态的窗口不会接受到用户事
件(按键,触摸等)
----
[note1] 我们至少需要一种容器控件来盛放其他的控件,并且能把上层事件传递给被包含
的控件。实现这样的功能有一个就好container 可以担当这个责任。其他需要放多个控
件的控件则可以继承/包含这个控件。然后多个容器控件轮换的notebook 可以来做。
notebook可以是有标签和无标签的有标签的对应一般的 tab 控件,无标签的对应 rtgui
for RTT 1.0 的 workbench+view。