`
liugang594
  • 浏览: 987579 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Editor中嵌入Editor

阅读更多

Editor中嵌入Editor

                                                            ---Eclipse系列(刘刚)

一、背景

有时按照功能的需要,我们希望能在自己的Editor中嵌入其他已经存在的Editor,比如JavaEditor,比如XMLEditor,以方便的使用这些Editor已经有的一些方便特性。

二、思路

   粗看来,好像无计可施,实际不然。如果你曾经实现过自己的MultiEditor,并且在其他的某一页中是直接引用的其他的Editor,那么你肯定记得:在MultiEditoraddPage()系列方法中,有一个方法是:

public int addPage(IEditorPart editor, IEditorInput input)

这个方法表明,可以直接把一个Editor做为一个page加到MultiEditor中去。所以我们的实现可以参考MultiEditor

我们可以找到MultiEditor中,addPage(editor,input)部分的源码:

 

     public void addPage(int index, IEditorPart editor, IEditorInput input)

              throws PartInitException {

          IEditorSite site = createSite(editor);

          // call init first so that if an exception is thrown, we have created no

          // new widgets

          editor.init(site, input);

          Composite parent2 = new Composite(getContainer(),

                   getOrientation(editor));

          parent2.setLayout(new FillLayout());

          editor.createPartControl(parent2);

          ……

     }

 

看上部分代码,我们可以知道:要把一个editor A作为某个editor B的一部分加进去,我们首先需要有一个A的对象,然后这个A对象要调用init(site,input)方法,最后要创建一个面板,调用A对象的createPartControl(parent)方法,以在这个面板上画出A的界面。

 

三、实现

有了以上思路,下面我们就可以在自己的editor中嵌入其他的editor了。首先我们要定义一个自己的editor,这里省略过程。然后我定义了一个名为ComboEditorEditor。我要在这其中嵌入JavaEditorTextEditor

我一开始设想代码如下(在createPartControl()方法里):

 

     public void createPartControl(Composite parent) {

          try {

              parent.setLayout(new GridLayout());

              // TODO Auto-generated method stub

              TextEditor textEditor = new TextEditor();

              textEditor.init(site, input);

              Composite parent2 = new Composite(parent,

                        textEditor.getOrientation());

              parent2.setLayout(new FillLayout());

              parent2.setLayoutData(new GridData(GridData.FILL_BOTH));

              textEditor.createPartControl(parent2);

 

              CompilationUnitEditor javaEditor = new CompilationUnitEditor();

              javaEditor.init(site, input);

              Composite parent3 = new Composite(parent,

                        javaEditor.getOrientation());

              parent3.setLayout(new FillLayout());

              parent3.setLayoutData(new GridData(GridData.FILL_BOTH));

              javaEditor.createPartControl(parent3);

             

          } catch (PartInitException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

          }

     }

其中,init(site,input)方法如下:

 

     private IEditorSite site;

     private IEditorInput input;

     @Override

     public void init(IEditorSite site, IEditorInput input)

              throws PartInitException {

          this.site = site;

          this.input = input;

          setSite(site);

          setInput(input);

     }

 

需要注意的是:我们在init(site,input)方法中,需要显式的调用setSite(site)setInput(input),否则在打开editor的时候,总是会有site不对或者是input为空的错误。

 

四、测试

最后我们可以试一下效果:

Figure 1

 

五、后记

 

如果需要实现dirty功能,我们需要监听每一个editor的变化。可以实现如下:

            首先增加监听:

                             textEditor.addPropertyListener(this);

              javaEditor.addPropertyListener(this);

            这里,我们让我们的editor实现IPropertyListener接口。

然后就是实现接口的方法,如下:

                 public void propertyChanged(Object source, int propId) {

               firePropertyChange(propId);

     }

最后实现isDirty()方法:

            private List<IEditorPart> nestedEditors = new

ArrayList<IEditorPart>();

    

     public boolean isDirty() {

          // use nestedEditors to avoid SWT requests; see bug 12996

          for (IEditorPart part:nestedEditors) {

              if (part.isDirty()) {

                   return true;

              }

          }

          return false;

}

 

其中nestedEditors中保存了所有的内嵌的editor

分享到:
评论
6 楼 yiying 2013-09-16  
你好,请问你在嵌入了一个editor的时候,还会出现语法错误吗,我在multieditor中嵌入了一个js的编辑器,语法错误不再显示,但是在单独打开js编辑器的时候是会显示的。
5 楼 liugang594 2012-08-01  
Riven_sun 写道
liugang594 写道
Riven_sun 写道
楼主,我是才接触这个,您这个程序不太齐全我看了有些迷惑,能把完整的帖子发出来吗?我找了你的帖子没发现上一篇,最好有源代码,我的邮箱amovingsun@163.com,谢谢

你想了解什么?哪方面有问题?

就是那两个 editor如何自由拖放大小,如何关闭其中一个editor

自由拖放大小和关闭,这个就需要你自己处理吧。比如说你用一个SashForm,那应该就可以拖放大小了吧。

至于关闭,你可以加一个关闭按钮在上面,比如说每个editor也用一个CTabFolder去显示,然后把关闭按钮加上,就可以了。

不知道是不是你想要的。
4 楼 Riven_sun 2012-07-31  
liugang594 写道
Riven_sun 写道
楼主,我是才接触这个,您这个程序不太齐全我看了有些迷惑,能把完整的帖子发出来吗?我找了你的帖子没发现上一篇,最好有源代码,我的邮箱amovingsun@163.com,谢谢

你想了解什么?哪方面有问题?

就是那两个 editor如何自由拖放大小,如何关闭其中一个editor
3 楼 Riven_sun 2012-07-31  
就是那两个 editor如何自由拖放大小,如何关闭其中一个editor
2 楼 liugang594 2012-07-30  
Riven_sun 写道
楼主,我是才接触这个,您这个程序不太齐全我看了有些迷惑,能把完整的帖子发出来吗?我找了你的帖子没发现上一篇,最好有源代码,我的邮箱amovingsun@163.com,谢谢

你想了解什么?哪方面有问题?
1 楼 Riven_sun 2012-07-29  
楼主,我是才接触这个,您这个程序不太齐全我看了有些迷惑,能把完整的帖子发出来吗?我找了你的帖子没发现上一篇,最好有源代码,我的邮箱amovingsun@163.com,谢谢

相关推荐

    010editor.zip

    在信息安全竞赛或逆向工程场景中,组织者可能会将关键信息(如“flag”)嵌入到图片或其他非文本文件中,参赛者需要通过各种技术手段来揭示这些信息。010Editor提供了直接打开和分析二进制文件的能力,包括图像文件...

    aceEditor代码编辑器api

    4. **Ace - Embedding Ace.html**:这章专注于如何将AceEditor嵌入到网页中,包括基本的HTML和JavaScript代码示例,以及如何在动态创建的元素中使用AceEditor。 5. **Ace - Syntax Highlighter.html**:AceEditor的...

    010editor template打包下载

    描述中提到的“jpg,zip,rar,pdf,swf,flv,exe”等文件类型,都是010Editor模板可能涉及的领域: 1. **jpg**:JPEG图像文件格式,模板可能帮助用户解析图片元数据或者特定的JPEG编码结构。 2. **zip**和**rar**:这两...

    datagrid中编辑状态(editor)下一列嵌入多个控件

    ### easyUI Datagrid 控件中实现单列内嵌入多个控件的方法 #### 一、概述 在使用easyUI框架时,我们经常会遇到需要在`datagrid`控件的某一列中嵌入多个输入控件的需求。这样的设计可以极大地方便用户进行数据的...

    editor3.0

    4. a.php:这是PHP(Hypertext Preprocessor)文件,是一种广泛使用的开源脚本语言,尤其适用于Web开发并可嵌入到HTML中。PHP文件可以在服务器端执行,生成动态网页内容。 5. editor:这个文件没有扩展名,可能是...

    wavedrom-editor-v2.4.2-win-x64.zip

    同时,通过生成的JavaScript代码,时序图还可以直接嵌入到网页中,实现了跨平台的共享。 总的来说,Wavedrom Editor 2.4.2是一个高效、灵活的时序图绘制工具,尤其适合软件工程师、系统架构师以及任何需要展示时序...

    PDF编辑器(Foxit PDF Editor) 2.2.1 汉化 绿色 单文件

    -使用嵌入或非嵌入字体添加文本对象。 -插入行或其它简单的图形对象。 -插入 bitmap 格式的图像。 -从页面中删除任意对象。-改变对象的属性。 -可撤消任意操作。-在不同 PDF 文件间拷贝粘贴任意对象。 -在 ...

    Foxit PDF Editor 2.2.1

    -使用嵌入或非嵌入字体添加文本对象。 -插入行或其它简单的图形对象。 -插入 bitmap 格式的图像。 -从页面中删除任意对象。-改变对象的属性。 -可撤消任意操作。-在不同 PDF 文件间拷贝粘贴任意对象。 -在 ...

    CHM Editor编辑器

    CHM Editor编辑器允许用户在这样的结构中导航,并对各个部分进行编辑。 2. CHM Editor编辑器功能: - **内容编辑**:用户可以添加、删除或修改CHM文件中的HTML页面,调整链接和目录结构。 - **索引构建**:支持...

    froalaEditor

    在Java开发环境中,froalaEditor通常与Spring MVC框架集成,以实现更高效、更灵活的后端处理。 在描述中提到,froalaEditor已经具备了上传文件、视频和图片的能力。这涉及到以下几个关键知识点: 1. **富文本编辑...

    e-web editor 3.8

    3. **多媒体集成**:除了文字编辑,eWeb Editor 3.8 还支持插入音频、视频等多媒体元素,用户可以直接嵌入在线媒体资源,或者上传本地文件,丰富网页内容的表现形式。 4. **表格与列表**:对于数据展示,编辑器提供...

    010Editor二进制文件编辑器

    这种技术通常用于在图像文件中嵌入额外的信息,而不会明显改变图像的外观。010Editor通过其强大的二进制分析功能,可以检测和提取这些隐藏的数据,对于网络安全分析、数据恢复和数字取证等领域有着重要的应用。 ...

    vue-html5-editor使用代码示例

    它的设计目标是使开发者能够轻松地在 Vue 应用中嵌入一个功能完备的编辑器,且无需过多关注底层实现细节。 集成 vue-html5-editor 首先需要确保你的项目已经安装了 Vue.js。如果你还没有安装,可以通过 npm 或 yarn...

    wavedrom-editor-v2.3.2-win-x64.zip

    同时,用户还可以通过复制代码的方式将时序图嵌入网页或其他文档中。 5. **跨平台**:虽然这里提供的是Windows 64位版本,但Wavedrom Editor本质上是一个Web应用,理论上可以在任何支持浏览器的设备上运行,只需...

    kindeditor-form-editor

    然而,"kindeditor-form-editor"插件则进一步增强了这些功能,使用户能够创建包含输入框、选择框、复选框、下拉菜单等在内的各种表单元素,从而在文本内容中集成数据收集或交互性元素。 在工作流程设计中,表单编辑...

    pdfeditor.rar

    PDFeditor能够帮助用户高效地去除这些水印,无论是背景上的还是嵌入文字间的,都能有效地清除,使文档内容清晰可见,方便进一步编辑。 在文字编辑方面,PDFeditor提供了强大的功能。用户可以直接选中PDF文档中的...

    Amplify Shader Editor 1.3.5

    5. **版本兼容**:Amplify Shader Editor通常会保持与最新Unity版本的兼容,确保用户能在最新的开发环境中使用。 6. **资源管理**:能够方便地导入和管理纹理、颜色和其他资源,将它们应用到Shader中。 7. **脚本...

    Aloha Editor html5编辑器 v0.20.16

    它的核心特性在于其可嵌入性,能够无缝整合到各种内容管理系统(CMS)、博客和其他标准的Web开发框架中,提供了丰富的文本编辑功能,极大地提升了用户体验。 在v0.20.16版本中,Aloha Editor主要关注以下几点: 1....

    一个很小很简易的WYSIWYG Editor

    总结来说,这个“很小很简易的WYSIWYG Editor”是一个适合在网络环境中快速编辑和展示文本内容的工具,其轻量化和易用性的特点使得它能够方便地嵌入到各种Web应用中。通过对“SimpleEditor”文件的深入研究,我们...

Global site tag (gtag.js) - Google Analytics