Gnod

导航

 

 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中的位置坐标信息, 完成控件的形状位置设定, 完成元素额最后生成工作.
posted on 2012-11-02 10:51  Gnod  阅读(491)  评论(0)    收藏  举报