Я смотрел на него, он довольно вовлечен, и я не уверен, что я получил полную картину, но в случае, если это поможет кому-то ...
декларативного способа связывания редактор с вклад в StatusLine (и меню и панель инструментов) осуществляется через класс IEditorActionBarContributor. Этот класс объявляется для типа редактора в plugin.xml - и обычно для каждого типа редактора создается один экземпляр (несколько запущенных экземпляров одного и того же типа редактора будут совместно использовать экземпляр IEditorActionBarContributor
, вызывая его метод doSetActiveEditor()
при активации), и он будет быть удаленным, когда последний запущенный редактор этого типа закрыт.
Давайте возьмем в качестве примера, как текстовый редактор по умолчанию в Eclipse, обновляет «Insert/Override» данные в строке состояния (из Затмения 3.7)
Текст по умолчанию редактор объявлен в некоторых org.eclipse.ui.editors
«s 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
) и сохраняет внутренне фиксированную карту (fStatusFields
) каждого статусного поля (spec, скажем) объекту StatusLineContributionItem). При вызове из пользовательского интерфейса Eclipse он регистрирует 4 поля в строке состояния (заголовки, в основном) в методе contributeToStatusLine(IStatusLineManager statusLineManager)
И каждый раз, когда редактор активируется, он переходит к нему - в doSetActiveEditor(IEditorPart part)
- полный набор StatusLineContributionItem
s, подготовленный с соответствующими actionHandlers. Редактор понимает все это, потому что он реализует ITextEditorExtension.setStatusField()
.
В случае AbstractTextEditor
, он имеет личное поле (внутренний класс) типа ToggleOverwriteModeAction
, который вызывает
toggleOverwriteMode()->handleInsertModeChanged()->updateStatusField("InputMode")
Редактора выглядит, если он имеет statusField
сохраненный с этой категорией, если так будет называть IStatusField.setText("Insert"/"Overwrite")
, и это приведет к обновлению сообщения о строке состояния.
Это пример, но я предполагаю, что он дает общую идею: экземпляр EditorActionContributor
, привязанный к типу редактора, обновляет список обновленного StatusLineContributionItem, и редактор должен записывать объекты этого списка когда изменяется соответствующий статус. Таким образом, редактор отключается от строки состояния (он не знает, будет ли отображаться изменение статуса в пользовательском интерфейсе).
Спасибо за ответ, но я знаю, как получить доступ к строке состояния. То, что я просил, является примером того, как номер строки обновляется в строке состояния, когда я нажимаю на разные строки в каком-то редакторе. Он, вероятно, использует некоторый механизм прослушивателя для обновления строки состояния. –