构建基于 CDT 的编辑器,第 5 部分: 将 PDOM 用于代码完成
2009-12-19 00:00:00 来源:WEB开发网由于 BBCDT 不使用首选项,我硬编码了 ContentAssistant 使用的所有参数来定制代码完成过程。我将清单 2 中显示的代码添加到 CSourceViewerConfiguration 类中。正如您所看到的那样,大多数配置都处理设置控件的颜色模式,为此,我访问了 Display 的系统颜色,它们在使用后不需要销毁。
清单 2. BBCDT 代码完成定制// Create the content assistant
ContentAssistant assistant = new ContentAssistant();
// Configure content assistant
assistant.enableAutoInsert(true);
assistant.enableAutoActivation(true);
assistant.setAutoActivationDelay(500);
assistant.enablePrefixCompletion(true);
Display display = fEditor.getEditorSite().getShell().getDisplay();
assistant.setProposalSelectorForeground(display.getSystemColor(SWT.COLOR_CYAN));
assistant.setProposalSelectorBackground(display.getSystemColor(SWT.COLOR_BLACK));
assistant.setContextInformationPopupForeground(display.getSystemColor(SWT.COLOR_BLACK));
assistant.setContextSelectorForeground(display.getSystemColor(SWT.COLOR_BLACK));
assistant.setContextInformationPopupBackground(display.getSystemColor(SWT.COLOR_YELLOW));
assistant.setContextSelectorBackground(display.getSystemColor(SWT.COLOR_YELLOW));
assistant.setProposalPopupOrientation(IContentAssistant.PROPOSAL_OVERLAY);
assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE);
assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
// Create the assist processor
IContentAssistProcessor processor = new CCompletionProcessor2(getEditor());
// Configure the assist processor
((CCompletionProcessor2)processor).setCompletionProposalAutoActivationCharacters
(new char[] {'.', ':', '>'});
((CCompletionProcessor2)processor).allowAddingIncludes(false);
((CCompletionProcessor2)processor).orderProposalsAlphabetically(true);
assistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE);
图 4 显示了当键入一个 s 并按住 Ctrl+Space 时,BBCDT 代码完成的样子。如果想改变颜色,请把上述清单中的代码改为适合于您的偏好的代码。也可以通过将数组参数改为 setCompletionProposalAutoActivationCharacters 方法来添加新的自激活字符。
图 4. BBCDT 的代码完成
结束语
代码完成是 CDT 众多易于使用却难于理解的方面之一。但不需要理解整个过程,您就能在应用程序中包含此功能。可以扩展现有的补全贡献器,如 KeywordCompletionContributor 或 TemplateEngine,或者可以通过扩展 org.eclipse.cdt.ui.completionContributors 扩展点添加自己的贡献器。然后,如果想控制这些贡献显示的顺序,只需扩展 org.eclipse.cdt.ui.proposalFilters 点。
我最初开始学习 CDT 编辑器时,并没有意识到它的内部有多复杂,过了一段时间我才基本领会了它的基础。理解像解析器和 PDOM 这样的功能则花费了更长的时间。但正如努力完成其他事情一样,投入总有回报。越是了解 CDT,我的定制编辑器的样子就越好看,也更好操作。
这一系列文章都很详细,但我希望 BBCDT 的例子能够激励您学习这个工具,并有足够的动力继续学习。
本文源代码下载地址: http://flashview.ddvip.com/2009_12/os-ecl-cdt5.zip
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››构建Android平台Google Map应用
- ››基于Windows Azure的云计算应用设计
- ››构建WinForm 通用速选(全选、反选、清空)组件
- ››基于AES算法实现对数据的加密
- ››基于SoPC目标板Flash编程设计的创建及应用
- ››基于SolidWarks齿轮机构的运动分析与仿真
- ››基于Windwos Server 2008故障转移群
- ››基于JavaScript的REST客户端框架
- ››基于JavaScript和CSS的Web图表框架横向对比
- ››基于JQuery地区三级联动列表
更多精彩
赞助商链接