构建基于 CDT 的编辑器,第 1 部分: C/C++ 开发工具模型
2009-12-19 00:00:00 来源:WEB开发网在核心插件中,plugin.xml 保存着不同类型的 C/C++ 文件的扩展名,并将每一个 contentType 和一个文件后缀联合起来。在 UI 插件中,plugin.xml 将 CEditor 和这些 contentType 关联起来。BBCDT 识别具有 .bbc、.bbcpp、.bbh 和 .bbhpp 后缀的文件。当您创建或双击一个这样的文件时,工作台会将 IFile 转换为 IEditorInput 并使用它来初始化 CEditor。
编辑器被初始化后,CDocumentProvider 会执行三项重要任务:
使用输入的 IFile 来创建 TranslationUnit 和 TranslationUnitInfo 对象。
用 IEditorInput 中的信息为编辑器创建一个 IDocument。
为 TranslationUnit 及其缓冲构造 WorkingCopy。
要创建新的 CDT 元素,提供者调用 CoreModel, CoreModel 调用 CModelManager。这些工作空间操作(如CreateWorkingCopyOperation 和 DestroyWorkingCopyOperation)都实现了 IWorkspaceRunnable 接口。它们异步运行,并使工作空间阻止了其他操作对资源修改的妨碍。
像 CProject 一样,每个 TranslationUnit 都具有自己的配置信息,比如注释。但提供者并不会创建一个独立的 CDescriptor。相反,它使数据保持在 IEditorInput 的 FileInfo 对象中。这样,下一次激活输入时,提供者不用从头开始来访问该单元信息。
运行 BBCDT
我将 BBCDT 作为一个插件或插件项目来提供。因为这个工具的主要目的是为以后的工作提供一个基础,所以我建议您引入这个项目,而不是将其功能添加到您的 Eclipse 安装中。
为使 BBCDT 尽可能简单,我省去了 PathEntryManager,这意味着该工具不使用 SourceEntry 对象,甚至是 SourceRoot 对象。因而,您必须将源文件(.bbc、.bbh、.bbcc 和 .bbhh 文件)直接添加到项目中。为创建 BBCDT 资源,我在 org.dworks.bbcdt.ui.wizards 包中创建了一组新的向导/页面类。要创建项目,请单击 File > New > Project 并选择 C 或 C++ 选项。要创建文件,请单击 New > Other 并选择 C 或 C++ 选项。图 3 显示了 BBCDT 项目及编辑器的外观。
图 3. BBCDT
结束语
如果您访问过 Java 代码中的 IFile 和 IProject,CDT 模型中的元素就不是什么问题了。CModel 包含了一些 CProject,这些 CProject 中包含了一些 CSourceRoot。每个 TranslationUnit 对应于单个的 C/C++ 源文件,因而编辑器通过访问并修改这些元素来与 CDT 模型进行交互。
功能越强大,其内容越复杂。这个编辑器也许太详细了,但您会在开始构建自己的 C/C++ 编辑器时发现它的用处。您可以通过研究 BBCDT 源代码来更好地理解 CDT 的运行机制。我建议您用添加、移除及修改来对其操作进行实验。
CDT 模型会在接下来的文章中变得更为清晰,因为我讨论了 TranslationUnit 和 WorkingCopy 与 CEditor 及其 UI 类进行交互的多种方式。第 2 部分会对 Document 如何管理事件、分块如何发生及这些分块如何提供语法着色进行深入介绍。
本文示例源代码或素材下载
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››构建Android平台Google Map应用
- ››基于Windows Azure的云计算应用设计
- ››构建WinForm 通用速选(全选、反选、清空)组件
- ››基于AES算法实现对数据的加密
- ››基于SoPC目标板Flash编程设计的创建及应用
- ››基于SolidWarks齿轮机构的运动分析与仿真
- ››基于Windwos Server 2008故障转移群
- ››基于JavaScript的REST客户端框架
- ››基于JavaScript和CSS的Web图表框架横向对比
- ››基于JQuery地区三级联动列表
更多精彩
赞助商链接