1. 初始化过程:
在GEF中控件的容器为Palette, 而作为容器的Palette与页面page的关系是一一对应的, 所以在创建一个新页面的同时, 也会创建一对应Palette.
在Page概念层次, 一个Page包括三个视图, 一个是Design视图, 对应可视化编辑界面, 另一个是Source源代码试图, 第三个是预览试图.
而Palette则随design试图的初始化而初始化
此处design视图对应类SimpleGraphicalEditor.
SimpleGraphicalEditor构造函数传入一DefaultEditDomain类或起子类对象, 在SimpleGraphicalEditor根据该对象设置自己维护的EditDomain时, 会调用:
getEditDomain().setPaletteRoot(getPaletteRoot));
设定对应的Palette
由于在初始化过程中, SimpleGraphicalEditor维护的palette引用并未指定任何对象, 故在getPaletteRoot中在判断palette为空时, 会进行初始化工作, 并将palette指向生成的Palette对象,
在getPaletteRoot创建Palette对象使用DesignerPaletteRootFactory方法创建.
返回DesignerPaletteRoot对象实例, 实例在构造函数中传参数IFile对象, 指定页面的存储文本.
在DesignerPaletteRoot构造函数中, 初始化一PaletteItemManager对象进行控件的管理.
PaletteItemManager对象的创建同样使用工厂方法newInstance完成.
在newInstance方法创建一个manager并返回前, 还会进行以下操作:
将文件信息传入manager
将manager添加到一个_managers的HashMap进行维护, 以文件名作为键
调用manager方法init完成初始化
接下来进入PaletteItemManager类的init方法.
在PaletteItemManager的init方法中调用initTagRegistry方法, 完成Palette中的一系列控件注册:
其中一个控件槽对应类:TaglibPaletteDrawer
类TaglibPaletteDrawer实例化对象时, 使用构造函数:
TaglibPaletteDrawer(String uri, String label)
传入两个参数.
参数String uri 用于唯一标志控件槽用.
参数String label指定控件槽标签名.
方法setDescription(String)可设置控件槽的描述信息, 在即ToolTip信息
方法setInitialState指定控件槽的初始化状态, 分为closed, open, pin三种状态
方法setSmallIcon可为控件槽指定icon
一个控件槽一般作为一个控件组概念而存在, 而一个控件组中的各个控件对应的类为:
TagToolPaletteEntry
创建控件对象调用构造函数:
TagToolPaletteEntry(final ItagDropSourceData template,
final String label,
final String shortDescription,
final ImageDescriptor iconSmall,
final ImageDescriptor iconLarge);
参数ItagDropSourceData template存储控件创建时需要的系列信息
实际构造data对象时构建的是继承ItagDropSourceData的子类:
TagToolCreationAdapter
其构造函数声明如下:
public TagToolCreationAdapter(String url,
String tagName,
String targetTagName,
String defaultPrefix,
String id,
InsertContext posContext)
其中参数url标记控件id
参数tagName存储控件类型
参数InsertContext posContext组织生成控件对应元素使 可能使用的数据
InsertContext类完整构造函数包含三个参数, 为:
InsertContext(IAdvisorFactory _advisorFac,
Object _decorationdata,
IDialogFactory _dlgFac)
IAdvisorFactory为用于生成对应Advisor的工厂类
ocarationdata中存储创建元素需要的数据信息
dlgFac用于产生创建元素时弹出的交互对话框(可选);
2. 选择相应控件处理流程:
在鼠标选择指定控件后, 相应mouseUp事件会触发对应ToolPaletteEntry中的createTool()方法,
在createTool方法中, 使用到了在控件初始化过程传入的ItagDropSourceData对象,
可以根据获得的data对象, 提取其中的InsertContext, 并根据需要显示事先设定好的dlgFac生成交互对话框, 给用户补充创建元素过程中需要用到得信息, 信息则存储于InsertContext中的 decorationdata之中
在方法最后返回一ItemCreationTool对象, 该对象构造函数传入控件所维护的ItagDropSourceData对象.
ItemCreationTool返回后会被setActiveTool设置成为当前ActiveTool.
4. 绘制生成元素过程:
在design视图绘制元素, 响应mouseUp事件最终执行消息CreateItemCommand
在CreateItemCommand doExecute()方法之中完成元素element的创建过程.
首先会为ItagDropSourceData补全生成元素父亲element信息.
随后根据SourceData生成控件对应元素,
在这一步过程中, 会调用之前传入data中的advisor对象, 调用其applyCustomization方法, 在该方法中完成特定元素的特定化工作.
此时生成元素已经具备了除style属性的其余属性, 接下来根据CreateItemComand中的位置坐标信息, 完成控件的形状位置设定, 完成元素额最后生成工作.
浙公网安备 33010602011771号