Brew Widget

Brew Widget

5/24/2009 8:28:51 PM

http://hi.baidu.com/chenponder/blog/category/brew%BC%BC%CA%F5

查看文章
Brew Widget
2007-07-21 00:06

BREW UI Widget(BUIW),原名为BREW UI Toolkit(BUIT),是美国Qualcomm公司於2004年以後致力发展的一套全新的UI-package,用以替代早期的BREW关於GUI 设计。最早BREW GUI只提供少数的GUI元件,如∶IMenuCrl, ITextCtl, 这些简单的Controls远远不敷开发厂商的需求,许多厂商必须自行负责UI的设计开发。後来Qualcomm接续推出两套较为完整的BREW GUI Packages,即code-based的BUIW, 以及XML-based的uiOne。TrigML和BUIW是uiOne的核心。TrigML负责UI的描述,BUIW负责UI的建构。 BUIW较原来的BREW UI设计新增两大特色,一是阶层(layer)的观念,这是早期BREW GUI所缺乏的;二是提供客制化(customize)的概念,有了客制化的机制,厂商可以自行替换这些元件。BUIW大量使用了设计模式,如MVC模式,Decorator模式。

* TextWidget,
* StaticWidget,
* CheckWidget,
* RadioWidget,
* ScrollWidget,
* SliderWidget,
* ProgressWidget,
* BitmapWidget,
* ImageWidget,
* ImageStaticWidget,
* TabWidget,
* ListWidget,
* BorderWidget,
* BlendWidget,
* CursorWidget,
* ViewportWidget

一:Widgets(小工具)
绘图是基于模型的。
模型能在任意时刻改变。
他知道大小边缘和内容。但是不知道控件的位置。他能处理焦点和Key事件。
他能监听模型的改变。Invalidates itself to its container..绘图由命令(MESSAGE)来触发。
所有Widget都有事件处理程序,这些事件都从它的父类发来。他能处理Key事件和焦点事件。他也能根据得到的事件来获得或设置自己的属性。他所有的属性都在AEEWProperties.h里定义。这些属性包括:颜色,边框宽度,影子,或者他所独有的特定属性。以及背景色填充色和透明色。由于经常需要设置和获取属性,所以将关于属性的Get、Set操作定义为内联函数。
1:Image Widget
它能显示一个位图或者是一个位图动画。可以全屏显示也可以通过剪裁完成部分显示。
Attached to interface model.Data is represented as a pointer to an IImage data structure
图片的大小永远不会超出管辖他的widget的边缘。
同时IWF_HASSELECTIMAGE标志可以实现选中与为选中间的图片切换。
并且支持图片平铺。即可以完成图片紧接图片方式的平铺,也可以通过设置边框完成均匀的平铺。
2:Static widget
它只能现实只读文本。Attached to value model.他不接受输入焦点,除非你特殊处理
它的边缘永远无法超出他的widget边缘。
SWF_WRAPTEXT-可以滚动显示而不是剪切掉。
SWF_NOSHORTENTEXT 不会缩短文字(也就是说不会拿文字的边缘匹配Widgets 的边缘)否则不设置SWF_NOSHORTENTEXT 时超出部分显示(。。。)
SWF_MULTILINESHORTEN: 这个属性允许在一多行静态文本widgets上滚动显示并且当文本长度超出widgets 时在结尾显示(…)。
通过PROP_LINEGAP:行间距生效。
3.文本widgets
Widgets提供输入焦点。它依赖text model可实现文本内容改变和文本选取改变。
如果依附于view mode 可以产生Caret line change event;滚动事件。
PROP_PASSWORDMASKDELAY:这个属性被用于在密码输入模式下来设置加密延迟时间。
通过PROP_LINEGAP:行间距生效。
TWF_PASSWORD:设置text为密码输入模式。
TWF_VERTICALNAV:设置垂直滚动条(可使用AVK_UP/AVK_DOWN)。
TWF_MULTILINE:设置多行显示。
Text Widgets 使用text controller来执行输入。
-text controller被OEM层以AEECLSID_TEXTCONTROLLER来提供。
-如果OEM层没有提供text controller,text widgets将使用默认text controller(handles mulittap它是基于widgets framework)
-text controller 使用 mode change 和 multi-tap timeout 来通知与他相关联的控件。
-text 事件都由text controller处理。
-text controller 修改 text model。
-text widget 监听text model 的改变,触发widgets自己描画。
-通过text controller 可以对语言选择。
4.List widget:
-显示多个条目可以被看到和选择。
-可以使用多种列表形式,
-List widgets:设置垂直列表。
-pick widgets设置横向列表
-grid widgets设置表格列表
-list widget 关联 list model,list model是纯虚接口 。可以被事例化成 vector model , array model, 其他管理收集到的模型。
- List widgets是一个可绘制的widget它是其内部item可以以滚动方式来显示。
- List widgets使用其子item widgets 的绘制接口来完成每一个item,
-一个item widgets 关联于一个value model.
- item widgets在它所拥有空间内依照value model绘制自己(附图1)
-LWF_WRAP:item 可以循环滚动。
-LWF_NOSELECT:如果设置了该标志item将不可选择并且也不会发消息进行通知。它的优先级高于LWF_WRAP.
-LWF_VARIABLEITEMSIZE:这个标志用来转换一个List上的Item变成一个可变大小的item。
Grid List widget
-如果LWF_COLUMNWRAP被设置,item将可以使用导航钮来完成列的循环滚动。如果没设置,将在最底一行停止滚动。
-LWF_ADVANCEAOLUMNWRAP:如果被设置,将完成逐像素的滚动,而不是最少只能滚动一个item.
5.Border widget
从Decorator widget派生。
它能描述一个Bolder一个background和一个shadow
Border描述了整个矩形区域的边框。这个边框包括颜色属性,透明属性,宽度属性和其他扩展风格。
Background就是这个widget的背静,这个背景可以被指定颜色和透明参数。
Shadow使一个widget看起来好像建立在其他物体上并且得以显示。这个投影可以被指定颜色,透明参数和位置。
6.混色widget
它从IDecorator派生,提供一个颜色透视的方法使颜色透过这个在上边的widget
Will be blended into the display.
掩盖另外一个widget并且使它变模糊或者变暗淡。
用户可以使用ISHELL_CreateInstance和AEECLSID_BLENDWIDGET来创建它并且是用IWIDGET_SetTransparency函数来设置透明度。
7.Viewport widget
Viewport 通常与会和滚动控件一起使用。
8.Scroll widget
从Decorator widget派生
它能形象地指出当前显示位置并且能形象地告诉用户当前显示对象的比例大小。有两种滚动控件可以使用,“滚动指示器”和“滚动条widget”。
它与view model相关联来产生滚动通知,并且可以监听滚动消息(EVT_MDL_SCROLL_CHANGE)是否发生。Scroll widget可以是垂直的,也可以是水平的,或者垂直和水平都有。Scroll widget的导航箭头在MIF文件中被定义。
二:Model(模型)
模型可以操作widget的对应数据来修改widget的显示内容。但它并不知道他操作的数据会在屏幕上造成什么样的显示效果。
关于模型,提供了一组API来完成以下功能。
{
修改模型数据。
注册用于监听消息的回调函数,这些回调函数将在模型状态改变的时候被BREW调用。
}
///在这里插入PDF的第33页的图片。
1:数据模型
这个模型的数据中的数据可以以任意一种方式来表现。
这个模型的数据可以是任意类型,可以是一个字符串,一个整数,乃至一个复杂的数据结构。
它提供了API来注册用于监听的回调函数,IVALUEMODEL_AddListener().
如果模型中的数据改变,它将发送EVT_MDL_VALUE来通知对应的widget.
它提供了访问其中数据的API,包括IVALUEMODEL_GetBool/Text/Value()和IVALUEMODEL_SetBool/TextValue 来获取和设置模型中的数据。
它提供了IVALUEMODEL_AdaptGet/Set API函数来retrieve specific portions of the model’s data(data represented or length of data).
例如:静态文本widget使用一个ValueModel,并且使这个ValueMode描绘一个AECHAR*,就可以完成静态的UNICODE文本显示了。
2.Text Model
这个模型的数据可以描述一个在BREW上可处理的字符串(AECHAR*)。
提供API来注册监听回调函数:ITEXTMODEL_AddListener
提供API来访问模型中的数据。
ITEXTMODEL_SetSel()可以使这个模型中的一部分串被选择。
ITEXTMODEL_ReplaceSel()可以使用一个新的串代替当前选择的那部分。
ITEXTMODE_GetTextInfo()可以得到当前Text model中的(AECHAR*)字符串,以及当前选择的那部分字符串。
它发送EVT_MDL_TEXT_CHANGE来通知控件文本发生改变。
它发送EVT_MDL_TEXT_SELECT消息来通知控件当前文本的选择发生改变。
它通常用来支持TextWidget使用。

