gpt4 book ai didi

java - eclipse行号状态行贡献项是如何实现的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:23 26 4
gpt4 key购买 nike

我需要更新状态行特定于编辑器的信息。我已经有了自己的实现,但我想看看 eclipse contribution item 是如何实现的,它显示状态行中的行号/列位置。谁能指出我在哪里可以找到源代码?

提前致谢,AlexG.

最佳答案

我一直在调查它,它非常复杂,我不确定我是否了解完整情况,但万一这对某人有帮助...

将编辑器与对 StatusLine(以及菜单和工具栏)的贡献绑定(bind)的声明方式是通过 IEditorActionBarContributor类(class)。此类在 plugin.xml 中为编辑器类型声明 - 通常为每个编辑器类型创建一个实例(同一编辑器类型的多个运行实例将共享一个 IEditorActionBarContributor 实例,调用其 doSetActiveEditor() 方法被激活时),当该类型的最后一个运行的编辑器关闭时,它将被释放。

让我们以 Eclipse 中的默认文本编辑器如何更新状态行中的“插入/覆盖”信息为例(来自 Eclipse 3.7)

默认的文本编辑器在 org.eclipse.ui.editorsplugin.xml 中声明(一些行被修剪)为:

 <extension point="org.eclipse.ui.editors">
<editor name="%Editors.DefaultTextEditor"
class="org.eclipse.ui.editors.text.TextEditor"
contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
id="org.eclipse.ui.DefaultTextEditor">
</editor>
</extension>

TextEditorActionContributor 是关键。我们感兴趣的是在父类中实现BasicTextEditorActionContributor ;它(静态地)定义了 4 个状态字段(STATUS_FIELD_DEFS),并且它在内部存储了每个 statusField(例如规范)到 StatusLineContributionItem 对象的固定映射(fStatusFields) .当从 Eclipse UI 调用时,它在方法 contributeToStatusLine(IStatusLineManager statusLineManager) 中注册状态行中的 4 个字段(基本上是标题),并且每次激活编辑器时,它都会传递给它 -在 doSetActiveEditor(IEditorPart 部分) 中 - 全套 StatusLineContributionItem,准备了相应的 actionHandlers。编辑器理解所有这些,因为它实现了 ITextEditorExtension.setStatusField()

对于 AbstractTextEditor,它有一个(内部类)类型为 ToggleOverwriteModeAction 的私有(private)字段,它调用

toggleOverwriteMode()->handleInsertModeChanged()->updateStatusField("InputMode")

编辑器查看它是否有一个 statusField 存储在这个类别中,如果有,它将调用 IStatusField.setText("Insert"/"Overwrite") 并且这将导致更新状态行消息。

这是一个示例,但我想它给出了总体思路:EditorActionContributor 的实例,绑定(bind)到编辑器类型,维护要更新的 StatusLineContributionItem 列表,编辑器必须编写当相应的状态改变时进入这个列表的对象。通过这种方式,编辑器与状态行解耦(它不知道状态更改是否/如何显示在 UI 中)。

关于java - eclipse行号状态行贡献项是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com