awtk/docs/manual/dialog_t.md

457 lines
12 KiB
Markdown
Raw Normal View History

2018-12-20 17:33:31 +08:00
## dialog\_t
### 概述
![image](images/dialog_t_0.png)
2019-12-14 13:25:56 +08:00
对话框。 对话框是一种特殊的窗口,大小和位置可以自由设置。
AWTK中的对话框可以是模态的也可以是非模态的。
如果dialog有透明或半透效果则不支持窗口动画。
> 由于浏览器中无法实现主循环嵌套,因此无法实现模态对话框。
如果希望自己写的AWTK应用程序可以在浏览器(包括各种小程序)中运行或演示,
请避免使用模态对话框。
对话框通常由对话框标题和对话框客户区两部分组成:
![image](images/dialog_t_1.png)
dialog\_t是[window\_base\_t](window_base_t.md)的子类控件window\_base\_t的函数均适用于dialog\_t控件。
在xml中使用"dialog"标签创建对话框。如:
```xml
<dialog anim_hint="center_scale(duration=300)" x="c" y="m" w="80%" h="160" text="Dialog">
<dialog_title x="0" y="0" w="100%" h="30" text="Hello AWTK" />
<dialog_client x="0" y="bottom" w="100%" h="-30">
<label name="" x="center" y="middle:-20" w="200" h="30" text="Are you ready?"/>
<button name="quit" x="10" y="bottom:10" w="40%" h="30" text="确定"/>
<button name="quit" x="right:10" y="bottom:10" w="40%" h="30" text="取消"/>
</dialog_client>
</dialog>
```
如果你不需要对话框的标题,可以这样写:
```xml
<dialog anim_hint="center_scale(duration=300)" x="c" y="m" w="80%" h="160" text="Dialog">
<label name="" x="center" y="middle:-20" w="200" h="30" text="Are you ready?"/>
<button name="quit" x="10" y="bottom:10" w="40%" h="30" text="确定"/>
<button name="quit" x="right:10" y="bottom:10" w="40%" h="30" text="取消"/>
</dialog>
```
打开非模态对话框时其用法与普通窗口一样。打开非模态对话框时还需要调用dialog\_modal。
```c
widget_t* dlg = dialog_open(name);
ret = dialog_modal(dlg);
```
关闭模态对话框用dialog\_quit
```c
static ret_t on_dialog_btn_click(void* ctx, event_t* evt) {
widget_t* win = widget_get_window(WIDGET(evt->target));
int code = (char*)ctx - (char*)NULL;
dialog_quit(win, code);
return RET_OK;
}
```
关闭非模态对话框用window\_close。
```c
static ret_t on_dialog_btn_click(void* ctx, event_t* evt) {
widget_t* win = widget_get_window(WIDGET(evt->target));
int code = (char*)ctx - (char*)NULL;
window_close(win);
return RET_OK;
}
```
> 更多用法请参考:
[dialog.xml](https://github.com/zlgopen/awtk/blob/master/demos/assets/default/raw/ui/)
> 完整C代码示例请参考
* [非模态对话框](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/dialog.c)
* [模态对话框](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/dialog_modal.c)
可用通过style来设置控件的显示风格如字体的大小和颜色等等。如
```xml
<style name="default">
<normal border_color="#606060" />
</style>
```
> 更多用法请参考:
[theme default]
(https://github.com/zlgopen/awtk/blob/master/demos/assets/default/raw/styles/default.xml#L324)
2019-01-15 14:34:05 +08:00
----------------------------------
2018-12-20 17:33:31 +08:00
### 函数
<p id="dialog_t_methods">
| 函数名称 | 说明 |
| -------- | ------------ |
2018-12-21 12:11:40 +08:00
| <a href="#dialog_t_dialog_cast">dialog\_cast</a> | 转换dialog对象(供脚本语言使用)。 |
2019-12-14 13:25:56 +08:00
| <a href="#dialog_t_dialog_confirm">dialog\_confirm</a> | 显示『确认』对话框。 |
2018-12-21 12:11:40 +08:00
| <a href="#dialog_t_dialog_create">dialog\_create</a> | 创建dialog对象。 |
| <a href="#dialog_t_dialog_create_simple">dialog\_create\_simple</a> | 创建dialog对象同时创建title/client。 |
| <a href="#dialog_t_dialog_get_client">dialog\_get\_client</a> | 获取client控件。 |
| <a href="#dialog_t_dialog_get_title">dialog\_get\_title</a> | 获取title控件。 |
2019-12-14 13:25:56 +08:00
| <a href="#dialog_t_dialog_info">dialog\_info</a> | 显示『提示信息』对话框。 |
2019-04-09 09:57:16 +08:00
| <a href="#dialog_t_dialog_is_modal">dialog\_is\_modal</a> | 检查对话框是否为模态对话框。 |
| <a href="#dialog_t_dialog_is_quited">dialog\_is\_quited</a> | 检查对话框是否已经退出模态。 |
2019-12-14 13:25:56 +08:00
| <a href="#dialog_t_dialog_modal">dialog\_modal</a> | 模态显示对话框。 |
| <a href="#dialog_t_dialog_open">dialog\_open</a> | 从资源文件中加载并创建Dialog对象。 |
| <a href="#dialog_t_dialog_quit">dialog\_quit</a> | 退出模态显示,关闭对话框。 |
2018-12-21 12:11:40 +08:00
| <a href="#dialog_t_dialog_set_title">dialog\_set\_title</a> | 设置对话框的标题文本。 |
2019-12-14 13:25:56 +08:00
| <a href="#dialog_t_dialog_toast">dialog\_toast</a> | 显示『短暂提示信息』对话框。 |
| <a href="#dialog_t_dialog_warn">dialog\_warn</a> | 显示『警告』对话框。 |
2019-04-03 11:31:58 +08:00
### 属性
<p id="dialog_t_properties">
| 属性名称 | 类型 | 说明 |
| -------- | ----- | ------------ |
2019-12-14 13:25:56 +08:00
| <a href="#dialog_t_highlight">highlight</a> | const char* | 对话框高亮策略。 |
2018-12-20 17:33:31 +08:00
#### dialog\_cast 函数
2018-12-21 18:29:29 +08:00
-----------------------
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="dialog_t_dialog_cast">转换dialog对象(供脚本语言使用)。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
widget_t* dialog_cast (widget_t* widget);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | widget\_t* | dialog对象。 |
| widget | widget\_t* | dialog对象。 |
2019-03-02 18:21:50 +08:00
#### dialog\_confirm 函数
-----------------------
* 函数功能:
2019-12-14 13:25:56 +08:00
> <p id="dialog_t_dialog_confirm">显示『确认』对话框。
主题由dialog_confirm.xml文件决定。
2019-03-02 18:21:50 +08:00
* 函数原型:
```
2019-07-04 10:05:59 +08:00
ret_t dialog_confirm (const char* title, const char* text);
2019-03-02 18:21:50 +08:00
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示确认否则表示取消。 |
2019-07-04 10:05:59 +08:00
| title | const char* | 标题。 |
2019-03-02 18:21:50 +08:00
| text | const char* | 文本内容。 |
2018-12-21 18:29:29 +08:00
#### dialog\_create 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="dialog_t_dialog_create">创建dialog对象。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
widget_t* dialog_create (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | widget\_t* | dialog对象。 |
| parent | widget\_t* | 父控件 |
| x | xy\_t | x坐标 |
| y | xy\_t | y坐标 |
| w | wh\_t | 宽度 |
| h | wh\_t | 高度 |
2018-12-21 18:29:29 +08:00
#### dialog\_create\_simple 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="dialog_t_dialog_create_simple">创建dialog对象同时创建title/client。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
widget_t* dialog_create_simple (widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | widget\_t* | dialog对象。 |
| parent | widget\_t* | 父控件 |
| x | xy\_t | x坐标 |
| y | xy\_t | y坐标 |
| w | wh\_t | 宽度 |
| h | wh\_t | 高度 |
2018-12-21 18:29:29 +08:00
#### dialog\_get\_client 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="dialog_t_dialog_get_client">获取client控件。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
widget_t* dialog_get_client (widget_t* widget);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | widget\_t* | client对象。 |
| widget | widget\_t* | dialog对象。 |
2018-12-21 18:29:29 +08:00
#### dialog\_get\_title 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="dialog_t_dialog_get_title">获取title控件。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
widget_t* dialog_get_title (widget_t* widget);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | widget\_t* | title对象。 |
| widget | widget\_t* | dialog对象。 |
2019-03-02 18:21:50 +08:00
#### dialog\_info 函数
-----------------------
* 函数功能:
2019-12-14 13:25:56 +08:00
> <p id="dialog_t_dialog_info">显示『提示信息』对话框。
主题由dialog_info.xml文件决定。
2019-03-02 18:21:50 +08:00
* 函数原型:
```
2019-07-04 10:05:59 +08:00
ret_t dialog_info (const char* title, const char* text);
2019-03-02 18:21:50 +08:00
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
2019-07-04 10:05:59 +08:00
| title | const char* | 标题。 |
2019-03-02 18:21:50 +08:00
| text | const char* | 文本内容。 |
2019-04-09 09:57:16 +08:00
#### dialog\_is\_modal 函数
-----------------------
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="dialog_t_dialog_is_modal">检查对话框是否为模态对话框。
2019-10-16 09:02:32 +08:00
2019-04-09 09:57:16 +08:00
* 函数原型:
```
bool_t dialog_is_modal (widget_t* widget);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | bool\_t | 返回TRUE表示是模态对话框否则表示不是。 |
| widget | widget\_t* | dialog对象。 |
#### dialog\_is\_quited 函数
-----------------------
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="dialog_t_dialog_is_quited">检查对话框是否已经退出模态。
2019-10-16 09:02:32 +08:00
2019-04-09 09:57:16 +08:00
* 函数原型:
```
bool_t dialog_is_quited (widget_t* widget);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | bool\_t | 返回TRUE表示已经退出否则表示没有。 |
| widget | widget\_t* | dialog对象。 |
2018-12-21 18:29:29 +08:00
#### dialog\_modal 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-12-14 13:25:56 +08:00
> <p id="dialog_t_dialog_modal">模态显示对话框。
dialog_modal返回后dialog对象将在下一个idle函数中回收。
也就是在dialog_modal调用完成后仍然可以访问dialog中控件直到本次事件结束。
2018-12-20 17:33:31 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
2019-12-14 13:25:56 +08:00
dialog_quit_code_t dialog_modal (widget_t* widget);
2018-12-21 11:39:05 +08:00
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
2019-12-14 13:25:56 +08:00
| 返回值 | dialog\_quit\_code\_t | 返回退出吗。 |
2018-12-20 17:33:31 +08:00
| widget | widget\_t* | dialog对象。 |
2018-12-21 18:29:29 +08:00
#### dialog\_open 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-12-14 13:25:56 +08:00
> <p id="dialog_t_dialog_open">从资源文件中加载并创建Dialog对象。
本函数在ui\_loader/ui\_builder_default里实现。
2018-12-20 17:33:31 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
2018-12-24 17:47:50 +08:00
widget_t* dialog_open (const char* name);
2018-12-21 11:39:05 +08:00
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | widget\_t* | 对象。 |
2018-12-24 17:47:50 +08:00
| name | const char* | dialog的名称。 |
2018-12-21 18:29:29 +08:00
#### dialog\_quit 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-12-14 13:25:56 +08:00
> <p id="dialog_t_dialog_quit">退出模态显示,关闭对话框。
> 比如,在对话框中关闭按钮的事件处理函数中,调用本函数关闭对话框。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t dialog_quit (widget_t* widget, uint32_t code);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| widget | widget\_t* | dialog对象。 |
2019-11-26 17:08:01 +08:00
| code | uint32\_t | 退出码作为dialog\_modal的返回值(参考:[dialog\_quit\_code\_t](dialog\_quit\_code\_t.md))。 |
2018-12-21 18:29:29 +08:00
#### dialog\_set\_title 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="dialog_t_dialog_set_title">设置对话框的标题文本。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t dialog_set_title (widget_t* widget, char* title);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| widget | widget\_t* | dialog对象。 |
| title | char* | 标题。 |
2019-03-01 18:04:57 +08:00
#### dialog\_toast 函数
-----------------------
* 函数功能:
2019-12-14 13:25:56 +08:00
> <p id="dialog_t_dialog_toast">显示『短暂提示信息』对话框。
主题由dialog_toast.xml文件决定。
2019-03-01 18:04:57 +08:00
* 函数原型:
```
ret_t dialog_toast (const char* text, uint32_t duration);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| text | const char* | 文本内容。 |
| duration | uint32\_t | 显示时间(单位为毫秒)。 |
2019-03-02 18:21:50 +08:00
#### dialog\_warn 函数
-----------------------
* 函数功能:
2019-12-14 13:25:56 +08:00
> <p id="dialog_t_dialog_warn">显示『警告』对话框。
主题由dialog_warn.xml文件决定。
2019-03-02 18:21:50 +08:00
* 函数原型:
```
2019-07-04 10:05:59 +08:00
ret_t dialog_warn (const char* title, const char* text);
2019-03-02 18:21:50 +08:00
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
2019-07-04 10:05:59 +08:00
| title | const char* | 标题。 |
2019-03-02 18:21:50 +08:00
| text | const char* | 文本内容。 |
2019-04-03 11:31:58 +08:00
#### highlight 属性
-----------------------
2019-12-14 13:25:56 +08:00
> <p id="dialog_t_highlight">对话框高亮策略。
> 请参考 [对话框高亮策略](https://github.com/zlgopen/awtk/blob/master/docs/dialog_highlight.md)
2019-04-03 11:31:58 +08:00
* 类型const char*
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |
| 可持久化 | 是 |
| 可脚本化 | 是 |
| 可在IDE中设置 | 是 |
| 可在XML中设置 | 是 |
| 可通过widget\_get\_prop读取 | 是 |
| 可通过widget\_set\_prop修改 | 是 |