编程语言
首页 > 编程语言> > java-Eclipse行号状态行贡献项如何实现?

java-Eclipse行号状态行贡献项如何实现?

作者:互联网

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

提前致谢,
亚历克斯

解决方法:

我一直在研究它,它涉及很多,而且我不确定我是否有完整的图片,但是万一这对某人有帮助…

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

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

默认的文本编辑器在org.eclipse.ui.editors的plugin.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(例如规范)的固定映射(fStatusFields)存储到StatusLineContributionItem对象.当从Eclipse UI调用时,它在方法commitToStatusLine(IStatusLineManager statusLineManager)的状态行(基本上是标题)中注册4个字段,并且每次激活编辑器时,它都会传递给它-doSetActiveEditor(IEditorPart部分)-完整的StatusLineContributionItems集合,使用相应的actionHandlers进行准备.编辑器理解所有这一切,因为它实现了ITextEditorExtension.setStatusField().

就AbstractTextEditor而言,它具有(内部类)类型ToggleOverwriteModeAction的私有字段,该私有字段将调用

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

编辑器将查看是否具有与此类别一起存储的statusField,如果是,它将调用IStatusField.setText(“ Insert” /“ Overwrite”),这将导致状态行消息的更新.

这是一个示例,但我想它提供了大致的思路:绑定到编辑器类型的EditorActionContributor实例,保留要更新的StatusLineContributionItem的列表,并且当相应的状态时,编辑器必须写入此列表的对象.变化.这样,编辑器便与状态行分离(它不知道是否/如何在UI中显示状态更改).

标签:eclipse-rcp,statusline,java
来源: https://codeday.me/bug/20191102/1988308.html