1

我是 RCP 的新手,我正在尝试创建一个新的视图或编辑器。在目前的状态下,我正在扩展ViewPart.

我想要实现的布局是SashForm双方都有一个CTabFolder. 的一侧SashForm基本上是MultiPageEditorPart. 其中一个选项卡应该是具有语法突出显示和类似功能的特定语言的编辑器。据我了解,我可以对此进行扩展AbstractTextEditor(并且可能将其用作 a 的一个选项卡MultiPageEditorPart)。

如果我尝试使用ViewPart包含 a 的顶级容器来实现此布局SashForm,则无法将 a 添加EditorPartSashForm. 当然,我可以从头开始实现这个编辑器,Composite但我想避免这种情况。

我也愿意使用EditorPartorMultiPageEditorPart作为顶级容器,但是我必须找到一种方法来使SashForm布局正常工作。整个编辑器应该首先被拆分,然后每一面都应该有标签。

有谁知道如何解决这个问题?

如果有什么不清楚的请询问。我有一种感觉,我把这句话说得有点复杂。

4

3 回答 3

1

我认为您要实现的目标非常复杂,可能需要大量额外的工作。看到编辑器不仅是按某种顺序排列的不同控件,而且它具有许多任何编辑器类都期望工作的附加功能。这些包括选择服务和操作栏等,您需要连接以确保顺利运行。

也就是说,应该可以实现您所希望的。您可以查看其MultiPageEditorPart本身的源代码,了解它如何将单个编辑器转换为多页面编辑器,该编辑器能够在其每个页面上托管一个完全独立的编辑器。MultiPageEditorPart如果您希望您的编辑器托管两个由窗框分隔的 s,您将需要实现类似的功能。如果你想继续,你应该开始实施一些东西,如果你遇到任何问题,把它们贴在这里。那时您将能够获得更好的帮助。

于 2013-01-07T12:04:44.287 回答
1

我认为您应该只制作一个ViewPart在左侧具有某种文本编辑组件的组件,而不是试图找到一种使用EditorPart. 真正EditorPart为您购买的是脏标志管理和保存支持;语法高亮等等,你可以自己添加到文本编辑组件中(我很惊讶我刚才在互联网上闲逛时发现了这么少的插入式文本组件;我希望能找到“一些”,但我发现“基本上没有任何”)。

您可以在此处看到使用组件进行非常基本的语法突出显示的一种方法StyledTextJavaSourceCodeViewer

要查看语法高亮和自动完成等更健壮的实现,请查看 Eclipse 用于编辑 Java 源代码的类:CompilationUnitEditor

于 2013-01-07T20:46:09.560 回答
0

你需要 MultiPageEditorSite 之类的东西。在实现 EditorSiteDelegate 时使用它作为灵感。例如,MultiPageEditorSite 支持页面之间的单独键绑定。

class ChildEditorSite implements IEditorSite {
    IEditorSite parent;
    public Object method() {
       return parent.method();
    }
}

使用此类,您可以在主 EditorPart 中轻松执行以下操作:

class MyCoolPart extends EditorPart {
    public void createControl(Composite parent) {
         EditorPart child1 = new MyChild();
         child1.init(new ChildEditorSite(getEditorSite()), myInput);
         EditorPart child2 = new MyChild();
         child2.init(new ChildEditorSite(getEditorSite()), myInput);

         child1.createPartControl(parent);
         child2.createPartControl(parent);
    }
}

处理 MyCoolPart 时,请务必正确处理您的孩子。请注意,这只适用于最基本的情况。作为 DocumentEditor 或依赖于 IPersistablePart 或实现侦听器/适配器以确认保存的 EditorPart 可能需要更多的生命周期管理......

于 2013-01-11T09:44:42.737 回答