三:Containers(容器)
容器是widgets的一个收集器(集合)。
容器能够记录在它里边的widget的位置。
容器以堆栈的方式管理widgets。
容器可以为在它内部的所有widget设置剪切矩形。
容器绘制widgets
容器处理widgets的无效请求。
在容器中的widget也可以是一个容器。

在容器中的widget从下向上绘制,最下边的widget先绘制,最上边的widget最后绘制。
当多个widget重叠的时候,在堆栈相对较低位置的widget将被上边的widget掩盖。
在默认情况下,widget是被添加到栈顶的。
但是,如果使用container的Insert()函数,可以实现widget的在栈中的任意位置插入。
Widget的具体位置是与容器有关的,widget的坐标是相对于容器的坐标。
在容器中的Widget可以被设置位置,它可以完全的在容器中,也可以部分在容器中(这个时候在容器外的部分将被剪切),也可以完全在容器外(这个widget不被描画)。1.Prop Container
在PropContainer中的widget可以被垂直放置也可以被水平放置。
如果被水平放置,widget的上下边缘将被设置成容器的高度和vice-versa。
每一个在PropContainer中的widget有一个WidgetProp属性,这个属性来指定是否widget是可见的,以及他如何被放置在容器中。
在容器中放置的widget可以是以下的形式:
WIDGET_SIZE_TO_FIT,自动调整不同大小的widget并且排列。
WIDGET_KEEP_EXTENT,保持widget的原大小。
对于在容器中的其他widget
Prop是其他在容器中所有widget进行边缘合并计算的值的分子。
在这里所说的边缘计算是受widget的水平和垂直放置情况影响的。
在容器中的item和widget的间距是可以被设定的。
可以用以下三个函数来设定:
IPROPCONTAINER_SetPadding:
IPROPCONTAINER_SetPaddingExact:
IPROPCONTAINER_SetPaddingProportional:

2.Constraint Container(约束容器)
每个在约束容器中的widget都有一个widget约束。通过这个约束可以设置哪个widget被放置,可以设置哪个widget是可见的。
这个约束的数据是这样安排的
typedef struct
{
Constraint constraint;
Boolean bVisible;
}WidgetConstaint;
每个约束条件(Constraint)都有4个元素,Left,Right,Top,Bottom.
每一个约束元素都描述了widget的相对位置,这个描述方式采用相对坐标。

四:Forms(窗体)

你可能感兴趣的:(widget)