WEB开发网
开发学院软件开发Java 基于 JFace Text Framework 构建全功能代码编辑器... 阅读

基于 JFace Text Framework 构建全功能代码编辑器: 第 9 部分:Template

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 查看原图(大图)TemplateStore我们需要一些方法,可以得到 TemplateStore,基于 JFace Text Framework 构建全功能代码编辑器: 第 9 部分:Template(4),一般来讲,可以把这些方法放到插件的入口类中,也有对应的 Proposal 实现:Temp

查看原图(大图)

TemplateStore

我们需要一些方法,可以得到 TemplateStore,一般来讲,可以把这些方法放到插件的入口类中,因为一个插件只需要一个 TemplateStore。所以在本例中,我放到了 jtf.tutorial.Activator 里面。你可以看到两个新增的方法:getTemplateStore和getContextTypeRegistry。我使用了 ContributionTemplateStore,因为我需要装载用户自定义的模版。ContextTypeRegistry 的作用很好理解,因为同时可能存在多种模版类型,Eclipse需要把每类模版的相关信息管理起来,因此把模版上下文注册到了 ContextTypeRegistry 中。

添加属性页

因为我要支持用户自定义模版,所以需要添加一个模版属性页。只要继承 TemplatePreferencePage 并添加 org.eclipse.ui.preferencePages 扩展即可。在此不赘述了。

添加到内容提示

到上一步为止,设置对话框中也出现了我的属性页,用户可以自定义模版了。但是模版没有任何用武之地,还需要将模版添加到内容提示中才有意义。内容提示是由一个个 Proposal 组成的,对于模版,也有对应的 Proposal 实现:TemplateProposal。所以,接下来修改 ExprContentAssistProcessor,插入这么一段代码:

清单3. 修改 ExprContentAssistProcessor 以支持模版

// get template context type 
TemplateContextType contextType = Activator.getDefault(). 
 getContextTypeRegistry().getContextType(Activator.EXPR_CONTEXT_TYPE); 
 
// create template context 
TemplateContext context = new DocumentTemplateContext(contextType, doc, offset, 0); 
 
// get all template 
List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); 
Template[] templates = Activator.getDefault(). 
 getTemplateStore().getTemplates(Activator.EXPR_CONTEXT_TYPE); 
for(Template t : templates) { 
 proposals.add(new TemplateProposal(t, context, new Region(offset ,0), null)); 
} 

上一页  1 2 3 4 5 6  下一页

Tags:基于 JFace Text

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接