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